From 8f23c8ad48987fe33e8c51a00d248759195549c6 Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 17 May 2021 15:22:13 -0500 Subject: [PATCH 1/3] Add some error handling for various new odd states related to tbc update --- wowup-electron/package-lock.json | 2 +- .../addon-providers/wowup-addon-provider.ts | 22 ++++++++++------ .../pages/get-addons/get-addons.component.ts | 12 ++++++++- .../src/app/services/addons/addon.service.ts | 25 ++++++++++++++++--- 4 files changed, 49 insertions(+), 12 deletions(-) diff --git a/wowup-electron/package-lock.json b/wowup-electron/package-lock.json index 03f3b34b..5e08a5f8 100644 --- a/wowup-electron/package-lock.json +++ b/wowup-electron/package-lock.json @@ -1,6 +1,6 @@ { "name": "wowup", - "version": "2.2.0", + "version": "2.2.1", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts index 2090cecd..1f5cffec 100644 --- a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts @@ -177,11 +177,21 @@ export class WowUpAddonProvider extends AddonProvider { for (const scanResult of scanResults) { // Wowup can deliver the wrong result sometimes, ensure the result matches the client type - scanResult.exactMatch = fingerprintResponse.exactMatches.find( - (exactMatch) => - this.isGameType(exactMatch.matched_release, installation.clientType) && - this.hasMatchingFingerprint(scanResult, exactMatch.matched_release) + const fingerprintMatches = fingerprintResponse.exactMatches.filter((exactMatch) => + this.hasMatchingFingerprint(scanResult, exactMatch.matched_release) ); + + // Wowup can deliver the wrong result sometimes, ensure the result matches the client type + let clientMatch = fingerprintMatches.find((exactMatch) => + this.isGameType(exactMatch.matched_release, installation.clientType) + ); + + if (!clientMatch && fingerprintMatches.length > 0) { + console.warn(`No matching client type found for ${scanResult.folderName}, using fallback`); + clientMatch = fingerprintMatches[0]; + } + + scanResult.exactMatch = clientMatch; } for (const addonFolder of addonFolders) { @@ -271,9 +281,7 @@ export class WowUpAddonProvider extends AddonProvider { } private getSearchResult(representation: WowUpAddonRepresentation, clientType: WowClientType): AddonSearchResult { - const wowGameType = this.getWowGameType(clientType); - const clientReleases = _.filter(representation.releases, (release) => release.game_type === wowGameType); - const searchResultFiles: AddonSearchResultFile[] = _.map(clientReleases, (release) => + const searchResultFiles: AddonSearchResultFile[] = _.map(representation.releases, (release) => this.getSearchResultFile(release) ); diff --git a/wowup-electron/src/app/pages/get-addons/get-addons.component.ts b/wowup-electron/src/app/pages/get-addons/get-addons.component.ts index c1d9643a..ff772b5b 100644 --- a/wowup-electron/src/app/pages/get-addons/get-addons.component.ts +++ b/wowup-electron/src/app/pages/get-addons/get-addons.component.ts @@ -507,7 +507,17 @@ export class GetAddonsComponent implements OnInit, OnDestroy { } private formatAddons(addons: AddonSearchResult[]): GetAddonListItem[] { - const addonList = addons.map((addon) => new GetAddonListItem(addon, this.defaultAddonChannel)); + const addonList = addons + .map((addon) => { + try { + return new GetAddonListItem(addon, this.defaultAddonChannel); + } catch (e) { + console.error(e); + console.error(addon); + } + }) + .filter((item) => item !== undefined); + return this.sortAddons(addonList); } diff --git a/wowup-electron/src/app/services/addons/addon.service.ts b/wowup-electron/src/app/services/addons/addon.service.ts index cd9942c7..2254a44d 100644 --- a/wowup-electron/src/app/services/addons/addon.service.ts +++ b/wowup-electron/src/app/services/addons/addon.service.ts @@ -20,7 +20,7 @@ import { } from "../../../common/constants"; import { Addon, AddonExternalId } from "../../../common/entities/addon"; import { WowClientType } from "../../../common/warcraft/wow-client-type"; -import { AddonCategory, AddonChannelType, AddonDependency, AddonDependencyType } from "../../../common/wowup/models"; +import { AddonCategory, AddonChannelType, AddonDependency, AddonDependencyType, AddonWarningType } from "../../../common/wowup/models"; import { AddonProvider, GetAllResult } from "../../addon-providers/addon-provider"; import { CurseAddonProvider } from "../../addon-providers/curse-addon-provider"; import { WowUpAddonProvider } from "../../addon-providers/wowup-addon-provider"; @@ -1094,10 +1094,14 @@ export class AddonService { const getAllResult = await addonProvider.getAll(installation, providerAddonIds); this.handleSyncErrors(installation, getAllResult, addonProvider, addons); - await this.handleSyncResults(getAllResult, addons); + await this.handleSyncResults(getAllResult, addons, installation); } - private async handleSyncResults(getAllResult: GetAllResult, addons: Addon[]): Promise { + private async handleSyncResults( + getAllResult: GetAllResult, + addons: Addon[], + installation: WowInstallation + ): Promise { for (const result of getAllResult.searchResults) { const addon = addons.find((addon) => addon.externalId.toString() === result?.externalId?.toString()); if (!addon) { @@ -1106,7 +1110,22 @@ export class AddonService { try { const latestFile = SearchResults.getLatestFile(result, addon?.channelType); + if (!latestFile) { + console.warn(`No latest file found: ${addon.name}, clientType: ${addon.clientType}`); + addon.warningType = AddonWarningType.NoProviderFiles; + this._addonStorage.set(addon.id, addon); + + this._syncErrorSrc.next( + new AddonSyncError({ + providerName: addon.providerName, + installationName: installation.label, + addonName: addon?.name, + }) + ); + continue; + } + this.setExternalIdString(addon); addon.summary = result.summary; From 461c9fe4084c0a3615e9de490ca9fc611f8ef6b9 Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 17 May 2021 15:35:13 -0500 Subject: [PATCH 2/3] Version bump --- wowup-electron/package.json | 2 +- .../src/app/services/wowup/patch-notes.service.ts | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/wowup-electron/package.json b/wowup-electron/package.json index b0835d3b..12d556b3 100644 --- a/wowup-electron/package.json +++ b/wowup-electron/package.json @@ -1,7 +1,7 @@ { "name": "wowup", "productName": "WowUp", - "version": "2.2.1", + "version": "2.2.2", "description": "World of Warcraft addon updater", "homepage": "https://wowup.io", "author": { diff --git a/wowup-electron/src/app/services/wowup/patch-notes.service.ts b/wowup-electron/src/app/services/wowup/patch-notes.service.ts index 44cbe348..d6282274 100644 --- a/wowup-electron/src/app/services/wowup/patch-notes.service.ts +++ b/wowup-electron/src/app/services/wowup/patch-notes.service.ts @@ -15,6 +15,15 @@ export class PatchNotesService { } const CHANGELOGS: ChangeLog[] = [ + { + Version: "2.2.2", + html: `
+

Changes

+
    +
  • Fix some issues related to addons migrating from classic to TBC / Multiple toc files
  • +
+
`, + }, { Version: "2.2.1", html: `
From 9426a7aacf95695f2124dd8d9e52910815235adf Mon Sep 17 00:00:00 2001 From: jliddev Date: Mon, 17 May 2021 15:36:09 -0500 Subject: [PATCH 3/3] Update wowup-addon-provider.ts --- wowup-electron/src/app/addon-providers/wowup-addon-provider.ts | 2 -- 1 file changed, 2 deletions(-) diff --git a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts index 1f5cffec..fc3e39d6 100644 --- a/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts +++ b/wowup-electron/src/app/addon-providers/wowup-addon-provider.ts @@ -176,12 +176,10 @@ export class WowUpAddonProvider extends AddonProvider { const fingerprintResponse = await this.getAddonsByFingerprints(fingerprints); for (const scanResult of scanResults) { - // Wowup can deliver the wrong result sometimes, ensure the result matches the client type const fingerprintMatches = fingerprintResponse.exactMatches.filter((exactMatch) => this.hasMatchingFingerprint(scanResult, exactMatch.matched_release) ); - // Wowup can deliver the wrong result sometimes, ensure the result matches the client type let clientMatch = fingerprintMatches.find((exactMatch) => this.isGameType(exactMatch.matched_release, installation.clientType) );