1
0
mirror of https://github.com/haiwen/seahub.git synced 2025-09-01 15:09:14 +00:00

copy/move file to enc lib (#5487)

This commit is contained in:
lian
2024-02-07 11:08:41 +08:00
committed by GitHub
parent a84106bb2a
commit 00c2124dff
4 changed files with 137 additions and 62 deletions

View File

@@ -692,14 +692,6 @@ class LibContentView extends React.Component {
onMoveItems = (destRepo, destDirentPath) => {
let repoID = this.props.repoID;
let selectedDirentList = this.state.selectedDirentList;
if (repoID !== destRepo.repo_id) {
this.setState(() => ({
asyncOperatedFilesLength: selectedDirentList.length,
asyncOperationProgress: 0,
asyncOperationType: 'move',
isCopyMoveProgressDialogShow: true
}));
}
let dirNames = this.getSelectedDirentNames();
let direntPaths = this.getSelectedDirentPaths();
@@ -707,6 +699,10 @@ class LibContentView extends React.Component {
if (repoID !== destRepo.repo_id) {
this.setState({
asyncCopyMoveTaskId: res.data.task_id,
asyncOperatedFilesLength: selectedDirentList.length,
asyncOperationProgress: 0,
asyncOperationType: 'move',
isCopyMoveProgressDialogShow: true
}, () => {
// After moving successfully, delete related files
this.getAsyncCopyMoveProgress();
@@ -731,15 +727,19 @@ class LibContentView extends React.Component {
}
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = Utils.getMoveFailedMessage(dirNames);
if (!error.response.data.lib_need_decrypt) {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = Utils.getCopyFailedMessage(dirNames);
}
toaster.danger(errMessage);
} else {
this.setState({
libNeedDecryptWhenMove: true,
destRepoWhenCopyMove: destRepo,
destDirentPathWhenCopyMove: destDirentPath,
});
}
this.setState({
asyncOperationProgress: 0,
isCopyMoveProgressDialogShow: false,
});
toaster.danger(errMessage);
});
};
@@ -747,20 +747,15 @@ class LibContentView extends React.Component {
let repoID = this.props.repoID;
let selectedDirentList = this.state.selectedDirentList;
if (repoID !== destRepo.repo_id) {
this.setState({
asyncOperatedFilesLength: selectedDirentList.length,
asyncOperationProgress: 0,
asyncOperationType: 'copy',
isCopyMoveProgressDialogShow: true
});
}
let dirNames = this.getSelectedDirentNames();
seafileAPI.copyDir(repoID, destRepo.repo_id, destDirentPath, this.state.path, dirNames).then(res => {
if (repoID !== destRepo.repo_id) {
this.setState({
asyncCopyMoveTaskId: res.data.task_id,
asyncOperatedFilesLength: selectedDirentList.length,
asyncOperationProgress: 0,
asyncOperationType: 'copy',
isCopyMoveProgressDialogShow: true
}, () => {
this.getAsyncCopyMoveProgress();
});
@@ -780,11 +775,19 @@ class LibContentView extends React.Component {
toaster.success(message);
}
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = Utils.getCopyFailedMessage(dirNames);
if (!error.response.data.lib_need_decrypt) {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = Utils.getCopyFailedMessage(dirNames);
}
toaster.danger(errMessage);
} else {
this.setState({
libNeedDecryptWhenCopy: true,
destRepoWhenCopyMove: destRepo,
destDirentPathWhenCopyMove: destDirentPath,
});
}
toaster.danger(errMessage);
});
};
@@ -1168,18 +1171,15 @@ class LibContentView extends React.Component {
}
let direntPath = Utils.joinPath(nodeParentPath, dirName);
if (repoID !== destRepo.repo_id) {
this.setState({
asyncOperatedFilesLength: 1,
asyncOperationProgress: 0,
asyncOperationType: 'move',
isCopyMoveProgressDialogShow: true,
});
}
seafileAPI.moveDir(repoID, destRepo.repo_id, moveToDirentPath, nodeParentPath, dirName).then(res => {
if (repoID !== destRepo.repo_id) {
this.setState({asyncCopyMoveTaskId: res.data.task_id}, () => {
this.setState({
asyncCopyMoveTaskId: res.data.task_id,
asyncOperatedFilesLength: 1,
asyncOperationProgress: 0,
asyncOperationType: 'move',
isCopyMoveProgressDialogShow: true,
}, () => {
this.currentMoveItemName = dirName;
this.currentMoveItemPath = direntPath;
this.getAsyncCopyMoveProgress(dirName, direntPath);
@@ -1205,12 +1205,23 @@ class LibContentView extends React.Component {
toaster.success(message);
}
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = gettext('Failed to move {name}.');
errMessage = errMessage.replace('{name}', dirName);
if (!error.response.data.lib_need_decrypt) {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = gettext('Failed to move {name}.');
errMessage = errMessage.replace('{name}', dirName);
}
toaster.danger(errMessage);
} else {
this.setState({
libNeedDecryptWhenMove: true,
destRepoWhenCopyMove: destRepo,
destDirentPathWhenCopyMove: moveToDirentPath,
copyMoveSingleItem: true,
srcDirentWhenCopyMove: dirent,
srcNodeParentPathWhenCopyMove: nodeParentPath,
});
}
toaster.danger(errMessage);
});
};
@@ -1222,20 +1233,15 @@ class LibContentView extends React.Component {
nodeParentPath = this.state.path;
}
if (repoID !== destRepo.repo_id) {
this.setState({
asyncOperatedFilesLength: 1,
asyncOperationProgress: 0,
asyncOperationType: 'copy',
isCopyMoveProgressDialogShow: true
});
}
seafileAPI.copyDir(repoID, destRepo.repo_id, copyToDirentPath, nodeParentPath, dirName).then(res => {
if (repoID !== destRepo.repo_id) {
this.setState({
asyncCopyMoveTaskId: res.data.task_id,
asyncOperatedFilesLength: 1,
asyncOperationProgress: 0,
asyncOperationType: 'copy',
isCopyMoveProgressDialogShow: true
}, () => {
this.getAsyncCopyMoveProgress();
});
@@ -1255,12 +1261,23 @@ class LibContentView extends React.Component {
toaster.success(message);
}
}).catch((error) => {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = gettext('Failed to copy %(name)s');
errMessage = errMessage.replace('%(name)s', dirName);
if (!error.response.data.lib_need_decrypt) {
let errMessage = Utils.getErrorMsg(error);
if (errMessage === gettext('Error')) {
errMessage = gettext('Failed to copy %(name)s');
errMessage = errMessage.replace('%(name)s', dirName);
}
toaster.danger(errMessage);
} else {
this.setState({
libNeedDecryptWhenCopy: true,
destRepoWhenCopyMove: destRepo,
destDirentPathWhenCopyMove: copyToDirentPath,
copyMoveSingleItem: true,
srcDirentWhenCopyMove: dirent,
srcNodeParentPathWhenCopyMove: nodeParentPath,
});
}
toaster.danger(errMessage);
});
};
@@ -1861,6 +1878,39 @@ class LibContentView extends React.Component {
this.loadDirData(this.state.path);
};
onLibDecryptWhenCopyMove = () => {
if (this.state.libNeedDecryptWhenCopy) {
if (this.state.copyMoveSingleItem) {
this.onCopyItem(this.state.destRepoWhenCopyMove,
this.state.srcDirentWhenCopyMove,
this.state.destDirentPathWhenCopyMove,
this.state.srcNodeParentPathWhenCopyMove)
} else {
this.onCopyItems(this.state.destRepoWhenCopyMove,
this.state.destDirentPathWhenCopyMove)
}
this.setState({
libNeedDecryptWhenCopy: false,
copyMoveSingleItem: false,
});
}
if (this.state.libNeedDecryptWhenMove) {
if (this.state.copyMoveSingleItem) {
this.onMoveItem(this.state.destRepoWhenCopyMove,
this.state.srcDirentWhenCopyMove,
this.state.destDirentPathWhenCopyMove,
this.state.srcNodeParentPathWhenCopyMove)
} else {
this.onMoveItems(this.state.destRepoWhenCopyMove,
this.state.destDirentPathWhenCopyMove)
}
this.setState({
libNeedDecryptWhenMove: false,
copyMoveSingleItem: false,
});
}
}
goDraftPage = () => {
window.open(siteRoot + 'drafts/' + this.state.draftID + '/');
};
@@ -1951,6 +2001,17 @@ class LibContentView extends React.Component {
);
}
if (this.state.libNeedDecryptWhenCopy || this.state.libNeedDecryptWhenMove) {
return (
<ModalPortal>
<LibDecryptDialog
repoID={this.state.destRepoWhenCopyMove.repo_id}
onLibDecryptDialog={this.onLibDecryptWhenCopyMove}
/>
</ModalPortal>
);
}
if (this.state.errorMsg) {
return (
<Fragment>