diff --git a/v2/src/lib/components/Workspace/ProjectBox.svelte b/v2/src/lib/components/Workspace/ProjectBox.svelte index dc51e91..209a70b 100644 --- a/v2/src/lib/components/Workspace/ProjectBox.svelte +++ b/v2/src/lib/components/Workspace/ProjectBox.svelte @@ -15,7 +15,7 @@ import { getProjectHealth } from '../../stores/health.svelte'; import { fsWatchProject, fsUnwatchProject, onFsWriteDetected, fsWatcherStatus } from '../../adapters/fs-watcher-bridge'; import { recordExternalWrite } from '../../stores/conflicts.svelte'; - import { notify } from '../../stores/notifications.svelte'; + import { notify, dismissNotification } from '../../stores/notifications.svelte'; interface Props { project: ProjectConfig; @@ -59,16 +59,26 @@ if (!cwd) return; // Start watching, then check inotify capacity + // Show scanning toast only if status check takes >300ms + let scanToastId: string | null = null; + const scanTimer = setTimeout(() => { + scanToastId = notify('info', 'Scanning project directories…'); + }, 300); + fsWatchProject(projectId, cwd) .then(() => fsWatcherStatus()) .then((status) => { + clearTimeout(scanTimer); + if (scanToastId) dismissNotification(scanToastId); if (status.warning) { notify('warning', status.warning); } }) - .catch(e => - console.warn(`Failed to start fs watcher for ${projectId}:`, e) - ); + .catch(e => { + clearTimeout(scanTimer); + if (scanToastId) dismissNotification(scanToastId); + console.warn(`Failed to start fs watcher for ${projectId}:`, e); + }); // Listen for fs write events (filter to this project) let unlisten: (() => void) | null = null; diff --git a/v2/src/lib/stores/notifications.svelte.ts b/v2/src/lib/stores/notifications.svelte.ts index 6ed0b13..e8c9364 100644 --- a/v2/src/lib/stores/notifications.svelte.ts +++ b/v2/src/lib/stores/notifications.svelte.ts @@ -18,7 +18,7 @@ export function getNotifications(): Notification[] { return notifications; } -export function notify(type: NotificationType, message: string): void { +export function notify(type: NotificationType, message: string): string { const id = crypto.randomUUID(); notifications.push({ id, type, message, timestamp: Date.now() }); @@ -29,6 +29,8 @@ export function notify(type: NotificationType, message: string): void { // Auto-dismiss setTimeout(() => dismissNotification(id), TOAST_DURATION_MS); + + return id; } export function dismissNotification(id: string): void {