Skip to content

Commit 2aa7fb8

Browse files
committed
feat: auto pull on specified interval
close #59
1 parent 8d43e7b commit 2aa7fb8

File tree

1 file changed

+59
-7
lines changed

1 file changed

+59
-7
lines changed

main.ts

Lines changed: 59 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface ObsidianGitSettings {
1414
commitMessage: string;
1515
commitDateFormat: string;
1616
autoSaveInterval: number;
17+
autoPullInterval: number;
1718
autoPullOnBoot: boolean;
1819
disablePush: boolean;
1920
pullBeforePush: boolean;
@@ -24,6 +25,7 @@ const DEFAULT_SETTINGS: ObsidianGitSettings = {
2425
commitMessage: "vault backup: {{date}}",
2526
commitDateFormat: "YYYY-MM-DD HH:mm:ss",
2627
autoSaveInterval: 0,
28+
autoPullInterval: 0,
2729
autoPullOnBoot: false,
2830
disablePush: false,
2931
pullBeforePush: true,
@@ -36,7 +38,8 @@ export default class ObsidianGit extends Plugin {
3638
settings: ObsidianGitSettings;
3739
statusBar: StatusBar;
3840
state: PluginState = PluginState.idle;
39-
intervalID: number;
41+
intervalIDBackup: number;
42+
intervalIDPull: number;
4043
lastUpdate: number;
4144
gitReady = false;
4245
conflictOutputFile = "conflict-files-obsidian-git.md";
@@ -125,6 +128,9 @@ export default class ObsidianGit extends Plugin {
125128
if (this.settings.autoSaveInterval > 0) {
126129
this.enableAutoBackup();
127130
}
131+
if (this.settings.autoPullInterval > 0) {
132+
this.enableAutoPull();
133+
}
128134
}
129135

130136
} catch (error) {
@@ -298,19 +304,35 @@ export default class ObsidianGit extends Plugin {
298304

299305
enableAutoBackup() {
300306
const minutes = this.settings.autoSaveInterval;
301-
this.intervalID = window.setInterval(
307+
this.intervalIDBackup = window.setInterval(
302308
async () => await this.createBackup(true),
303309
minutes * 60000
304310
);
305-
this.registerInterval(this.intervalID);
311+
this.registerInterval(this.intervalIDBackup);
312+
}
313+
314+
enableAutoPull() {
315+
const minutes = this.settings.autoPullInterval;
316+
this.intervalIDPull = window.setInterval(
317+
async () => await this.pullChangesFromRemote(),
318+
minutes * 60000
319+
);
320+
this.registerInterval(this.intervalIDPull);
306321
}
307322

308323
disableAutoBackup(): boolean {
309-
if (this.intervalID) {
310-
clearInterval(this.intervalID);
324+
if (this.intervalIDBackup) {
325+
clearInterval(this.intervalIDBackup);
311326
return true;
312327
}
328+
return false;
329+
}
313330

331+
disableAutoPull(): boolean {
332+
if (this.intervalIDPull) {
333+
clearInterval(this.intervalIDPull);
334+
return true;
335+
}
314336
return false;
315337
}
316338

@@ -429,7 +451,7 @@ class ObsidianGitSettingsTab extends PluginSettingTab {
429451
);
430452
} else if (
431453
plugin.settings.autoSaveInterval <= 0 &&
432-
plugin.intervalID
454+
plugin.intervalIDBackup
433455
) {
434456
plugin.disableAutoBackup() &&
435457
new Notice("Automatic backup disabled!");
@@ -439,6 +461,37 @@ class ObsidianGitSettingsTab extends PluginSettingTab {
439461
}
440462
})
441463
);
464+
new Setting(containerEl)
465+
.setName("Auto pull interval (minutes)")
466+
.setDesc(
467+
"Pull changes every X minutes. To disable automatic pull, specify negative value or zero (default)"
468+
)
469+
.addText((text) =>
470+
text
471+
.setValue(String(plugin.settings.autoPullInterval))
472+
.onChange((value) => {
473+
if (!isNaN(Number(value))) {
474+
plugin.settings.autoPullInterval = Number(value);
475+
plugin.saveSettings();
476+
477+
if (plugin.settings.autoPullInterval > 0) {
478+
plugin.disableAutoPull();
479+
plugin.enableAutoPull();
480+
new Notice(
481+
`Automatic pull enabled! Every ${plugin.settings.autoPullInterval} minutes.`
482+
);
483+
} else if (
484+
plugin.settings.autoPullInterval <= 0 &&
485+
plugin.intervalIDPull
486+
) {
487+
plugin.disableAutoPull() &&
488+
new Notice("Automatic pull disabled!");
489+
}
490+
} else {
491+
new Notice("Please specify a valid number.");
492+
}
493+
})
494+
);
442495

443496
new Setting(containerEl)
444497
.setName("Commit message")
@@ -680,7 +733,6 @@ class ChangedFilesModal extends FuzzySuggestModal<FileStatusResult> {
680733
super(plugin.app);
681734
this.plugin = plugin;
682735
this.changedFiles = changedFiles;
683-
console.log(changedFiles);
684736
this.setPlaceholder("Only files in vault can be openend!");
685737
}
686738

0 commit comments

Comments
 (0)