Fix listener issues

This commit is contained in:
2025-08-28 22:56:36 -07:00
parent ac1374038c
commit aec58cdbea

View File

@@ -185,10 +185,14 @@ export default function RootLayout ({
}, [])
useEffect(() => {
const unlistenProgress = listen<string>('download-progress', event => {
let unlistenProgress: (() => void) | null = null
let unlistenDone: (() => void) | null = null
let unlistenFailed: (() => void) | null = null
let unlistenUninstalled: (() => void) | null = null
listen<string>('download-progress', event => {
const [versionName, progStr] = event.payload.split(':')
const prog = Number(progStr)
setDownloadProgress(prev => {
const i = prev.findIndex(d => d.version.version === versionName)
if (i === -1) return prev
@@ -196,48 +200,55 @@ export default function RootLayout ({
copy[i] = { ...copy[i], progress: prog }
return copy
})
})
}).then(f => (unlistenProgress = f))
const unlistenDone = listen<string>('download-done', async event => {
listen<string>('download-done', event => {
const versionName = event.payload
setDownloadProgress(prev => {
const downloaded = prev.find(d => d.version.version === versionName)
if (downloaded && downloadedVersionsConfig) {
if (!downloaded) return prev
setDownloadedVersionsConfig(prevConfig => {
if (!prevConfig) return prevConfig
const newDownloaded = DownloadedVersion.import(downloaded.version)
const updatedConfig = {
...downloadedVersionsConfig,
list: [...downloadedVersionsConfig.list, newDownloaded]
...prevConfig,
list: [...prevConfig.list, newDownloaded]
}
setDownloadedVersionsConfig(updatedConfig)
writeVersionsConfig(updatedConfig)
}
return prev.filter(d => d.version.version !== versionName)
})
activeDownloads.current--
runNext()
if (downloadProgress.length === 0) {
await notifyUser('Downloads Complete', 'All downloads have completed.')
}
return updatedConfig
})
const unlistenFailed = listen<string>('download-failed', async event => {
return prev.filter(d => d.version.version !== versionName)
})
activeDownloads.current--
runNext()
setDownloadProgress(curr => {
if (curr.length === 0)
notifyUser('Downloads Complete', 'All downloads have completed.')
return curr
})
}).then(f => (unlistenDone = f))
listen<string>('download-failed', async event => {
const versionName = event.payload
setDownloadProgress(prev =>
prev.map(d =>
d.version.version === versionName ? { ...d, failed: true } : d
)
)
activeDownloads.current--
runNext()
await notifyUser(
'Download Failed',
`The download for version ${versionName} has failed.`
)
})
}).then(f => (unlistenFailed = f))
const unlistenUninstalled = listen<string>(
'version-uninstalled',
async event => {
listen<string>('version-uninstalled', event => {
const versionName = event.payload
setDownloadedVersionsConfig(prev => {
if (!prev) return prev
@@ -251,16 +262,15 @@ export default function RootLayout ({
setTimeout(() => setShowPopup(false), 200)
return updatedConfig
})
}
)
}).then(f => (unlistenUninstalled = f))
return () => {
unlistenProgress.then(f => f())
unlistenDone.then(f => f())
unlistenFailed.then(f => f())
unlistenUninstalled.then(f => f())
unlistenProgress?.()
unlistenDone?.()
unlistenFailed?.()
unlistenUninstalled?.()
}
}, [downloadedVersionsConfig, downloadProgress, notifyUser])
}, [notifyUser])
useEffect(() => {
const handler = (e: MouseEvent) => e.preventDefault()