Improve that

This commit is contained in:
Lncvrt committed 2026-03-10 21:39:23 -07:00
1 parent 4054fdd06b
commit a8573c4b6a
3 files changed
+108 -41

No files matched your search

-1
View File
@@ -303,7 +303,6 @@ async fn download(
status: Some(ProgressBarStatus::None), status: Some(ProgressBarStatus::None),
progress: Some(0), progress: Some(0),
}); });
let _ = app.emit("download-cancelled", format!("{}", name));
return "0".to_string(); return "0".to_string();
} }
+17 -22
View File
@@ -297,27 +297,6 @@ export default function RootLayout ({
}) })
}) })
) )
unlisteners.push(
await listen<string>('download-cancelled', event => {
const displayName = event.payload
setDownloadProgress(prev => {
const i = prev.findIndex(d => d.version === displayName)
if (i === -1) return prev
if (prev[i].canceled) {
return prev.filter((_, idx) => idx !== i)
}
const copy = [...prev]
copy[i] = {
...copy[i],
downloading: false,
paused: true,
failed: false
}
return copy
})
})
)
} }
setupListeners() setupListeners()
@@ -518,7 +497,23 @@ export default function RootLayout ({
writeVersionsConfig(updated) writeVersionsConfig(updated)
return updated return updated
}) })
} else if (res !== '0') { } else if (res == '0') {
setDownloadProgress(prev => {
const i = prev.findIndex(d => d.version === info.id)
if (i === -1) return prev
if (prev[i].canceled) {
return prev.filter((_, idx) => idx !== i)
}
const copy = [...prev]
copy[i] = {
...copy[i],
downloading: false,
paused: true,
failed: false
}
return copy
})
} else if (res == '-1') {
setDownloadProgress(prev => setDownloadProgress(prev =>
prev.map(d => prev.map(d =>
d.version === versionId d.version === versionId
+91 -18
View File
@@ -5,6 +5,9 @@ import { formatEtaSmart } from '@/lib/Util'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome' import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
import { faCancel, faPause, faPlay } from '@fortawesome/free-solid-svg-icons' import { faCancel, faPause, faPlay } from '@fortawesome/free-solid-svg-icons'
import { invoke } from '@tauri-apps/api/core' import { invoke } from '@tauri-apps/api/core'
import { writeVersionsConfig } from '@/lib/BazookaManager'
import { notifyUser } from '@/lib/Notifications'
import { getCurrentWindow, UserAttentionType } from '@tauri-apps/api/window'
export default function DownloadsPopup () { export default function DownloadsPopup () {
const { const {
@@ -12,7 +15,9 @@ export default function DownloadsPopup () {
getVersionInfo, getVersionInfo,
setDownloadProgress, setDownloadProgress,
downloadQueue, downloadQueue,
setDownloadQueue setDownloadQueue,
normalConfig,
setDownloadedVersionsConfig
} = useGlobal() } = useGlobal()
return ( return (
@@ -29,26 +34,94 @@ export default function DownloadsPopup () {
<div className='absolute right-2 top-2 flex flex-row gap-2'> <div className='absolute right-2 top-2 flex flex-row gap-2'>
<div <div
className='cursor-pointer bg-(--col5) hover:bg-(--col7) border border-(--col7) hover:border-(--col9) transition-colors w-8 h-8 flex items-center justify-center rounded-full' className='cursor-pointer bg-(--col5) hover:bg-(--col7) border border-(--col7) hover:border-(--col9) transition-colors w-8 h-8 flex items-center justify-center rounded-full'
hidden={!v.downloading} hidden={!v.downloading && !v.paused}
onClick={async () => { onClick={async () => {
await invoke('cancel_download', { name: v.version }) if (v.downloading) {
await invoke('cancel_download', { name: v.version })
} else {
setDownloadProgress(prev => {
const i = prev.findIndex(d => d.version === v.version)
if (i === -1) return prev
const copy = [...prev]
copy[i] = {
...copy[i],
paused: false,
downloading: true
}
return copy
})
const res = await invoke<string>('download', {
url: v.url,
name: v.version,
executable: v.executable,
hash: v.hash
})
if (res === '1') {
setDownloadProgress(prev =>
prev.filter(d => d.version !== v.version)
)
setDownloadedVersionsConfig(prev => {
if (!prev) return prev
const updated = {
...prev,
list: {
...prev.list,
[v.version]: Date.now()
}
}
writeVersionsConfig(updated)
return updated
})
} else if (res == '0') {
setDownloadProgress(prev => {
const i = prev.findIndex(d => d.version === v.version)
if (i === -1) return prev
if (prev[i].canceled) {
return prev.filter((_, idx) => idx !== i)
}
const copy = [...prev]
copy[i] = {
...copy[i],
downloading: false,
paused: true,
failed: false
}
return copy
})
} else if (res == '-1') {
setDownloadProgress(prev =>
prev.map(d =>
d.version === v.version
? {
...d,
queued: false,
failed: true,
progress: 0
}
: d
)
)
if (normalConfig?.settings.allowNotifications)
await notifyUser(
'Download Failed',
`The download for version ${
getVersionInfo(v.version)?.displayName
} has failed.`
)
await getCurrentWindow().requestUserAttention(
UserAttentionType.Critical
)
}
}
}} }}
> >
<FontAwesomeIcon icon={faPause} className='w-6 h-6' /> <FontAwesomeIcon
</div> icon={v.downloading ? faPause : faPlay}
<div className='w-6 h-6'
className='cursor-pointer bg-(--col5) hover:bg-(--col7) border border-(--col7) hover:border-(--col9) transition-colors w-8 h-8 flex items-center justify-center rounded-full' />
hidden={!v.paused}
onClick={async () => {
await invoke<string>('download', {
url: v.url,
name: v.version,
executable: v.executable,
hash: v.hash
})
}}
>
<FontAwesomeIcon icon={faPlay} className='w-6 h-6' />
</div> </div>
<div <div
className='cursor-pointer bg-(--col5) hover:bg-(--col7) border border-(--col7) hover:border-(--col9) transition-colors w-8 h-8 flex items-center justify-center rounded-full' className='cursor-pointer bg-(--col5) hover:bg-(--col7) border border-(--col7) hover:border-(--col9) transition-colors w-8 h-8 flex items-center justify-center rounded-full'