diff --git a/src/common/JsonFileManager.ts b/src/common/JsonFileManager.ts index 2a6a2920..b366180d 100644 --- a/src/common/JsonFileManager.ts +++ b/src/common/JsonFileManager.ts @@ -31,9 +31,9 @@ export default class JsonFileManager { }); } - setJson(json: T): void { + async setJson(json: T): Promise { this.json = json; - this.writeToFile(); + await this.writeToFile(); } setValue(key: keyof T, value: T[keyof T]): void { diff --git a/src/main/autoUpdater.test.js b/src/main/autoUpdater.test.js index 50edaad0..93a759a5 100644 --- a/src/main/autoUpdater.test.js +++ b/src/main/autoUpdater.test.js @@ -52,6 +52,9 @@ jest.mock('main/i18nManager', () => ({ localizeMessage: jest.fn(), })); +jest.mock('main/downloadsManager', () => ({ + removeUpdateBeforeRestart: jest.fn(), +})); describe('main/autoUpdater', () => { describe('constructor', () => { afterEach(() => { diff --git a/src/main/autoUpdater.ts b/src/main/autoUpdater.ts index f32cf363..95d93507 100644 --- a/src/main/autoUpdater.ts +++ b/src/main/autoUpdater.ts @@ -8,6 +8,7 @@ import log from 'electron-log'; import {autoUpdater, CancellationToken, ProgressInfo, UpdateInfo} from 'electron-updater'; +import downloadsManager from 'main/downloadsManager'; import {localizeMessage} from 'main/i18nManager'; import {displayUpgrade, displayRestartToUpgrade} from 'main/notifications'; @@ -140,7 +141,8 @@ export class UpdateManager { } } - handleUpdate = (): void => { + handleUpdate = async (): Promise => { + await downloadsManager.removeUpdateBeforeRestart(); autoUpdater.quitAndInstall(); } diff --git a/src/main/downloadsManager.ts b/src/main/downloadsManager.ts index 41bc8bf3..16e96591 100644 --- a/src/main/downloadsManager.ts +++ b/src/main/downloadsManager.ts @@ -292,6 +292,12 @@ export class DownloadsManager extends JsonFileManager { return Boolean(this.downloads[APP_UPDATE_KEY]?.type === DownloadItemTypeEnum.UPDATE); } + removeUpdateBeforeRestart = async () => { + const downloads = this.downloads; + delete downloads[APP_UPDATE_KEY]; + await this.saveAll(downloads); + } + private markFileAsDeleted = (item: DownloadedItem) => { const fileId = this.getDownloadedFileId(item); const file = this.downloads[fileId]; @@ -306,11 +312,11 @@ export class DownloadsManager extends JsonFileManager { } } - private saveAll = (downloads: DownloadedItems) => { + private saveAll = async (downloads: DownloadedItems) => { log.debug('DownloadsManager.saveAll'); this.downloads = downloads; - this.setJson(downloads); + await this.setJson(downloads); ipcMain.emit(UPDATE_DOWNLOADS_DROPDOWN, true, this.downloads); WindowManager?.sendToRenderer(UPDATE_DOWNLOADS_DROPDOWN, this.downloads); }