Basic syncing in the plugin

This commit is contained in:
Andras Schmelczer 2024-12-15 15:47:08 +00:00
parent dfdf1d016b
commit d088d42a65
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
17 changed files with 560 additions and 178 deletions

View file

@ -0,0 +1,54 @@
import { Vault } from "obsidian";
import { Database } from "./database/database";
import { SyncServer } from "./services/sync_service";
import { syncRemotelyUpdatedFile } from "./sync-operations/sync-remotely-updated-file";
import { Logger } from "./logger";
import { FileOperations } from "./file-operations/file-operations";
let isRunning = false;
export async function applyRemoteChangesLocally(
database: Database,
syncServer: SyncServer,
operations: FileOperations
) {
if (isRunning) {
Logger.getInstance().info("Sync already in progress, skipping");
return;
}
isRunning = true;
try {
if (!database.getSettings().isSyncEnabled) {
return;
}
const remote = await syncServer.getAll(database.getLastSeenUpdateId());
if (remote.latestDocuments.length === 0) {
Logger.getInstance().debug("No remote changes to apply");
return;
}
Logger.getInstance().info("Applying remote changes locally");
await Promise.all(
remote.latestDocuments.map((remoteDocument) =>
syncRemotelyUpdatedFile({
database,
syncServer,
operations: operations,
remoteVersion: remoteDocument,
})
)
);
await database.setLastSeenUpdateId(remote.lastUpdateId);
} catch (e) {
Logger.getInstance().error(
`Failed to apply remote changes locally: ${e}`
);
} finally {
isRunning = false;
}
}