Merge pull request #121 from RSS1102/RSS1102-main

chore : electron-auto-update refinement
This commit is contained in:
草鞋没号 2023-03-09 18:39:15 +08:00 committed by GitHub
commit 2c52f297cb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 33 deletions

View File

@ -52,7 +52,6 @@ export function update(win: Electron.BrowserWindow) {
} }
) )
}) })
// Install now // Install now
ipcMain.handle('quit-and-install', () => { ipcMain.handle('quit-and-install', () => {
autoUpdater.quitAndInstall(false, true) autoUpdater.quitAndInstall(false, true)

View File

@ -11,10 +11,10 @@ const Progress: React.FC<React.PropsWithChildren<{
<div className='progress-pr'> <div className='progress-pr'>
<div <div
className='progress-rate' className='progress-rate'
style={{ width: `${percent / 100}%` }} style={{ width: `${percent}%` }}
/> />
</div> </div>
<span className='progress-num'>{percent}%</span> <span className='progress-num'>{(percent ?? 0).toString().substring(0,4)}%</span>
</div> </div>
) )
} }

View File

@ -7,6 +7,7 @@
border: 1px solid #000; border: 1px solid #000;
border-radius: 3px; border-radius: 3px;
height: 6px; height: 6px;
width: 100px;
} }
.progress-rate { .progress-rate {

View File

@ -28,14 +28,12 @@ const Update = () => {
* @type {import('electron-updater').UpdateCheckResult | null | { message: string, error: Error }} * @type {import('electron-updater').UpdateCheckResult | null | { message: string, error: Error }}
*/ */
const result = await ipcRenderer.invoke('check-update') const result = await ipcRenderer.invoke('check-update')
setProgressInfo({ percent: 0 })
setChecking(false) setChecking(false)
setModalOpen(true)
if (result?.error) { if (result?.error) {
console.error(result.error)
setUpdateAvailable(false) setUpdateAvailable(false)
} else { setUpdateError(result?.error)
setUpdateAvailable(true)
setModalOpen(true)
} }
} }
@ -50,20 +48,27 @@ const Update = () => {
onCancel: () => setModalOpen(false), onCancel: () => setModalOpen(false),
onOk: () => ipcRenderer.invoke('start-download'), onOk: () => ipcRenderer.invoke('start-download'),
})) }))
setUpdateAvailable(true)
} else {
setUpdateAvailable(false)
setUpdateError(undefined)
} }
}, []) }, [])
const onUpdateError = useCallback((_event: Electron.IpcRendererEvent, arg1: ErrorType) => { const onUpdateError = useCallback((_event: Electron.IpcRendererEvent, arg1: ErrorType) => {
console.error(arg1.error) console.error('arg1.error',arg1.error)
setUpdateAvailable(false)
setUpdateError(arg1) setUpdateError(arg1)
}, []) }, [])
const onDownloadProgress = useCallback((_event: Electron.IpcRendererEvent, arg1: ProgressInfo) => { const onDownloadProgress = useCallback((_event: Electron.IpcRendererEvent, arg1: ProgressInfo) => {
console.log(arg1) console.log(arg1)
setUpdateAvailable(true)
setProgressInfo(arg1) setProgressInfo(arg1)
}, []) }, [])
const onUpdateDownloaded = useCallback((_event: Electron.IpcRendererEvent, ...args: any[]) => { const onUpdateDownloaded = useCallback((_event: Electron.IpcRendererEvent, ...args: any[]) => {
setProgressInfo({ percent: 100 })
setModalBtn(state => ({ setModalBtn(state => ({
...state, ...state,
cancelText: 'Later', cancelText: 'Later',
@ -87,6 +92,8 @@ const Update = () => {
} }
}, []) }, [])
const isUpdate = updateAvailable && versionInfo
return ( return (
<> <>
<Modal <Modal
@ -95,34 +102,35 @@ const Update = () => {
okText={modalBtn?.okText} okText={modalBtn?.okText}
onCancel={modalBtn?.onCancel} onCancel={modalBtn?.onCancel}
onOk={modalBtn?.onOk} onOk={modalBtn?.onOk}
footer={!versionInfo?.update ? /* hide footer */null : undefined} footer={isUpdate ? /* hide footer */null : undefined}
> >
<div className={styles.modalslot}> <div className={styles.modalslot}>
{updateError ? ( {
<div className='update-error'> isUpdate
<p>Error downloading the latest version.</p> ? (
<p>{updateError.message}</p> <div>
</div> <div>The last version is: v{versionInfo.newVersion}</div>
) : null} <div>v{versionInfo.version} -&gt; v{versionInfo.newVersion}</div>
{!updateAvailable ? ( <div className='update-progress'>
<div className='update-not-available'> <div className='progress-title'>Update progress:</div>
<span>Check update is Error, Please check your Network!</span> <div className='progress-bar'>
</div> <Progress percent={progressInfo?.percent} ></Progress>
) : null} </div>
{versionInfo
? (
<div>
<div>The last version is: v{versionInfo.newVersion}</div>
<div>v{versionInfo.version} -&gt; v{versionInfo.newVersion}</div>
<div className='update-progress'>
<div className='progress-title'>Update progress:</div>
<div className='progress-bar'>
<Progress percent={progressInfo?.percent} ></Progress>
</div> </div>
</div> </div>
</div> )
) : updateError
: <span>Checking...</span>} ? (
<div className='update-error'>
<p>Error downloading the latest version.</p>
<p>{updateError.message}</p>
</div>
) : (
<div>
<div>The last version is: v{versionInfo?.version}</div>
</div>
)
}
</div> </div>
</Modal> </Modal>
<button disabled={checking} onClick={checkUpdate}> <button disabled={checking} onClick={checkUpdate}>