diff --git a/apps/tauri/src/lib/stores/app.svelte.ts b/apps/tauri/src/lib/stores/app.svelte.ts index f61f5b0..14f8cf4 100644 --- a/apps/tauri/src/lib/stores/app.svelte.ts +++ b/apps/tauri/src/lib/stores/app.svelte.ts @@ -25,6 +25,7 @@ let activeListId = $state(null); let tasks = $state([]); let osDark = globalThis.matchMedia?.("(prefers-color-scheme: dark)").matches ?? false; let syncing = $state(false); +let initialSync = $state(false); let syncStatus = $state<"idle" | "synced" | "error" | "offline">("idle"); let lastSyncResult = $state(null); let error = $state(null); @@ -398,15 +399,23 @@ async function addWebdavWorkspace(name: string, webdavUrl: string, webdavPath: s try { await invoke("add_webdav_workspace", { name, webdavUrl, webdavPath, username, password }); config = await invoke("get_config"); + screen = "tasks"; + error = null; + // Run initial sync before showing content so the workspace isn't empty + initialSync = true; + try { + await triggerSync(); + } finally { + initialSync = false; + } await loadLists(); if (config?.current_workspace) { const ws = config.workspaces[config.current_workspace]; if (ws) invoke("watch_workspace", { path: ws.path }).catch((e) => console.warn("File watcher failed:", e)); } - screen = "tasks"; - error = null; if (isWebdav) startAutoSync(); } catch (e) { + initialSync = false; error = String(e); } } @@ -475,6 +484,9 @@ export const app = { get syncing() { return syncing; }, + get initialSync() { + return initialSync; + }, get syncStatus() { return syncStatus; },