From 2d0cc9151ca4305140605a4d75f2f00155e7e13d Mon Sep 17 00:00:00 2001 From: Vili Manninen Date: Tue, 14 Jan 2025 21:00:15 +0200 Subject: [PATCH 1/9] Simplify download logic by omitting callback --- src/components/views/DownloadModModal.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/views/DownloadModModal.vue b/src/components/views/DownloadModModal.vue index be61a8c54..8d6e33a9d 100644 --- a/src/components/views/DownloadModModal.vue +++ b/src/components/views/DownloadModModal.vue @@ -144,6 +144,7 @@ import ProfileModList from '../../r2mm/mods/ProfileModList'; ); } catch (e) { this.setIsModProgressModalOpen(false); + this.$store.commit('download/updateDownload', { assignId: assignId, failed: true }); this.$store.commit('error/handleError', R2Error.fromThrownValue(e)); return; } From 09fd3bf125aa0dbf507aed7beafc4b82b98e2528 Mon Sep 17 00:00:00 2001 From: VilppeRiskidev Date: Thu, 23 Jan 2025 16:59:15 +0200 Subject: [PATCH 2/9] Move download progress callbacks to DownloadMixin --- src/components/mixins/DownloadMixin.vue | 31 +++++++++++++++++++++ src/components/views/DownloadModModal.vue | 33 +---------------------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/src/components/mixins/DownloadMixin.vue b/src/components/mixins/DownloadMixin.vue index 784c41a9d..76c971a69 100644 --- a/src/components/mixins/DownloadMixin.vue +++ b/src/components/mixins/DownloadMixin.vue @@ -2,12 +2,14 @@ import Vue from 'vue'; import Component from 'vue-class-component'; +import StatusEnum from "../../model/enums/StatusEnum"; import R2Error from "../../model/errors/R2Error"; import Game from "../../model/game/Game"; import Profile from "../../model/Profile"; import ThunderstoreCombo from "../../model/ThunderstoreCombo"; import ThunderstoreMod from "../../model/ThunderstoreMod"; import { installModsAndResolveConflicts } from "../../utils/ProfileUtils"; +import { Store } from "vuex"; @Component @@ -50,6 +52,35 @@ export default class DownloadMixin extends Vue { } } + downloadProgressCallback(assignId: number, progress: number, modName: string, status: number, err: R2Error | null) { + try { + if (status === StatusEnum.FAILURE) { + this.setIsModProgressModalOpen(false); + this.$store.commit('download/updateDownload', {assignId, failed: true}); + if (err !== null) { + DownloadMixin.addSolutionsToError(err); + throw err; + } + } else if (status === StatusEnum.PENDING) { + this.$store.commit('download/updateDownload', {assignId, progress, modName}); + } + } catch (e) { + this.$store.commit('error/handleError', R2Error.fromThrownValue(e)); + } + }; + + static downloadProgressCallback(store: Store, assignId: number, progress: number, modName: string, status: number, err: R2Error | null) { + if (status === StatusEnum.FAILURE) { + store.commit('download/updateDownload', {assignId, failed: true}); + if (err !== null) { + DownloadMixin.addSolutionsToError(err); + throw err; + } + } else if (status === StatusEnum.PENDING) { + store.commit('download/updateDownload', {assignId, progress, modName}); + } + } + static addSolutionsToError(err: R2Error): void { // Sanity check typing. if (!(err instanceof R2Error)) { diff --git a/src/components/views/DownloadModModal.vue b/src/components/views/DownloadModModal.vue index 8d6e33a9d..73f27577f 100644 --- a/src/components/views/DownloadModModal.vue +++ b/src/components/views/DownloadModModal.vue @@ -31,7 +31,6 @@ import ModalCard from '../ModalCard.vue'; import DownloadModVersionSelectModal from "../../components/views/DownloadModVersionSelectModal.vue"; import UpdateAllInstalledModsModal from "../../components/views/UpdateAllInstalledModsModal.vue"; import DownloadMixin from "../mixins/DownloadMixin.vue"; -import StatusEnum from '../../model/enums/StatusEnum'; import R2Error from '../../model/errors/R2Error'; import ManifestV2 from '../../model/ManifestV2'; import Profile from '../../model/Profile'; @@ -75,7 +74,7 @@ import ProfileModList from '../../r2mm/mods/ProfileModList'; ignoreCache, (progress: number, modName: string, status: number, err: R2Error | null) => { try { - DownloadModModal.downloadProgressCallback(store, assignId, progress, modName, status, err); + DownloadMixin.downloadProgressCallback(store, assignId, progress, modName, status, err); } catch (e) { reject(e); } @@ -107,18 +106,6 @@ import ProfileModList from '../../r2mm/mods/ProfileModList'; }); } - static downloadProgressCallback(store: Store, assignId: number, progress: number, modName: string, status: number, err: R2Error | null) { - if (status === StatusEnum.FAILURE) { - store.commit('download/updateDownload', {assignId, failed: true}); - if (err !== null) { - DownloadMixin.addSolutionsToError(err); - throw err; - } - } else if (status === StatusEnum.PENDING) { - store.commit('download/updateDownload', {assignId, progress, modName}); - } - } - async downloadHandler(tsMod: ThunderstoreMod, tsVersion: ThunderstoreVersion) { this.closeModal(); @@ -151,26 +138,8 @@ import ProfileModList from '../../r2mm/mods/ProfileModList'; await this.downloadCompletedCallback(downloadedMods); this.setIsModProgressModalOpen(false); }, 1); - } - downloadProgressCallback(assignId: number, progress: number, modName: string, status: number, err: R2Error | null) { - try { - if (status === StatusEnum.FAILURE) { - this.setIsModProgressModalOpen(false); - this.$store.commit('download/updateDownload', {assignId, failed: true}); - if (err !== null) { - DownloadMixin.addSolutionsToError(err); - throw err; - } - } else if (status === StatusEnum.PENDING) { - this.$store.commit('download/updateDownload', {assignId, progress, modName}); - } - } catch (e) { - this.$store.commit('error/handleError', R2Error.fromThrownValue(e)); - } - }; - static async installModAfterDownload(profile: Profile, mod: ThunderstoreMod, version: ThunderstoreVersion): Promise { return new Promise(async (resolve, reject) => { const manifestMod: ManifestV2 = new ManifestV2().fromThunderstoreMod(mod, version); From 7680c4b9865a740bad55ceb2112d953662231815 Mon Sep 17 00:00:00 2001 From: VilppeRiskidev Date: Mon, 27 Jan 2025 13:56:25 +0200 Subject: [PATCH 3/9] Show failed download status unambiguously in DownloadMonitor --- src/pages/DownloadMonitor.vue | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/pages/DownloadMonitor.vue b/src/pages/DownloadMonitor.vue index c30f336fa..491eb8889 100644 --- a/src/pages/DownloadMonitor.vue +++ b/src/pages/DownloadMonitor.vue @@ -19,8 +19,9 @@

{{ downloadObject.initialMods.join(", ") }}

-

Downloading: {{ downloadObject.modName }}

-

{{Math.min(Math.floor(downloadObject.progress), 100)}}% complete

+

Downloading failed

+

Downloading: {{ downloadObject.modName }}

+

{{Math.min(Math.floor(downloadObject.progress), 100)}}% complete

Date: Thu, 23 Jan 2025 14:44:53 +0200 Subject: [PATCH 4/9] Rename progress to downloadProgress --- src/components/mixins/DownloadMixin.vue | 8 ++++---- src/components/views/DownloadModModal.vue | 10 +++++----- src/store/modules/DownloadModule.ts | 6 +++--- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/components/mixins/DownloadMixin.vue b/src/components/mixins/DownloadMixin.vue index 76c971a69..2b2c7ca18 100644 --- a/src/components/mixins/DownloadMixin.vue +++ b/src/components/mixins/DownloadMixin.vue @@ -52,7 +52,7 @@ export default class DownloadMixin extends Vue { } } - downloadProgressCallback(assignId: number, progress: number, modName: string, status: number, err: R2Error | null) { + downloadProgressCallback(assignId: number, downloadProgress: number, modName: string, status: number, err: R2Error | null) { try { if (status === StatusEnum.FAILURE) { this.setIsModProgressModalOpen(false); @@ -62,14 +62,14 @@ export default class DownloadMixin extends Vue { throw err; } } else if (status === StatusEnum.PENDING) { - this.$store.commit('download/updateDownload', {assignId, progress, modName}); + this.$store.commit('download/updateDownload', {assignId, downloadProgress, modName}); } } catch (e) { this.$store.commit('error/handleError', R2Error.fromThrownValue(e)); } }; - static downloadProgressCallback(store: Store, assignId: number, progress: number, modName: string, status: number, err: R2Error | null) { + static downloadProgressCallback(store: Store, assignId: number, downloadProgress: number, modName: string, status: number, err: R2Error | null) { if (status === StatusEnum.FAILURE) { store.commit('download/updateDownload', {assignId, failed: true}); if (err !== null) { @@ -77,7 +77,7 @@ export default class DownloadMixin extends Vue { throw err; } } else if (status === StatusEnum.PENDING) { - store.commit('download/updateDownload', {assignId, progress, modName}); + store.commit('download/updateDownload', {assignId, downloadProgress, modName}); } } diff --git a/src/components/views/DownloadModModal.vue b/src/components/views/DownloadModModal.vue index 73f27577f..d1a28100b 100644 --- a/src/components/views/DownloadModModal.vue +++ b/src/components/views/DownloadModModal.vue @@ -5,10 +5,10 @@ From c359b2848d7838844196c97df95eacde8dbe1cfd Mon Sep 17 00:00:00 2001 From: VilppeRiskidev Date: Tue, 28 Jan 2025 14:54:40 +0200 Subject: [PATCH 7/9] Further improve installation progress tracking --- src/components/mixins/DownloadMixin.vue | 60 +++++++++++-------- .../profiles-modals/ImportProfileModal.vue | 12 ++-- src/components/views/DownloadModModal.vue | 8 +-- .../views/UpdateAllInstalledModsModal.vue | 2 +- src/pages/DownloadMonitor.vue | 43 ++++++++----- .../BetterThunderstoreDownloader.ts | 12 ++-- src/store/modules/DownloadModule.ts | 6 +- src/utils/ProfileUtils.ts | 36 +++-------- 8 files changed, 95 insertions(+), 84 deletions(-) diff --git a/src/components/mixins/DownloadMixin.vue b/src/components/mixins/DownloadMixin.vue index f4e5d3331..e0fa2cd0a 100644 --- a/src/components/mixins/DownloadMixin.vue +++ b/src/components/mixins/DownloadMixin.vue @@ -1,15 +1,18 @@