Improvement of sync_on_save (#502)

* Improve sync_on_save

* fix typo

---------

Co-authored-by: fyears <1142836+fyears@users.noreply.github.com>
This commit is contained in:
Vijayasantham 2024-03-30 21:37:07 +05:30 committed by GitHub
parent b674dd0f10
commit 98107ba4ea
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -9,6 +9,7 @@ import {
Platform, Platform,
requestUrl, requestUrl,
requireApiVersion, requireApiVersion,
Events,
} from "obsidian"; } from "obsidian";
import cloneDeep from "lodash/cloneDeep"; import cloneDeep from "lodash/cloneDeep";
import { createElement, RotateCcw, RefreshCcw, FileText } from "lucide"; import { createElement, RotateCcw, RefreshCcw, FileText } from "lucide";
@ -149,6 +150,7 @@ export default class RemotelySavePlugin extends Plugin {
i18n!: I18n; i18n!: I18n;
vaultRandomID!: string; vaultRandomID!: string;
debugServerTemp?: string; debugServerTemp?: string;
syncEvent?: Events;
async syncRun(triggerSource: SyncTriggerSourceType = "manual") { async syncRun(triggerSource: SyncTriggerSourceType = "manual") {
const t = (x: TransItemType, vars?: any) => { const t = (x: TransItemType, vars?: any) => {
@ -416,6 +418,7 @@ export default class RemotelySavePlugin extends Plugin {
this.updateLastSuccessSyncMsg(lastSuccessSyncMillis); this.updateLastSuccessSyncMsg(lastSuccessSyncMillis);
} }
this.syncEvent?.trigger("SYNC_DONE");
console.info( console.info(
`${ `${
this.manifest.id this.manifest.id
@ -465,6 +468,8 @@ export default class RemotelySavePlugin extends Plugin {
this.currSyncMsg = ""; this.currSyncMsg = "";
this.syncEvent = new Events();
await this.loadSettings(); await this.loadSettings();
// MUST after loadSettings and before prepareDB // MUST after loadSettings and before prepareDB
@ -1126,44 +1131,53 @@ export default class RemotelySavePlugin extends Plugin {
}, scheduleTimeFromNow); }, scheduleTimeFromNow);
}; };
this.app.workspace.onLayoutReady(() => { const checkCurrFileModified = async (caller: "SYNC" | "FILE_CHANGES") => {
const intervalID = window.setInterval(() => {
const currentFile = this.app.workspace.getActiveFile(); const currentFile = this.app.workspace.getActiveFile();
if (currentFile) { if (currentFile) {
// get the last modified time of the current file // get the last modified time of the current file
// if it has been modified within the last syncOnSaveAfterMilliseconds // if it has modified after lastSuccessSync
// then schedule a run for syncOnSaveAfterMilliseconds after it was modified // then schedule a run for syncOnSaveAfterMilliseconds after it was modified
const lastModified = currentFile.stat.mtime; const lastModified = currentFile.stat.mtime;
const currentTime = Date.now(); const lastSuccessSyncMillis = await getLastSuccessSyncByVault(
this.db,
this.vaultRandomID
);
if ( if (
currentTime - lastModified < this.syncStatus === "idle" &&
this.settings!.syncOnSaveAfterMilliseconds! lastModified > lastSuccessSyncMillis &&
!runScheduled
) { ) {
if ( scheduleSyncOnSave(this.settings!.syncOnSaveAfterMilliseconds!);
!needToRunAgain &&
!runScheduled &&
this.syncStatus === "idle"
) {
const scheduleTimeFromNow =
this.settings!.syncOnSaveAfterMilliseconds! -
(currentTime - lastModified);
scheduleSyncOnSave(scheduleTimeFromNow);
} else if ( } else if (
this.syncStatus === "idle" &&
needToRunAgain && needToRunAgain &&
!runScheduled && !runScheduled
this.syncStatus === "idle"
) { ) {
scheduleSyncOnSave(this.settings!.syncOnSaveAfterMilliseconds!); scheduleSyncOnSave(this.settings!.syncOnSaveAfterMilliseconds!);
needToRunAgain = false; needToRunAgain = false;
} else { } else {
if (caller === "FILE_CHANGES") {
needToRunAgain = true; needToRunAgain = true;
} }
} }
} }
}, this.settings.syncOnSaveAfterMilliseconds); };
this.syncOnSaveIntervalID = intervalID;
this.registerInterval(intervalID); this.app.workspace.onLayoutReady(() => {
// listen to sync done
this.registerEvent(
this.syncEvent?.on("SYNC_DONE", () => {
checkCurrFileModified("SYNC");
})!
);
// listen to current file save changes
this.registerEvent(
this.app.vault.on("modify", () => {
checkCurrFileModified("FILE_CHANGES");
})
);
}); });
} }
} }