diff --git a/plugin/src/events/obisidan-event-handler.ts b/plugin/src/events/obisidan-event-handler.ts index 81f2002..1eea37e 100644 --- a/plugin/src/events/obisidan-event-handler.ts +++ b/plugin/src/events/obisidan-event-handler.ts @@ -3,35 +3,24 @@ import { TFile } from "obsidian"; import type { FileEventHandler } from "./file-event-handler"; import type { SyncService } from "src/services/sync-service"; import type { Database } from "src/database/database"; -import { syncLocallyDeletedFile } from "src/sync-operations/sync-locally-deleted-file"; -import { syncLocallyUpdatedFile } from "src/sync-operations/sync-locally-updated-file"; import type { FileOperations } from "src/file-operations/file-operations"; -import { syncLocallyCreatedFile } from "src/sync-operations/sync-locally-created-file"; import { Logger } from "src/tracing/logger"; import type { SyncHistory } from "src/tracing/sync-history"; +import { Syncer } from "src/sync-operations/syncer"; export class ObsidianFileEventHandler implements FileEventHandler { - public constructor( - private readonly database: Database, - private readonly syncServer: SyncService, - private readonly operations: FileOperations, - private readonly history: SyncHistory - ) {} + public constructor(private readonly syncer: Syncer) {} public async onCreate(file: TAbstractFile): Promise { if (file instanceof TFile) { Logger.getInstance().info(`File created: ${file.path}`); - await syncLocallyCreatedFile({ - database: this.database, - syncServer: this.syncServer, - operations: this.operations, - updateTime: new Date(file.stat.ctime), - relativePath: file.path, - history: this.history, - }); + await this.syncer.syncLocallyCreatedFile( + file.path, + new Date(file.stat.ctime) + ); } else { - Logger.getInstance().info(`Folder created: ${file.path}, ignored`); + Logger.getInstance().debug(`Folder created: ${file.path}, ignored`); } } @@ -39,14 +28,9 @@ export class ObsidianFileEventHandler implements FileEventHandler { if (file instanceof TFile) { Logger.getInstance().info(`File deleted: ${file.path}`); - await syncLocallyDeletedFile({ - database: this.database, - syncServer: this.syncServer, - history: this.history, - relativePath: file.path, - }); + await this.syncer.syncLocallyDeletedFile(file.path); } else { - Logger.getInstance().info(`Folder deleted: ${file.path}, ignored`); + Logger.getInstance().debug(`Folder deleted: ${file.path}, ignored`); } } @@ -56,17 +40,13 @@ export class ObsidianFileEventHandler implements FileEventHandler { `File renamed: ${oldPath} -> ${file.path}` ); - await syncLocallyUpdatedFile({ - database: this.database, - syncServer: this.syncServer, - operations: this.operations, - history: this.history, - updateTime: new Date(file.stat.ctime), - relativePath: file.path, + await this.syncer.syncLocallyUpdatedFile({ oldPath, + relativePath: file.path, + updateTime: new Date(file.stat.ctime), }); } else { - Logger.getInstance().info( + Logger.getInstance().debug( `Folder renamed: ${oldPath} -> ${file.path}, ignored` ); } @@ -76,16 +56,14 @@ export class ObsidianFileEventHandler implements FileEventHandler { if (file instanceof TFile) { Logger.getInstance().info(`File modified: ${file.path}`); - await syncLocallyUpdatedFile({ - database: this.database, - syncServer: this.syncServer, - operations: this.operations, - history: this.history, - updateTime: new Date(file.stat.ctime), + await this.syncer.syncLocallyUpdatedFile({ relativePath: file.path, + updateTime: new Date(file.stat.ctime), }); } else { - Logger.getInstance().info(`Folder modified: ${file.path}, ignored`); + Logger.getInstance().debug( + `Folder modified: ${file.path}, ignored` + ); } } } diff --git a/plugin/src/plugin.ts b/plugin/src/plugin.ts index 535ecd7..2580106 100644 --- a/plugin/src/plugin.ts +++ b/plugin/src/plugin.ts @@ -11,11 +11,11 @@ import { SyncService } from "./services/sync-service"; import { Database } from "./database/database"; import { applyRemoteChangesLocally } from "./sync-operations/apply-remote-changes-locally"; import { ObsidianFileOperations } from "./file-operations/obsidian-file-operations"; -import { applyLocalChangesRemotely } from "./sync-operations/apply-local-changes-remotely"; import { StatusBar } from "./views/status-bar"; import { Logger } from "./tracing/logger.js"; import { SyncHistory } from "./tracing/sync-history.js"; import { LogsView } from "./views/logs-view.js"; +import { Syncer } from "./sync-operations/syncer.js"; export default class SyncPlugin extends Plugin { private remoteListenerIntervalId: number | null = null; @@ -39,24 +39,20 @@ export default class SyncPlugin extends Plugin { const syncServer = new SyncService(database); - new StatusBar(this, this.history); + const syncer = new Syncer({ + database, + operations: this.operations, + syncServer, + history: this.history, + }); this.addSettingTab( - new SyncSettingsTab( - this.app, - this, - database, - syncServer, - this.history - ) + new SyncSettingsTab(this.app, this, database, syncServer, syncer) ); - const eventHandler = new ObsidianFileEventHandler( - database, - syncServer, - this.operations, - this.history - ); + new StatusBar(this, this.history, syncer); + + const eventHandler = new ObsidianFileEventHandler(syncer); this.app.workspace.onLayoutReady(async () => { Logger.getInstance().info("Initialising sync handlers"); @@ -82,12 +78,7 @@ export default class SyncPlugin extends Plugin { this.registerEvent(event); }); - await applyLocalChangesRemotely({ - database, - syncServer, - operations: this.operations, - history: this.history, - }); + await syncer.scheduleSyncForOfflineChanges(); Logger.getInstance().info("Sync handlers initialised"); }); @@ -95,6 +86,7 @@ export default class SyncPlugin extends Plugin { this.registerRemoteEventListener( database, syncServer, + syncer, database.getSettings().fetchChangesUpdateIntervalMs ); @@ -103,16 +95,12 @@ export default class SyncPlugin extends Plugin { this.registerRemoteEventListener( database, syncServer, + syncer, settings.fetchChangesUpdateIntervalMs ); if (!oldSettings.isSyncEnabled && settings.isSyncEnabled) { - await applyLocalChangesRemotely({ - database: database, - syncServer, - operations: this.operations, - history: this.history, - }); + await syncer.scheduleSyncForOfflineChanges(); } }); @@ -163,6 +151,7 @@ export default class SyncPlugin extends Plugin { private registerRemoteEventListener( database: Database, syncServer: SyncService, + syncer: Syncer, intervalMs: number ): void { if (this.remoteListenerIntervalId !== null) { @@ -175,8 +164,7 @@ export default class SyncPlugin extends Plugin { applyRemoteChangesLocally({ database, syncServer, - operations: this.operations, - history: this.history, + syncer, }), intervalMs ); diff --git a/plugin/src/sync-operations/apply-remote-changes-locally.ts b/plugin/src/sync-operations/apply-remote-changes-locally.ts index 3b8840c..b988fd1 100644 --- a/plugin/src/sync-operations/apply-remote-changes-locally.ts +++ b/plugin/src/sync-operations/apply-remote-changes-locally.ts @@ -1,22 +1,20 @@ import type { Database } from "src/database/database"; import type { FileOperations } from "src/file-operations/file-operations"; import type { SyncService } from "src/services/sync-service"; -import { syncRemotelyUpdatedFile } from "./sync-remotely-updated-file"; import { Logger } from "src/tracing/logger"; import type { SyncHistory } from "src/tracing/sync-history"; +import { Syncer } from "./syncer"; let isRunning = false; export async function applyRemoteChangesLocally({ database, syncServer, - operations, - history, + syncer, }: { database: Database; syncServer: SyncService; - operations: FileOperations; - history: SyncHistory; + syncer: Syncer; }): Promise { if (!database.getSettings().isSyncEnabled) { Logger.getInstance().debug( @@ -44,13 +42,7 @@ export async function applyRemoteChangesLocally({ await Promise.all( remote.latestDocuments.map(async (remoteDocument) => - syncRemotelyUpdatedFile({ - database, - syncServer, - history, - operations, - remoteVersion: remoteDocument, - }) + syncer.syncRemotelyUpdatedFile(remoteDocument) ) );