diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index b5b00d2..7717235 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -19,6 +19,8 @@ "core:window:allow-is-maximized", "core:window:allow-start-dragging", "core:window:allow-toggle-maximize", + "core:window:allow-request-user-attention", + "core:window:allow-set-progress-bar", "decorum:allow-show-snap-overlay", "fs:default", "dialog:default", diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 050465b..83b9888 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -37,6 +37,11 @@ import DownloadsPopup from '@/componets/popups/Downloads' import VersionVersionPopup from '@/componets/popups/VersionVersion' import { fetch } from '@tauri-apps/plugin-http' import { verifySignature } from '@/lib/Util' +import { + getCurrentWindow, + ProgressBarStatus, + UserAttentionType +} from '@tauri-apps/api/window' const roboto = Roboto({ subsets: ['latin'] @@ -197,7 +202,7 @@ export default function RootLayout ({ }) }).then(f => (unlistenProgress = f)) - listen('download-progress', event => { + listen('download-progress', async event => { const [displayName, progStr, totalSizeStr, speedStr, etaSecsStr] = event.payload.split(':') const prog = Number(progStr) @@ -217,6 +222,10 @@ export default function RootLayout ({ } return copy }) + getCurrentWindow().setProgressBar({ + status: ProgressBarStatus.Normal, + progress: Math.floor(prog) + }) }).then(f => (unlistenProgress = f)) listen('download-hash-checking', event => { @@ -244,7 +253,7 @@ export default function RootLayout ({ return () => { unlistenProgress?.() } - }, []) + }, [downloadProgress]) useEffect(() => { ;(async () => { @@ -387,6 +396,9 @@ export default function RootLayout ({ 'Download Failed', `The download for version ${info.displayName} has failed.` ) + await getCurrentWindow().requestUserAttention( + UserAttentionType.Critical + ) return } @@ -426,6 +438,9 @@ export default function RootLayout ({ 'Download Failed', `The download for version ${info.displayName} has failed.` ) + await getCurrentWindow().requestUserAttention( + UserAttentionType.Critical + ) } setDownloadQueue(prev => prev.slice(1)) @@ -451,6 +466,15 @@ export default function RootLayout ({ ) { notifyUser('Downloads Finished', 'All downloads have finished.') setTimeout(() => closePopup(), 0) + ;(async () => { + await getCurrentWindow().setProgressBar({ + status: ProgressBarStatus.None, + progress: 0 + }) + await getCurrentWindow().requestUserAttention( + UserAttentionType.Informational + ) + })() } previousQueueLength.current = downloadQueue.length + downloadProgress.length }, [