Skip to content

Commit

Permalink
fix(updater): Add global download promise to limit concurrent update …
Browse files Browse the repository at this point in the history
…downloads to 1 (#8378)
  • Loading branch information
s77rt committed Jul 25, 2024
1 parent afd8132 commit c8fe146
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 12 deletions.
5 changes: 5 additions & 0 deletions .changeset/green-brooms-mix.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"electron-updater": patch
---

Limit concurrent downloads to 1
34 changes: 22 additions & 12 deletions packages/electron-updater/src/AppUpdater.ts
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,7 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter
configOnDisk = new Lazy<any>(() => this.loadUpdateConfig())

private checkForUpdatesPromise: Promise<UpdateCheckResult> | null = null
private downloadPromise: Promise<Array<string>> | null = null

protected readonly app: AppAdapter

Expand Down Expand Up @@ -452,7 +453,9 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter
const updateInfo = result.info
if (!(await this.isUpdateAvailable(updateInfo))) {
this._logger.info(
`Update for version ${this.currentVersion.format()} is not available (latest version: ${updateInfo.version}, downgrade is ${this.allowDowngrade ? "allowed" : "disallowed"}).`
`Update for version ${this.currentVersion.format()} is not available (latest version: ${updateInfo.version}, downgrade is ${
this.allowDowngrade ? "allowed" : "disallowed"
}).`
)
this.emit("update-not-available", updateInfo)
return {
Expand Down Expand Up @@ -495,6 +498,11 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter
return Promise.reject(error)
}

if (this.downloadPromise != null) {
this._logger.info("Downloading update (already in progress)")
return this.downloadPromise
}

this._logger.info(
`Downloading update from ${asArray(updateInfoAndProvider.info.files)
.map(it => it.url)
Expand All @@ -513,19 +521,21 @@ export abstract class AppUpdater extends (EventEmitter as new () => TypedEmitter
return e
}

try {
return this.doDownloadUpdate({
updateInfoAndProvider,
requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider),
cancellationToken,
disableWebInstaller: this.disableWebInstaller,
disableDifferentialDownload: this.disableDifferentialDownload,
}).catch((e: any) => {
this.downloadPromise = this.doDownloadUpdate({
updateInfoAndProvider,
requestHeaders: this.computeRequestHeaders(updateInfoAndProvider.provider),
cancellationToken,
disableWebInstaller: this.disableWebInstaller,
disableDifferentialDownload: this.disableDifferentialDownload,
})
.catch((e: any) => {
throw errorHandler(e)
})
} catch (e: any) {
return Promise.reject(errorHandler(e))
}
.finally(() => {
this.downloadPromise = null
})

return this.downloadPromise
}

protected dispatchError(e: Error): void {
Expand Down

0 comments on commit c8fe146

Please sign in to comment.