mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2025-12-13 17:55:56 +00:00
- We can perform automatic conflict resolution for inactive files, and postpone only manual ones by `Postpone manual resolution of inactive files`. - Now we can see the image in the document history dialogue. - We can see the difference of the image, in the document history dialogue. - And also we can highlight differences. Improved: - Hidden file sync has been stabilised. - Now automatically reloads the conflict-resolution dialogue when new conflicted revisions have arrived. Fixed: - No longer periodic process runs after unloading the plug-in. - Now the modification of binary files is surely stored in the storage.
67 lines
2.1 KiB
TypeScript
67 lines
2.1 KiB
TypeScript
import { App, Modal } from "./deps";
|
|
import { type FilePath, type LoadedEntry } from "./lib/src/types";
|
|
import JsonResolvePane from "./JsonResolvePane.svelte";
|
|
import { waitForSignal } from "./lib/src/utils";
|
|
|
|
export class JsonResolveModal extends Modal {
|
|
// result: Array<[number, string]>;
|
|
filename: FilePath;
|
|
callback: (keepRev: string, mergedStr?: string) => Promise<void>;
|
|
docs: LoadedEntry[];
|
|
component: JsonResolvePane;
|
|
nameA: string;
|
|
nameB: string;
|
|
defaultSelect: string;
|
|
|
|
constructor(app: App, filename: FilePath, docs: LoadedEntry[], callback: (keepRev: string, mergedStr?: string) => Promise<void>, nameA?: string, nameB?: string, defaultSelect?: string) {
|
|
super(app);
|
|
this.callback = callback;
|
|
this.filename = filename;
|
|
this.docs = docs;
|
|
this.nameA = nameA;
|
|
this.nameB = nameB;
|
|
this.defaultSelect = defaultSelect;
|
|
waitForSignal(`cancel-internal-conflict:${filename}`).then(() => this.close());
|
|
}
|
|
async UICallback(keepRev: string, mergedStr?: string) {
|
|
this.close();
|
|
await this.callback(keepRev, mergedStr);
|
|
this.callback = null;
|
|
}
|
|
|
|
onOpen() {
|
|
const { contentEl } = this;
|
|
this.titleEl.setText("Conflicted Setting");
|
|
contentEl.empty();
|
|
|
|
if (this.component == null) {
|
|
this.component = new JsonResolvePane({
|
|
target: contentEl,
|
|
props: {
|
|
docs: this.docs,
|
|
filename: this.filename,
|
|
nameA: this.nameA,
|
|
nameB: this.nameB,
|
|
defaultSelect: this.defaultSelect,
|
|
callback: (keepRev: string, mergedStr: string) => this.UICallback(keepRev, mergedStr),
|
|
},
|
|
});
|
|
}
|
|
return;
|
|
}
|
|
|
|
|
|
onClose() {
|
|
const { contentEl } = this;
|
|
contentEl.empty();
|
|
// contentEl.empty();
|
|
if (this.callback != null) {
|
|
this.callback(null);
|
|
}
|
|
if (this.component != null) {
|
|
this.component.$destroy();
|
|
this.component = null;
|
|
}
|
|
}
|
|
}
|