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(