Skip to content

Commit

Permalink
add total today (Ellpeck#64)
Browse files Browse the repository at this point in the history
* add total today

* not change format semicolons

* Add settings for show total today
  • Loading branch information
henriwasd authored Nov 15, 2024
1 parent 3dc0857 commit 1831b25
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 11 deletions.
4 changes: 2 additions & 2 deletions src/main.ts
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import { MarkdownRenderChild, Plugin, TFile } from "obsidian";
import { defaultSettings, SimpleTimeTrackerSettings } from "./settings";
import { SimpleTimeTrackerSettingsTab } from "./settings-tab";
import { displayTracker, Entry, formatDuration, formatTimestamp, getDuration, getRunningEntry, getTotalDuration, isRunning, loadAllTrackers, loadTracker, orderedEntries } from "./tracker";
import { displayTracker, Entry, formatDuration, formatTimestamp, getDuration, getDurationToday, getRunningEntry, getTotalDuration, getTotalDurationToday, isRunning, loadAllTrackers, loadTracker, orderedEntries } from "./tracker";

export default class SimpleTimeTrackerPlugin extends Plugin {

public api = {
// verbatim versions of the functions found in tracker.ts with the same parameters
loadTracker, loadAllTrackers, getDuration, getTotalDuration, getRunningEntry, isRunning,
loadTracker, loadAllTrackers, getDuration, getTotalDuration, getDurationToday, getTotalDurationToday, getRunningEntry, isRunning,

// modified versions of the functions found in tracker.ts, with the number of required arguments reduced
formatTimestamp: (timestamp: string) => formatTimestamp(timestamp, this.settings),
Expand Down
23 changes: 17 additions & 6 deletions src/settings-tab.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {App, PluginSettingTab, Setting} from "obsidian";
import { App, PluginSettingTab, Setting } from "obsidian";
import SimpleTimeTrackerPlugin from "./main";
import {defaultSettings} from "./settings";
import { defaultSettings } from "./settings";

export class SimpleTimeTrackerSettingsTab extends PluginSettingTab {

Expand All @@ -13,14 +13,14 @@ export class SimpleTimeTrackerSettingsTab extends PluginSettingTab {

display(): void {
this.containerEl.empty();
this.containerEl.createEl("h2", {text: "Super Simple Time Tracker Settings"});
this.containerEl.createEl("h2", { text: "Super Simple Time Tracker Settings" });

new Setting(this.containerEl)
.setName("Timestamp Display Format")
.setDesc(createFragment(f => {
f.createSpan({text: "The way that timestamps in time tracker tables should be displayed. Uses "});
f.createEl("a", {text: "moment.js", href: "https://momentjs.com/docs/#/parsing/string-format/"});
f.createSpan({text: " syntax."});
f.createSpan({ text: "The way that timestamps in time tracker tables should be displayed. Uses " });
f.createEl("a", { text: "moment.js", href: "https://momentjs.com/docs/#/parsing/string-format/" });
f.createSpan({ text: " syntax." });
}))
.addText(t => {
t.setValue(String(this.plugin.settings.timestampFormat));
Expand Down Expand Up @@ -74,6 +74,17 @@ export class SimpleTimeTrackerSettingsTab extends PluginSettingTab {
});
});

new Setting(this.containerEl)
.setName('Show Total Today')
.setDesc('Whether the total time spent today should be displayed in the tracker table.')
.addToggle(t => {
t.setValue(this.plugin.settings.showToday);
t.onChange(async v => {
this.plugin.settings.showToday = v;
await this.plugin.saveSettings();
});
});

this.containerEl.createEl("hr");
this.containerEl.createEl("p", { text: "Need help using the plugin? Feel free to join the Discord server!" });
this.containerEl.createEl("a", { href: "https://link.ellpeck.de/discordweb" }).createEl("img", {
Expand Down
5 changes: 3 additions & 2 deletions src/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ export const defaultSettings: SimpleTimeTrackerSettings = {
csvDelimiter: ",",
fineGrainedDurations: true,
reverseSegmentOrder: false,
timestampDurations: false
timestampDurations: false,
showToday: false,
};

export interface SimpleTimeTrackerSettings {
Expand All @@ -15,5 +16,5 @@ export interface SimpleTimeTrackerSettings {
fineGrainedDurations: boolean;
reverseSegmentOrder: boolean;
timestampDurations: boolean;

showToday: boolean;
}
33 changes: 33 additions & 0 deletions src/tracker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,12 @@ export function displayTracker(tracker: Tracker, element: HTMLElement, getFile:
let total = totalDiv.createEl("span", { cls: "simple-time-tracker-timer-time", text: "0s" });
totalDiv.createEl("span", { text: "Total" });

if (settings.showToday) {
let totalTodayDiv = timer.createEl("div", { cls: "simple-time-tracker-timer" })
let totalToday = totalTodayDiv.createEl("span", { cls: "simple-time-tracker-timer-time", text: "0s" })
totalTodayDiv.createEl("span", { text: "Today" })
}

if (tracker.entries.length > 0) {
// add table
let table = element.createEl("table", { cls: "simple-time-tracker-table" });
Expand Down Expand Up @@ -145,13 +151,40 @@ export function getDuration(entry: Entry): number {
}
}

export function getDurationToday(entry: Entry): number {
if (entry.subEntries) {
return getTotalDurationToday(entry.subEntries)
} else {
let today = moment().startOf('day')
let endTime = entry.endTime ? moment(entry.endTime) : moment()
let startTime = moment(entry.startTime)

if (endTime.isBefore(today)) {
return 0
}

if (startTime.isBefore(today)) {
startTime = today
}

return endTime.diff(startTime)
}
}

export function getTotalDuration(entries: Entry[]): number {
let ret = 0;
for (let entry of entries)
ret += getDuration(entry);
return ret;
}

export function getTotalDurationToday(entries: Entry[]): number {
let ret = 0
for (let entry of entries)
ret += getDurationToday(entry)
return ret
}

export function isRunning(tracker: Tracker): boolean {
return !!getRunningEntry(tracker.entries);
}
Expand Down
3 changes: 2 additions & 1 deletion test-vault/.obsidian/plugins/simple-time-tracker/data.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
"csvDelimiter": ",",
"fineGrainedDurations": true,
"reverseSegmentOrder": false,
"timestampDurations": true
"timestampDurations": true,
"showToday": true
}

0 comments on commit 1831b25

Please sign in to comment.