Skip to content

Commit 1831b25

Browse files
authored
add total today (#64)
* add total today * not change format semicolons * Add settings for show total today
1 parent 3dc0857 commit 1831b25

File tree

5 files changed

+57
-11
lines changed

5 files changed

+57
-11
lines changed

src/main.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
import { MarkdownRenderChild, Plugin, TFile } from "obsidian";
22
import { defaultSettings, SimpleTimeTrackerSettings } from "./settings";
33
import { SimpleTimeTrackerSettingsTab } from "./settings-tab";
4-
import { displayTracker, Entry, formatDuration, formatTimestamp, getDuration, getRunningEntry, getTotalDuration, isRunning, loadAllTrackers, loadTracker, orderedEntries } from "./tracker";
4+
import { displayTracker, Entry, formatDuration, formatTimestamp, getDuration, getDurationToday, getRunningEntry, getTotalDuration, getTotalDurationToday, isRunning, loadAllTrackers, loadTracker, orderedEntries } from "./tracker";
55

66
export default class SimpleTimeTrackerPlugin extends Plugin {
77

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

1212
// modified versions of the functions found in tracker.ts, with the number of required arguments reduced
1313
formatTimestamp: (timestamp: string) => formatTimestamp(timestamp, this.settings),

src/settings-tab.ts

+17-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import {App, PluginSettingTab, Setting} from "obsidian";
1+
import { App, PluginSettingTab, Setting } from "obsidian";
22
import SimpleTimeTrackerPlugin from "./main";
3-
import {defaultSettings} from "./settings";
3+
import { defaultSettings } from "./settings";
44

55
export class SimpleTimeTrackerSettingsTab extends PluginSettingTab {
66

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

1414
display(): void {
1515
this.containerEl.empty();
16-
this.containerEl.createEl("h2", {text: "Super Simple Time Tracker Settings"});
16+
this.containerEl.createEl("h2", { text: "Super Simple Time Tracker Settings" });
1717

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

77+
new Setting(this.containerEl)
78+
.setName('Show Total Today')
79+
.setDesc('Whether the total time spent today should be displayed in the tracker table.')
80+
.addToggle(t => {
81+
t.setValue(this.plugin.settings.showToday);
82+
t.onChange(async v => {
83+
this.plugin.settings.showToday = v;
84+
await this.plugin.saveSettings();
85+
});
86+
});
87+
7788
this.containerEl.createEl("hr");
7889
this.containerEl.createEl("p", { text: "Need help using the plugin? Feel free to join the Discord server!" });
7990
this.containerEl.createEl("a", { href: "https://link.ellpeck.de/discordweb" }).createEl("img", {

src/settings.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ export const defaultSettings: SimpleTimeTrackerSettings = {
44
csvDelimiter: ",",
55
fineGrainedDurations: true,
66
reverseSegmentOrder: false,
7-
timestampDurations: false
7+
timestampDurations: false,
8+
showToday: false,
89
};
910

1011
export interface SimpleTimeTrackerSettings {
@@ -15,5 +16,5 @@ export interface SimpleTimeTrackerSettings {
1516
fineGrainedDurations: boolean;
1617
reverseSegmentOrder: boolean;
1718
timestampDurations: boolean;
18-
19+
showToday: boolean;
1920
}

src/tracker.ts

+33
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ export function displayTracker(tracker: Tracker, element: HTMLElement, getFile:
101101
let total = totalDiv.createEl("span", { cls: "simple-time-tracker-timer-time", text: "0s" });
102102
totalDiv.createEl("span", { text: "Total" });
103103

104+
if (settings.showToday) {
105+
let totalTodayDiv = timer.createEl("div", { cls: "simple-time-tracker-timer" })
106+
let totalToday = totalTodayDiv.createEl("span", { cls: "simple-time-tracker-timer-time", text: "0s" })
107+
totalTodayDiv.createEl("span", { text: "Today" })
108+
}
109+
104110
if (tracker.entries.length > 0) {
105111
// add table
106112
let table = element.createEl("table", { cls: "simple-time-tracker-table" });
@@ -145,13 +151,40 @@ export function getDuration(entry: Entry): number {
145151
}
146152
}
147153

154+
export function getDurationToday(entry: Entry): number {
155+
if (entry.subEntries) {
156+
return getTotalDurationToday(entry.subEntries)
157+
} else {
158+
let today = moment().startOf('day')
159+
let endTime = entry.endTime ? moment(entry.endTime) : moment()
160+
let startTime = moment(entry.startTime)
161+
162+
if (endTime.isBefore(today)) {
163+
return 0
164+
}
165+
166+
if (startTime.isBefore(today)) {
167+
startTime = today
168+
}
169+
170+
return endTime.diff(startTime)
171+
}
172+
}
173+
148174
export function getTotalDuration(entries: Entry[]): number {
149175
let ret = 0;
150176
for (let entry of entries)
151177
ret += getDuration(entry);
152178
return ret;
153179
}
154180

181+
export function getTotalDurationToday(entries: Entry[]): number {
182+
let ret = 0
183+
for (let entry of entries)
184+
ret += getDurationToday(entry)
185+
return ret
186+
}
187+
155188
export function isRunning(tracker: Tracker): boolean {
156189
return !!getRunningEntry(tracker.entries);
157190
}

test-vault/.obsidian/plugins/simple-time-tracker/data.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,6 @@
44
"csvDelimiter": ",",
55
"fineGrainedDurations": true,
66
"reverseSegmentOrder": false,
7-
"timestampDurations": true
7+
"timestampDurations": true,
8+
"showToday": true
89
}

0 commit comments

Comments
 (0)