diff --git a/src/component/FileManager/Navigator/SubActions.js b/src/component/FileManager/Navigator/SubActions.js
index 03d6c16..4d648be 100644
--- a/src/component/FileManager/Navigator/SubActions.js
+++ b/src/component/FileManager/Navigator/SubActions.js
@@ -4,11 +4,12 @@ import ViewListIcon from "@material-ui/icons/ViewList";
import ViewSmallIcon from "@material-ui/icons/ViewComfy";
import ViewModuleIcon from "@material-ui/icons/ViewModule";
import TextTotateVerticalIcon from "@material-ui/icons/TextRotateVertical";
+import DownloadIcon from "@material-ui/icons/CloudDownload";
import Avatar from "@material-ui/core/Avatar";
import { useDispatch, useSelector } from "react-redux";
import Auth from "../../../middleware/Auth";
import { changeViewMethod, setShareUserPopover } from "../../../redux/explorer";
-import { changeSortMethod } from "../../../redux/explorer/action";
+import { changeSortMethod, startBatchDownload } from "../../../redux/explorer/action";
import { FormatPageBreak } from "mdi-material-ui";
import pathHelper from "../../../utils/page";
import { changePageSize } from "../../../redux/viewUpdate/action";
@@ -55,6 +56,10 @@ export default function SubActions({ isSmall, inherit }) {
(e) => dispatch(setShareUserPopover(e)),
[dispatch]
);
+ const StartBatchDownloadAll = useCallback(
+ () => dispatch(startBatchDownload(share)),
+ [dispatch, share]
+ );
const ChangePageSize = useCallback((e) => dispatch(changePageSize(e)), [
dispatch,
]);
@@ -102,6 +107,15 @@ export default function SubActions({ isSmall, inherit }) {
const classes = useStyles();
return (
<>
+
+
+
+
{viewMethod === "icon" && (
{
+ const dirs: string[] = [],
+ items: string[] = [];
+ const fileSources: CloudreveFile[] = selected.length ? selected : [...dirList, ...fileList];
+ fileSources.map((value) => {
if (value.type === "dir") {
dirs.push(value.id);
} else {
@@ -246,7 +247,7 @@ export const serverSideBatchDownload = (
};
if (pathHelper.isSharePage(pathname)) {
reqURL = "/share/archive/" + share.key;
- postBody["path"] = selected[0].path;
+ postBody["path"] = fileSources[0].path;
}
API.post(reqURL, postBody)
@@ -322,7 +323,7 @@ export const startBatchDownload = (
return async (dispatch, getState): Promise => {
dispatch(changeContextMenu("file", false));
const {
- explorer: { selected },
+ explorer: { selected, fileList, dirList },
} = getState();
const user = Auth.GetUser();
@@ -368,7 +369,8 @@ export const startBatchDownload = (
let queue: CloudreveFile[] = [];
try {
- queue = await walk(selected, share);
+ const walkSources = selected.length ? selected : [...dirList, ...fileList];
+ queue = await walk(walkSources, share);
} catch (e) {
dispatch(
toggleSnackbar(