mirror of
https://github.com/vrtmrz/obsidian-livesync.git
synced 2026-08-20 02:17:05 +00:00
55 lines
3.3 KiB
TypeScript
55 lines
3.3 KiB
TypeScript
import type { CompatibilityPause, CompatibilityPauseReason } from "@/common/databaseCompatibility.ts";
|
|
|
|
export function compatibilityReviewSummaryMarkdown(pause: CompatibilityPause): string {
|
|
const action = !pause.resumable
|
|
? "This installation cannot safely acknowledge the detected state. Update Self-hosted LiveSync before attempting to synchronise again."
|
|
: "Before resuming, review the compatibility details and update Self-hosted LiveSync on every device which uses this remote database.";
|
|
return `Remote synchronisation is paused on this device because its compatibility state requires attention.
|
|
|
|
${action}
|
|
|
|
Your automatic synchronisation preferences have not been changed. Closing this dialogue keeps synchronisation paused.`;
|
|
}
|
|
|
|
function reasonMarkdown(reason: CompatibilityPauseReason): string {
|
|
if (reason.source === "database-version") {
|
|
if (reason.state === "upgrade") {
|
|
return `- The last acknowledged internal database version was **${reason.acknowledgedVersion}** and this installation uses **${reason.currentVersion}**.`;
|
|
}
|
|
if (reason.state === "downgrade") {
|
|
return `- This installation uses internal database version **${reason.currentVersion}**, but this device previously acknowledged newer version **${reason.acknowledgedVersion}**. An older installation must not resume synchronisation.`;
|
|
}
|
|
if (reason.state === "missing") {
|
|
return `- No previously acknowledged internal database version was found for this existing Vault. This can happen when a Vault is copied or restored, or when it is opened with a new Obsidian profile. This installation uses version **${reason.currentVersion}**. An empty local database does not mean that it is safe to resume automatically.`;
|
|
}
|
|
return `- The saved internal database version marker is invalid. This installation uses version **${reason.currentVersion}**.`;
|
|
}
|
|
if (reason.source === "settings-schema") {
|
|
if (reason.isFromFutureSchema) {
|
|
return `- The saved settings use schema **${reason.sourceVersion}**, which is newer than schema **${reason.currentVersion}** supported by this installation.`;
|
|
}
|
|
return `- The settings were migrated from schema **${reason.sourceVersion}** to **${reason.currentVersion}** and require review before synchronisation resumes.`;
|
|
}
|
|
const escapedMessage = reason.message.replace(/[\\`*_{}[\]()<>#+.!|-]/gu, "\\$&");
|
|
return `- An earlier compatibility review remains pending: ${escapedMessage}`;
|
|
}
|
|
|
|
export function compatibilityReviewDetailsMarkdown(pause: CompatibilityPause): string {
|
|
const resolution = !pause.resumable
|
|
? "Install a compatible current version of Self-hosted LiveSync. This pause cannot be dismissed by the current installation."
|
|
: "After all devices have been updated, return to the compatibility review summary and explicitly resume synchronisation. The current internal version will only then be recorded as acknowledged.";
|
|
return `## Why synchronisation is paused
|
|
|
|
${pause.reasons.map(reasonMarkdown).join("\n")}
|
|
|
|
## What the pause changes
|
|
|
|
- Remote replication is blocked before work begins.
|
|
- Your saved automatic synchronisation preferences remain unchanged.
|
|
- Closing either dialogue leaves the safety gate active.
|
|
|
|
## What to do next
|
|
|
|
${resolution}`;
|
|
}
|