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