diff --git a/src/main.ts b/src/main.ts index 329b37a..49f5289 100644 --- a/src/main.ts +++ b/src/main.ts @@ -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), diff --git a/src/settings-tab.ts b/src/settings-tab.ts index 06bae5c..eec6639 100644 --- a/src/settings-tab.ts +++ b/src/settings-tab.ts @@ -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 { @@ -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)); @@ -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", { diff --git a/src/settings.ts b/src/settings.ts index a70e817..19ee4ec 100644 --- a/src/settings.ts +++ b/src/settings.ts @@ -4,7 +4,8 @@ export const defaultSettings: SimpleTimeTrackerSettings = { csvDelimiter: ",", fineGrainedDurations: true, reverseSegmentOrder: false, - timestampDurations: false + timestampDurations: false, + showToday: false, }; export interface SimpleTimeTrackerSettings { @@ -15,5 +16,5 @@ export interface SimpleTimeTrackerSettings { fineGrainedDurations: boolean; reverseSegmentOrder: boolean; timestampDurations: boolean; - + showToday: boolean; } diff --git a/src/tracker.ts b/src/tracker.ts index 48476a1..eaf8952 100644 --- a/src/tracker.ts +++ b/src/tracker.ts @@ -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" }); @@ -145,6 +151,26 @@ 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) @@ -152,6 +178,13 @@ export function getTotalDuration(entries: Entry[]): number { 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); } diff --git a/test-vault/.obsidian/plugins/simple-time-tracker/data.json b/test-vault/.obsidian/plugins/simple-time-tracker/data.json index de2b77c..41cc682 100644 --- a/test-vault/.obsidian/plugins/simple-time-tracker/data.json +++ b/test-vault/.obsidian/plugins/simple-time-tracker/data.json @@ -4,5 +4,6 @@ "csvDelimiter": ",", "fineGrainedDurations": true, "reverseSegmentOrder": false, - "timestampDurations": true + "timestampDurations": true, + "showToday": true } \ No newline at end of file