Extract the Journal skip command and clarify manual recovery

This commit is contained in:
vorotamoroz committed 2026-11-05 02:44:18 +00:00
1 parent a94c3fef90
commit 3a7f3029a3
6 files changed
+307 -61

No files matched your search

@@ -9,7 +9,7 @@ import { LOG_LEVEL_NOTICE, Logger } from "@vrtmrz/livesync-commonlib/compat/comm
import { FlagFilesHumanReadable, FlagFilesOriginal } from "@vrtmrz/livesync-commonlib/compat/common/types";
import { fireAndForget } from "@vrtmrz/livesync-commonlib/compat/common/utils";
import { LiveSyncCouchDBReplicator } from "@vrtmrz/livesync-commonlib/compat/replication/couchdb/LiveSyncReplicator";
import { LiveSyncJournalReplicator } from "@vrtmrz/livesync-commonlib/compat/replication/journal/LiveSyncJournalReplicator";
import { isLiveSyncJournalReplicator } from "@vrtmrz/livesync-commonlib/compat/replication/journal/LiveSyncJournalReplicator";
import type { StoppedJournal } from "@vrtmrz/livesync-commonlib/compat/replication/journal/JournalSyncTypes";
import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts";
import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab";
@@ -154,6 +154,9 @@ export function paneMaintenance(
)
.addOnUpdate(this.onlyOnCouchDB);
// Offer manual recovery after Journal receipt stops on a failure. Normal retries
// revisit the same Journal; this action confirms and skips only that Journal,
// resumes receipt, and still stops at the next Journal failure.
new Setting(paneEl)
.setName($msg("Skip stopped Journal and resume"))
.setDesc(
@@ -167,7 +170,7 @@ export function paneMaintenance(
.setDisabled(false)
.onClick(async () => {
const replicator = this.core.replicator;
if (!(replicator instanceof LiveSyncJournalReplicator)) {
if (!isLiveSyncJournalReplicator(replicator)) {
new Notice(
$msg(
"No stopped Journal is available. Retry replication to identify the stopped Journal."
@@ -51,9 +51,13 @@ vi.mock("@vrtmrz/livesync-commonlib/compat/common/utils", () => ({
vi.mock("@vrtmrz/livesync-commonlib/compat/replication/couchdb/LiveSyncReplicator", () => ({
LiveSyncCouchDBReplicator: class {},
}));
vi.mock("@vrtmrz/livesync-commonlib/compat/replication/journal/LiveSyncJournalReplicator", () => ({
LiveSyncJournalReplicator: class {},
}));
vi.mock("@vrtmrz/livesync-commonlib/compat/replication/journal/LiveSyncJournalReplicator", () => {
class LiveSyncJournalReplicator {}
return {
LiveSyncJournalReplicator,
isLiveSyncJournalReplicator: (value: unknown) => value instanceof LiveSyncJournalReplicator,
};
});
vi.mock("./LiveSyncSetting.ts", () => ({
LiveSyncSetting: class {
name = "";