diff --git a/src/lib b/src/lib index 790b90f..b19f087 160000 --- a/src/lib +++ b/src/lib @@ -1 +1 @@ -Subproject commit 790b90f1a1512fd50f6e87901bdca0f423d108cd +Subproject commit b19f0875991a74945db089a3600d7d2469df82c0 diff --git a/src/modules/core/ModuleReplicator.ts b/src/modules/core/ModuleReplicator.ts index 622d13f..34a6f55 100644 --- a/src/modules/core/ModuleReplicator.ts +++ b/src/modules/core/ModuleReplicator.ts @@ -44,7 +44,9 @@ async function canReplicateWithPBKDF2( return false; } errorManager.clearError(errorMessage); - const ensureMessage = "Failed to initialise the encryption key, preventing replication."; + // Showing message is false: that because be shown here. (And it is a fatal error, no way to hide it). + // tagged as network error at beginning for error filtering with NetworkWarningStyles + const ensureMessage = "\u{200b}Failed to initialise the encryption key, preventing replication."; const ensureResult = await replicator.ensurePBKDF2Salt(currentSettings, showMessage, true); if (!ensureResult) { errorManager.showError(ensureMessage, showMessage ? LOG_LEVEL_NOTICE : LOG_LEVEL_INFO); diff --git a/src/modules/essentialObsidian/ModuleObsidianAPI.ts b/src/modules/essentialObsidian/ModuleObsidianAPI.ts index ac52c1b..d19bb1e 100644 --- a/src/modules/essentialObsidian/ModuleObsidianAPI.ts +++ b/src/modules/essentialObsidian/ModuleObsidianAPI.ts @@ -236,7 +236,7 @@ export class ModuleObsidianAPI extends AbstractObsidianModule { } catch (ex: any) { this._log(`HTTP:${method}${size} to:${localURL} -> failed`, LOG_LEVEL_VERBOSE); const msg = ex instanceof Error ? `${ex?.name}:${ex?.message}` : ex?.toString(); - this.showError(`Failed to fetch: ${msg}`); // Do not show notice, due to throwing below + this.showError(`\u{200b}Network Error: Failed to fetch: ${msg}`); // Do not show notice, due to throwing below this._log(ex, LOG_LEVEL_VERBOSE); // limit only in bulk_docs. if (url.toString().indexOf("_bulk_docs") !== -1) { diff --git a/src/modules/features/ModuleLog.ts b/src/modules/features/ModuleLog.ts index ce674bf..e743a10 100644 --- a/src/modules/features/ModuleLog.ts +++ b/src/modules/features/ModuleLog.ts @@ -40,6 +40,7 @@ import { isValidFilenameInWidows, } from "@lib/string_and_binary/path.ts"; import { MARK_LOG_SEPARATOR } from "@lib/services/lib/logUtils.ts"; +import { NetworkWarningStyles } from "@lib/common/models/setting.const.ts"; // This module cannot be a core module because it depends on the Obsidian UI. @@ -282,7 +283,20 @@ export class ModuleLog extends AbstractObsidianModule { const fileStatus = this.activeFileStatus.value; if (fileStatus && !this.settings.hideFileWarningNotice) messageLines.push(fileStatus); const messages = (await this.services.appLifecycle.getUnresolvedMessages()).flat().filter((e) => e); - messageLines.push(...messages); + const stringMessages = messages.filter((m): m is string => typeof m === "string"); // for 'startsWith' + const networkMessages = stringMessages.filter((m) => m.startsWith("\u{200b}")); + const otherMessages = stringMessages.filter((m) => !m.startsWith("\u{200b}")); + + messageLines.push(...otherMessages); + + if ( + this.settings.networkWarningStyle !== NetworkWarningStyles.ICON && + this.settings.networkWarningStyle !== NetworkWarningStyles.HIDDEN + ) { + messageLines.push(...networkMessages); + } else if (this.settings.networkWarningStyle === NetworkWarningStyles.ICON) { + if (networkMessages.length > 0) messageLines.push("🔗❌"); + } this.messageArea.innerText = messageLines.map((e) => `⚠️ ${e}`).join("\n"); } } diff --git a/src/modules/features/SettingDialogue/PaneGeneral.ts b/src/modules/features/SettingDialogue/PaneGeneral.ts index 0a92b7b..213d27a 100644 --- a/src/modules/features/SettingDialogue/PaneGeneral.ts +++ b/src/modules/features/SettingDialogue/PaneGeneral.ts @@ -4,6 +4,8 @@ import { LiveSyncSetting as Setting } from "./LiveSyncSetting.ts"; import type { ObsidianLiveSyncSettingTab } from "./ObsidianLiveSyncSettingTab.ts"; import type { PageFunctions } from "./SettingPane.ts"; import { visibleOnly } from "./SettingPane.ts"; +import { EVENT_ON_UNRESOLVED_ERROR, eventHub } from "@/common/events.ts"; +import { NetworkWarningStyles } from "@lib/common/models/setting.const.ts"; export function paneGeneral( this: ObsidianLiveSyncSettingTab, paneEl: HTMLElement, @@ -24,6 +26,16 @@ export function paneGeneral( }); new Setting(paneEl).autoWireToggle("showStatusOnStatusbar"); new Setting(paneEl).autoWireToggle("hideFileWarningNotice"); + new Setting(paneEl).autoWireDropDown("networkWarningStyle", { + options: { + [NetworkWarningStyles.BANNER]: "Show full banner", + [NetworkWarningStyles.ICON]: "Show icon only", + [NetworkWarningStyles.HIDDEN]: "Hide completely", + }, + }); + this.addOnSaved("networkWarningStyle", () => { + eventHub.emitEvent(EVENT_ON_UNRESOLVED_ERROR); + }); }); void addPanel(paneEl, $msg("obsidianLiveSyncSettingTab.titleLogging")).then((paneEl) => { paneEl.addClass("wizardHidden");