From 8883296bf6f56fe5e9fb8665b3c65f9e67eb0593 Mon Sep 17 00:00:00 2001 From: "marcel.kocisek" Date: Fri, 2 May 2025 10:32:15 +0200 Subject: [PATCH 1/3] call download project version properly from version details --- .../admin-lib/src/modules/admin/views/ProjectVersionView.vue | 3 +-- .../src/modules/project/components/VersionDetailSidebar.vue | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue b/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue index f5fea30e..8fe74558 100644 --- a/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue +++ b/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue @@ -134,8 +134,7 @@ watch( function download() { const url = ProjectApi.constructDownloadProjectVersionUrl( - project.value?.namespace, - project.value?.name, + project.value?.id, versionId.value ) window.location.href = url diff --git a/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue b/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue index 51ec1002..7d89de1c 100644 --- a/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue +++ b/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue @@ -85,8 +85,7 @@ export default defineComponent({ ...mapState(useProjectStore, ['project', 'versions']), downloadUrl() { return ProjectApi.constructDownloadProjectVersionUrl( - this.project.namespace, - this.project.name, + this.project.id, this.queryId ) }, From 22bdbb37c01e1967271beb11f3cbea39a4ab79ff Mon Sep 17 00:00:00 2001 From: "marcel.kocisek" Date: Fri, 2 May 2025 12:31:21 +0200 Subject: [PATCH 2/3] preparing download and use downloadArchive polling --- .../src/modules/admin/views/ProjectVersionView.vue | 2 +- .../project/components/DownloadProgress.vue | 14 +++++++++++--- .../project/components/ProjectVersionsTable.vue | 3 ++- .../project/components/VersionDetailSidebar.vue | 13 ++++++------- web-app/packages/lib/src/modules/project/store.ts | 13 +++++++++---- web-app/packages/lib/src/modules/project/types.ts | 1 + 6 files changed, 30 insertions(+), 16 deletions(-) diff --git a/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue b/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue index 8fe74558..ae739a43 100644 --- a/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue +++ b/web-app/packages/admin-lib/src/modules/admin/views/ProjectVersionView.vue @@ -137,6 +137,6 @@ function download() { project.value?.id, versionId.value ) - window.location.href = url + projectStore.downloadArchive({ url, versionId: versionId.value }) } diff --git a/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue b/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue index 61f99d48..65cd04b4 100644 --- a/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue +++ b/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue @@ -22,7 +22,11 @@ import { useProjectStore } from '@/modules/project/store' export default defineComponent({ name: 'DownloadProgress', computed: { - ...mapState(useProjectStore, ['project', 'projectDownloading']) + ...mapState(useProjectStore, [ + 'project', + 'projectDownloading', + 'projectDownloadingVersion' + ]) }, methods: { ...mapActions(useProjectStore, ['cancelDownloadArchive']), @@ -30,8 +34,12 @@ export default defineComponent({ this.$toast.add({ group: 'download-progress', severity: 'info', - summary: `Preparing archive`, - detail: `Your project ${this.project?.name} is being prepared for download.`, + summary: `Preparing to download your project ${ + this.projectDownloadingVersion + ? `(version ${this.projectDownloadingVersion}` + : '' + }`, + detail: `Your download will begin automatically once it's ready. Please keep this window open.`, life: undefined }) }, diff --git a/web-app/packages/lib/src/modules/project/components/ProjectVersionsTable.vue b/web-app/packages/lib/src/modules/project/components/ProjectVersionsTable.vue index abac33cd..40d3eed5 100644 --- a/web-app/packages/lib/src/modules/project/components/ProjectVersionsTable.vue +++ b/web-app/packages/lib/src/modules/project/components/ProjectVersionsTable.vue @@ -159,7 +159,8 @@ const downloadClick = (item: ProjectVersionsTableItem) => { url: ProjectApi.constructDownloadProjectVersionUrl( project.value.id, item.name - ) + ), + versionId: item.name }) } diff --git a/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue b/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue index 7d89de1c..503f7746 100644 --- a/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue +++ b/web-app/packages/lib/src/modules/project/components/VersionDetailSidebar.vue @@ -83,12 +83,6 @@ export default defineComponent({ }, computed: { ...mapState(useProjectStore, ['project', 'versions']), - downloadUrl() { - return ProjectApi.constructDownloadProjectVersionUrl( - this.project.id, - this.queryId - ) - }, queryId(): string { return this.$route.query.version_id as string }, @@ -119,6 +113,7 @@ export default defineComponent({ }, methods: { ...mapActions(useNotificationStore, ['error']), + ...mapActions(useProjectStore, ['downloadArchive']), async getVersion() { try { const response = await ProjectApi.getProjectVersion( @@ -133,7 +128,11 @@ export default defineComponent({ } }, downloadVersion() { - window.location.href = this.downloadUrl + const url = ProjectApi.constructDownloadProjectVersionUrl( + this.project.id, + this.queryId + ) + this.downloadArchive({ url, versionId: this.queryId }) } } }) diff --git a/web-app/packages/lib/src/modules/project/store.ts b/web-app/packages/lib/src/modules/project/store.ts index 401c264d..5cf79fb2 100644 --- a/web-app/packages/lib/src/modules/project/store.ts +++ b/web-app/packages/lib/src/modules/project/store.ts @@ -8,7 +8,7 @@ import keyBy from 'lodash/keyBy' import omit from 'lodash/omit' import { defineStore, getActivePinia } from 'pinia' -import { DropdownOption, errorUtils, permissionUtils } from '@/common' +import { DropdownOption, permissionUtils } from '@/common' import { getErrorMessage } from '@/common/error_utils' import { waitCursor } from '@/common/html_utils' import { filesDiff } from '@/common/mergin_utils' @@ -80,6 +80,7 @@ export interface ProjectState { versionsChangesetLoading: boolean collaborators: ProjectCollaborator[] projectDownloading: boolean + projectDownloadingVersion: string } export const useProjectStore = defineStore('projectModule', { @@ -106,7 +107,8 @@ export const useProjectStore = defineStore('projectModule', { availableRoles: permissionUtils.getProjectRoleNameValues(), versionsChangesetLoading: false, collaborators: [], - projectDownloading: false + projectDownloading: false, + projectDownloadingVersion: null }), getters: { @@ -708,12 +710,14 @@ export const useProjectStore = defineStore('projectModule', { const notificationStore = useNotificationStore() this.cancelDownloadArchive() this.projectDownloading = true + if (payload.versionId) { + this.projectDownloadingVersion = payload.versionId + } + const errorMessage = 'Failed to download project archive. Please try again later.' const exceedMessage = 'It seems like preparing your ZIP file is taking longer than expected. Please try again in a little while to download your file.' - const fileTooLargeMessage = - 'The requested archive is too large to download. Please use direct download with python client or plugin instead.' const delays = [...Array(3).fill(1000), ...Array(3).fill(3000), 5000] let retryCount = 0 @@ -767,6 +771,7 @@ export const useProjectStore = defineStore('projectModule', { downloadArchiveTimeout = null } this.projectDownloading = false + this.projectDownloadingVersion = null }, constructDownloadProjectUrl(payload: { projectId: string }) { diff --git a/web-app/packages/lib/src/modules/project/types.ts b/web-app/packages/lib/src/modules/project/types.ts index 2e3ca0f2..844e776c 100644 --- a/web-app/packages/lib/src/modules/project/types.ts +++ b/web-app/packages/lib/src/modules/project/types.ts @@ -308,6 +308,7 @@ export interface UpdatePublicFlagParams { export interface DownloadPayload { url: string + versionId?: string } export interface FetchProjectVersionsPayload { From 24f6fab160c0f0ca9712c40891ca5098dc87e781 Mon Sep 17 00:00:00 2001 From: "marcel.kocisek" Date: Fri, 2 May 2025 12:35:43 +0200 Subject: [PATCH 3/3] add ) to text --- .../lib/src/modules/project/components/DownloadProgress.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue b/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue index 65cd04b4..ca2492dc 100644 --- a/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue +++ b/web-app/packages/lib/src/modules/project/components/DownloadProgress.vue @@ -36,7 +36,7 @@ export default defineComponent({ severity: 'info', summary: `Preparing to download your project ${ this.projectDownloadingVersion - ? `(version ${this.projectDownloadingVersion}` + ? `(version ${this.projectDownloadingVersion})` : '' }`, detail: `Your download will begin automatically once it's ready. Please keep this window open.`,