From f590e7741def1ea413e5ce75da8821488f7997c6 Mon Sep 17 00:00:00 2001 From: Michael An <2331806369@qq.com> Date: Thu, 23 Jan 2025 12:49:54 +0800 Subject: [PATCH] Fix download file bug in grid mode right click (#7418) * fix download file use different API * change error message --- .../dirent-grid-view/dirent-grid-view.js | 20 ++++++++++++++----- .../dirent-list-view/dirent-list-view.js | 20 ++++++++++++++----- .../toolbar/selected-dirents-toolbar.js | 10 +++++----- 3 files changed, 35 insertions(+), 15 deletions(-) diff --git a/frontend/src/components/dirent-grid-view/dirent-grid-view.js b/frontend/src/components/dirent-grid-view/dirent-grid-view.js index 8ef32109f4..64663f7bcf 100644 --- a/frontend/src/components/dirent-grid-view/dirent-grid-view.js +++ b/frontend/src/components/dirent-grid-view/dirent-grid-view.js @@ -1,6 +1,6 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; -import { siteRoot, username, enableSeadoc, thumbnailDefaultSize, thumbnailSizeForOriginal, gettext, fileServerRoot, enableWhiteboard } from '../../utils/constants'; +import { siteRoot, username, enableSeadoc, thumbnailDefaultSize, thumbnailSizeForOriginal, gettext, fileServerRoot, enableWhiteboard, useGoFileserver } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import { seafileAPI } from '../../utils/seafile-api'; import URLDecorator from '../../utils/url-decorator'; @@ -486,10 +486,20 @@ class DirentGridView extends React.Component { return dirent.name; }); - this.setState({ - isZipDialogOpen: true, - downloadItems: selectedDirentNames - }); + if (useGoFileserver) { + seafileAPI.zipDownload(repoID, path, selectedDirentNames).then((res) => { + const zipToken = res.data['zip_token']; + location.href = `${fileServerRoot}zip/${zipToken}`; + }).catch((error) => { + let errorMsg = Utils.getErrorMsg(error); + toaster.danger(errorMsg); + }); + } else { + this.setState({ + isZipDialogOpen: true, + downloadItems: selectedDirentNames + }); + } }; onCreateFolderToggle = () => { diff --git a/frontend/src/components/dirent-list-view/dirent-list-view.js b/frontend/src/components/dirent-list-view/dirent-list-view.js index 06066dea94..a09107156d 100644 --- a/frontend/src/components/dirent-list-view/dirent-list-view.js +++ b/frontend/src/components/dirent-list-view/dirent-list-view.js @@ -1,7 +1,7 @@ import React, { Fragment } from 'react'; import PropTypes from 'prop-types'; import classnames from 'classnames'; -import { siteRoot, gettext, username, enableSeadoc, thumbnailSizeForOriginal, thumbnailDefaultSize, fileServerRoot, enableWhiteboard } from '../../utils/constants'; +import { siteRoot, gettext, username, enableSeadoc, thumbnailSizeForOriginal, thumbnailDefaultSize, fileServerRoot, enableWhiteboard, useGoFileserver } from '../../utils/constants'; import { Utils } from '../../utils/utils'; import TextTranslation from '../../utils/text-translation'; import URLDecorator from '../../utils/url-decorator'; @@ -340,10 +340,20 @@ class DirentListView extends React.Component { return dirent.name; }); - this.setState({ - isProgressDialogShow: true, - downloadItems: selectedDirentNames - }); + if (useGoFileserver) { + seafileAPI.zipDownload(repoID, path, selectedDirentNames).then((res) => { + const zipToken = res.data['zip_token']; + location.href = `${fileServerRoot}zip/${zipToken}`; + }).catch((error) => { + let errorMsg = Utils.getErrorMsg(error); + toaster.danger(errorMsg); + }); + } else { + this.setState({ + isProgressDialogShow: true, + downloadItems: selectedDirentNames + }); + } } }; diff --git a/frontend/src/components/toolbar/selected-dirents-toolbar.js b/frontend/src/components/toolbar/selected-dirents-toolbar.js index 0d47a5a74d..7a313e0896 100644 --- a/frontend/src/components/toolbar/selected-dirents-toolbar.js +++ b/frontend/src/components/toolbar/selected-dirents-toolbar.js @@ -83,11 +83,7 @@ class SelectedDirentsToolbar extends React.Component { location.href = url; return; } - if (!useGoFileserver) { - this.setState({ - isZipDialogOpen: true - }); - } else { + if (useGoFileserver) { const target = this.props.selectedDirentList.map(dirent => dirent.name); seafileAPI.zipDownload(repoID, path, target).then((res) => { const zipToken = res.data['zip_token']; @@ -99,6 +95,10 @@ class SelectedDirentsToolbar extends React.Component { errorMsg: errorMsg }); }); + } else { + this.setState({ + isZipDialogOpen: true + }); } } };