Add push operations to plugin

This commit is contained in:
Andras Schmelczer 2024-12-12 22:17:59 +00:00
commit 9ce8245abc
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C

View file

@ -1,29 +1,48 @@
import * as lib from "../../../backend/sync_lib/pkg/sync_lib.js";
import { TFile } from "obsidian";
import { Database } from "src/database/database";
import { Logger } from "src/logger.js";
import { SyncServer } from "src/services/sync_service";
import { hash } from "src/utils";
export async function syncNewLocalFile(
database: Database,
syncServer: SyncServer,
file: TFile
) {
const response = await syncServer.create({
const contentBytes = new Uint8Array(await file.vault.readBinary(file));
const responsePromise = syncServer.create({
relativePath: file.path,
content: await file.vault.readBinary(file),
contentBytes,
createdDate: new Date(file.stat.ctime),
});
if (file.path !== response.relativePath) {
file.vault.rename(file, response.relativePath);
}
const contentHash = hash(contentBytes);
const response = await responsePromise;
if ((await file.vault.read(file)) !== response.contentBase64) {
// todo - reconcile
}
await database.setDocument({
const localDbUpdatePromise = database.setDocument({
relativePath: response.relativePath,
documentId: response.documentId,
parentVersionId: response.versionId,
hash: contentHash,
});
if (file.path !== response.relativePath) {
await file.vault.rename(file, response.relativePath);
}
const newContentBytes = new Uint8Array(await file.vault.readBinary(file));
const responseBytes = lib.base64_to_bytes(response.contentBase64);
if (contentBytes !== newContentBytes) {
Logger.getInstance().info(
`Content changed since sending original create request for ${file.path}`
);
const result = lib.merge(contentBytes, newContentBytes, responseBytes);
await file.vault.modifyBinary(file, result);
}
await localDbUpdatePromise;
}