Extract event handlers

This commit is contained in:
Andras Schmelczer 2024-12-10 22:24:31 +00:00
commit 5f1075879f
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
4 changed files with 130 additions and 61 deletions

View file

@ -0,0 +1,22 @@
import { TFile } from "obsidian";
import { Database } from "src/database/database";
import { RelativePath } from "src/database/document-metadata";
import { SyncServer } from "src/services/sync_service";
export async function syncLocallyDeletedFile(
database: Database,
syncServer: SyncServer,
path: RelativePath
) {
const metadata = database.getDocument(path);
if (!metadata) {
throw `Document metadata not found for ${path}`;
}
await syncServer.delete({
documentId: metadata.documentId,
createdDate: new Date(), // We got the event now, so it must have been deleted now
});
await database.removeDocument(path);
}

View file

@ -0,0 +1,30 @@
import { TFile } from "obsidian";
import { Database } from "src/database/database";
import { SyncServer } from "src/services/sync_service";
export async function syncLocallyRenamedFile(
database: Database,
syncServer: SyncServer,
file: TFile,
oldPath: string
) {
const metadata = database.getDocument(oldPath);
if (!metadata) {
throw `Document metadata not found for ${oldPath}`;
}
const response = await syncServer.update({
documentId: metadata.documentId,
parentVersionId: metadata.parentVersionId,
relativePath: file.path,
content: await file.vault.readBinary(file),
createdDate: new Date(file.stat.ctime),
});
await database.moveDocument({
oldRelativePath: oldPath,
relativePath: file.path,
documentId: response.documentId,
parentVersionId: response.versionId,
});
}

View file

@ -0,0 +1,36 @@
import { TFile } from "obsidian";
import { Database } from "src/database/database";
import { SyncServer } from "src/services/sync_service";
export async function syncLocallyUpdatedFile(
database: Database,
syncServer: SyncServer,
file: TFile
) {
const metadata = database.getDocument(file.path);
if (!metadata) {
throw `Document metadata not found for ${file.path}`;
}
const response = await syncServer.update({
documentId: metadata.documentId,
parentVersionId: metadata.parentVersionId,
relativePath: file.path,
content: await file.vault.readBinary(file),
createdDate: new Date(file.stat.ctime),
});
if (file.path !== response.relativePath) {
file.vault.rename(file, response.relativePath);
}
if ((await file.vault.read(file)) !== response.contentBase64) {
// todo - reconcile
}
await database.setDocument({
relativePath: file.path,
documentId: response.documentId,
parentVersionId: response.versionId,
});
}

View file

@ -0,0 +1,29 @@
import { TFile } from "obsidian";
import { Database } from "src/database/database";
import { SyncServer } from "src/services/sync_service";
export async function syncNewLocalFile(
database: Database,
syncServer: SyncServer,
file: TFile
) {
const response = await syncServer.create({
relativePath: file.path,
content: await file.vault.readBinary(file),
createdDate: new Date(file.stat.ctime),
});
if (file.path !== response.relativePath) {
file.vault.rename(file, response.relativePath);
}
if ((await file.vault.read(file)) !== response.contentBase64) {
// todo - reconcile
}
await database.setDocument({
relativePath: response.relativePath,
documentId: response.documentId,
parentVersionId: response.versionId,
});
}