Improve that
This commit is contained in:
3 files changed
+108
-41
No files matched your search
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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'
|
||||||
|
|||||||
Reference in new issue
Block a user