Skip to content

Commit dad1a89

Browse files
committed
Set the periodic interval to run the compute-time-tree command
1 parent bf4477e commit dad1a89

File tree

15 files changed

+130
-29
lines changed

15 files changed

+130
-29
lines changed

src/main.ts

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export default class TimeTreePlugin extends Plugin {
99
public settings: TimeTreeSettings;
1010
private frontMatterManager: FrontMatterManager;
1111
private calculator: TimeTreeCalculator;
12+
private computeIntervalHandle: any;
1213

1314
async onload(): Promise<void> {
1415
await this.loadSettings();
@@ -45,6 +46,14 @@ export default class TimeTreePlugin extends Plugin {
4546
this.insertNewTask(editor);
4647
},
4748
});
49+
50+
this.scheduleComputeTimeTree();
51+
}
52+
53+
onunload(): void {
54+
if (this.computeIntervalHandle) {
55+
clearInterval(this.computeIntervalHandle);
56+
}
4857
}
4958

5059
async loadSettings(): Promise<void> {
@@ -57,6 +66,7 @@ export default class TimeTreePlugin extends Plugin {
5766

5867
async saveSettings(): Promise<void> {
5968
await this.saveData(this.settings);
69+
this.scheduleComputeTimeTree();
6070
}
6171

6272
async elapsedTime(): Promise<void> {
@@ -90,12 +100,17 @@ export default class TimeTreePlugin extends Plugin {
90100
new Notice(`Root note ${rootPath} not found.`);
91101
return;
92102
}
93-
await this.calculator.calculateRecursiveElapsedTime(rootFile);
94-
await this.calculator.calculateRecursiveElapsedChild(rootFile);
95-
await this.calculator.updateNodeSizeFromFile(rootFile);
96-
new Notice(
97-
`Time Tree computed recursively from root note: ${rootPath}`
98-
);
103+
104+
// Show a persistent loading notification
105+
const loadingNotice = new Notice("Computing Time Tree...", 0);
106+
try {
107+
await this.calculator.calculateRecursiveElapsedTime(rootFile);
108+
await this.calculator.calculateRecursiveElapsedChild(rootFile);
109+
await this.calculator.updateNodeSizeFromFile(rootFile);
110+
new Notice(`Time Tree computed from note: ${rootPath}`, 1000);
111+
} finally {
112+
loadingNotice.hide();
113+
}
99114
}
100115

101116
async insertNewTask(editor: Editor): Promise<void> {
@@ -113,4 +128,18 @@ export default class TimeTreePlugin extends Plugin {
113128
editor.replaceRange(textToInsert, cursor);
114129
editor.setCursor({ line: cursor.line, ch: cursor.ch + 4 });
115130
}
131+
132+
scheduleComputeTimeTree(): void {
133+
// Clear any existing interval
134+
if (this.computeIntervalHandle) {
135+
clearInterval(this.computeIntervalHandle);
136+
}
137+
// Only schedule if the compute interval is greater than 0 (enabled)
138+
if (this.settings.computeIntervalMinutes > 0) {
139+
const intervalMs = this.settings.computeIntervalMinutes * 60 * 1000;
140+
this.computeIntervalHandle = setInterval(async () => {
141+
await this.computeTimeTree();
142+
}, intervalMs);
143+
}
144+
}
116145
}

src/settings-tab.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export class TimeTreeSettingsTab extends PluginSettingTab {
3030
await this.plugin.saveSettings();
3131
});
3232
});
33+
3334
new Setting(this.containerEl)
3435
.setName("Root Note Path")
3536
.setDesc(
@@ -53,6 +54,7 @@ export class TimeTreeSettingsTab extends PluginSettingTab {
5354
});
5455
text.inputEl.setAttr("list", "file-datalist");
5556
});
57+
5658
new Setting(this.containerEl)
5759
.setName("Root Folder Path")
5860
.setDesc(
@@ -96,6 +98,7 @@ export class TimeTreeSettingsTab extends PluginSettingTab {
9698

9799
text.inputEl.setAttr("list", "folder-datalist");
98100
});
101+
99102
new Setting(this.containerEl)
100103
.setName("Consider Subdirs")
101104
.setDesc(
@@ -108,5 +111,28 @@ export class TimeTreeSettingsTab extends PluginSettingTab {
108111
await this.plugin.saveSettings();
109112
});
110113
});
114+
115+
new Setting(this.containerEl)
116+
.setName("Compute Interval")
117+
.setDesc(
118+
"Set the periodic interval to run the 'compute-time-tree' command. Select 'Off' to disable."
119+
)
120+
.addDropdown((dropdown) => {
121+
dropdown.addOption("0", "Off");
122+
dropdown.addOption("1", "1 minute");
123+
dropdown.addOption("15", "15 minutes");
124+
dropdown.addOption("30", "30 minutes");
125+
dropdown.addOption("60", "1 hour");
126+
dropdown.addOption("360", "6 hours");
127+
dropdown.addOption("720", "12 hours");
128+
dropdown.addOption("1440", "24 hours");
129+
dropdown.setValue(
130+
this.settings.computeIntervalMinutes.toString()
131+
);
132+
dropdown.onChange(async (value) => {
133+
this.settings.computeIntervalMinutes = parseInt(value);
134+
await this.plugin.saveSettings();
135+
});
136+
});
111137
}
112138
}

src/settings.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,13 @@ export const defaultSettings: TimeTreeSettings = {
33
rootNotePath: "",
44
RootFolderPath: "/",
55
considerSubdirs: false,
6+
computeIntervalMinutes: 0, // New property: 0 means disabled by default
67
};
78

89
export interface TimeTreeSettings {
910
onlyFirstTracker: boolean;
1011
rootNotePath: string;
1112
RootFolderPath: string;
1213
considerSubdirs: boolean;
14+
computeIntervalMinutes: number; // New property
1315
}

test-vault/.obsidian/graph.json

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,33 @@
55
"showAttachments": false,
66
"hideUnresolved": false,
77
"showOrphans": true,
8-
"collapse-color-groups": true,
9-
"colorGroups": [],
8+
"collapse-color-groups": false,
9+
"colorGroups": [
10+
{
11+
"query": "file:root",
12+
"color": {
13+
"a": 1,
14+
"rgb": 14701138
15+
}
16+
},
17+
{
18+
"query": "path:Tasks ",
19+
"color": {
20+
"a": 1,
21+
"rgb": 3975358
22+
}
23+
}
24+
],
1025
"collapse-display": true,
1126
"showArrow": false,
1227
"textFadeMultiplier": 0,
1328
"nodeSizeMultiplier": 1,
1429
"lineSizeMultiplier": 1,
1530
"collapse-forces": false,
16-
"centerStrength": 0.697509765625,
31+
"centerStrength": 0.382568359375,
1732
"repelStrength": 20,
1833
"linkStrength": 1,
19-
"linkDistance": 30,
20-
"scale": 0.8914715268792589,
34+
"linkDistance": 184,
35+
"scale": 0.6488873738523595,
2136
"close": true
2237
}

test-vault/.obsidian/workspace.json

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,34 @@
1010
{
1111
"id": "77b1a0575995a7eb",
1212
"type": "leaf",
13+
"state": {
14+
"type": "markdown",
15+
"state": {
16+
"file": "Tasks/sub/newer-task.md",
17+
"mode": "source",
18+
"source": false
19+
},
20+
"icon": "lucide-file",
21+
"title": "newer-task"
22+
}
23+
},
24+
{
25+
"id": "720cd935930f23db",
26+
"type": "leaf",
27+
"state": {
28+
"type": "markdown",
29+
"state": {
30+
"file": "Tasks/level-2b-c.md",
31+
"mode": "source",
32+
"source": false
33+
},
34+
"icon": "lucide-file",
35+
"title": "level-2b-c"
36+
}
37+
},
38+
{
39+
"id": "1e02cc558bcf0724",
40+
"type": "leaf",
1341
"state": {
1442
"type": "graph",
1543
"state": {},
@@ -163,22 +191,22 @@
163191
},
164192
"active": "77b1a0575995a7eb",
165193
"lastOpenFiles": [
166-
"Tasks/level-2b-b.md",
194+
"Tasks/root.md",
195+
"Tasks/level-2c-a.md",
196+
"Tasks/level-2b-c.md",
167197
"Tasks/sub/newer-task.md",
198+
"Tasks/level-2b-b.md",
168199
"Tasks/level-2c-b.md",
169200
"Tasks/level-1-b.md",
170-
"Tasks/level-2b-c.md",
171201
"Tasks/level-1-c.md",
172202
"Tasks/level-2a-b.md",
173203
"Tasks/level-2a-c.md",
174204
"Tasks/level-1-a.md",
175205
"Tasks/level-2b-a.md",
176206
"ref.md",
177-
"Tasks/root.md",
178207
"Tasks/level-2c-c.md",
179208
"Root/sub",
180209
"Root",
181-
"Tasks/level-2c-a.md",
182210
"Tasks/level-2a-a.md",
183211
"level-1-b-1.md",
184212
"level-1-c-1.md",

test-vault/Tasks/level-1-a.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
elapsed_child: 31269
33
elapsed: 0
4-
node_size: 24.631335951869662
4+
node_size: 24.555734157903416
55
---
66
# [[level-2a-a]]
77
# [[level-2a-b]]

test-vault/Tasks/level-1-b.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
2-
elapsed_child: 351374
2+
elapsed_child: 354273
33
elapsed: 0
4-
node_size: 88.44544546060624
4+
node_size: 88.52561506094023
55
---
66
# [[level-2b-a]]
77
# [[level-2b-b]]

test-vault/Tasks/level-1-c.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
elapsed_child: 56447
33
elapsed: 0
4-
node_size: 34.26765305184776
4+
node_size: 34.15926230035488
55
---
66
# [[level-2c-a]]
77
# [[level-2c-b]]

test-vault/Tasks/level-2a-b.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
elapsed: 10085
33
elapsed_child: 0
4-
node_size: 11.36517540112187
4+
node_size: 11.338436641205957
55
---
66
```simple-time-tracker
77
{"entries":[{"name":"Segment 1","startTime":"2025-03-12T04:47:55.128Z","endTime":"2025-03-12T04:47:57.829Z"},{"name":"Segment 2","startTime":"2025-03-12T04:47:59.594Z","endTime":"2025-03-12T04:48:02.845Z"},{"name":"Segment 3","startTime":"2025-03-12T19:36:29.905Z","endTime":"2025-03-12T19:36:32.857Z"},{"name":"Segment 4","startTime":"2025-03-12T19:36:35.891Z","endTime":"2025-03-12T19:36:37.072Z"}]}

test-vault/Tasks/level-2a-c.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
elapsed: 15232
33
elapsed_child: 0
4-
node_size: 15.658617053465356
4+
node_size: 15.615031733844807
55
---
66
```simple-time-tracker
77
{"entries":[{"name":"Segment 1","startTime":"2025-03-12T04:47:55.128Z","endTime":"2025-03-12T04:47:57.829Z"},{"name":"Segment 2","startTime":"2025-03-12T04:47:59.594Z","endTime":"2025-03-12T04:48:02.845Z"},{"name":"Segment 3","startTime":"2025-03-12T17:06:57.419Z","endTime":"2025-03-12T17:07:05.634Z"},{"name":"Segment 4","startTime":"2025-03-12T17:43:01.052Z","endTime":"2025-03-12T17:43:02.117Z"}]}

0 commit comments

Comments
 (0)