{"version":3,"sources":["hooks/fileSubtitle.js","component/FileManager/Sort.tsx","component/Placeholder/TextLoading.js","middleware/Api.ts","redux/explorer/reducer.ts","component/Dial/AutoHidden.js","services/navigate.ts","services/file.ts","redux/explorer/async.ts","utils/page.ts","middleware/Auth.ts","redux/explorer/index.ts","i18n.ts","component/Uploader/core/utils/pool.ts","component/Uploader/core/utils/validator.ts","component/Uploader/core/utils/request.ts","component/Navbar/DarkModeSwitcher.js","component/FileManager/Navigator/SubActions.js","component/Modals/CreateShare.js","component/Modals/OptionSelector.js","component/Dial/Save.js","component/Modals/Loading.js","component/Modals/Copy.js","component/Modals/DirectoryDownload.js","component/Modals/Decompress.js","component/Modals/Compress.js","component/Modals/RemoteDownload.js","component/Modals/Delete.js","component/FileManager/Modals.js","utils/index.js","component/Viewer/Text.js","component/Viewer/Code.js","component/Uploader/core/errors/index.ts","component/Common/Snackbar.js","component/Navbar/UserAvatarPopover.js","component/Navbar/UserAvatar.js","component/Navbar/Navbar.js","component/Uploader/core/utils/helper.ts","component/Uploader/core/utils/index.ts","component/Navbar/SearchBar.js","component/Navbar/StorageBar.js","utils/zip.js","utils/api.ts","utils/filesystem.ts","redux/explorer/action.ts","component/Navbar/UserInfo.js","component/Navbar/FileTags.js","component/FileManager/ImgPreview.js","component/Uploader/core/types.ts","component/Uploader/core/uploader/base.ts","component/Uploader/core/logger.ts","component/Uploader/core/api/index.ts","component/Uploader/core/index.ts","component/Uploader/core/uploader/chunk.ts","component/Uploader/core/uploader/local.ts","component/Uploader/core/uploader/remote.ts","component/Uploader/core/uploader/onedrive.ts","component/Uploader/core/uploader/oss.ts","component/Uploader/core/uploader/qiniu.ts","component/Uploader/core/uploader/cos.ts","component/Uploader/core/uploader/upyun.ts","component/Uploader/core/uploader/s3.ts","component/Uploader/core/uploader/placeholder.ts","component/Dial/Create.js","component/Uploader/Popup/TaskDetail.js","component/Uploader/Popup/UploadTask.js","component/Uploader/UseUpload.js","component/Modals/ConcurrentOption.js","component/Uploader/Popup/MoreActions.js","component/Uploader/Popup/TaskList.js","component/Placeholder/DropFile.js","component/Uploader/Uploader.js","config.ts","redux/viewUpdate/action.ts","utils/datetime.js","component/FileManager/TypeIcon.js","serviceWorker.js","middleware/AuthRoute.js","middleware/NoAuthRoute.js","component/Share/NotFound.js","component/Placeholder/Captcha.js","hooks/normal.js","component/Login/ReCaptchaWrapper.js","component/Login/ReCaptcha.js","hooks/recaptcha.js","hooks/tcaptcha.js","hooks/useCaptcha.js","component/Login/LoginForm.js","component/FileManager/FileName.js","component/FileManager/SmallIcon.js","component/FileManager/FileIcon.js","component/FileManager/Folder.js","component/FileManager/DnD/Preview.js","component/FileManager/DnD/DragLayer.js","component/FileManager/ContextMenu.js","component/FileManager/TableRow.js","component/FileManager/DnD/DropWarpper.js","component/FileManager/DnD/Scrolling.js","component/FileManager/ObjectIcon.js","component/FileManager/Explorer.js","hooks/pagination.js","component/FileManager/Navigator/PathButton.js","component/FileManager/Navigator/DropDownItem.js","component/FileManager/Navigator/DropDown.js","component/FileManager/Navigator/Navigator.js","component/Placeholder/ListLoading.js","component/FileManager/Sidebar/SideDrawer.js","component/FileManager/PaginationItem.js","component/FileManager/Pagination.js","component/FileManager/FileManager.js","component/Viewer/SelectMenu.js","component/Viewer/Video.js","component/Share/SearchResult.js","component/Share/MyShare.js","component/Modals/SelectFile.js","component/Download/DownloadingCard.js","component/Download/FinishedCard.js","component/Dial/Aria2.js","component/Download/Download.js","component/Placeholder/PageLoading.js","component/Share/LockedFile.js","component/Share/Creator.js","component/Share/SharedFile.js","component/Share/SharedFolder.js","component/Share/SharePreload.js","component/Viewer/Doc.js","component/Modals/CreateWebDAVAccount.js","component/Setting/AppQRCode.js","component/Setting/AppPromotion.js","component/Setting/WebDAV.js","component/Setting/Tasks.js","component/Setting/Profile.js","component/Setting/Authn.js","component/Modals/TimeZone.js","component/Setting/UserSetting.js","component/Login/Register.js","component/Login/Activication.js","component/Login/ResetForm.js","component/Login/Reset.js","component/FileManager/MusicPlayer.js","component/Viewer/Epub.js","App.js","middleware/Init.js","redux/viewUpdate/reducer.ts","reducers/index.js","component/Placeholder/ErrorBoundary.js","index.js","redux/combineReducers.ts","component/Placeholder/Nothing.js","component/FileManager/PathSelector.js"],"names":["UseFileSubTitle","query","math","location","dispatch","useDispatch","useState","title","setTitle","path","setPath","SetSubTitle","useCallback","changeSubTitle","useEffect","pathHelper","isSharePage","pathname","get","split","length","params","SORT_OPTIONS","value","label","Sort","onChange","isSmall","inherit","className","t","useTranslation","keyPrefix","anchorSort","setAnchorSort","sortBy","setSortBy","onClick","e","currentTarget","color","fontSize","id","anchorEl","open","Boolean","onClose","map","option","index","key","selected","onChangeSort","sortMethodFuncs","sizePos","a","b","size","sizeRes","namePos","name","localeCompare","navigator","languages","language","numeric","ignorePunctuation","nameRev","timePos","Date","parse","create_date","timeRev","modifyTimePos","date","modifyTimeRev","useStyles","makeStyles","theme","loader","width","padding","breakpoints","down","MyLoader","props","backgroundColor","dark","foregroundColor","TextLoading","useTheme","classes","palette","type","baseURL","getBaseURL","getPreviewURL","isShare","shareID","fileID","encodeURIComponent","instance","axios","create","withCredentials","AppError","message","code","error","i18next","exists","ns","includes","stack","Error","interceptors","response","use","rawData","data","undefined","Auth","signout","window","href","search","msg","Promise","reject","initState","dndSignal","dndTarget","dndSource","fileList","dirList","selectProps","isMultiple","withFolder","withFile","withSourceEnabled","lastSelect","file","shiftSelectedIds","imgPreview","first","other","audioPreview","playingName","paused","isOpen","fileSave","sideBarOpen","checkSelectedProps","forEach","source_enabled","explorer","state","action","Object","assign","target","source","list","addedSelected","targets","newSelected","fileIds","filteredSelected","filter","keywords","searchPath","currentPolicy","policy","AutoHidden","children","enable","hide","element","hidden","setHidden","prev","scrollY","lastUpdate","addEventListener","current","scrollTop","handleNavigation","in","share","apiURL","API","getDownloadURL","reqURL","downloadPath","put","askForOption","options","getState","resolve","dialog","setOptionModal","callback","statusHelper","isHomePage","startsWith","isAdminPage","isLoginPage","isMobile","innerWidth","isAuthenticated","authenticate","cb","SetUser","GetUser","JSON","localStorage","getItem","newUser","setItem","stringify","Check","anonymous","oldUser","SetPreference","preference","GetPreference","GetPreferenceWithDefault","defaultVal","actions","reducers","setNavigator","navigatorLoading","navigateTo","setPagination","viewUpdate","pagination","page","navigateUp","pathSplit","pop","newPath","join","drawerToggleAction","dragAndDrop","changeViewMethod","method","toggleDaylightMode","changeContextMenu","menuType","setNavigatorLoadingStatus","status","setNavigatorError","openCreateFolderDialog","openCreateFileDialog","setUserPopover","anchor","setShareUserPopover","openRenameDialog","openResaveDialog","openMoveDialog","openRemoveDialog","openShareDialog","applyThemes","setSessionStatus","openMusicDialog","openRemoteDownloadDialog","openTorrentDownloadDialog","openDecompressDialog","openCompressDialog","openGetSourceDialog","openCopyDialog","openLoadingDialog","text","closeAllModals","toggleSnackbar","vertical","horizontal","setModalsLoading","refreshFileList","searchMyFile","showImgPreivew","showAudioPreview","audioPreviewSetIsOpen","audioPreviewSetPlaying","refreshStorage","saveFile","setSiteConfig","config","openDirectoryDownloadDialog","downloading","log","done","i18n","ChainedBackend","LanguageDetector","initReactI18next","init","lng","fallbackLng","debug","load","defaultNS","interpolation","escapeValue","backend","backends","LocalStorageBackend","Backend","backendOptions","expirationTime","queryStringParams","v","ASSETS_VERSION","loadPath","on","document","documentElement","setAttribute","displayName","Pool","limit","queue","processing","uploader","push","check","item","this","findIndex","task","dst","ProcessingTaskDuplicatedError","release","run","then","err","processingNum","availableNum","Math","max","slice","checkers","allowedSuffix","ext","FileValidateError","maxSize","validate","c","CancelToken","baseConfig","transformResponse","TransformResponseError","cdBackendConfig","request","url","catch","isCancel","RequestCanceledError","HTTPError","requestAPI","icon","opacity","DarkModeSwitcher","position","ThemeType","useSelector","siteConfig","ToggleThemeMode","isDayLight","isDark","placement","classNames","sideButton","marginRight","paginationOption","SubActions","viewMethod","explorerViewMethod","shareInfo","pageSize","OpenLoadingDialog","ChangeSortMethod","changeSortMethod","SetShareUserPopover","StartBatchDownloadAll","startBatchDownload","ChangePageSize","changePageSize","anchorPagination","setAnchorPagination","handlePaginationChange","s","toggleViewMethod","newMethod","toString","parseInt","nick","creator","style","height","src","widthAnimation","shareUrl","minWidth","wrapper","margin","spacing","buttonProgress","secondary","light","top","left","flexCenter","alignItems","noFlex","display","scoreCalc","marginTop","expireLabel","whiteSpace","ExpansionPanel","withStyles","root","border","boxShadow","borderBottom","expanded","MuiExpansionPanel","ExpansionPanelSummary","content","MuiExpansionPanelSummary","ExpansionPanelDetails","background","default","MuiExpansionPanelDetails","CreatShare","ToggleSnackbar","lastSubmit","useRef","React","setExpanded","shareURL","setShareURL","password","downloads","expires","showPassword","values","setValues","expire","preview","shareOption","setShareOption","customExpires","setCustomExpires","customDownloads","setCustomDownloads","handleChange","prop","event","handleExpand","panel","isExpanded","handleCheck","setTimeout","aria-labelledby","maxWidth","fullWidth","aria-controls","button","primary","checked","variant","htmlFor","endAdornment","aria-label","random","substr","edge","onMouseDown","preventDefault","onIcon","offIcon","labelWidth","labelId","num","inputProps","min","marginLeft","onFocus","select","autoFocus","readonly","link","clipboard","writeText","submitFormBody","is_dir","post","disabled","modalsLoading","OptionSelector","modals","dividers","component","o","description","fab","right","bottom","zIndex","badge","fabProgress","green","buttonSuccess","SaveButton","buttonClassname","clsx","avatar","blue","loadingContainer","loading","LoadingDialog","loadingText","Dialog","DialogContent","DialogContentText","CircularProgress","contentFix","CopyDialog","selectedPath","setSelectedPath","selectedPathName","setSelectedPathName","SetModalsLoading","RefreshFileList","DialogTitle","PathSelector","presentPath","onSelect","folder","Trans","i18nKey","components","DialogActions","Button","dirs","items","src_dir","DirectoryDownloadDialog","logRef","autoScroll","setAutoScroll","previousLog","usePrevious","next","timer","setTimer","useInterval","scrollIntoView","behavior","block","TextField","ref","multiline","FormControlLabel","control","Checkbox","previous","cancelDirectoryDownload","DecompressDialog","SubmitDecompressTask","submitDecompressTask","CompressDialog","fileName","setFileName","SubmitCompressTask","submitCompressTask","formGroup","marginBottom","forumInput","flexGrow","RemoteDownload","selectPathOpen","setSelectPathOpen","downloadTo","setDownloadTo","setUrl","useMediaQuery","torrent","placeholder","InputProps","startAdornment","InputAdornment","input","FolderOpenOutlined","failed","r","details","pathBack","form","Delete","user","force","setForce","unlink","setUnlink","group","advanceDelete","FormControl","FormLabel","FormGroup","Tooltip","delete","ModalsCompoment","newFolderName","newFileName","newName","secretShare","sharePwd","purchaseCallback","handleInputChange","setState","newNameSuffix","UNSAFE_componentWillReceiveProps","nextProps","dndSignale","modalsStatus","rename","dragMove","scoreHandler","Download","downloaded","submitMove","patch","DragSelectedPath","doMove","submitRename","new_name","submitCreateNewFolder","submitCreateNewFile","setMoveTarget","copySource","getSource","createNewFolder","onSubmit","createNewFile","copy","move","remove","remoteDownload","remoteDownloadTorrent","decompress","compress","directoryDownloading","directoryDownloadDone","directoryDownloadLog","Component","Modals","connect","withRouter","withTranslation","sizeToString","bytes","i","floor","pow","toFixed","fixUrlHash","setGetParameter","paramName","paramValue","indexOf","prefix","substring","suffix","history","pushState","changeThemeColor","querySelector","bufferDecode","Uint8Array","from","atob","charCodeAt","bufferEncode","btoa","String","fromCharCode","apply","replace","folders","filePath","hex2bin","hex","padStart","basename","pathList","filename","fileNameNoExt","lastIndexOf","randomStr","result","characters","charactersLength","charAt","getNumber","base","conditions","isMac","platform","toUpperCase","isMobileSafari","ua","userAgent","iOS","match","webkit","vhCheck","vh","innerHeight","setProperty","removeI18nCache","keys","removeItem","getSelectItemStyles","personName","fontWeight","typography","fontWeightRegular","fontWeightMedium","layout","up","player","borderRadius","shape","overflowX","TextViewer","setContent","setStatus","setLoading","useRouteMatch","$vm","createRef","useLocation","URLSearchParams","useParams","requestURL","responseType","textdata","Buffer","toBase64","reader","FileReader","readAsDataURL","onload","onerror","save","addImg","$file","$img2Url","console","elevation","onSave","toolbar","h1","h2","h3","h4","img","expand","undo","redo","subfield","MonacoEditor","lazy","editor","formControl","toobar","textAlign","CodeViewer","setSuffix","wordWrap","setWordWrap","extension","codePreviewSuffix","Array","Set","k","fallback","readOnly","extraEditorClassName","UploaderErrorName","RETRY_ERROR_LIST","FailedCreateUploadSession","HTTPRequestFailed","LocalChunkUploadFailed","SlaveChunkUploadFailed","RequestCanceled","ProcessingTaskDuplicated","FailedTransformResponse","RETRY_CODE_LIST","UploaderError","field","InvalidFile","supported","UnknownPolicyError","UnknownPolicyType","APIError","appError","CreateUploadSessionError","DeleteUploadSessionError","FailedDeleteUploadSession","axiosErr","LocalChunkUploadError","chunkIndex","SlaveChunkUploadError","OneDriveChunkError","OneDriveChunkUploadFailed","retryAfterSeconds","retryAfter","OneDriveEmptyFileSelected","OneDriveEmptyFile","OneDriveFinishUploadError","FailedFinishOneDriveUpload","S3LikeChunkError","S3LikeChunkUploadFailed","getElementsByTagName","innerHTML","S3LikeFinishUploadError","QiniuChunkError","QiniuChunkUploadFailed","QiniuFinishUploadError","FailedFinishQiniuUpload","COSUploadError","COSPostUploadFailed","COSUploadCallbackError","COSUploadCallbackFailed","UpyunUploadError","UpyunPostUploadFailed","S3LikeUploadCallbackError","S3LikeUploadCallbackFailed","parseError","variantIcon","success","CheckCircleIcon","warning","WarningIcon","ErrorIcon","info","InfoIcon","MySnackbarContentWrapper","main","iconVariant","Icon","aria-describedby","close","SnackbarCompoment","snackbar","toggle","handleClose","anchorOrigin","autoHideDuration","AlertBar","UserAvatarPopoverCompoment","openURL","sigOut","reload","Popover","transformOrigin","visitorMenu","Divider","MenuItem","ListItemIcon","registerEnabled","header","largeAvatarContainer","Avatar","largeAvatar","Typography","noWrap","nickname","user_name","Chip","UserAvatarPopover","userPopoverAnchorEl","UserAvatarCompoment","showUserInfo","returnHome","loginCheck","isLogin","mobileHidden","Grow","IconButton","Home","UserAvatar","ListItem","MuiListItem","NavbarCompoment","handleDrawerToggle","mobileOpen","openDownload","startDownload","openDirectoryDownload","startDirectoryDownload","archiveDownload","signOut","finally","UploaderRef","unlisten","listen","drawer","upDrawer","minStickDrawer","paddingList","iconFix","allowRemoteDownload","webdav","process","browser","test","appBar","menuButton","handleDesktopToggle","desktopOpen","menuButtonDesktop","menuIcon","setSelectedTarget","cursor","subTitle","grow","sectionForFile","isPreviewable","openPreview","showDirectoryPicker","isSecureContext","disableClickAway","audioPreviewPlayingName","audioPreviewOpen","smUp","implementation","container","paper","drawerPaper","onOpen","disableDiscovery","ModalProps","keepMounted","xsDown","drawerPaperDesktop","drawerOpen","drawerClose","Navbar","loadUploader","audioPreviewIsOpen","withTheme","flexShrink","drawerDesktop","mixins","flexDirection","justifyContent","transition","transitions","easing","sharp","duration","enteringScreen","leavingScreen","nested","paddingLeft","extendedIcon","addButton","fabButton","badgeFix","dividerFix","folderShareIcon","verticalAlign","shareInfoContainer","textDecoration","shareAvatar","stickFooter","ownerInfo","overflowY","getChunks","chunkByteSize","chunks","count","ceil","chunk","sumChunk","reduce","loaded","getResumeCtxKey","setResumeCtx","logger","ctxKey","warn","WriteCtxFailed","removeResumeCtx","RemoveCtxFailed","cleanupResumeCtx","getResumeCtx","localInfoString","ReadCtxFailed","localInfo","InvalidCtxData","session","now","CtxExpired","listResumeCtx","res","len","OBJtoXML","obj","xml","isArray","array","getFileInput","isFolder","createElement","multiple","body","appendChild","pathJoin","parts","sep","part","RegExp","trimPrefix","getDirectoryUploadDst","relPath","webkitRelativePath","fsPath","readEntriesPromise","directoryReader","readEntries","readFilePromise","fileReader","readAllDirectoryEntries","entries","getAllFileEntries","dataTransferItemList","fileEntries","webkitGetAsEntry","getAsFile","entry","shift","isFile","fullPath","isDirectory","createReader","isFileDrop","dataTransfer","types","configure","ignoreTags","keyMap","SEARCH","SearchBarCompoment","handlers","searchShare","blur","cancelSuggest","searchIcon","inputRoot","inputInput","onBlur","suggestBox","TransitionProps","timeout","square","SearchBar","fade","common","white","pointerEvents","paddingTop","paddingRight","paddingBottom","StorageBarCompoment","percent","used","total","showExpand","firstLoad","componentDidMount","updateStatus","refresh","onMouseEnter","onMouseLeave","storageContainer","detail","bar","StorageBar","storageRefresh","textFix","overflow","textOverflow","Crc32","crc","table","offset","prototype","j","getDataHelper","byteLength","uint8","view","DataView","buffer","ZIP","underlyingSource","ctrl","activeZipObject","closed","files","filenames","encoder","TextEncoder","activeZipIndex","processNextChunk","closeZip","zipWriter","enqueue","fileLike","TypeError","trim","lastModified","directory","endsWith","nameBuf","encode","zipObject","level","comment","compressedLength","uncompressedLength","writeHeader","setUint16","setUint32","getHours","getMinutes","getSeconds","getFullYear","getMonth","getDate","set","writeFooter","footer","indexFilename","setUint8","zipObj","read","outputData","append","stream","getReader","ReadableStream","start","pull","getPreviewPath","walk","f","objects","subs","getFileSystemDirectoryPaths","handle","parent","paths","fileSystemHandle","FileSystemFileHandle","createFileSystemDirectory","cur","getDirectoryHandle","saveFileToFileSystemDirectory","dir","getFileHandle","createWritable","writable","write","verifyFileSystemRWPermission","fileHandle","opts","mode","queryPermission","requestPermission","directoryDownloadAbortController","setFileList","setDirList","setSortMethod","setSideBar","setCurrentPolicy","removeSelectedTargets","addSelectedTargets","setLastSelect","setShiftSelectedIds","selectAll","updateFileList","sortMethod","x","sortFunc","sort","toggleObjectInfoSidebar","closeContextMenu","serverSideBatchDownload","router","fileSources","postBody","shareDownload","allowArchiveDownload","walkSources","fileStream","streamSaver","createWriteStream","readableZipStream","previewPath","fetch","cache","WritableStream","pipeTo","abort","AbortController","startIn","fsPaths","duplicates","updateLog","signal","blob","getViewerURL","viewer","openViewer","selectFile","fileIndex","ctrlKey","metaKey","shiftKey","isMacbook","all","begin","end","newShiftSelected","encodings","encoding","encodingRequired","allOptions","batchGetSource","sourceBatch","openTorrentDownload","openParentFolder","UserInfoCompoment","userNav","flexAvatar","avatarImg","storageCircle","nickName","groupName","UserInfo","backgroundImage","backgroundSize","minHeight","transform","hiddenButton","subMenu","overFlow","paddingSummary","icons","Circle","CircleOutline","Heart","HeartOutline","Hexagon","HexagonOutline","Hexagram","HexagramOutline","Rhombus","RhombusOutline","Square","SquareOutline","Triangle","TriangleOutline","FolderHeartOutline","AddTag","FileTag","useHistory","tagOpen","setTagOpen","addTagModal","setAddTagModal","tagHover","setTagHover","tags","setTags","SearchMyFile","p","NavigateTo","onSuccess","tag","newTags","iconVideo","iconImg","iconAudio","iconDoc","expression","IconComponent","getIcon","ImagPreviewComponent","photoIndex","firstOne","newImg","intro","fileType","toLowerCase","imgPreviewSuffix","images","visible","onIndexChange","n","ImgPreivew","PolicyType","TaskType","Status","Logger","allowLevel","args","getPrintPrefix","createUploadSession","req","cancel","cancelToken","localUploadChunk","sessionID","onProgress","headers","onUploadProgress","progressEvent","slaveUploadChunk","credential","Authorization","oneDriveUploadChunk","range","finishOneDriveUpload","s3LikeUploadChunk","etag","s3LikeFinishUpload","isOss","PartNumber","ETag","validateStatus","qiniuDriveUploadChunk","upToken","authorization","qiniuFinishUpload","partNumber","cosFormUploadChunk","keyTime","ak","bodyFormData","FormData","cosUploadCallback","upyunFormUploadChunk","s3LikeUploadCallback","resumePolicy","local","remote","qiniu","oss","onedrive","s3","Base","manager","child","added","subscriber","progress","lastTime","startTime","subscribe","transit","initialized","setError","queued","pool","preparing","cachedInfo","utils","policy_id","last_modified","mime_type","token","resumed","chunkProgress","upload","afterUpload","finished","cancelUploadSession","canceled","reset","deleteUploadSession","onTransition","newStatus","onError","onMsg","Retryable","fromCache","SelectType","Chunk","initBeforeUploadChunks","updateLocalCache","uploadChunk","chunkSize","notifyResumeProgress","getProgressInfoItem","Local","chunkInfo","updateChunkProgress","Remote","uploadURLs","OneDrive","rangeEnd","sendRange","innererror","alignChunkOffset","chunkOffset","rangeStatus","expectedStart","nextExpectedRanges","newChunkOffset","finishing","OSS","completeURL","Qiniu","chunkRes","COS","Upyun","ResumeHint","resumable","UploadManager","fileInput","directoryInput","currentPath","changeConcurrentLimit","newLimit","File","NoPolicySelected","onchange","ev","fileSelectCallback","click","resumeTasks","tasks","dispatchUploader","resumeHint","cleanupSessions","Event","onFileDroppedIn","onDropLeave","uploaders","onDropFileAdded","logLevel","concurrentLimit","dropZone","onDropOver","cos","upyun","S3","acceptVal","removeAttribute","UploadButton","setOpen","setQueued","OpenNewFolderDialog","OpenNewFileDialog","Queued","uploadClicked","openFileList","circularProgress","useMemo","totalSize","processedSize","taskListOpen","Badge","badgeContent","invisible","Backdrop","SpeedDial","tooltipTitle","SpeedDialIcon","openIcon","FabProps","ariaLabel","SpeedDialAction","tooltipOpen","Directory","infoTitle","infoValue","wordBreak","TaskDetail","navigateToDst","Link","datetime","locale","Grid","xs","progressContent","progressContainer","listAction","successStatus","errorStatus","disabledBadge","dstLink","fileNameContainer","getSpeedText","speed","speedAvg","useSpeedAvg","displayedSpeed","getErrMsg","errMsg","Message","UploadTask","useAvgSpeed","onCancel","onRefresh","taskHover","setTaskHover","startLoadedRef","setProgress","durationTotal","resAvg","retry","useUpload","fullScreen","statusText","uploaded","percentage","resumeLabel","continueLabel","progressBar","lighten","darken","taskDetail","u","stopRipple","stopPropagation","secondaryAction","show","onTouchStart","fileIcon","TypeIcon","isUpload","newExpanded","onMouseOver","ListItemText","ConcurrentOptionDialog","setCount","InputLabel","Input","step","MoreActions","uploadManager","deleteTask","setUseAvgSpeed","setFilter","sorter","setSorter","cleanFinished","retryFailed","concurrentDialog","setConcurrentDialog","RefreshStorage","listItems","tooltip","divider","Replay","ClearAll","Menu","enterNextDelay","dense","val","Transition","forwardRef","Slide","direction","rootOverwrite","flex","popup","inset","paddingZero","dialogContent","maxHeight","virtualList","expandIcon","shortest","expandIconExpanded","sorters","reverse","filters","ongoing","TaskList","taskList","setUploaders","setAnchorEl","refreshList","setRefreshList","reason","Fade","currentList","Nothing","increaseViewportBy","itemContent","classnames","TransitionComponent","disableEnforceFocus","hideBackdrop","disableBackdropClick","disableScrollLock","Accordion","AppBar","Toolbar","disableGutters","MoreHoriz","AccordionDetails","createStyles","backdrop","DropFileBackground","totalProgressCollector","lastProgressStart","Uploader","setTaskListOpen","dropBgOpen","setDropBgOpen","processed","totalProgress","setTotalProgress","fileSelectCounter","openFileSelector","folderSelectCounter","openFolderSelector","enableUploader","taskAdded","original","onToast","setPolicy","unfinished","setInterval","msDocPreviewSuffix","subtitleSuffix","audioPreviewSuffix","videoPreviewSuffix","pdfPreviewSuffix","editSuffix","epubSuffix","json","php","py","bat","cpp","h","cs","css","dockerfile","go","html","ini","java","js","jsx","less","lua","sh","sql","yaml","mediaType","audio","video","image","pdf","word","ppt","excel","zip","excute","android","python","epub","isTorrent","isCompressFile","taskStatus","taskType","taskProgress","getTaskStatus","getTaskType","getTaskProgress","setWopiExts","exts","setSubtitle","setShareInfo","selectLanguage","changeLanguage","dayjs","extend","utc","timezone","userTimezone","Intl","DateTimeFormat","resolvedOptions","timeZone","preferTimeZone","refreshTimeZone","formatLocalTime","time","tz","toDate","formatParams","year","month","day","hour","minute","second","validateTimeZone","format","AudioIcon","VideoIcon","ImageIcon","PdfIcon","FileWordBox","FilePowerpointBox","FileExcelBox","ScriptText","MagnetOn","ZipBox","WindowRestore","Android","FileShowIcon","LanguagePhp","LanguageGo","LanguagePython","LanguageC","LanguageCpp","LanguageJavascript","MenuBook","fileSuffix","getColor","getColorValue","iconClassName","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","isLocalhost","hostname","AuthRoute","rest","render","to","NoAuthRoute","emptyContainer","emptyInfoBig","Notice","primaryColor","secondaryColor","y","rx","ry","captchaPlacholder","NormalCaptcha","captchaRef","useStyle","captcha","setCaptcha","captchaData","setCaptchaData","refreshCaptcha","captchaCode","captchaInputContainer","required","autoComplete","captchaImageContainer","captchaImage","alt","ReCAPTCHA","handleExpired","bind","handleErrored","handleRecaptchaRef","grecaptcha","_widgetId","getResponse","execute","_executeRequested","onExpired","onErrored","sitekey","tabindex","stoken","hl","explicitRender","delayOfCaptchaIframeRemoving","temporaryNode","firstChild","removeChild","elem","childProps","defaultProps","makeAsyncScriptLoader","callbackName","globalName","Recaptcha","reCaptchaKey","captcha_ReCaptchaKey","captchaContainer","ReCaptcha","TCaptcha","isValidateRef","submitRef","appid","tcaptcha_captcha_app_id","onLoad","TencentCaptcha","ret","ticket","randstr","isValidate","submit","defaultValidate","useCaptcha","captchaType","captcha_type","captchaLoading","setCaptchaLoading","captchaRefreshRef","normal","captchaParamsRef","CaptchaRender","useNormalCaptcha","recaptcha","useRecaptcha","tcaptcha","useTCaptcha","buttonContainer","authnLink","LoginForm","email","setEmail","pwd","setPwd","useAuthn","setUseAuthn","twoFA","setTwoFA","faCode","setFACode","loginCaptcha","authn","ApplyThemes","SetSessionStatus","afterLogin","Paper","login","userName","Password","EmailOutlined","VpnKeyOutlined","credentials","credentialRequestOptions","publicKey","challenge","allowCredentials","listItem","assertion","authData","authenticatorData","clientDataJSON","rawId","sig","signature","userHandle","RouterLink","Fingerprint","VpnKey","highlight","FileName","highlightClassName","searchWords","autoEscape","textToHighlight","SmallIconCompoment","nextState","nextContext","isSelectedCurrent","isSelectedNext","isSelected","ButtonBase","focusRipple","notSelected","onIconClick","iconSelected","iconNotSelected","Folder","checkIcon","folderName","folderNameSelected","folderNameNotSelected","SmallIcon","boxSizing","FileIconCompoment","showPicIcon","thumb","picPreview","noDrag","afterLoad","beforeLoad","loadingAnimation","previewIcon","iconBig","fileInfo","shareFix","FileIcon","objectFit","userDrag","active","isActive","dragging","cardDragged","diliverIcon","object","Preview","card","layerStyles","getItemStyles","initialOffset","currentOffset","pointerOffset","WebkitTransform","CustomDragLayer","useDragLayer","monitor","itemType","getItemType","getInitialSourceClientOffset","getSourceClientOffset","getInitialClientOffset","isDragging","StyledListItemIcon","ContextMenuCompoment","X","Y","setPoint","clientY","clientX","openArchiveDownload","enterFolder","renderMenuItems","visibleCount","condition","menuOpen","anchorReference","anchorPosition","Unarchive","Archive","InfoOutlined","propover","ContextMenu","contextType","contextOpen","TableRowCompoment","tableIcon","pref","onContextMenu","contextMenu","handleClick","onDoubleClick","handleDoubleClick","selectedShared","TableCell","dref","scope","tableRow","hideAuto","TableItem","hover","userSelect","FolderDropWarpper","isListView","useDrop","accept","drop","collect","isOver","canDrop","useDragScrolling","isScrolling","goDown","isScrollEnd","offsetHeight","scrollHeight","requestAnimationFrame","goUp","throttleOnDragOver","throttle","isMouseOnTop","isMouseOnDown","addEventListenerForWindow","removeEventListenerForWindow","removeEventListener","fixFlex","ObjectIcon","navigatorPath","SetSelectedTarget","NavitateTo","DragAndDrop","OpenPreview","StartDownload","SelectFile","handleIconClick","useDrag","dropResult","getDropResult","canDrag","drag","getEmptyImage","captureDraggingState","rootTable","typeHeader","errorBox","errorMsg","flexFix","upButton","clickAway","rootShare","visuallyHidden","clip","gridContainer","gridTemplateColumns","gridItem","DELETE_FILE","SELECT_ALL_SHOWED","SELECT_ALL","DESELECT_ALL","Explorer","navigatorErrorMsg","navigatorError","OpenRemoveDialog","ChangeContextMenu","SelectAll","page_size","page_number","startIndex","usePagination","showView","listView","TableHead","TableSortLabel","TableBody","normalView","data-clickAway","dataset","clickaway","allowChanges","expandMore","textTransform","PathButton","inputRef","more","last","DropDownItem","setActiveStatus","DropDown","clearTimeout","shouldClose","NavigatorComponent","currentID","hiddenFolders","hiddenMode","anchorHidden","URL","searchParams","renderPath","onpopstate","navigateToPath","max_size","file_type","checkOverFlow","redresh","componentDidUpdate","prevProps","prevStates","ms","drawerDesktopOpen","overflowInitLock","hasOverflowingChildren","offsetWidth","scrollWidth","showHiddenPath","performAction","newTarget","presentFolderMenu","disableAutoFocusItem","roundBorder","navigatorContainer","nav","rightIcon","optionContainer","Navigator","ListLoading","drawerContainer","placeContent","fileIconSVG","folderIcon","closeIcon","placeSelf","propsContainer","propsLabel","propsTime","propsValue","SideDrawer","SetSideBar","setTarget","setDetails","propsItem","d","toLocaleString","child_folder_num","child_file_num","updated_at","created_at","query_date","Hidden","Clear","Drawer","gutterBottom","CustomPaginationItem","PaginationItem","PaginationFooter","SetPagination","Pagination","renderItem","FileManager","DndProvider","HTML5Backend","DragLayer","SelectMenu","showIcon","Artplayer","externalPlayers","actionButton","VideoViewer","art","setArt","setFiles","subtitles","setSubtitles","playlist","setPlaylist","subtitleOpen","setSubtitleOpen","subtitleSelected","setSubtitleSelected","playlistOpen","setPlaylistOpen","externalPlayerOpen","setExternalPlayerOpen","autoHeight","pictureInPictureEnabled","playing","pip","pause","newURL","subtitle","switchUrl","switchSubtitle","switch","fileNameMatch","flip","setting","playbackRate","aspectRatio","hotkey","fullscreen","fullscreenWeb","whitelist","moreVideoAttr","playsInline","lang","getInstance","startIcon","Subtitles","PlaylistPlay","Launch","sub","cardContainer","shareTitle","avatarFile","avatarFolder","gird","loadMore","orderSelect","cardAction","SearchResult","tGlobal","setPage","setTotal","shareList","setShareList","orderBy","setOrderBy","order","sm","Select","Card","CardHeader","subheader","MyShareCompoment","showPwd","loadList","removeShare","oldList","changePermission","newPwd","shareIndex","changePreviewOption","handlePageChange","handleOrderChange","isExpired","remain_downloads","md","CardActions","disableActionSpacing","VisibilityOff","MyShare","scroll","SelectFileDialog","filesCopy","row","iconContainer","borderInlineStart","contentSide","iconMultiple","subFile","subFileName","subFileIcon","subFileSize","subFilePercent","bitmap","DownloadingCard","canvasRef","setTask","selectDialogOpen","setSelectDialogOpen","selectFileOption","setSelectFileOption","bitfield","str","canvas","context","getContext","clearRect","strokeStyle","bit","round","numPieces","beginPath","moveTo","lineTo","stroke","getPercent","completed","activeFiles","getDownloadName","bittorrent","subFileList","processStyle","completedLength","subFileCell","newIndex","newFiles","gid","indexes","deleteFile","HighlightOff","Table","TableRow","CardContent","LinearProgress","update","uploadLength","uploadSpeed","infoHash","numSeeders","seeder","pieceLength","node","FinishedCard","getTaskError","task_status","task_error","RemoteDownloadButton","OpenRemoteDownloadDialog","Fab","Add","DownloadComponent","interval","previousDownloading","finishedList","continue","loadDownloading","PageLoading","LockedFileCompoment","setPassowrd","LockedFile","marginRottom","boxHeader","shareDes","Creator","userProfile","views","ImgPreview","SharedFileCompoment","scoreHandle","download","box","boxContent","fileSize","boxFooter","actionLeft","downloadButton","SharedFile","openResave","fileCotainer","buttonCotainer","ReadMe","SharedFolderComponent","handleClickAway","ignore","readmeShowed","ClickAwayListener","onClickAway","managerContainer","SharedFolder","shareUserPopoverAnchorEl","SharePreload","setShare","setPassword","locked","withPassword","iframe","DocViewer","setSession","setFile","shareOpened","modalLoading","CloseAllModals","OpenShareDialog","access_token","replaceAll","resolvedLanguage","handlePostMessage","origin","MessageId","frameholder","getElementById","office_frame","access_token_ttl","formIcon","CreateWebDAVAccount","setValue","pathSelectDialog","setPathSelectDialog","formContainer","LabelOutlined","qrcode","AppQRCode","clearInterval","Box","PhoneSkeleton","xmlns","enableBackground","viewBox","fill","strokeMiterlimit","strokeWidth","cx","cy","phoneContainer","marginX","perspective","transformStyle","perspectiveOrigin","phoneFrame","phoneImage","bold","frameContainer","grid","ol","paddingInlineStart","li","AppPromotion","effect","cardContent","tableContainer","WebDAV","tab","setTab","setCreate","accounts","setAccounts","appPromotion","app_promotion","account","ID","CreatedAt","Name","Root","Readonly","Tabs","indicatorColor","textColor","newValue","Tab","Alert","severity","TableContainer","align","accountCopy","toggleAccountReadonly","allowWebDAVProxy","UseProxy","use_proxy","toggleAccountUseProxy","CloudOff","Cloud","deleteAccount","Tasks","setTasks","nowrap","getError","ProfileCompoment","listType","loadNext","loadPrev","avatarContainer","centered","infoContainer","infoItem","mobileHide","th","tableLink","Profile","backgroundPosition","borderRaidus","pageInfo","sectionTitle","desenList","flexContainer","Authn","setSelected","confirm","setConfirm","deleteCredential","List","fingerprint","ListItemSecondaryAction","credentialCreationOptions","excludeCredentials","attestationObject","add","TimeZoneDialog","timeZoneValue","setTimeZoneValue","UserSettingCompoment","avatarModal","nickModal","changePassword","oldPwd","webdavPwd","newPwdRepeat","twoFactor","authCode","changeTheme","chosenTheme","showWebDavUrl","showWebDavUserName","changeWebDavPwd","groupBackModal","changePolicy","changeTimeZone","settings","uid","group_expires","qq","homepage","two_factor","two_fa_secret","prefer_theme","themes","changeView","loadSetting","useGravatar","changeNick","uploadAvatar","formData","handleToggle","changhePwd","old","new","changheWebdavPwd","init2FA","handleAlignment","toggleThemeMode","newMode","ListItemAvatar","infoTextWithIcon","rightIconWithText","infoText","Switch","firstColor","secondColor","Brightness3","ListAlt","Schedule","Translate","GitHub","uploadFromFile","userGravatar","paddingText","textField","flexContainerResponse","desText","ToggleButtonGroup","exclusive","ToggleButton","themeBlock","UserSetting","yellow","policySelected","avatarSuccess","Register","password_repeat","setInput","emailActive","setEmailActive","regCaptcha","Activation","setSuccess","ResetForm","secret","Reset","forgetCaptcha","MusicPlayerComponent","currentIndex","currentTime","progressText","looptype","myAudioRef","newItem","handleItemClick","backgroundPlay","bindEvents","ele","readyPlay","loopnext","timeUpdate","unbindEvents","play","formatTime","isNaN","playOrPaues","isPlay","changeLoopType","lt","handleProgress","idx","Slider","slider_root","justify","Repeat","RepeatOne","Shuffle","MusicPlayer","ReactReader","m","EpubViewer","currentLocation","setLocation","fileUrl","locationChanged","epubcifi","epubInitOptions","openAs","showToc","PDFViewer","App","themeConfig","prefersDarkMode","prefer","createMuiTheme","overrides","MuiButton","MuiTab","Fragment","ThemeProvider","CssBaseline","exact","Text","Code","initUserConfig","store","defaultTheme","wopi_exts","preferListMethod","share_view_method","home_view_method","music","resave","doNavigate","currntPath","defaultStatus","rawStore","configCache","InitSiteConfig","siteICPId","QQLogin","black","contrastText","hint","bgSelected","emptyIcon","ErrorBoundary","hasError","errorInfo","componentStack","Admin","hash","contentType","ready","unregister","checkValidServiceWorker","alert","waiting","postMessage","createBrowserHistory","reduxEnhance","applyMiddleware","routerMiddleware","thunk","createStore","viewUpdateState","explorerState","appState","cloudreveApp","combinedState","combinedReducer","combine","namespace","reducer","invariant","combineReducers","connectRouter","UpdateSiteConfig","ReactDOM","emptyInfoSmall","PathSelectorCompoment","selectedTarget","sourceDirList","toBeLoad","back","api","updateDirList","handleSelect","unshift","displayNames","sortWrapper","sortButton","selector","primaryTypographyProps","showActionIcon","buttonIcon","iconWhite","actionIcon"],"mappings":"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","file":"static/js/main.14aeed0d.chunk.js","sourcesContent":["import { useDispatch } from \"react-redux\";\r\nimport { useCallback, useEffect, useState } from \"react\";\r\nimport { changeSubTitle } from \"../redux/viewUpdate/action\";\r\nimport pathHelper from \"../utils/page\";\r\n\r\nexport default function UseFileSubTitle(query, math, location) {\r\n const dispatch = useDispatch();\r\n const [title, setTitle] = useState(\"\");\r\n const [path, setPath] = useState(\"\");\r\n const SetSubTitle = useCallback(\r\n (title) => dispatch(changeSubTitle(title)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (!pathHelper.isSharePage(location.pathname)) {\r\n const path = query.get(\"p\").split(\"/\");\r\n setPath(query.get(\"p\"));\r\n SetSubTitle(path[path.length - 1]);\r\n setTitle(path[path.length - 1]);\r\n } else {\r\n SetSubTitle(query.get(\"name\"));\r\n setTitle(query.get(\"name\"));\r\n setPath(query.get(\"share_path\"));\r\n }\r\n // eslint-disable-next-line\r\n }, [math.params[0], location]);\r\n\r\n return { title, path };\r\n}\r\n","import React, { MouseEventHandler, useState } from \"react\";\r\nimport { IconButton, Menu, MenuItem } from \"@material-ui/core\";\r\nimport TextTotateVerticalIcon from \"@material-ui/icons/TextRotateVertical\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { CloudreveFile, SortMethod } from \"./../../types/index\";\r\n\r\nconst SORT_OPTIONS: {\r\n value: SortMethod;\r\n label: string;\r\n}[] = [\r\n { value: \"namePos\", label: \"A-Z\" },\r\n { value: \"nameRev\", label: \"Z-A\" },\r\n { value: \"timePos\", label: \"oldestUploaded\" },\r\n { value: \"timeRev\", label: \"newestUploaded\" },\r\n { value: \"modifyTimePos\", label: \"oldestModified\" },\r\n { value: \"modifyTimeRev\", label: \"newestModified\" },\r\n { value: \"sizePos\", label: \"smallest\" },\r\n { value: \"sizeRes\", label: \"largest\" },\r\n]\r\n\r\nexport default function Sort({ value, onChange, isSmall, inherit, className }) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"fileManager.sortMethods\" });\r\n\r\n const [anchorSort, setAnchorSort] = useState(null);\r\n const showSortOptions: MouseEventHandler = (e) => {\r\n setAnchorSort(e.currentTarget);\r\n }\r\n \r\n const [sortBy, setSortBy] = useState(value || '')\r\n function onChangeSort(value: SortMethod) {\r\n setSortBy(value)\r\n onChange(value)\r\n setAnchorSort(null);\r\n }\r\n return (\r\n <>\r\n \r\n \r\n \r\n setAnchorSort(null)}\r\n >\r\n {\r\n SORT_OPTIONS.map((option, index) => (\r\n onChangeSort(option.value)}\r\n >\r\n {t(option.label)}\r\n \r\n ))\r\n }\r\n \r\n \r\n )\r\n}\r\n\r\n\r\ntype SortFunc = (a: CloudreveFile, b: CloudreveFile) => number;\r\n\r\nexport const sortMethodFuncs: Record = {\r\n sizePos: (a: CloudreveFile, b: CloudreveFile) => {\r\n return a.size - b.size;\r\n },\r\n sizeRes: (a: CloudreveFile, b: CloudreveFile) => {\r\n return b.size - a.size;\r\n },\r\n namePos: (a: CloudreveFile, b: CloudreveFile) => {\r\n return a.name.localeCompare(\r\n b.name,\r\n navigator.languages[0] || navigator.language,\r\n { numeric: true, ignorePunctuation: true }\r\n );\r\n },\r\n nameRev: (a: CloudreveFile, b: CloudreveFile) => {\r\n return b.name.localeCompare(\r\n a.name,\r\n navigator.languages[0] || navigator.language,\r\n { numeric: true, ignorePunctuation: true }\r\n );\r\n },\r\n timePos: (a: CloudreveFile, b: CloudreveFile) => {\r\n return Date.parse(a.create_date) - Date.parse(b.create_date);\r\n },\r\n timeRev: (a: CloudreveFile, b: CloudreveFile) => {\r\n return Date.parse(b.create_date) - Date.parse(a.create_date);\r\n },\r\n modifyTimePos: (a: CloudreveFile, b: CloudreveFile) => {\r\n return Date.parse(a.date) - Date.parse(b.date);\r\n },\r\n modifyTimeRev: (a: CloudreveFile, b: CloudreveFile) => {\r\n return Date.parse(b.date) - Date.parse(a.date);\r\n },\r\n};\r\n","import React from \"react\";\r\nimport { Code } from \"react-content-loader\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n loader: {\r\n width: \"70%\",\r\n padding: 40,\r\n [theme.breakpoints.down(\"md\")]: {\r\n width: \"100%\",\r\n padding: 10,\r\n },\r\n },\r\n}));\r\n\r\nconst MyLoader = (props) => (\r\n \r\n);\r\n\r\nfunction TextLoading() {\r\n const theme = useTheme();\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default TextLoading;\r\n","import axios from \"axios\";\r\nimport Auth from \"./Auth\";\r\nimport i18next from \"../i18n\";\r\n\r\nexport const baseURL = \"/api/v3\";\r\n\r\nexport const getBaseURL = () => {\r\n return baseURL;\r\n};\r\n\r\nexport const getPreviewURL = (\r\n isShare: boolean,\r\n shareID: any,\r\n fileID: any,\r\n path: any\r\n): string => {\r\n return (\r\n getBaseURL() +\r\n (isShare\r\n ? \"/share/preview/\" +\r\n shareID +\r\n (path !== \"\" ? \"?path=\" + encodeURIComponent(path) : \"\")\r\n : \"/file/preview/\" + fileID)\r\n );\r\n};\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\r\n// @ts-ignore\r\nconst instance = axios.create({\r\n baseURL: getBaseURL(),\r\n withCredentials: true,\r\n});\r\n\r\nexport class AppError extends Error {\r\n constructor(message: string | undefined, public code: any, error: any) {\r\n super(message);\r\n this.code = code;\r\n if (i18next.exists(`errors.${code}`, { ns: \"common\" })) {\r\n this.message = i18next.t(`errors.${code}`, {\r\n ns: \"common\",\r\n message,\r\n });\r\n } else if (i18next.exists(`errors.${code}`, { ns: \"dashboard\" })) {\r\n this.message = i18next.t(`errors.${code}`, {\r\n ns: \"dashboard\",\r\n message,\r\n });\r\n } else {\r\n this.message =\r\n message || i18next.t(\"unknownError\", { ns: \"common\" });\r\n }\r\n\r\n this.message +=\r\n error && !this.message.includes(error) ? ` (${error})` : \"\";\r\n this.stack = new Error().stack;\r\n }\r\n}\r\n\r\ninstance.interceptors.response.use(\r\n function (response: any) {\r\n response.rawData = response.data;\r\n response.data = response.data.data;\r\n if (\r\n response.rawData.code !== undefined &&\r\n response.rawData.code !== 0 &&\r\n response.rawData.code !== 203\r\n ) {\r\n // Login expired\r\n if (response.rawData.code === 401) {\r\n Auth.signout();\r\n window.location.href =\r\n \"/login?redirect=\" +\r\n encodeURIComponent(\r\n window.location.pathname + window.location.search\r\n );\r\n }\r\n\r\n // Non-admin\r\n if (response.rawData.code === 40008) {\r\n window.location.href = \"/home\";\r\n }\r\n throw new AppError(\r\n response.rawData.msg,\r\n response.rawData.code,\r\n response.rawData.error\r\n );\r\n }\r\n return response;\r\n },\r\n function (error) {\r\n return Promise.reject(error);\r\n }\r\n);\r\n\r\nexport default instance;\r\n","/* eslint-disable no-case-declarations */\r\nimport { AnyAction } from \"redux\";\r\nimport { CloudreveFile } from \"../../types\";\r\nimport { Policy } from \"../../component/Uploader/core/types\";\r\n\r\ninterface SelectProps {\r\n isMultiple: boolean;\r\n withFolder: boolean;\r\n withFile: boolean;\r\n withSourceEnabled: boolean;\r\n}\r\n\r\nexport interface ExplorerState {\r\n dndSignal: boolean;\r\n dndTarget: any;\r\n dndSource: any;\r\n fileList: CloudreveFile[];\r\n dirList: CloudreveFile[];\r\n selected: CloudreveFile[];\r\n selectProps: SelectProps;\r\n lastSelect: {\r\n file: CloudreveFile;\r\n index: number;\r\n };\r\n shiftSelectedIds: string[];\r\n imgPreview: {\r\n first: CloudreveFile;\r\n other: [];\r\n };\r\n audioPreview: {\r\n first: CloudreveFile;\r\n other: [];\r\n playingName: any;\r\n paused: boolean;\r\n isOpen: boolean;\r\n };\r\n search?: {\r\n keywords: string;\r\n searchPath: string;\r\n };\r\n fileSave: boolean;\r\n sideBarOpen: boolean;\r\n currentPolicy?: Policy;\r\n}\r\n\r\nexport const initState: ExplorerState = {\r\n dndSignal: false,\r\n dndTarget: null,\r\n dndSource: null,\r\n fileList: [],\r\n dirList: [],\r\n selected: [],\r\n selectProps: {\r\n isMultiple: false,\r\n withFolder: false,\r\n withFile: false,\r\n withSourceEnabled: false,\r\n },\r\n lastSelect: {\r\n file: {\r\n id: \"\",\r\n name: \"\",\r\n size: 0,\r\n type: \"file\",\r\n date: \"\",\r\n path: \"\",\r\n create_date: \"\",\r\n },\r\n index: -1,\r\n },\r\n shiftSelectedIds: [],\r\n imgPreview: {\r\n first: {\r\n id: \"\",\r\n name: \"\",\r\n size: 0,\r\n type: \"file\",\r\n date: \"\",\r\n path: \"\",\r\n create_date: \"\",\r\n },\r\n other: [],\r\n },\r\n audioPreview: {\r\n first: {\r\n id: \"\",\r\n name: \"\",\r\n size: 0,\r\n type: \"file\",\r\n date: \"\",\r\n path: \"\",\r\n create_date: \"\",\r\n },\r\n other: [],\r\n playingName: null,\r\n paused: false,\r\n isOpen: false,\r\n },\r\n fileSave: false,\r\n sideBarOpen: false,\r\n};\r\n\r\nconst checkSelectedProps = (selected: CloudreveFile[]): SelectProps => {\r\n const isMultiple = selected.length > 1;\r\n let withFolder = false;\r\n let withFile = false;\r\n let withSourceEnabled = false;\r\n selected.forEach((value) => {\r\n if (value.type === \"dir\") {\r\n withFolder = true;\r\n withSourceEnabled = true;\r\n } else if (value.type === \"file\") {\r\n withFile = true;\r\n if (value.source_enabled) {\r\n withSourceEnabled = true;\r\n }\r\n }\r\n });\r\n return {\r\n isMultiple,\r\n withFolder,\r\n withFile,\r\n withSourceEnabled,\r\n };\r\n};\r\n\r\nconst explorer = (\r\n state: ExplorerState = initState,\r\n action: AnyAction\r\n): ExplorerState => {\r\n switch (action.type) {\r\n case \"DRAG_AND_DROP\":\r\n return Object.assign({}, state, {\r\n dndSignal: !state.dndSignal,\r\n dndTarget: action.target,\r\n dndSource: action.source,\r\n });\r\n case \"SET_FILE_LIST\":\r\n return Object.assign({}, state, {\r\n fileList: action.list,\r\n });\r\n case \"SET_DIR_LIST\":\r\n return Object.assign({}, state, {\r\n dirList: action.list,\r\n });\r\n case \"ADD_SELECTED_TARGETS\":\r\n const addedSelected = [...state.selected, ...action.targets];\r\n return Object.assign({}, state, {\r\n selected: addedSelected,\r\n selectProps: checkSelectedProps(addedSelected),\r\n });\r\n case \"SET_SELECTED_TARGET\":\r\n const newSelected = action.targets;\r\n return Object.assign({}, state, {\r\n selected: newSelected,\r\n selectProps: checkSelectedProps(newSelected),\r\n });\r\n case \"RMOVE_SELECTED_TARGETS\":\r\n const { fileIds } = action;\r\n const filteredSelected = state.selected.filter((file) => {\r\n return !fileIds.includes(file.id);\r\n });\r\n return Object.assign({}, state, {\r\n selected: filteredSelected,\r\n selectProps: checkSelectedProps(filteredSelected),\r\n });\r\n case \"REFRESH_FILE_LIST\":\r\n return Object.assign({}, state, {\r\n selected: [],\r\n selectProps: {\r\n isMultiple: false,\r\n withFolder: false,\r\n withFile: false,\r\n withSourceEnabled: false,\r\n },\r\n });\r\n case \"SEARCH_MY_FILE\":\r\n return Object.assign({}, state, {\r\n selected: [],\r\n selectProps: {\r\n isMultiple: false,\r\n withFolder: false,\r\n withFile: false,\r\n withSourceEnabled: false,\r\n },\r\n search: {\r\n keywords: action.keywords,\r\n searchPath: action.path,\r\n },\r\n });\r\n case \"SHOW_IMG_PREIVEW\":\r\n return Object.assign({}, state, {\r\n imgPreview: {\r\n first: action.first,\r\n other: state.fileList,\r\n },\r\n });\r\n case \"SHOW_AUDIO_PREVIEW\":\r\n return Object.assign({}, state, {\r\n audioPreview: {\r\n ...state.audioPreview,\r\n first: action.first,\r\n other: state.fileList,\r\n },\r\n });\r\n case \"AUDIO_PREVIEW_SET_IS_OPEN\":\r\n return Object.assign({}, state, {\r\n audioPreview: {\r\n ...state.audioPreview,\r\n isOpen: action.isOpen,\r\n },\r\n });\r\n case \"AUDIO_PREVIEW_SET_PLAYING\":\r\n return Object.assign({}, state, {\r\n audioPreview: {\r\n ...state.audioPreview,\r\n playingName: action.playingName,\r\n paused: action.paused,\r\n },\r\n });\r\n case \"SAVE_FILE\":\r\n return {\r\n ...state,\r\n fileSave: !state.fileSave,\r\n };\r\n case \"SET_LAST_SELECT\":\r\n const { file, index } = action;\r\n return {\r\n ...state,\r\n lastSelect: {\r\n file,\r\n index,\r\n },\r\n };\r\n case \"SET_SHIFT_SELECTED_IDS\":\r\n const { shiftSelectedIds } = action;\r\n return {\r\n ...state,\r\n shiftSelectedIds,\r\n };\r\n case \"SET_NAVIGATOR\":\r\n return {\r\n ...state,\r\n selected: [],\r\n selectProps: {\r\n isMultiple: false,\r\n withFolder: false,\r\n withFile: false,\r\n withSourceEnabled: false,\r\n },\r\n search: undefined,\r\n };\r\n case \"SET_SIDE_BAR\":\r\n return {\r\n ...state,\r\n sideBarOpen: action.open,\r\n };\r\n case \"SET_CURRENT_POLICY\":\r\n return {\r\n ...state,\r\n currentPolicy: action.policy,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport default explorer;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport Zoom from \"@material-ui/core/Zoom\";\r\n\r\nfunction AutoHidden({ children, enable, hide = false, element = null }) {\r\n const [hidden, setHidden] = useState(false);\r\n let prev = window.scrollY;\r\n let lastUpdate = window.scrollY;\r\n const show = 50;\r\n\r\n useEffect(() => {\r\n const handleNavigation = (e) => {\r\n const window = e.currentTarget;\r\n const current = element ? element.scrollTop : window.scrollY;\r\n\r\n if (prev > current) {\r\n if (lastUpdate - current > show) {\r\n lastUpdate = current;\r\n setHidden(false);\r\n }\r\n } else if (prev < current) {\r\n if (current - lastUpdate > show) {\r\n lastUpdate = current;\r\n setHidden(true);\r\n }\r\n }\r\n prev = current;\r\n };\r\n if (enable) {\r\n const target = element ? element : window;\r\n target.addEventListener(\"scroll\", (e) => handleNavigation(e));\r\n }\r\n // eslint-disable-next-line\r\n }, [enable]);\r\n\r\n return {children};\r\n}\r\n\r\nexport default AutoHidden;\r\n","import API from \"../middleware/Api\";\r\n\r\nexport async function list(\r\n path: string,\r\n share: any,\r\n keywords: string,\r\n searchPath: string\r\n): Promise {\r\n let apiURL = \"\";\r\n if (share) {\r\n if (keywords === \"\") {\r\n apiURL = \"/share/list/\" + share.key;\r\n } else {\r\n apiURL = `/share/search/${share.key}/`;\r\n }\r\n } else {\r\n if (keywords === \"\") {\r\n apiURL = \"/directory\";\r\n } else {\r\n apiURL = \"/file/search/\";\r\n }\r\n }\r\n\r\n path = keywords === \"\" ? path : keywords;\r\n apiURL = apiURL + encodeURIComponent(path);\r\n if (searchPath) {\r\n apiURL = `${apiURL}?path=${encodeURIComponent(searchPath)}`;\r\n }\r\n return API.get(apiURL);\r\n}\r\n","import API from \"../middleware/Api\";\r\n\r\nexport async function getDownloadURL(file: any): Promise {\r\n let reqURL = \"\";\r\n if (file.key) {\r\n const downloadPath =\r\n file.path === \"/\"\r\n ? file.path + file.name\r\n : file.path + \"/\" + file.name;\r\n reqURL =\r\n \"/share/download/\" +\r\n file.key +\r\n \"?path=\" +\r\n encodeURIComponent(downloadPath);\r\n } else {\r\n reqURL = \"/file/download/\" + file.id;\r\n }\r\n\r\n return API.put(reqURL);\r\n}\r\n","import { ThunkAction } from \"redux-thunk\";\r\nimport { setOptionModal } from \"../viewUpdate/action\";\r\nimport i18next from \"../../i18n\";\r\n\r\nexport const askForOption = (\r\n options: any,\r\n title: string\r\n): ThunkAction => {\r\n return async (dispatch, getState): Promise => {\r\n return new Promise((resolve, reject) => {\r\n const dialog = {\r\n open: true,\r\n title: title,\r\n options: options,\r\n };\r\n dispatch(\r\n setOptionModal({\r\n ...dialog,\r\n onClose: () => {\r\n dispatch(setOptionModal({ ...dialog, open: false }));\r\n reject(i18next.t(\"fileManager.userDenied\"));\r\n },\r\n callback: (option: any) => {\r\n resolve(option);\r\n dispatch(setOptionModal({ ...dialog, open: false }));\r\n },\r\n })\r\n );\r\n });\r\n };\r\n};\r\n","const statusHelper = {\r\n isHomePage(path: string) {\r\n return path === \"/home\";\r\n },\r\n isSharePage(path: string) {\r\n return path && path.startsWith(\"/s/\");\r\n },\r\n isAdminPage(path: string) {\r\n return path && path.startsWith(\"/admin\");\r\n },\r\n isLoginPage(path: string) {\r\n return path && path.startsWith(\"/login\");\r\n },\r\n isMobile() {\r\n return window.innerWidth < 600;\r\n },\r\n};\r\nexport default statusHelper;\r\n","const Auth = {\r\n isAuthenticated: false,\r\n authenticate(cb: any) {\r\n Auth.SetUser(cb);\r\n Auth.isAuthenticated = true;\r\n },\r\n GetUser() {\r\n return JSON.parse(localStorage.getItem(\"user\") || \"null\");\r\n },\r\n SetUser(newUser: any) {\r\n localStorage.setItem(\"user\", JSON.stringify(newUser));\r\n },\r\n Check(): boolean {\r\n if (Auth.isAuthenticated) {\r\n return true;\r\n }\r\n if (localStorage.getItem(\"user\") !== null) {\r\n return !Auth.GetUser().anonymous;\r\n }\r\n return false;\r\n },\r\n signout() {\r\n Auth.isAuthenticated = false;\r\n const oldUser = Auth.GetUser();\r\n oldUser.id = 0;\r\n localStorage.setItem(\"user\", JSON.stringify(oldUser));\r\n },\r\n SetPreference(key: string, value: any) {\r\n let preference = JSON.parse(\r\n localStorage.getItem(\"user_preference\") || \"{}\"\r\n );\r\n preference = preference == null ? {} : preference;\r\n preference[key] = value;\r\n localStorage.setItem(\"user_preference\", JSON.stringify(preference));\r\n },\r\n GetPreference(key: string): any | null {\r\n const preference = JSON.parse(\r\n localStorage.getItem(\"user_preference\") || \"{}\"\r\n );\r\n if (preference && preference[key] !== undefined) {\r\n return preference[key];\r\n }\r\n return null;\r\n },\r\n GetPreferenceWithDefault(key: string, defaultVal: any): any {\r\n return Auth.GetPreference(key) !== null\r\n ? Auth.GetPreference(key)\r\n : defaultVal;\r\n },\r\n};\r\n\r\nexport default Auth;\r\n","import * as actions from \"./action\";\r\nimport * as reducers from \"./reducer\";\r\nimport { setPagination } from \"../viewUpdate/action\";\r\n\r\nexport default {\r\n actions,\r\n reducers,\r\n};\r\nexport { selectFile } from \"./action\";\r\nexport { openPreview } from \"./action\";\r\nexport { setShiftSelectedIds } from \"./action\";\r\nexport { setLastSelect } from \"./action\";\r\nexport { setSelectedTarget } from \"./action\";\r\nexport { addSelectedTargets } from \"./action\";\r\nexport { removeSelectedTargets } from \"./action\";\r\nexport const setNavigator = (path: any, navigatorLoading: any) => {\r\n return {\r\n type: \"SET_NAVIGATOR\",\r\n path,\r\n navigatorLoading,\r\n };\r\n};\r\nexport const navigateTo = (path: any) => {\r\n return (dispatch: any, getState: any) => {\r\n const state = getState();\r\n const navigatorLoading = path !== state.navigator.path;\r\n if (navigatorLoading) {\r\n dispatch(\r\n setPagination({\r\n ...state.viewUpdate.pagination,\r\n page: 1,\r\n })\r\n );\r\n }\r\n dispatch(setNavigator(path, navigatorLoading));\r\n };\r\n};\r\nexport const navigateUp = () => {\r\n return (dispatch, getState) => {\r\n const state = getState();\r\n const pathSplit = state.navigator.path.split(\"/\");\r\n pathSplit.pop();\r\n const newPath = pathSplit.length === 1 ? \"/\" : pathSplit.join(\"/\");\r\n const navigatorLoading = newPath !== state.navigator.path;\r\n if (navigatorLoading) {\r\n dispatch(\r\n setPagination({\r\n ...state.viewUpdate.pagination,\r\n page: 1,\r\n })\r\n );\r\n }\r\n dispatch(setNavigator(newPath, navigatorLoading));\r\n };\r\n};\r\nexport const drawerToggleAction = (open) => {\r\n return {\r\n type: \"DRAWER_TOGGLE\",\r\n open: open,\r\n };\r\n};\r\nexport const dragAndDrop = (source, target) => {\r\n return {\r\n type: \"DRAG_AND_DROP\",\r\n source: source,\r\n target: target,\r\n };\r\n};\r\nexport const changeViewMethod = (method) => {\r\n return {\r\n type: \"CHANGE_VIEW_METHOD\",\r\n method: method,\r\n };\r\n};\r\nexport const toggleDaylightMode = () => {\r\n return {\r\n type: \"TOGGLE_DAYLIGHT_MODE\",\r\n };\r\n};\r\n// Deprecated\r\nexport const changeContextMenu = (type, open) => {\r\n return {\r\n type: \"CHANGE_CONTEXT_MENU\",\r\n menuType: type,\r\n open: open,\r\n };\r\n};\r\nexport const setNavigatorLoadingStatus = (status) => {\r\n return {\r\n type: \"SET_NAVIGATOR_LOADING_STATUE\",\r\n status: status,\r\n };\r\n};\r\nexport const setNavigatorError = (status, msg) => {\r\n return {\r\n type: \"SET_NAVIGATOR_ERROR\",\r\n status: status,\r\n msg: msg,\r\n };\r\n};\r\nexport const openCreateFolderDialog = () => {\r\n return {\r\n type: \"OPEN_CREATE_FOLDER_DIALOG\",\r\n };\r\n};\r\nexport const openCreateFileDialog = () => {\r\n return {\r\n type: \"OPEN_CREATE_FILE_DIALOG\",\r\n };\r\n};\r\nexport const setUserPopover = (anchor) => {\r\n return {\r\n type: \"SET_USER_POPOVER\",\r\n anchor: anchor,\r\n };\r\n};\r\nexport const setShareUserPopover = (anchor) => {\r\n return {\r\n type: \"SET_SHARE_USER_POPOVER\",\r\n anchor: anchor,\r\n };\r\n};\r\nexport const openRenameDialog = () => {\r\n return {\r\n type: \"OPEN_RENAME_DIALOG\",\r\n };\r\n};\r\nexport const openResaveDialog = (key) => {\r\n return {\r\n type: \"OPEN_RESAVE_DIALOG\",\r\n key: key,\r\n };\r\n};\r\nexport const openMoveDialog = () => {\r\n return {\r\n type: \"OPEN_MOVE_DIALOG\",\r\n };\r\n};\r\nexport const openRemoveDialog = () => {\r\n return {\r\n type: \"OPEN_REMOVE_DIALOG\",\r\n };\r\n};\r\nexport const openShareDialog = () => {\r\n return {\r\n type: \"OPEN_SHARE_DIALOG\",\r\n };\r\n};\r\nexport const applyThemes = (theme) => {\r\n return {\r\n type: \"APPLY_THEME\",\r\n theme: theme,\r\n };\r\n};\r\nexport const setSessionStatus = (status) => {\r\n return {\r\n type: \"SET_SESSION_STATUS\",\r\n status: status,\r\n };\r\n};\r\nexport const openMusicDialog = () => {\r\n return {\r\n type: \"OPEN_MUSIC_DIALOG\",\r\n };\r\n};\r\nexport const openRemoteDownloadDialog = () => {\r\n return {\r\n type: \"OPEN_REMOTE_DOWNLOAD_DIALOG\",\r\n };\r\n};\r\nexport const openTorrentDownloadDialog = (selected) => {\r\n return {\r\n type: \"OPEN_TORRENT_DOWNLOAD_DIALOG\",\r\n selected:selected,\r\n };\r\n};\r\nexport const openDecompressDialog = () => {\r\n return {\r\n type: \"OPEN_DECOMPRESS_DIALOG\",\r\n };\r\n};\r\nexport const openCompressDialog = () => {\r\n return {\r\n type: \"OPEN_COMPRESS_DIALOG\",\r\n };\r\n};\r\nexport const openRelocateDialog = () => {\r\n return {\r\n type: \"OPEN_RELOCATE_DIALOG\",\r\n };\r\n};\r\nexport const openGetSourceDialog = (source) => {\r\n return {\r\n type: \"OPEN_GET_SOURCE_DIALOG\",\r\n source,\r\n };\r\n};\r\nexport const openCopyDialog = () => {\r\n return {\r\n type: \"OPEN_COPY_DIALOG\",\r\n };\r\n};\r\n// Deprecated\r\nexport const openLoadingDialog = (text) => {\r\n return {\r\n type: \"OPEN_LOADING_DIALOG\",\r\n text: text,\r\n };\r\n};\r\n// Deprecated\r\nexport const closeAllModals = () => {\r\n return {\r\n type: \"CLOSE_ALL_MODALS\",\r\n };\r\n};\r\nexport const toggleSnackbar = (vertical, horizontal, msg, color) => {\r\n return {\r\n type: \"TOGGLE_SNACKBAR\",\r\n vertical: vertical,\r\n horizontal: horizontal,\r\n msg: msg,\r\n color: color,\r\n };\r\n};\r\nexport const setModalsLoading = (status) => {\r\n return {\r\n type: \"SET_MODALS_LOADING\",\r\n status: status,\r\n };\r\n};\r\nexport const refreshFileList = () => {\r\n return {\r\n type: \"REFRESH_FILE_LIST\",\r\n };\r\n};\r\nexport const searchMyFile = (keywords, path) => {\r\n return {\r\n type: \"SEARCH_MY_FILE\",\r\n keywords: keywords,\r\n path: path,\r\n };\r\n};\r\nexport const showImgPreivew = (first) => {\r\n return {\r\n type: \"SHOW_IMG_PREIVEW\",\r\n first: first,\r\n };\r\n};\r\nexport const showAudioPreview = (first) => {\r\n return {\r\n type: \"SHOW_AUDIO_PREVIEW\",\r\n first: first,\r\n };\r\n};\r\nexport const audioPreviewSetIsOpen = (isOpen) => {\r\n return {\r\n type: \"AUDIO_PREVIEW_SET_IS_OPEN\",\r\n isOpen,\r\n };\r\n};\r\nexport const audioPreviewSetPlaying = (playingName, paused) => {\r\n return {\r\n type: \"AUDIO_PREVIEW_SET_PLAYING\",\r\n playingName, //the playing content name\r\n paused,\r\n };\r\n};\r\nexport const refreshStorage = () => {\r\n return {\r\n type: \"REFRESH_STORAGE\",\r\n };\r\n};\r\nexport const saveFile = () => {\r\n return {\r\n type: \"SAVE_FILE\",\r\n };\r\n};\r\n\r\nexport const setSiteConfig = (config) => {\r\n return {\r\n type: \"SET_SITE_CONFIG\",\r\n config: config,\r\n };\r\n};\r\n\r\nexport const openDirectoryDownloadDialog = (downloading, log, done) => {\r\n return {\r\n type: \"OPEN_DIRECTORY_DOWNLOAD_DIALOG\",\r\n downloading,\r\n log,\r\n done,\r\n };\r\n};\r\n","import i18n from \"i18next\";\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\nimport Backend from \"i18next-http-backend\";\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\r\n// @ts-ignore\r\nimport ChainedBackend, { ChainedBackendOptions } from \"i18next-chained-backend\";\r\nimport LanguageDetector from \"i18next-browser-languagedetector\";\r\nimport LocalStorageBackend from \"i18next-localstorage-backend\";\r\n\r\ndeclare let ASSETS_VERSION: string;\r\n\r\n// eslint-disable-next-line @typescript-eslint/ban-ts-ignore\r\n// @ts-ignore\r\ni18n.use(ChainedBackend)\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .init({\r\n lng: \"en-US\",\r\n fallbackLng: \"en-US\",\r\n debug: true,\r\n ns: [\"common\", \"application\"],\r\n load: \"currentOnly\",\r\n defaultNS: \"application\",\r\n interpolation: {\r\n escapeValue: false,\r\n },\r\n backend: {\r\n backends:\r\n process.env.NODE_ENV === \"development\"\r\n ? [Backend]\r\n : [LocalStorageBackend, Backend],\r\n backendOptions: [\r\n {\r\n expirationTime: 7 * 24 * 60 * 60 * 1000, // 7 days\r\n },\r\n {\r\n queryStringParams: { v: ASSETS_VERSION },\r\n loadPath: \"/locales/{{lng}}/{{ns}}.json\",\r\n },\r\n ],\r\n },\r\n });\r\n\r\ni18n.on(\"languageChanged\", (lng) => {\r\n document.documentElement.setAttribute(\"lang\", lng);\r\n});\r\n\r\nexport const languages = [\r\n {\r\n code: \"en-US\",\r\n displayName: \"English\",\r\n },\r\n {\r\n code: \"zh-CN\",\r\n displayName: \"简体中文\",\r\n },\r\n {\r\n code: \"zh-TW\",\r\n displayName: \"繁體中文\",\r\n },\r\n];\r\n\r\nexport default i18n;\r\n","import Base from \"../uploader/base\";\r\nimport { ProcessingTaskDuplicatedError } from \"../errors\";\r\n\r\nexport interface QueueContent {\r\n uploader: Base;\r\n resolve: () => void;\r\n reject: (err?: any) => void;\r\n}\r\n\r\nexport class Pool {\r\n queue: Array = [];\r\n processing: Array = [];\r\n\r\n constructor(public limit: number) {}\r\n\r\n enqueue(uploader: Base) {\r\n return new Promise((resolve, reject) => {\r\n this.queue.push({\r\n uploader,\r\n resolve,\r\n reject,\r\n });\r\n this.check();\r\n });\r\n }\r\n\r\n release(item: QueueContent) {\r\n this.processing = this.processing.filter((v) => v !== item);\r\n this.check();\r\n }\r\n\r\n run(item: QueueContent) {\r\n this.queue = this.queue.filter((v) => v !== item);\r\n if (\r\n this.processing.findIndex(\r\n (v) =>\r\n v.uploader.task.dst == item.uploader.task.dst &&\r\n v.uploader.task.file.name == item.uploader.task.name\r\n ) > -1\r\n ) {\r\n // 找到重名任务\r\n item.reject(new ProcessingTaskDuplicatedError());\r\n this.release(item);\r\n return;\r\n }\r\n\r\n this.processing.push(item);\r\n item.uploader.run().then(\r\n () => {\r\n item.resolve();\r\n this.release(item);\r\n },\r\n (err) => {\r\n item.reject(err);\r\n this.release(item);\r\n }\r\n );\r\n }\r\n\r\n check() {\r\n const processingNum = this.processing.length;\r\n const availableNum = Math.max(0, this.limit - processingNum);\r\n this.queue.slice(0, availableNum).forEach((item) => {\r\n this.run(item);\r\n });\r\n }\r\n}\r\n","import { Policy } from \"../types\";\r\nimport { FileValidateError } from \"../errors\";\r\n\r\ninterface Validator {\r\n (file: File, policy: Policy): void;\r\n}\r\n\r\n// validators\r\nconst checkers: Array = [\r\n function checkExt(file: File, policy: Policy) {\r\n if (\r\n policy.allowedSuffix != undefined &&\r\n policy.allowedSuffix.length > 0\r\n ) {\r\n const ext = file?.name.split(\".\").pop();\r\n if (ext === null || !ext || !policy.allowedSuffix.includes(ext))\r\n throw new FileValidateError(\r\n \"File suffix not allowed in policy.\",\r\n \"suffix\",\r\n policy\r\n );\r\n }\r\n },\r\n\r\n function checkSize(file: File, policy: Policy) {\r\n if (policy.maxSize > 0) {\r\n if (file.size > policy.maxSize) {\r\n throw new FileValidateError(\r\n \"File size exceeds maximum limit.\",\r\n \"size\",\r\n policy\r\n );\r\n }\r\n }\r\n },\r\n];\r\n\r\n/* 将每个 Validator 执行\r\n 失败返回 Error\r\n */\r\nexport function validate(file: File, policy: Policy) {\r\n checkers.forEach((c) => c(file, policy));\r\n}\r\n","import axios, { AxiosRequestConfig } from \"axios\";\r\nimport { Response } from \"../types\";\r\nimport {\r\n HTTPError,\r\n RequestCanceledError,\r\n TransformResponseError,\r\n} from \"../errors\";\r\n\r\nexport const { CancelToken } = axios;\r\nexport { CancelTokenSource } from \"axios\";\r\n\r\nconst baseConfig = {\r\n transformResponse: [\r\n (response: any) => {\r\n try {\r\n return JSON.parse(response);\r\n } catch (e) {\r\n throw new TransformResponseError(response, e);\r\n }\r\n },\r\n ],\r\n};\r\n\r\nconst cdBackendConfig = {\r\n ...baseConfig,\r\n baseURL: \"/api/v3\",\r\n withCredentials: true,\r\n};\r\n\r\nexport function request(url: string, config?: AxiosRequestConfig) {\r\n return axios\r\n .request({ ...baseConfig, ...config, url })\r\n .catch((err) => {\r\n if (axios.isCancel(err)) {\r\n throw new RequestCanceledError();\r\n }\r\n\r\n if (err instanceof TransformResponseError) {\r\n throw err;\r\n }\r\n\r\n throw new HTTPError(err, url);\r\n });\r\n}\r\n\r\nexport function requestAPI(url: string, config?: AxiosRequestConfig) {\r\n return request>(url, { ...cdBackendConfig, ...config });\r\n}\r\n","import React, { useCallback } from \"react\";\r\nimport { IconButton, makeStyles } from \"@material-ui/core\";\r\nimport DayIcon from \"@material-ui/icons/Brightness7\";\r\nimport NightIcon from \"@material-ui/icons/Brightness4\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport classNames from \"classnames\";\r\nimport { toggleDaylightMode } from \"../../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n icon: {\r\n color: \"rgb(255, 255, 255)\",\r\n opacity: \"0.54\",\r\n },\r\n}));\r\n\r\nconst DarkModeSwitcher = ({ position }) => {\r\n const { t } = useTranslation();\r\n const ThemeType = useSelector(\r\n (state) => state.siteConfig.theme.palette.type\r\n );\r\n const dispatch = useDispatch();\r\n const ToggleThemeMode = useCallback(() => dispatch(toggleDaylightMode()), [\r\n dispatch,\r\n ]);\r\n const isDayLight = (ThemeType && ThemeType === \"light\") || !ThemeType;\r\n const isDark = ThemeType && ThemeType === \"dark\";\r\n const toggleMode = () => {\r\n Auth.SetPreference(\"theme_mode\", isDayLight ? \"dark\" : \"light\");\r\n ToggleThemeMode();\r\n };\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n {isDayLight && }\r\n {isDark && }\r\n \r\n \r\n );\r\n};\r\n\r\nexport default DarkModeSwitcher;\r\n","import React, { useCallback, useState } from \"react\";\r\nimport { IconButton, makeStyles, Menu, MenuItem } from \"@material-ui/core\";\r\nimport ViewListIcon from \"@material-ui/icons/ViewList\";\r\nimport ViewSmallIcon from \"@material-ui/icons/ViewComfy\";\r\nimport ViewModuleIcon from \"@material-ui/icons/ViewModule\";\r\nimport DownloadIcon from \"@material-ui/icons/CloudDownload\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport Auth from \"../../../middleware/Auth\";\r\nimport { changeViewMethod, setShareUserPopover } from \"../../../redux/explorer\";\r\nimport { changeSortMethod, startBatchDownload } from \"../../../redux/explorer/action\";\r\nimport { FormatPageBreak } from \"mdi-material-ui\";\r\nimport pathHelper from \"../../../utils/page\";\r\nimport { changePageSize } from \"../../../redux/viewUpdate/action\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport Sort from \"../Sort\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n sideButton: {\r\n padding: \"8px\",\r\n marginRight: \"5px\",\r\n },\r\n}));\r\n\r\nconst paginationOption = [\"50\", \"100\", \"200\", \"500\", \"1000\"];\r\n\r\nexport default function SubActions({ isSmall, inherit }) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"fileManager\" });\r\n const { t: vasT } = useTranslation(\"application\", { keyPrefix: \"vas\" });\r\n const dispatch = useDispatch();\r\n const viewMethod = useSelector(\r\n (state) => state.viewUpdate.explorerViewMethod\r\n );\r\n const share = useSelector((state) => state.viewUpdate.shareInfo);\r\n const pageSize = useSelector((state) => state.viewUpdate.pagination.size);\r\n const OpenLoadingDialog = useCallback(\r\n (method) => dispatch(changeViewMethod(method)),\r\n [dispatch]\r\n );\r\n const ChangeSortMethod = useCallback(\r\n (method) => dispatch(changeSortMethod(method)),\r\n [dispatch]\r\n );\r\n const SetShareUserPopover = useCallback(\r\n (e) => dispatch(setShareUserPopover(e)),\r\n [dispatch]\r\n );\r\n const StartBatchDownloadAll = useCallback(\r\n () => dispatch(startBatchDownload(share)),\r\n [dispatch, share]\r\n );\r\n const ChangePageSize = useCallback((e) => dispatch(changePageSize(e)), [\r\n dispatch,\r\n ]);\r\n const [anchorPagination, setAnchorPagination] = useState(null);\r\n const showPaginationOptions = (e) => {\r\n setAnchorPagination(e.currentTarget);\r\n };\r\n\r\n /** change sort */\r\n const onChangeSort = (value) => {\r\n ChangeSortMethod(value);\r\n };\r\n const handlePaginationChange = (s) => {\r\n ChangePageSize(s);\r\n setAnchorPagination(null);\r\n };\r\n\r\n const toggleViewMethod = () => {\r\n const newMethod =\r\n viewMethod === \"icon\"\r\n ? \"list\"\r\n : viewMethod === \"list\"\r\n ? \"smallIcon\"\r\n : \"icon\";\r\n Auth.SetPreference(\"view_method\", newMethod);\r\n OpenLoadingDialog(newMethod);\r\n };\r\n const isMobile = pathHelper.isMobile();\r\n\r\n const classes = useStyles();\r\n return (\r\n <>\r\n \r\n \r\n \r\n\r\n {viewMethod === \"icon\" && (\r\n \r\n \r\n \r\n )}\r\n {viewMethod === \"list\" && (\r\n \r\n \r\n \r\n )}\r\n\r\n {viewMethod === \"smallIcon\" && (\r\n \r\n \r\n \r\n )}\r\n\r\n {!isMobile && (\r\n \r\n \r\n \r\n )}\r\n setAnchorPagination(null)}\r\n >\r\n {paginationOption.map((option, index) => (\r\n handlePaginationChange(parseInt(option))}\r\n >\r\n {t(\"paginationOption\", { option })}\r\n \r\n ))}\r\n handlePaginationChange(-1)}\r\n >\r\n {t(\"noPagination\")}\r\n \r\n \r\n\r\n \r\n {share && (\r\n SetShareUserPopover(e.currentTarget)}\r\n style={{ padding: 5 }}\r\n >\r\n \r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React, { useCallback, useRef } from \"react\";\r\nimport {\r\n Button,\r\n Checkbox,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n FormControl,\r\n Input,\r\n makeStyles,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport API from \"../../middleware/Api\";\r\nimport List from \"@material-ui/core/List\";\r\nimport ListItemText from \"@material-ui/core/ListItemText\";\r\nimport ListItem from \"@material-ui/core/ListItem\";\r\nimport ListItemIcon from \"@material-ui/core/ListItemIcon\";\r\nimport LockIcon from \"@material-ui/icons/Lock\";\r\nimport TimerIcon from \"@material-ui/icons/Timer\";\r\nimport CasinoIcon from \"@material-ui/icons/Casino\";\r\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport MuiExpansionPanel from \"@material-ui/core/ExpansionPanel\";\r\nimport MuiExpansionPanelSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport MuiExpansionPanelDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\nimport InputLabel from \"@material-ui/core/InputLabel\";\r\nimport { Visibility, VisibilityOff } from \"@material-ui/icons\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport OutlinedInput from \"@material-ui/core/OutlinedInput\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport ToggleIcon from \"material-ui-toggle-icon\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n widthAnimation: {},\r\n shareUrl: {\r\n minWidth: \"400px\",\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n },\r\n flexCenter: {\r\n alignItems: \"center\",\r\n },\r\n noFlex: {\r\n display: \"block\",\r\n },\r\n scoreCalc: {\r\n marginTop: 10,\r\n },\r\n expireLabel: {\r\n whiteSpace: \"nowrap\",\r\n },\r\n}));\r\n\r\nconst ExpansionPanel = withStyles({\r\n root: {\r\n border: \"0px solid rgba(0, 0, 0, .125)\",\r\n boxShadow: \"none\",\r\n \"&:not(:last-child)\": {\r\n borderBottom: 0,\r\n },\r\n \"&:before\": {\r\n display: \"none\",\r\n },\r\n \"&$expanded\": {\r\n margin: \"auto\",\r\n },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanel);\r\n\r\nconst ExpansionPanelSummary = withStyles({\r\n root: {\r\n padding: 0,\r\n \"&$expanded\": {},\r\n },\r\n content: {\r\n margin: 0,\r\n display: \"initial\",\r\n \"&$expanded\": {\r\n margin: \"0 0\",\r\n },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanelSummary);\r\n\r\nconst ExpansionPanelDetails = withStyles((theme) => ({\r\n root: {\r\n padding: 24,\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n}))(MuiExpansionPanelDetails);\r\n\r\nexport default function CreatShare(props) {\r\n const { t } = useTranslation();\r\n const dispatch = useDispatch();\r\n const classes = useStyles();\r\n\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const lastSubmit = useRef(null);\r\n const [expanded, setExpanded] = React.useState(false);\r\n const [shareURL, setShareURL] = React.useState(\"\");\r\n const [values, setValues] = React.useState({\r\n password: \"\",\r\n downloads: 1,\r\n expires: 24 * 3600,\r\n showPassword: false,\r\n });\r\n const [shareOption, setShareOption] = React.useState({\r\n password: false,\r\n expire: false,\r\n preview: true,\r\n });\r\n const [customExpires, setCustomExpires] = React.useState(3600);\r\n const [customDownloads, setCustomDownloads] = React.useState(10);\r\n\r\n const handleChange = (prop) => (event) => {\r\n // 输入密码\r\n if (prop === \"password\") {\r\n if (event.target.value === \"\") {\r\n setShareOption({ ...shareOption, password: false });\r\n } else {\r\n setShareOption({ ...shareOption, password: true });\r\n }\r\n }\r\n\r\n setValues({ ...values, [prop]: event.target.value });\r\n };\r\n\r\n const handleClickShowPassword = () => {\r\n setValues({ ...values, showPassword: !values.showPassword });\r\n };\r\n\r\n const handleMouseDownPassword = (event) => {\r\n event.preventDefault();\r\n };\r\n\r\n const randomPassword = () => {\r\n setShareOption({ ...shareOption, password: true });\r\n setValues({\r\n ...values,\r\n password: Math.random().toString(36).substr(2).slice(2, 8),\r\n showPassword: true,\r\n });\r\n };\r\n\r\n const handleExpand = (panel) => (event, isExpanded) => {\r\n setExpanded(isExpanded ? panel : false);\r\n };\r\n\r\n const handleCheck = (prop) => () => {\r\n if (!shareOption[prop]) {\r\n handleExpand(prop)(null, true);\r\n }\r\n if (prop === \"password\" && shareOption[prop]) {\r\n setValues({\r\n ...values,\r\n password: \"\",\r\n });\r\n }\r\n setShareOption({ ...shareOption, [prop]: !shareOption[prop] });\r\n };\r\n\r\n const onClose = () => {\r\n props.onClose();\r\n setTimeout(() => {\r\n setShareURL(\"\");\r\n }, 500);\r\n };\r\n\r\n const senLink = () => {\r\n if (navigator.share) {\r\n let text = t(\"modals.shareLinkShareContent\", {\r\n name: props.selected[0].name,\r\n link: shareURL,\r\n });\r\n if (lastSubmit.current && lastSubmit.current.password) {\r\n text += t(\"modals.shareLinkPasswordInfo\", {\r\n password: lastSubmit.current.password,\r\n });\r\n }\r\n navigator.share({ text });\r\n } else if (navigator.clipboard) {\r\n navigator.clipboard.writeText(shareURL);\r\n ToggleSnackbar(\"top\", \"right\", t(\"modals.linkCopied\"), \"info\");\r\n }\r\n };\r\n\r\n const submitShare = (e) => {\r\n e.preventDefault();\r\n props.setModalsLoading(true);\r\n const submitFormBody = {\r\n id: props.selected[0].id,\r\n is_dir: props.selected[0].type === \"dir\",\r\n password: values.password,\r\n downloads: shareOption.expire\r\n ? values.downloads === -1\r\n ? parseInt(customDownloads)\r\n : values.downloads\r\n : -1,\r\n expire:\r\n values.expires === -1\r\n ? parseInt(customExpires)\r\n : values.expires,\r\n preview: shareOption.preview,\r\n };\r\n lastSubmit.current = submitFormBody;\r\n\r\n API.post(\"/share\", submitFormBody)\r\n .then((response) => {\r\n setShareURL(response.data);\r\n setValues({\r\n password: \"\",\r\n downloads: 1,\r\n expires: 24 * 3600,\r\n showPassword: false,\r\n });\r\n setShareOption({\r\n password: false,\r\n expire: false,\r\n });\r\n props.setModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n props.setModalsLoading(false);\r\n });\r\n };\r\n\r\n const handleFocus = (event) => event.target.select();\r\n\r\n return (\r\n \r\n \r\n {t(\"modals.createShareLink\")}\r\n \r\n\r\n {shareURL === \"\" && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"modals.sharePassword\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n offIcon={\r\n \r\n }\r\n />\r\n \r\n \r\n }\r\n labelWidth={70}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {values.downloads >= 0 && (\r\n \r\n {[1, 2, 3, 4, 5, 20, 50, 100].map(\r\n (v) => (\r\n \r\n {t(\r\n \"modals.downloadLimitOptions\",\r\n { num: v }\r\n )}\r\n \r\n )\r\n )}\r\n \r\n {t(\"modals.custom\")}\r\n \r\n \r\n )}\r\n {values.downloads === -1 && (\r\n \r\n setCustomDownloads(\r\n e.target.value\r\n )\r\n }\r\n endAdornment={\r\n \r\n {t(\"modals.downloads\")}\r\n \r\n }\r\n />\r\n )}\r\n \r\n \r\n {t(\"modals.or\")}\r\n \r\n \r\n {values.expires >= 0 && (\r\n \r\n \r\n {t(\"modals.5minutes\")}\r\n \r\n \r\n {t(\"modals.1hour\")}\r\n \r\n \r\n {t(\"modals.1day\")}\r\n \r\n \r\n {t(\"modals.7days\")}\r\n \r\n \r\n {t(\"modals.30days\")}\r\n \r\n \r\n {t(\"modals.custom\")}\r\n \r\n \r\n )}\r\n {values.expires === -1 && (\r\n \r\n setCustomExpires(e.target.value)\r\n }\r\n endAdornment={\r\n \r\n {t(\"modals.seconds\")}\r\n \r\n }\r\n />\r\n )}\r\n \r\n \r\n {t(\"modals.downloadSuffix\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"modals.allowPreviewDescription\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {shareURL !== \"\" && (\r\n \r\n \r\n \r\n )}\r\n\r\n \r\n {shareURL !== \"\" && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n\r\n {shareURL === \"\" && (\r\n
\r\n \r\n {t(\"modals.createShareLink\")}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n )}\r\n
\r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n List,\r\n ListItem,\r\n ListItemText,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n content: {\r\n minWidth: 250,\r\n },\r\n}));\r\n\r\nexport default function OptionSelector() {\r\n const { t } = useTranslation(\"common\");\r\n const classes = useStyles();\r\n const option = useSelector((state) => state.viewUpdate.modals.option);\r\n\r\n return (\r\n \r\n \r\n {option && option.title}\r\n \r\n \r\n \r\n {option &&\r\n option.options.map((o) => (\r\n option && option.callback(o)}\r\n button\r\n >\r\n \r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport SaveIcon from \"@material-ui/icons/Save\";\r\nimport CheckIcon from \"@material-ui/icons/Check\";\r\nimport AutoHidden from \"./AutoHidden\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport Fab from \"@material-ui/core/Fab\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport { green } from \"@material-ui/core/colors\";\r\nimport clsx from \"clsx\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n fab: {\r\n margin: 0,\r\n top: \"auto\",\r\n right: 20,\r\n bottom: 20,\r\n left: \"auto\",\r\n zIndex: 5,\r\n position: \"fixed\",\r\n },\r\n badge: {\r\n position: \"absolute\",\r\n bottom: 26,\r\n top: \"auto\",\r\n zIndex: 9999,\r\n right: 7,\r\n },\r\n fabProgress: {\r\n color: green[500],\r\n position: \"absolute\",\r\n top: -6,\r\n left: -6,\r\n zIndex: 1,\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonSuccess: {\r\n backgroundColor: green[500],\r\n \"&:hover\": {\r\n backgroundColor: green[700],\r\n },\r\n },\r\n}));\r\n\r\nexport default function SaveButton(props) {\r\n const classes = useStyles();\r\n const buttonClassname = clsx({\r\n [classes.buttonSuccess]: props.status === \"success\",\r\n });\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n \r\n {props.status === \"success\" ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n {props.status === \"loading\" && (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\r\nimport DialogContent from \"@material-ui/core/DialogContent\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport DialogContentText from \"@material-ui/core/DialogContentText\";\r\nimport { blue } from \"@material-ui/core/colors\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst useStyles = makeStyles({\r\n avatar: {\r\n backgroundColor: blue[100],\r\n color: blue[600],\r\n },\r\n loadingContainer: {\r\n display: \"flex\",\r\n },\r\n loading: {\r\n marginTop: 10,\r\n marginLeft: 20,\r\n },\r\n});\r\n\r\nexport default function LoadingDialog() {\r\n const classes = useStyles();\r\n const open = useSelector((state) => state.viewUpdate.modals.loading);\r\n const text = useSelector((state) => state.viewUpdate.modals.loadingText);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n
{text}
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n","import React, { useCallback, useState } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport PathSelector from \"../FileManager/PathSelector\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport API from \"../../middleware/Api\";\r\nimport {\r\n refreshFileList,\r\n setModalsLoading,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\nexport default function CopyDialog(props) {\r\n const { t } = useTranslation();\r\n const [selectedPath, setSelectedPath] = useState(\"\");\r\n const [selectedPathName, setSelectedPathName] = useState(\"\");\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const SetModalsLoading = useCallback(\r\n (status) => {\r\n dispatch(setModalsLoading(status));\r\n },\r\n [dispatch]\r\n );\r\n const RefreshFileList = useCallback(() => {\r\n dispatch(refreshFileList());\r\n }, [dispatch]);\r\n\r\n const setMoveTarget = (folder) => {\r\n const path =\r\n folder.path === \"/\"\r\n ? folder.path + folder.name\r\n : folder.path + \"/\" + folder.name;\r\n setSelectedPath(path);\r\n setSelectedPathName(folder.name);\r\n };\r\n\r\n const submitMove = (e) => {\r\n if (e != null) {\r\n e.preventDefault();\r\n }\r\n SetModalsLoading(true);\r\n const dirs = [],\r\n items = [];\r\n // eslint-disable-next-line\r\n\r\n if (props.selected[0].type === \"dir\") {\r\n dirs.push(props.selected[0].id);\r\n } else {\r\n items.push(props.selected[0].id);\r\n }\r\n\r\n API.post(\"/object/copy\", {\r\n src_dir: props.selected[0].path,\r\n src: {\r\n dirs: dirs,\r\n items: items,\r\n },\r\n dst: selectedPath === \"//\" ? \"/\" : selectedPath,\r\n })\r\n .then(() => {\r\n props.onClose();\r\n RefreshFileList();\r\n SetModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n SetModalsLoading(false);\r\n });\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {t(\"fileManager.copyTo\")}\r\n \r\n \r\n\r\n {selectedPath !== \"\" && (\r\n \r\n \r\n ]}\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React, { useState, useEffect, useRef } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n makeStyles,\r\n FormControlLabel,\r\n Checkbox,\r\n} from \"@material-ui/core\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { useTranslation } from \"react-i18next\"; \r\nimport { useInterval, usePrevious, useGetState } from \"ahooks\";\r\nimport { cancelDirectoryDownload } from \"../../redux/explorer/action\";\r\nimport Auth from \"../../middleware/Auth\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\nexport default function DirectoryDownloadDialog(props) {\r\n const { t } = useTranslation();\r\n\r\n const classes = useStyles();\r\n\r\n const logRef = useRef();\r\n const [autoScroll, setAutoScroll] = useState(\r\n Auth.GetPreferenceWithDefault(\"autoScroll\", true)\r\n );\r\n const previousLog = usePrevious(props.log, (prev, next) => true);\r\n const [timer, setTimer] = useState(-1);\r\n\r\n useInterval(() => {\r\n if (autoScroll && logRef.current && previousLog !== props.log) {\r\n logRef.current.scrollIntoView({ behavior: \"smooth\", block: \"end\" });\r\n }\r\n }, timer);\r\n\r\n useEffect(() => {\r\n if (props.done) {\r\n setTimer(-1);\r\n } else if (props.open) {\r\n setTimer(1000);\r\n }\r\n }, [props.done, props.open]);\r\n\r\n return (\r\n \r\n \r\n {t(\"modals.directoryDownloadTitle\")}\r\n \r\n\r\n \r\n \r\n \r\n \r\n }\r\n checked={autoScroll}\r\n onChange={() =>\r\n setAutoScroll((previous) => {\r\n Auth.SetPreference(\"autoScroll\", !previous);\r\n return !previous;\r\n })\r\n }\r\n label={t(\"modals.directoryDownloadAutoscroll\")}\r\n />\r\n \r\n {t(\"cancel\", { ns: \"common\" })}\r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {!props.done && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React, { useCallback, useState } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport PathSelector from \"../FileManager/PathSelector\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { setModalsLoading, toggleSnackbar } from \"../../redux/explorer\";\r\nimport { submitDecompressTask } from \"../../redux/explorer/action\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\nexport default function DecompressDialog(props) {\r\n const { t } = useTranslation();\r\n const [selectedPath, setSelectedPath] = useState(\"\");\r\n const [selectedPathName, setSelectedPathName] = useState(\"\");\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const SetModalsLoading = useCallback(\r\n (status) => {\r\n dispatch(setModalsLoading(status));\r\n },\r\n [dispatch]\r\n );\r\n const SubmitDecompressTask = useCallback(\r\n (path) => dispatch(submitDecompressTask(path)),\r\n [dispatch]\r\n );\r\n\r\n const setMoveTarget = (folder) => {\r\n const path =\r\n folder.path === \"/\"\r\n ? folder.path + folder.name\r\n : folder.path + \"/\" + folder.name;\r\n setSelectedPath(path);\r\n setSelectedPathName(folder.name);\r\n };\r\n\r\n const submitMove = (e) => {\r\n if (e != null) {\r\n e.preventDefault();\r\n }\r\n SetModalsLoading(true);\r\n SubmitDecompressTask(selectedPath)\r\n .then(() => {\r\n props.onClose();\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"modals.taskCreated\"),\r\n \"success\"\r\n );\r\n SetModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n SetModalsLoading(false);\r\n });\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {t(\"modals.decompressTo\")}\r\n \r\n \r\n\r\n {selectedPath !== \"\" && (\r\n \r\n \r\n ]}\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React, { useCallback, useState } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport PathSelector from \"../FileManager/PathSelector\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport TextField from \"@material-ui/core/TextField\";\r\nimport { setModalsLoading, toggleSnackbar } from \"../../redux/explorer\";\r\nimport { submitCompressTask } from \"../../redux/explorer/action\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\nexport default function CompressDialog(props) {\r\n const { t } = useTranslation();\r\n const [selectedPath, setSelectedPath] = useState(\"\");\r\n const [fileName, setFileName] = useState(\"\");\r\n // eslint-disable-next-line\r\n const [selectedPathName, setSelectedPathName] = useState(\"\");\r\n\r\n const dispatch = useDispatch();\r\n\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const SetModalsLoading = useCallback(\r\n (status) => {\r\n dispatch(setModalsLoading(status));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const SubmitCompressTask = useCallback(\r\n (name, path) => dispatch(submitCompressTask(name, path)),\r\n [dispatch]\r\n );\r\n\r\n const setMoveTarget = (folder) => {\r\n const path =\r\n folder.path === \"/\"\r\n ? folder.path + folder.name\r\n : folder.path + \"/\" + folder.name;\r\n setSelectedPath(path);\r\n setSelectedPathName(folder.name);\r\n };\r\n\r\n const submitMove = (e) => {\r\n if (e != null) {\r\n e.preventDefault();\r\n }\r\n SetModalsLoading(true);\r\n\r\n SubmitCompressTask(fileName, selectedPath)\r\n .then(() => {\r\n props.onClose();\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"modals.taskCreated\"),\r\n \"success\"\r\n );\r\n SetModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n SetModalsLoading(false);\r\n });\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {t(\"modals.saveToTitle\")}\r\n \r\n \r\n\r\n {selectedPath !== \"\" && (\r\n \r\n \r\n setFileName(e.target.value)}\r\n value={fileName}\r\n fullWidth\r\n autoFocus\r\n id=\"standard-basic\"\r\n label={t(\"modals.zipFileName\")}\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n makeStyles, TextField\r\n} from \"@material-ui/core\";\r\nimport PathSelector from \"../FileManager/PathSelector\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport API, { AppError } from \"../../middleware/Api\";\r\nimport {\r\n refreshFileList,\r\n setModalsLoading,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { FolderOpenOutlined } from \"@material-ui/icons\";\r\nimport { pathBack } from \"../../utils\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport { AccountCircle } from \"mdi-material-ui\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport LinkIcon from \"@material-ui/icons/Link\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n formGroup: {\r\n display: \"flex\",\r\n marginBottom: theme.spacing(3),\r\n },\r\n forumInput: {\r\n flexGrow: 1,\r\n }\r\n}));\r\n\r\nexport default function RemoteDownload(props) {\r\n const { t } = useTranslation();\r\n const [selectPathOpen,setSelectPathOpen] = useState(false);\r\n const [selectedPath, setSelectedPath] = useState(\"\");\r\n const [selectedPathName, setSelectedPathName] = useState(\"\");\r\n const [downloadTo, setDownloadTo] = useState(\"\");\r\n const [url, setUrl] = useState(\"\");\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\r\n\r\n useEffect(()=>{\r\n if (props.open){\r\n setDownloadTo(props.presentPath)\r\n }\r\n },[props.open])\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const SetModalsLoading = useCallback(\r\n (status) => {\r\n dispatch(setModalsLoading(status));\r\n },\r\n [dispatch]\r\n );\r\n\r\n const setDownloadToPath = (folder) => {\r\n const path =\r\n folder.path === \"/\"\r\n ? folder.path + folder.name\r\n : folder.path + \"/\" + folder.name;\r\n setSelectedPath(path);\r\n setSelectedPathName(folder.name);\r\n };\r\n\r\n const selectPath = () => {\r\n setDownloadTo(selectedPath === \"//\" ? \"/\" : selectedPath);\r\n setSelectPathOpen(false);\r\n };\r\n\r\n const submitTorrentDownload = (e) => {\r\n e.preventDefault();\r\n props.setModalsLoading(true);\r\n API.post(\"/aria2/torrent/\" + props.torrent.id, {\r\n dst:\r\n downloadTo === \"//\"\r\n ? \"/\"\r\n : downloadTo,\r\n })\r\n .then(() => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"modals.taskCreated\"),\r\n \"success\"\r\n );\r\n props.onClose();\r\n props.setModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n props.setModalsLoading(false);\r\n });\r\n };\r\n\r\n const submitDownload = (e) => {\r\n e.preventDefault();\r\n props.setModalsLoading(true);\r\n API.post(\"/aria2/url\", {\r\n url: url.split(\"\\n\"),\r\n dst:\r\n downloadTo === \"//\"\r\n ? \"/\"\r\n : downloadTo,\r\n })\r\n .then((response) => {\r\n const failed = response.data\r\n .filter((r) => r.code !== 0)\r\n .map((r) => new AppError(r.msg, r.code, r.error).message);\r\n if (failed.length > 0) {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"modals.taskCreateFailed\", {\r\n failed: failed.length,\r\n details: failed.join(\",\"),\r\n }),\r\n \"warning\"\r\n );\r\n } else {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"modals.taskCreated\"),\r\n \"success\"\r\n );\r\n }\r\n\r\n props.onClose();\r\n props.setModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n props.setModalsLoading(false);\r\n });\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n <>\r\n \r\n \r\n {t(\"modals.newRemoteDownloadTitle\")}\r\n \r\n \r\n \r\n
\r\n
\r\n setUrl(e.target.value)}\r\n placeholder={t(\r\n \"modals.remoteDownloadURLDescription\"\r\n )}\r\n InputProps={{\r\n startAdornment: !isMobile&&(\r\n \r\n \r\n \r\n ),\r\n\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n setDownloadTo(e.target.value)}\r\n className={classes.input}\r\n label={t(\"modals.remoteDownloadDst\")}\r\n InputProps={{\r\n startAdornment: !isMobile&&(\r\n \r\n \r\n \r\n ),\r\n endAdornment:(\r\n \r\n setSelectPathOpen(true)}\r\n >\r\n {t(\"navbar.addTagDialog.selectFolder\")}\r\n \r\n \r\n )\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n {t(\"modals.createTask\")}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n\r\n setSelectPathOpen(false)}\r\n aria-labelledby=\"form-dialog-title\"\r\n >\r\n \r\n {t(\"modals.remoteDownloadDst\")}\r\n \r\n \r\n\r\n {selectedPathName !== \"\" && (\r\n \r\n \r\n ]}\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useCallback, useState } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n FormControl,\r\n makeStyles,\r\n Tooltip,\r\n} from \"@material-ui/core\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport API from \"../../middleware/Api\";\r\nimport FormLabel from \"@material-ui/core/FormLabel\";\r\nimport FormGroup from \"@material-ui/core/FormGroup\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n form: {\r\n marginTop: theme.spacing(2),\r\n },\r\n}));\r\n\r\nexport default function Delete(props) {\r\n const { t } = useTranslation();\r\n const theme = useTheme();\r\n const user = Auth.GetUser();\r\n const [force, setForce] = useState(false);\r\n const [unlink, setUnlink] = useState(false);\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const submitRemove = (e) => {\r\n e.preventDefault();\r\n props.setModalsLoading(true);\r\n const dirs = [],\r\n items = [];\r\n // eslint-disable-next-line\r\n props.selected.map((value) => {\r\n if (value.type === \"dir\") {\r\n dirs.push(value.id);\r\n } else {\r\n items.push(value.id);\r\n }\r\n });\r\n API.delete(\"/object\", {\r\n data: {\r\n items: items,\r\n dirs: dirs,\r\n force,\r\n unlink,\r\n },\r\n })\r\n .then((response) => {\r\n if (response.rawData.code === 0) {\r\n props.onClose();\r\n setTimeout(props.refreshFileList, 500);\r\n } else {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n response.rawData.msg,\r\n \"warning\"\r\n );\r\n }\r\n props.setModalsLoading(false);\r\n props.refreshStorage();\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n props.setModalsLoading(false);\r\n });\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {t(\"modals.deleteTitle\")}\r\n \r\n\r\n \r\n \r\n {props.selected.length === 1 && (\r\n ]}\r\n />\r\n )}\r\n {props.selected.length > 1 &&\r\n t(\"modals.deleteMultipleDescription\", {\r\n num: props.selected.length,\r\n })}\r\n \r\n {user.group.advanceDelete && (\r\n \r\n \r\n {t(\"modals.advanceOptions\")}\r\n \r\n \r\n \r\n \r\n setForce(e.target.checked)\r\n }\r\n />\r\n }\r\n label={t(\"modals.forceDelete\")}\r\n />\r\n \r\n \r\n \r\n setUnlink(e.target.checked)\r\n }\r\n />\r\n }\r\n label={t(\"modals.unlinkOnly\")}\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport PathSelector from \"./PathSelector\";\r\nimport API from \"../../middleware/Api\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogContentText,\r\n DialogTitle,\r\n TextField,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport Loading from \"../Modals/Loading\";\r\nimport CopyDialog from \"../Modals/Copy\";\r\nimport DirectoryDownloadDialog from \"../Modals/DirectoryDownload\";\r\nimport CreatShare from \"../Modals/CreateShare\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport DecompressDialog from \"../Modals/Decompress\";\r\nimport CompressDialog from \"../Modals/Compress\";\r\nimport {\r\n closeAllModals,\r\n openLoadingDialog,\r\n refreshFileList,\r\n refreshStorage,\r\n setModalsLoading,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport OptionSelector from \"../Modals/OptionSelector\";\r\nimport { getDownloadURL } from \"../../services/file\";\r\nimport { Trans, withTranslation } from \"react-i18next\";\r\nimport RemoteDownload from \"../Modals/RemoteDownload\";\r\nimport Delete from \"../Modals/Delete\";\r\n\r\nconst styles = (theme) => ({\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n path: state.navigator.path,\r\n selected: state.explorer.selected,\r\n modalsStatus: state.viewUpdate.modals,\r\n modalsLoading: state.viewUpdate.modalsLoading,\r\n dirList: state.explorer.dirList,\r\n fileList: state.explorer.fileList,\r\n dndSignale: state.explorer.dndSignal,\r\n dndTarget: state.explorer.dndTarget,\r\n dndSource: state.explorer.dndSource,\r\n loading: state.viewUpdate.modals.loading,\r\n loadingText: state.viewUpdate.modals.loadingText,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n closeAllModals: () => {\r\n dispatch(closeAllModals());\r\n },\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n setModalsLoading: (status) => {\r\n dispatch(setModalsLoading(status));\r\n },\r\n refreshFileList: () => {\r\n dispatch(refreshFileList());\r\n },\r\n refreshStorage: () => {\r\n dispatch(refreshStorage());\r\n },\r\n openLoadingDialog: (text) => {\r\n dispatch(openLoadingDialog(text));\r\n },\r\n };\r\n};\r\n\r\nclass ModalsCompoment extends Component {\r\n state = {\r\n newFolderName: \"\",\r\n newFileName: \"\",\r\n newName: \"\",\r\n selectedPath: \"\",\r\n selectedPathName: \"\",\r\n secretShare: false,\r\n sharePwd: \"\",\r\n shareUrl: \"\",\r\n purchaseCallback: null,\r\n };\r\n\r\n handleInputChange = (e) => {\r\n this.setState({\r\n [e.target.id]: e.target.value,\r\n });\r\n };\r\n\r\n newNameSuffix = \"\";\r\n\r\n UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n if (this.props.dndSignale !== nextProps.dndSignale) {\r\n this.dragMove(nextProps.dndSource, nextProps.dndTarget);\r\n return;\r\n }\r\n\r\n if (this.props.modalsStatus.rename !== nextProps.modalsStatus.rename) {\r\n const name = nextProps.selected[0].name;\r\n this.setState({\r\n newName: name,\r\n });\r\n return;\r\n }\r\n };\r\n\r\n scoreHandler = (callback) => {\r\n callback();\r\n };\r\n\r\n Download = () => {\r\n getDownloadURL(this.props.selected[0])\r\n .then((response) => {\r\n window.location.assign(response.data);\r\n this.onClose();\r\n this.downloaded = true;\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n this.onClose();\r\n });\r\n };\r\n\r\n submitMove = (e) => {\r\n if (e != null) {\r\n e.preventDefault();\r\n }\r\n this.props.setModalsLoading(true);\r\n const dirs = [],\r\n items = [];\r\n // eslint-disable-next-line\r\n this.props.selected.map((value) => {\r\n if (value.type === \"dir\") {\r\n dirs.push(value.id);\r\n } else {\r\n items.push(value.id);\r\n }\r\n });\r\n API.patch(\"/object\", {\r\n action: \"move\",\r\n src_dir: this.props.selected[0].path,\r\n src: {\r\n dirs: dirs,\r\n items: items,\r\n },\r\n dst: this.DragSelectedPath\r\n ? this.DragSelectedPath\r\n : this.state.selectedPath === \"//\"\r\n ? \"/\"\r\n : this.state.selectedPath,\r\n })\r\n .then(() => {\r\n this.onClose();\r\n this.props.refreshFileList();\r\n this.props.setModalsLoading(false);\r\n this.DragSelectedPath = \"\";\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n this.props.setModalsLoading(false);\r\n this.DragSelectedPath = \"\";\r\n })\r\n .then(() => {\r\n this.props.closeAllModals();\r\n });\r\n };\r\n\r\n dragMove = (source, target) => {\r\n if (this.props.selected.length === 0) {\r\n this.props.selected[0] = source;\r\n }\r\n let doMove = true;\r\n\r\n // eslint-disable-next-line\r\n this.props.selected.map((value) => {\r\n // 根据ID过滤\r\n if (value.id === target.id && value.type === target.type) {\r\n doMove = false;\r\n // eslint-disable-next-line\r\n return;\r\n }\r\n // 根据路径过滤\r\n if (\r\n value.path ===\r\n target.path + (target.path === \"/\" ? \"\" : \"/\") + target.name\r\n ) {\r\n doMove = false;\r\n // eslint-disable-next-line\r\n return;\r\n }\r\n });\r\n if (doMove) {\r\n this.DragSelectedPath =\r\n target.path === \"/\"\r\n ? target.path + target.name\r\n : target.path + \"/\" + target.name;\r\n this.props.openLoadingDialog(this.props.t(\"modals.processing\"));\r\n this.submitMove();\r\n }\r\n };\r\n\r\n submitRename = (e) => {\r\n e.preventDefault();\r\n this.props.setModalsLoading(true);\r\n const newName = this.state.newName;\r\n\r\n const src = {\r\n dirs: [],\r\n items: [],\r\n };\r\n\r\n if (this.props.selected[0].type === \"dir\") {\r\n src.dirs[0] = this.props.selected[0].id;\r\n } else {\r\n src.items[0] = this.props.selected[0].id;\r\n }\r\n\r\n // 检查重名\r\n if (\r\n this.props.dirList.findIndex((value) => {\r\n return value.name === newName;\r\n }) !== -1 ||\r\n this.props.fileList.findIndex((value) => {\r\n return value.name === newName;\r\n }) !== -1\r\n ) {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"modals.duplicatedObjectName\"),\r\n \"warning\"\r\n );\r\n this.props.setModalsLoading(false);\r\n } else {\r\n API.post(\"/object/rename\", {\r\n action: \"rename\",\r\n src: src,\r\n new_name: newName,\r\n })\r\n .then(() => {\r\n this.onClose();\r\n this.props.refreshFileList();\r\n this.props.setModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n this.props.setModalsLoading(false);\r\n });\r\n }\r\n };\r\n\r\n submitCreateNewFolder = (e) => {\r\n e.preventDefault();\r\n this.props.setModalsLoading(true);\r\n if (\r\n this.props.dirList.findIndex((value) => {\r\n return value.name === this.state.newFolderName;\r\n }) !== -1\r\n ) {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"modals.duplicatedFolderName\"),\r\n \"warning\"\r\n );\r\n this.props.setModalsLoading(false);\r\n } else {\r\n API.put(\"/directory\", {\r\n path:\r\n (this.props.path === \"/\" ? \"\" : this.props.path) +\r\n \"/\" +\r\n this.state.newFolderName,\r\n })\r\n .then(() => {\r\n this.onClose();\r\n this.props.refreshFileList();\r\n this.props.setModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n this.props.setModalsLoading(false);\r\n\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n });\r\n }\r\n //this.props.toggleSnackbar();\r\n };\r\n\r\n submitCreateNewFile = (e) => {\r\n e.preventDefault();\r\n this.props.setModalsLoading(true);\r\n if (\r\n this.props.dirList.findIndex((value) => {\r\n return value.name === this.state.newFileName;\r\n }) !== -1\r\n ) {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"modals.duplicatedFolderName\"),\r\n \"warning\"\r\n );\r\n this.props.setModalsLoading(false);\r\n } else {\r\n API.post(\"/file/create\", {\r\n path:\r\n (this.props.path === \"/\" ? \"\" : this.props.path) +\r\n \"/\" +\r\n this.state.newFileName,\r\n })\r\n .then(() => {\r\n this.onClose();\r\n this.props.refreshFileList();\r\n this.props.setModalsLoading(false);\r\n })\r\n .catch((error) => {\r\n this.props.setModalsLoading(false);\r\n\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n });\r\n }\r\n //this.props.toggleSnackbar();\r\n };\r\n\r\n setMoveTarget = (folder) => {\r\n const path =\r\n folder.path === \"/\"\r\n ? folder.path + folder.name\r\n : folder.path + \"/\" + folder.name;\r\n this.setState({\r\n selectedPath: path,\r\n selectedPathName: folder.name,\r\n });\r\n };\r\n\r\n onClose = () => {\r\n this.setState({\r\n newFolderName: \"\",\r\n newFileName: \"\",\r\n newName: \"\",\r\n selectedPath: \"\",\r\n selectedPathName: \"\",\r\n secretShare: false,\r\n sharePwd: \"\",\r\n shareUrl: \"\",\r\n });\r\n this.newNameSuffix = \"\";\r\n this.props.closeAllModals();\r\n };\r\n\r\n handleChange = (name) => (event) => {\r\n this.setState({ [name]: event.target.checked });\r\n };\r\n\r\n copySource = () => {\r\n if (navigator.clipboard) {\r\n navigator.clipboard.writeText(this.props.modalsStatus.getSource);\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"modals.linkCopied\"),\r\n \"info\"\r\n );\r\n }\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n {t(\"modals.getSourceLinkTitle\")}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"fileManager.newFolder\")}\r\n \r\n\r\n \r\n
\r\n this.handleInputChange(e)}\r\n fullWidth\r\n />\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {t(\"modals.create\")}\r\n {this.props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n {t(\"fileManager.newFile\")}\r\n \r\n\r\n \r\n
\r\n this.handleInputChange(e)}\r\n fullWidth\r\n />\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {t(\"modals.create\")}\r\n {this.props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n\r\n \r\n \r\n {t(\"fileManager.rename\")}\r\n \r\n \r\n \r\n ]}\r\n />\r\n \r\n
\r\n this.handleInputChange(e)}\r\n fullWidth\r\n />\r\n \r\n
\r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {this.props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n \r\n\r\n \r\n \r\n {t(\"modals.moveToTitle\")}\r\n \r\n \r\n\r\n {this.state.selectedPath !== \"\" && (\r\n \r\n \r\n ]}\r\n />\r\n \r\n \r\n )}\r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {this.props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nModalsCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst Modals = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(ModalsCompoment))));\r\n\r\nexport default Modals;\r\n","export const sizeToString = (bytes) => {\r\n if (bytes === 0 || bytes === \"0\") return \"0 B\";\r\n const k = 1024;\r\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return (bytes / Math.pow(k, i)).toFixed(1) + \" \" + sizes[i];\r\n};\r\n\r\nexport const fixUrlHash = (path) => {\r\n return path;\r\n};\r\n\r\nexport const setCookie = (name, value, days) => {\r\n if (days) {\r\n const date = new Date();\r\n date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);\r\n }\r\n document.cookie = name + \"=\" + (value || \"\") + \"; path=/\";\r\n};\r\n\r\nexport const setGetParameter = (paramName, paramValue) => {\r\n let url = window.location.href;\r\n\r\n if (url.indexOf(paramName + \"=\") >= 0) {\r\n const prefix = url.substring(0, url.indexOf(paramName));\r\n let suffix = url.substring(url.indexOf(paramName));\r\n suffix = suffix.substring(suffix.indexOf(\"=\") + 1);\r\n suffix =\r\n suffix.indexOf(\"&\") >= 0\r\n ? suffix.substring(suffix.indexOf(\"&\"))\r\n : \"\";\r\n url = prefix + paramName + \"=\" + paramValue + suffix;\r\n } else {\r\n if (url.indexOf(\"?\") < 0) url += \"?\" + paramName + \"=\" + paramValue;\r\n else url += \"&\" + paramName + \"=\" + paramValue;\r\n }\r\n if (url === window.location.href) {\r\n return;\r\n }\r\n window.history.pushState(null, null, url);\r\n};\r\n\r\nexport const checkGetParameters = (field) => {\r\n const url = window.location.href;\r\n if (url.indexOf(\"?\" + field + \"=\") !== -1) return true;\r\n else if (url.indexOf(\"&\" + field + \"=\") !== -1) return true;\r\n return false;\r\n};\r\n\r\nexport const changeThemeColor = (color) => {\r\n const metaThemeColor = window.document.querySelector(\r\n \"meta[name=theme-color]\"\r\n );\r\n metaThemeColor.setAttribute(\"content\", color);\r\n};\r\n\r\nexport function bufferDecode(value) {\r\n return Uint8Array.from(atob(value), (c) => c.charCodeAt(0));\r\n}\r\n\r\n// ArrayBuffer to URLBase64\r\nexport function bufferEncode(value) {\r\n return btoa(String.fromCharCode.apply(null, new Uint8Array(value)))\r\n .replace(/\\+/g, \"-\")\r\n .replace(/\\//g, \"_\")\r\n .replace(/=/g, \"\");\r\n}\r\n\r\nexport function pathBack(path) {\r\n const folders =\r\n path !== null\r\n ? path.substr(1).split(\"/\")\r\n : this.props.path.substr(1).split(\"/\");\r\n return \"/\" + folders.slice(0, folders.length - 1).join(\"/\");\r\n}\r\n\r\nexport function filePath(file) {\r\n return file.path === \"/\"\r\n ? file.path + file.name\r\n : file.path + \"/\" + file.name;\r\n}\r\n\r\nexport function hex2bin(hex) {\r\n return parseInt(hex, 16).toString(2).padStart(8, \"0\");\r\n}\r\n\r\nexport function pathJoin(parts, sep) {\r\n const separator = sep || \"/\";\r\n parts = parts.map((part, index) => {\r\n if (index) {\r\n part = part.replace(new RegExp(\"^\" + separator), \"\");\r\n }\r\n if (index !== parts.length - 1) {\r\n part = part.replace(new RegExp(separator + \"$\"), \"\");\r\n }\r\n return part;\r\n });\r\n return parts.join(separator);\r\n}\r\n\r\nexport function basename(path) {\r\n if (!path) {\r\n return \"\";\r\n }\r\n const pathList = path.split(\"/\");\r\n pathList.pop();\r\n return pathList.join(\"/\") === \"\" ? \"/\" : pathList.join(\"/\");\r\n}\r\n\r\nexport function filename(path) {\r\n const pathList = path.split(\"/\");\r\n return pathList.pop();\r\n}\r\n\r\nexport function fileNameNoExt(filename) {\r\n return filename.substring(0, filename.lastIndexOf(\".\")) || filename;\r\n}\r\n\r\nexport function randomStr(length) {\r\n let result = \"\";\r\n const characters =\r\n \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\";\r\n const charactersLength = characters.length;\r\n for (let i = 0; i < length; i++) {\r\n result += characters.charAt(\r\n Math.floor(Math.random() * charactersLength)\r\n );\r\n }\r\n return result;\r\n}\r\n\r\nexport function getNumber(base, conditions) {\r\n conditions.forEach((v) => {\r\n if (v) {\r\n base++;\r\n }\r\n });\r\n return base;\r\n}\r\n\r\nexport const isMac = () => {\r\n return navigator.platform.toUpperCase().indexOf(\"MAC\") >= 0;\r\n};\r\n\r\nexport const isMobileSafari = () => {\r\n const ua = window.navigator.userAgent;\r\n const iOS = !!ua.match(/iPad/i) || !!ua.match(/iPhone/i);\r\n const webkit = !!ua.match(/WebKit/i);\r\n return iOS && webkit && !ua.match(/CriOS/i);\r\n};\r\n\r\nexport function vhCheck() {\r\n const vh = window.innerHeight;\r\n document.documentElement.style.setProperty(\"--vh\", `${vh}px`);\r\n}\r\n\r\nexport const removeI18nCache = () => {\r\n Object.keys(localStorage).forEach(function (key) {\r\n if (key && key.startsWith(\"i18next_res_\")) {\r\n localStorage.removeItem(key);\r\n }\r\n });\r\n};\r\n\r\nexport const getSelectItemStyles = (name, personName, theme) => {\r\n return {\r\n fontWeight:\r\n personName.indexOf(name) === -1\r\n ? theme.typography.fontWeightRegular\r\n : theme.typography.fontWeightMedium,\r\n };\r\n};","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { Paper } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useLocation, useParams, useRouteMatch } from \"react-router\";\r\nimport API from \"../../middleware/Api\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport Editor from \"for-editor\";\r\nimport SaveButton from \"../Dial/Save\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport TextLoading from \"../Placeholder/TextLoading\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport UseFileSubTitle from \"../../hooks/fileSubtitle\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"30px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n marginLeft: theme.spacing(12),\r\n marginRight: theme.spacing(12),\r\n },\r\n marginBottom: 50,\r\n },\r\n player: {\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n root: {\r\n backgroundColor: \"white\",\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n \"@global\": {\r\n \".for-toolbar\": {\r\n overflowX: \"auto!important\",\r\n },\r\n },\r\n}));\r\n\r\nfunction useQuery() {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nexport default function TextViewer() {\r\n const { t } = useTranslation();\r\n const [content, setContent] = useState(\"\");\r\n const [status, setStatus] = useState(\"\");\r\n const [loading, setLoading] = useState(true);\r\n const math = useRouteMatch();\r\n const $vm = React.createRef();\r\n const location = useLocation();\r\n const query = useQuery();\r\n const { id } = useParams();\r\n UseFileSubTitle(query, math, location);\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n let requestURL = \"/file/content/\" + query.get(\"id\");\r\n if (pathHelper.isSharePage(location.pathname)) {\r\n requestURL = \"/share/content/\" + id;\r\n if (query.get(\"share_path\") !== \"\") {\r\n requestURL +=\r\n \"?path=\" + encodeURIComponent(query.get(\"share_path\"));\r\n }\r\n }\r\n\r\n setLoading(true);\r\n API.get(requestURL, { responseType: \"arraybuffer\" })\r\n .then((response) => {\r\n const buffer = new Buffer(response.rawData, \"binary\");\r\n const textdata = buffer.toString(); // for string\r\n setContent(textdata);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"fileManager.errorReadFileContent\", {\r\n msg: error.message,\r\n }),\r\n \"error\"\r\n );\r\n })\r\n .then(() => {\r\n setLoading(false);\r\n });\r\n // eslint-disable-next-line\r\n }, [math.params[0]]);\r\n\r\n const toBase64 = (file) =>\r\n new Promise((resolve, reject) => {\r\n const reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n reader.onload = () => resolve(reader.result);\r\n reader.onerror = (error) => reject(error);\r\n });\r\n\r\n const save = () => {\r\n setStatus(\"loading\");\r\n API.put(\"/file/update/\" + query.get(\"id\"), content)\r\n .then(() => {\r\n setStatus(\"success\");\r\n setTimeout(() => setStatus(\"\"), 2000);\r\n })\r\n .catch((error) => {\r\n setStatus(\"\");\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n };\r\n\r\n const addImg = async ($file) => {\r\n $vm.current.$img2Url($file.name, await toBase64($file));\r\n console.log($file);\r\n };\r\n\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n {loading && }\r\n {!loading && (\r\n save()}\r\n addImg={($file) => addImg($file)}\r\n onChange={(value) => setContent(value)}\r\n toolbar={{\r\n h1: true, // h1\r\n h2: true, // h2\r\n h3: true, // h3\r\n h4: true, // h4\r\n img: true, // 图片\r\n link: true, // 链接\r\n code: true, // 代码块\r\n preview: true, // 预览\r\n expand: true, // 全屏\r\n /* v0.0.9 */\r\n undo: true, // 撤销\r\n redo: true, // 重做\r\n save: false, // 保存\r\n /* v0.2.3 */\r\n subfield: true, // 单双栏模式\r\n }}\r\n />\r\n )}\r\n \r\n {!pathHelper.isSharePage(location.pathname) && (\r\n \r\n )}\r\n
\r\n );\r\n}\r\n","import React, { Suspense, useCallback, useEffect, useState } from \"react\";\r\nimport { Paper, useTheme } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useLocation, useParams, useRouteMatch } from \"react-router\";\r\nimport API from \"../../middleware/Api\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport SaveButton from \"../Dial/Save\";\r\nimport { codePreviewSuffix } from \"../../config\";\r\nimport TextLoading from \"../Placeholder/TextLoading\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport Switch from \"@material-ui/core/Switch\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport UseFileSubTitle from \"../../hooks/fileSubtitle\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst MonacoEditor = React.lazy(() =>\r\n import(/* webpackChunkName: \"codeEditor\" */ \"react-monaco-editor\")\r\n);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"30px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n marginBottom: 40,\r\n },\r\n editor: {\r\n borderRadius: theme.shape.borderRadius,\r\n },\r\n \"@global\": {\r\n \".overflow-guard\": {\r\n borderRadius: \"0 0 12px 12px!important\",\r\n },\r\n },\r\n formControl: {\r\n margin: \"8px 16px 8px 16px\",\r\n },\r\n toobar: {\r\n textAlign: \"right\",\r\n },\r\n}));\r\n\r\nfunction useQuery() {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nexport default function CodeViewer() {\r\n const { t } = useTranslation();\r\n const [content, setContent] = useState(\"\");\r\n const [status, setStatus] = useState(\"\");\r\n const [loading, setLoading] = useState(true);\r\n const [suffix, setSuffix] = useState(\"javascript\");\r\n const [wordWrap, setWordWrap] = useState(\"off\");\r\n\r\n const math = useRouteMatch();\r\n const location = useLocation();\r\n const query = useQuery();\r\n const { id } = useParams();\r\n const theme = useTheme();\r\n const { title } = UseFileSubTitle(query, math, location);\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n const extension = title.split(\".\");\r\n setSuffix(codePreviewSuffix[extension.pop()]);\r\n // eslint-disable-next-line\r\n }, [title]);\r\n\r\n useEffect(() => {\r\n let requestURL = \"/file/content/\" + query.get(\"id\");\r\n if (pathHelper.isSharePage(location.pathname)) {\r\n requestURL = \"/share/content/\" + id;\r\n if (query.get(\"share_path\") !== \"\") {\r\n requestURL +=\r\n \"?path=\" + encodeURIComponent(query.get(\"share_path\"));\r\n }\r\n }\r\n\r\n setLoading(true);\r\n API.get(requestURL, { responseType: \"arraybuffer\" })\r\n .then((response) => {\r\n const buffer = new Buffer(response.rawData, \"binary\");\r\n const textdata = buffer.toString(); // for string\r\n setContent(textdata);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"fileManager.errorReadFileContent\", {\r\n msg: error.message,\r\n }),\r\n \"error\"\r\n );\r\n })\r\n .then(() => {\r\n setLoading(false);\r\n });\r\n // eslint-disable-next-line\r\n }, [math.params[0]]);\r\n\r\n const save = () => {\r\n setStatus(\"loading\");\r\n API.put(\"/file/update/\" + query.get(\"id\"), content)\r\n .then(() => {\r\n setStatus(\"success\");\r\n setTimeout(() => setStatus(\"\"), 2000);\r\n })\r\n .catch((error) => {\r\n setStatus(\"\");\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n };\r\n\r\n const classes = useStyles();\r\n const isSharePage = pathHelper.isSharePage(location.pathname);\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n setWordWrap(\r\n e.target.checked ? \"on\" : \"off\"\r\n )\r\n }\r\n />\r\n }\r\n label={t(\"fileManager.wordWrap\")}\r\n />\r\n \r\n \r\n setSuffix(e.target.value)}\r\n >\r\n {Array.from(\r\n new Set(\r\n Object.keys(codePreviewSuffix).map((k) => {\r\n return codePreviewSuffix[k];\r\n })\r\n )\r\n ).map((extension, index) => (\r\n \r\n {extension}\r\n \r\n ))}\r\n \r\n \r\n
\r\n \r\n {loading && }\r\n {!loading && (\r\n }>\r\n setContent(value)}\r\n />\r\n \r\n )}\r\n
\r\n {!isSharePage && }\r\n
\r\n );\r\n}\r\n","import {\r\n OneDriveError,\r\n Policy,\r\n QiniuError,\r\n Response,\r\n UpyunError,\r\n} from \"../types\";\r\nimport { sizeToString } from \"../utils\";\r\nimport i18next from \"../../../../i18n\";\r\nimport { AppError } from \"../../../../middleware/Api\";\r\n\r\nexport enum UploaderErrorName {\r\n InvalidFile = \"InvalidFile\",\r\n NoPolicySelected = \"NoPolicySelected\",\r\n UnknownPolicyType = \"UnknownPolicyType\",\r\n FailedCreateUploadSession = \"FailedCreateUploadSession\",\r\n FailedDeleteUploadSession = \"FailedDeleteUploadSession\",\r\n HTTPRequestFailed = \"HTTPRequestFailed\",\r\n LocalChunkUploadFailed = \"LocalChunkUploadFailed\",\r\n SlaveChunkUploadFailed = \"SlaveChunkUploadFailed\",\r\n WriteCtxFailed = \"WriteCtxFailed\",\r\n RemoveCtxFailed = \"RemoveCtxFailed\",\r\n ReadCtxFailed = \"ReadCtxFailed\",\r\n InvalidCtxData = \"InvalidCtxData\",\r\n CtxExpired = \"CtxExpired\",\r\n RequestCanceled = \"RequestCanceled\",\r\n ProcessingTaskDuplicated = \"ProcessingTaskDuplicated\",\r\n OneDriveChunkUploadFailed = \"OneDriveChunkUploadFailed\",\r\n OneDriveEmptyFile = \"OneDriveEmptyFile\",\r\n FailedFinishOneDriveUpload = \"FailedFinishOneDriveUpload\",\r\n S3LikeChunkUploadFailed = \"S3LikeChunkUploadFailed\",\r\n S3LikeUploadCallbackFailed = \"S3LikeUploadCallbackFailed\",\r\n COSUploadCallbackFailed = \"COSUploadCallbackFailed\",\r\n COSPostUploadFailed = \"COSPostUploadFailed\",\r\n UpyunPostUploadFailed = \"UpyunPostUploadFailed\",\r\n QiniuChunkUploadFailed = \"QiniuChunkUploadFailed\",\r\n FailedFinishOSSUpload = \"FailedFinishOSSUpload\",\r\n FailedFinishQiniuUpload = \"FailedFinishQiniuUpload\",\r\n FailedTransformResponse = \"FailedTransformResponse\",\r\n}\r\n\r\nconst RETRY_ERROR_LIST = [\r\n UploaderErrorName.FailedCreateUploadSession,\r\n UploaderErrorName.HTTPRequestFailed,\r\n UploaderErrorName.LocalChunkUploadFailed,\r\n UploaderErrorName.SlaveChunkUploadFailed,\r\n UploaderErrorName.RequestCanceled,\r\n UploaderErrorName.ProcessingTaskDuplicated,\r\n UploaderErrorName.FailedTransformResponse,\r\n];\r\n\r\nconst RETRY_CODE_LIST = [-1];\r\n\r\nexport class UploaderError implements Error {\r\n public stack: string | undefined;\r\n constructor(public name: UploaderErrorName, public message: string) {\r\n this.stack = new Error().stack;\r\n }\r\n\r\n public Message(): string {\r\n return this.message;\r\n }\r\n\r\n public Retryable(): boolean {\r\n return RETRY_ERROR_LIST.includes(this.name);\r\n }\r\n}\r\n\r\n// 文件未通过存储策略验证\r\nexport class FileValidateError extends UploaderError {\r\n // 未通过验证的文件属性\r\n public field: \"size\" | \"suffix\";\r\n\r\n // 对应的存储策略\r\n public policy: Policy;\r\n\r\n constructor(message: string, field: \"size\" | \"suffix\", policy: Policy) {\r\n super(UploaderErrorName.InvalidFile, message);\r\n this.field = field;\r\n this.policy = policy;\r\n }\r\n\r\n public Message(): string {\r\n if (this.field == \"size\") {\r\n return i18next.t(`uploader.sizeExceedLimitError`, {\r\n max: sizeToString(this.policy.maxSize),\r\n });\r\n }\r\n\r\n return i18next.t(`uploader.suffixNotAllowedError`, {\r\n supported: this.policy.allowedSuffix\r\n ? this.policy.allowedSuffix.join(\",\")\r\n : \"*\",\r\n });\r\n }\r\n}\r\n\r\n// 未知存储策略\r\nexport class UnknownPolicyError extends UploaderError {\r\n // 对应的存储策略\r\n public policy: Policy;\r\n\r\n constructor(message: string, policy: Policy) {\r\n super(UploaderErrorName.UnknownPolicyType, message);\r\n this.policy = policy;\r\n }\r\n}\r\n\r\n// 后端 API 出错\r\nexport class APIError extends UploaderError {\r\n private appError: AppError;\r\n constructor(\r\n name: UploaderErrorName,\r\n message: string,\r\n protected response: Response\r\n ) {\r\n super(name, message);\r\n this.appError = new AppError(response.msg, response.code, response.msg);\r\n }\r\n\r\n public Message(): string {\r\n return `${this.message}: ${this.appError.message}`;\r\n }\r\n\r\n public Retryable(): boolean {\r\n return (\r\n super.Retryable() && RETRY_CODE_LIST.includes(this.response.code)\r\n );\r\n }\r\n}\r\n\r\n// 无法创建上传会话\r\nexport class CreateUploadSessionError extends APIError {\r\n constructor(response: Response) {\r\n super(UploaderErrorName.FailedCreateUploadSession, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(`uploader.createUploadSessionError`);\r\n return super.Message();\r\n }\r\n}\r\n\r\n// 无法删除上传会话\r\nexport class DeleteUploadSessionError extends APIError {\r\n constructor(response: Response) {\r\n super(UploaderErrorName.FailedDeleteUploadSession, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(`uploader.deleteUploadSessionError`);\r\n return super.Message();\r\n }\r\n}\r\n\r\n// HTTP 请求出错\r\nexport class HTTPError extends UploaderError {\r\n public response?: any;\r\n constructor(public axiosErr: any, protected url: string) {\r\n super(UploaderErrorName.HTTPRequestFailed, axiosErr.message);\r\n this.response = axiosErr.response;\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.requestError`, {\r\n msg: this.axiosErr,\r\n url: this.url,\r\n });\r\n }\r\n}\r\n\r\n// 本地分块上传失败\r\nexport class LocalChunkUploadError extends APIError {\r\n constructor(response: Response, protected chunkIndex: number) {\r\n super(UploaderErrorName.LocalChunkUploadFailed, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(`uploader.chunkUploadError`, {\r\n index: this.chunkIndex,\r\n });\r\n return super.Message();\r\n }\r\n}\r\n\r\n// 无法创建上传会话\r\nexport class RequestCanceledError extends UploaderError {\r\n constructor() {\r\n super(UploaderErrorName.RequestCanceled, \"Request canceled\");\r\n }\r\n}\r\n\r\n// 从机分块上传失败\r\nexport class SlaveChunkUploadError extends APIError {\r\n constructor(response: Response, protected chunkIndex: number) {\r\n super(UploaderErrorName.SlaveChunkUploadFailed, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(`uploader.chunkUploadError`, {\r\n index: this.chunkIndex,\r\n });\r\n return super.Message();\r\n }\r\n}\r\n\r\n// 上传任务冲突\r\nexport class ProcessingTaskDuplicatedError extends UploaderError {\r\n constructor() {\r\n super(\r\n UploaderErrorName.ProcessingTaskDuplicated,\r\n \"Processing task duplicated\"\r\n );\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.conflictError`);\r\n }\r\n}\r\n\r\n// OneDrive 分块上传失败\r\nexport class OneDriveChunkError extends UploaderError {\r\n constructor(public response: OneDriveError) {\r\n super(\r\n UploaderErrorName.OneDriveChunkUploadFailed,\r\n response.error.message\r\n );\r\n }\r\n\r\n public Message(): string {\r\n let msg = i18next.t(`uploader.chunkUploadErrorWithMsg`, {\r\n msg: this.message,\r\n });\r\n\r\n if (this.response.error.retryAfterSeconds != undefined){\r\n msg += \" \"+i18next.t(`uploader.chunkUploadErrorWithRetryAfter`, {\r\n retryAfter: this.response.error.retryAfterSeconds,\r\n })\r\n }\r\n\r\n return msg;\r\n }\r\n\r\n public Retryable(): boolean {\r\n return (\r\n super.Retryable() || this.response.error.retryAfterSeconds != undefined\r\n );\r\n }\r\n}\r\n\r\n// OneDrive 选择了空文件上传\r\nexport class OneDriveEmptyFileSelected extends UploaderError {\r\n constructor() {\r\n super(UploaderErrorName.OneDriveEmptyFile, \"empty file not supported\");\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(\"uploader.emptyFileError\");\r\n }\r\n}\r\n\r\n// OneDrive 无法完成文件上传\r\nexport class OneDriveFinishUploadError extends APIError {\r\n constructor(response: Response) {\r\n super(UploaderErrorName.FailedFinishOneDriveUpload, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(\"uploader.finishUploadError\");\r\n return super.Message();\r\n }\r\n}\r\n\r\n// S3 类策略分块上传失败\r\nexport class S3LikeChunkError extends UploaderError {\r\n constructor(public response: Document) {\r\n super(\r\n UploaderErrorName.S3LikeChunkUploadFailed,\r\n response.getElementsByTagName(\"Message\")[0].innerHTML\r\n );\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.chunkUploadErrorWithMsg`, {\r\n msg: this.message,\r\n });\r\n }\r\n}\r\n\r\n// OSS 完成传失败\r\nexport class S3LikeFinishUploadError extends UploaderError {\r\n constructor(public response: Document) {\r\n super(\r\n UploaderErrorName.S3LikeChunkUploadFailed,\r\n response.getElementsByTagName(\"Message\")[0].innerHTML\r\n );\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.ossFinishUploadError`, {\r\n msg: this.message,\r\n code: this.response.getElementsByTagName(\"Code\")[0].innerHTML,\r\n });\r\n }\r\n}\r\n\r\n// qiniu 分块上传失败\r\nexport class QiniuChunkError extends UploaderError {\r\n constructor(public response: QiniuError) {\r\n super(UploaderErrorName.QiniuChunkUploadFailed, response.error);\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.chunkUploadErrorWithMsg`, {\r\n msg: this.message,\r\n });\r\n }\r\n}\r\n\r\n// qiniu 完成传失败\r\nexport class QiniuFinishUploadError extends UploaderError {\r\n constructor(public response: QiniuError) {\r\n super(UploaderErrorName.FailedFinishQiniuUpload, response.error);\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.finishUploadErrorWithMsg`, {\r\n msg: this.message,\r\n });\r\n }\r\n}\r\n\r\n// COS 上传失败\r\nexport class COSUploadError extends UploaderError {\r\n constructor(public response: Document) {\r\n super(\r\n UploaderErrorName.COSPostUploadFailed,\r\n response.getElementsByTagName(\"Message\")[0].innerHTML\r\n );\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(`uploader.cosUploadFailed`, {\r\n msg: this.message,\r\n code: this.response.getElementsByTagName(\"Code\")[0].innerHTML,\r\n });\r\n }\r\n}\r\n\r\n// COS 无法完成上传回调\r\nexport class COSUploadCallbackError extends APIError {\r\n constructor(response: Response) {\r\n super(UploaderErrorName.COSUploadCallbackFailed, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(\"uploader.finishUploadError\");\r\n return super.Message();\r\n }\r\n}\r\n\r\n// Upyun 上传失败\r\nexport class UpyunUploadError extends UploaderError {\r\n constructor(public response: UpyunError) {\r\n super(UploaderErrorName.UpyunPostUploadFailed, response.message);\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(\"uploader.upyunUploadFailed\", {\r\n msg: this.message,\r\n });\r\n }\r\n}\r\n\r\n// S3 无法完成上传回调\r\nexport class S3LikeUploadCallbackError extends APIError {\r\n constructor(response: Response) {\r\n super(UploaderErrorName.S3LikeUploadCallbackFailed, \"\", response);\r\n }\r\n\r\n public Message(): string {\r\n this.message = i18next.t(\"uploader.finishUploadError\");\r\n return super.Message();\r\n }\r\n}\r\n\r\n// 无法解析响应\r\nexport class TransformResponseError extends UploaderError {\r\n constructor(private response: string, parseError: Error) {\r\n super(UploaderErrorName.FailedTransformResponse, parseError.message);\r\n }\r\n\r\n public Message(): string {\r\n return i18next.t(\"uploader.parseResponseError\", {\r\n msg: this.message,\r\n content: this.response,\r\n });\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport classNames from \"classnames\";\r\nimport ErrorIcon from \"@material-ui/icons/Error\";\r\nimport InfoIcon from \"@material-ui/icons/Info\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport CheckCircleIcon from \"@material-ui/icons/CheckCircle\";\r\nimport WarningIcon from \"@material-ui/icons/Warning\";\r\n\r\nimport {\r\n IconButton,\r\n Snackbar,\r\n SnackbarContent,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n snackbar: state.viewUpdate.snackbar,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n info: InfoIcon,\r\n};\r\n\r\nconst styles1 = (theme) => ({\r\n success: {\r\n backgroundColor: theme.palette.success.main,\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark,\r\n },\r\n info: {\r\n backgroundColor: theme.palette.info.main,\r\n },\r\n warning: {\r\n backgroundColor: theme.palette.warning.main,\r\n },\r\n icon: {\r\n fontSize: 20,\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing(1),\r\n },\r\n message: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n});\r\n\r\nfunction MySnackbarContent(props) {\r\n const { classes, className, message, onClose, variant, ...other } = props;\r\n const Icon = variantIcon[variant];\r\n\r\n return (\r\n \r\n \r\n {message}\r\n \r\n }\r\n action={[\r\n \r\n \r\n ,\r\n ]}\r\n {...other}\r\n />\r\n );\r\n}\r\nMySnackbarContent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n className: PropTypes.string,\r\n message: PropTypes.node,\r\n onClose: PropTypes.func,\r\n variant: PropTypes.oneOf([\"alert\", \"success\", \"warning\", \"error\", \"info\"])\r\n .isRequired,\r\n};\r\n\r\nconst MySnackbarContentWrapper = withStyles(styles1)(MySnackbarContent);\r\nconst styles = (theme) => ({\r\n margin: {\r\n margin: theme.spacing(1),\r\n },\r\n});\r\nclass SnackbarCompoment extends Component {\r\n state = {\r\n open: false,\r\n };\r\n\r\n UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n if (nextProps.snackbar.toggle !== this.props.snackbar.toggle) {\r\n this.setState({ open: true });\r\n }\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ open: false });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst AlertBar = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(SnackbarCompoment));\r\n\r\nexport default AlertBar;\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n AccountArrowRight,\r\n AccountPlus,\r\n DesktopMacDashboard,\r\n HomeAccount,\r\n LogoutVariant,\r\n} from \"mdi-material-ui\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport {\r\n Avatar,\r\n Chip,\r\n Divider,\r\n ListItemIcon,\r\n MenuItem,\r\n Popover,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport API from \"../../middleware/Api\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport {\r\n setSessionStatus,\r\n setUserPopover,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n anchorEl: state.viewUpdate.userPopoverAnchorEl,\r\n registerEnabled: state.siteConfig.registerEnabled,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setUserPopover: (anchor) => {\r\n dispatch(setUserPopover(anchor));\r\n },\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n setSessionStatus: (status) => {\r\n dispatch(setSessionStatus(status));\r\n },\r\n };\r\n};\r\nconst styles = () => ({\r\n avatar: {\r\n width: \"30px\",\r\n height: \"30px\",\r\n },\r\n header: {\r\n display: \"flex\",\r\n padding: \"20px 20px 20px 20px\",\r\n },\r\n largeAvatar: {\r\n height: \"90px\",\r\n width: \"90px\",\r\n },\r\n info: {\r\n marginLeft: \"10px\",\r\n width: \"139px\",\r\n },\r\n badge: {\r\n marginTop: \"10px\",\r\n },\r\n visitorMenu: {\r\n width: 200,\r\n },\r\n});\r\n\r\nclass UserAvatarPopoverCompoment extends Component {\r\n handleClose = () => {\r\n this.props.setUserPopover(null);\r\n };\r\n\r\n openURL = (url) => {\r\n window.location.href = url;\r\n };\r\n\r\n sigOut = () => {\r\n API.delete(\"/user/session/\")\r\n .then(() => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"login.loggedOut\"),\r\n \"success\"\r\n );\r\n Auth.signout();\r\n window.location.reload();\r\n this.props.setSessionStatus(false);\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"warning\"\r\n );\r\n })\r\n .then(() => {\r\n this.handleClose();\r\n });\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const user = Auth.GetUser();\r\n const isAdminPage = pathHelper.isAdminPage(\r\n this.props.location.pathname\r\n );\r\n\r\n return (\r\n \r\n {!Auth.Check() && (\r\n
\r\n \r\n this.props.history.push(\"/login\")}\r\n >\r\n \r\n \r\n \r\n {t(\"login.signIn\")}\r\n \r\n {this.props.registerEnabled && (\r\n \r\n this.props.history.push(\"/signup\")\r\n }\r\n >\r\n \r\n \r\n \r\n {t(\"login.signUp\")}\r\n \r\n )}\r\n
\r\n )}\r\n {Auth.Check() && (\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n {user.nickname}\r\n \r\n {user.user_name}\r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n {!isAdminPage && (\r\n {\r\n this.handleClose();\r\n this.props.history.push(\r\n \"/profile/\" + user.id\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n {t(\"navbar.myProfile\")}\r\n \r\n )}\r\n {user.group.id === 1 && (\r\n {\r\n this.handleClose();\r\n this.props.history.push(\"/admin/home\");\r\n }}\r\n >\r\n \r\n \r\n \r\n {t(\"navbar.dashboard\")}\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n {t(\"login.logout\")}\r\n \r\n
\r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nUserAvatarPopoverCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst UserAvatarPopover = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(\r\n withStyles(styles)(\r\n withRouter(withTranslation()(UserAvatarPopoverCompoment))\r\n )\r\n);\r\n\r\nexport default UserAvatarPopover;\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport SettingIcon from \"@material-ui/icons/Settings\";\r\nimport UserAvatarPopover from \"./UserAvatarPopover\";\r\nimport { AccountCircle } from \"mdi-material-ui\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport {\r\n Avatar,\r\n Grow,\r\n IconButton,\r\n Tooltip,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport DarkModeSwitcher from \"./DarkModeSwitcher\";\r\nimport { Home } from \"@material-ui/icons\";\r\nimport { setUserPopover } from \"../../redux/explorer\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n selected: state.explorer.selected,\r\n isMultiple: state.explorer.selectProps.isMultiple,\r\n withFolder: state.explorer.selectProps.withFolder,\r\n withFile: state.explorer.selectProps.withFile,\r\n isLogin: state.viewUpdate.isLogin,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setUserPopover: (anchor) => {\r\n dispatch(setUserPopover(anchor));\r\n },\r\n };\r\n};\r\n\r\nconst styles = (theme) => ({\r\n mobileHidden: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n display: \"none\",\r\n },\r\n whiteSpace: \"nowrap\",\r\n },\r\n avatar: {\r\n width: \"30px\",\r\n height: \"30px\",\r\n },\r\n header: {\r\n display: \"flex\",\r\n padding: \"20px 20px 20px 20px\",\r\n },\r\n largeAvatar: {\r\n height: \"90px\",\r\n width: \"90px\",\r\n },\r\n info: {\r\n marginLeft: \"10px\",\r\n width: \"139px\",\r\n },\r\n badge: {\r\n marginTop: \"10px\",\r\n },\r\n visitorMenu: {\r\n width: 200,\r\n },\r\n});\r\n\r\nclass UserAvatarCompoment extends Component {\r\n state = {\r\n anchorEl: null,\r\n };\r\n\r\n showUserInfo = (e) => {\r\n this.props.setUserPopover(e.currentTarget);\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({\r\n anchorEl: null,\r\n });\r\n };\r\n\r\n openURL = (url) => {\r\n window.location.href = url;\r\n };\r\n\r\n returnHome = () => {\r\n window.location.href = \"/home\";\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const loginCheck = Auth.Check(this.props.isLogin);\r\n const user = Auth.GetUser(this.props.isLogin);\r\n const isAdminPage = pathHelper.isAdminPage(\r\n this.props.location.pathname\r\n );\r\n\r\n return (\r\n
\r\n \r\n
\r\n {!isAdminPage && (\r\n <>\r\n \r\n {loginCheck && (\r\n <>\r\n \r\n \r\n this.props.history.push(\r\n \"/setting?\"\r\n )\r\n }\r\n color=\"inherit\"\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n )}\r\n {isAdminPage && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n {!loginCheck && }\r\n {loginCheck && (\r\n \r\n )}\r\n {\" \"}\r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nUserAvatarCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst UserAvatar = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(UserAvatarCompoment))));\r\n\r\nexport default UserAvatar;\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport classNames from \"classnames\";\r\nimport { connect } from \"react-redux\";\r\nimport ShareIcon from \"@material-ui/icons/Share\";\r\nimport MusicNote from \"@material-ui/icons/MusicNote\";\r\nimport BackIcon from \"@material-ui/icons/ArrowBack\";\r\nimport OpenIcon from \"@material-ui/icons/OpenInNew\";\r\nimport DownloadIcon from \"@material-ui/icons/CloudDownload\";\r\nimport RenameIcon from \"@material-ui/icons/BorderColor\";\r\nimport MoveIcon from \"@material-ui/icons/Input\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport MenuIcon from \"@material-ui/icons/Menu\";\r\nimport { isPreviewable } from \"../../config\";\r\nimport { changeThemeColor, sizeToString, vhCheck } from \"../../utils\";\r\nimport Uploader from \"../Uploader/Uploader.js\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport SezrchBar from \"./SearchBar\";\r\nimport StorageBar from \"./StorageBar\";\r\nimport UserAvatar from \"./UserAvatar\";\r\nimport UserInfo from \"./UserInfo\";\r\nimport {\r\n FolderDownload,\r\n AccountArrowRight,\r\n AccountPlus,\r\n LogoutVariant,\r\n} from \"mdi-material-ui\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {\r\n AppBar,\r\n Drawer,\r\n Grow,\r\n Hidden,\r\n IconButton,\r\n List,\r\n ListItemIcon,\r\n ListItemText,\r\n SwipeableDrawer,\r\n Toolbar,\r\n Tooltip,\r\n Typography,\r\n withStyles,\r\n withTheme\r\n} from \"@material-ui/core\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport API from \"../../middleware/Api\";\r\nimport FileTag from \"./FileTags\";\r\nimport { Assignment, Devices, MoreHoriz, Settings } from \"@material-ui/icons\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport SubActions from \"../FileManager/Navigator/SubActions\";\r\nimport {\r\n audioPreviewSetIsOpen,\r\n changeContextMenu,\r\n drawerToggleAction,\r\n navigateTo,\r\n openCreateFolderDialog,\r\n openLoadingDialog,\r\n openMoveDialog,\r\n openMusicDialog,\r\n openPreview,\r\n openRemoveDialog,\r\n openRenameDialog,\r\n openShareDialog,\r\n saveFile,\r\n setSelectedTarget,\r\n setSessionStatus,\r\n showImgPreivew,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport {\r\n startBatchDownload,\r\n startDirectoryDownload,\r\n startDownload,\r\n} from \"../../redux/explorer/action\";\r\nimport { withTranslation } from \"react-i18next\";\r\nimport MuiListItem from \"@material-ui/core/ListItem\";\r\n\r\nvhCheck();\r\nconst drawerWidth = 240;\r\nconst drawerWidthMobile = 270;\r\n\r\nconst ListItem = withStyles((theme) => ({\r\n root: {\r\n borderRadius:theme.shape.borderRadius,\r\n },\r\n}))(MuiListItem);\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n desktopOpen: state.viewUpdate.open,\r\n selected: state.explorer.selected,\r\n isMultiple: state.explorer.selectProps.isMultiple,\r\n withFolder: state.explorer.selectProps.withFolder,\r\n withFile: state.explorer.selectProps.withFile,\r\n path: state.navigator.path,\r\n title: state.siteConfig.title,\r\n subTitle: state.viewUpdate.subTitle,\r\n loadUploader: state.viewUpdate.loadUploader,\r\n isLogin: state.viewUpdate.isLogin,\r\n shareInfo: state.viewUpdate.shareInfo,\r\n registerEnabled: state.siteConfig.registerEnabled,\r\n audioPreviewPlayingName: state.explorer.audioPreview.playingName,\r\n audioPreviewIsOpen: state.explorer.audioPreview.isOpen,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n handleDesktopToggle: (open) => {\r\n dispatch(drawerToggleAction(open));\r\n },\r\n setSelectedTarget: (targets) => {\r\n dispatch(setSelectedTarget(targets));\r\n },\r\n navigateTo: (path) => {\r\n dispatch(navigateTo(path));\r\n },\r\n openCreateFolderDialog: () => {\r\n dispatch(openCreateFolderDialog());\r\n },\r\n changeContextMenu: (type, open) => {\r\n dispatch(changeContextMenu(type, open));\r\n },\r\n saveFile: () => {\r\n dispatch(saveFile());\r\n },\r\n openMusicDialog: () => {\r\n dispatch(openMusicDialog());\r\n },\r\n showImgPreivew: (first) => {\r\n dispatch(showImgPreivew(first));\r\n },\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n openRenameDialog: () => {\r\n dispatch(openRenameDialog());\r\n },\r\n openMoveDialog: () => {\r\n dispatch(openMoveDialog());\r\n },\r\n openRemoveDialog: () => {\r\n dispatch(openRemoveDialog());\r\n },\r\n openShareDialog: () => {\r\n dispatch(openShareDialog());\r\n },\r\n openLoadingDialog: (text) => {\r\n dispatch(openLoadingDialog(text));\r\n },\r\n setSessionStatus: () => {\r\n dispatch(setSessionStatus());\r\n },\r\n openPreview: (share) => {\r\n dispatch(openPreview(share));\r\n },\r\n audioPreviewOpen: () => {\r\n dispatch(audioPreviewSetIsOpen(true));\r\n },\r\n startBatchDownload: (share) => {\r\n dispatch(startBatchDownload(share));\r\n },\r\n startDirectoryDownload: (share) => {\r\n dispatch(startDirectoryDownload(share));\r\n },\r\n startDownload: (share, file) => {\r\n dispatch(startDownload(share, file));\r\n },\r\n };\r\n};\r\n\r\nconst styles = (theme) => ({\r\n appBar: {\r\n marginLeft: drawerWidth,\r\n [theme.breakpoints.down(\"xs\")]: {\r\n marginLeft: drawerWidthMobile,\r\n },\r\n zIndex: theme.zIndex.drawer + 1,\r\n transition: \" background-color 250ms\",\r\n },\r\n\r\n drawer: {\r\n width: 0,\r\n flexShrink: 0,\r\n },\r\n drawerDesktop: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n icon: {\r\n marginRight: theme.spacing(2),\r\n },\r\n menuButton: {\r\n marginRight: 20,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n menuButtonDesktop: {\r\n marginRight: 20,\r\n [theme.breakpoints.down(\"xs\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n menuIcon: {\r\n marginRight: 20,\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n drawerPaper: {\r\n width: drawerWidthMobile,\r\n },\r\n drawerPaperDesktop: {\r\n width: drawerWidth,\r\n },\r\n upDrawer: {\r\n overflowX: \"hidden\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"100%\",\r\n justifyContent: \"space-between\",\r\n },\r\n },\r\n drawerOpen: {\r\n width: drawerWidth,\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.enteringScreen,\r\n }),\r\n },\r\n drawerClose: {\r\n transition: theme.transitions.create(\"width\", {\r\n easing: theme.transitions.easing.sharp,\r\n duration: theme.transitions.duration.leavingScreen,\r\n }),\r\n overflowX: \"hidden\",\r\n width: 0,\r\n },\r\n content: {\r\n flexGrow: 1,\r\n padding: theme.spacing(3),\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n badge: {\r\n top: 1,\r\n right: -15,\r\n },\r\n nested: {\r\n paddingLeft: theme.spacing(4),\r\n },\r\n sectionForFile: {\r\n display: \"flex\",\r\n },\r\n extendedIcon: {\r\n marginRight: theme.spacing(1),\r\n },\r\n addButton: {\r\n marginLeft: \"40px\",\r\n marginTop: \"25px\",\r\n marginBottom: \"15px\",\r\n },\r\n fabButton: {\r\n borderRadius: \"100px\",\r\n },\r\n badgeFix: {\r\n right: \"10px\",\r\n },\r\n iconFix: {\r\n marginLeft: \"16px\",\r\n },\r\n dividerFix: {\r\n marginTop: \"8px\",\r\n },\r\n folderShareIcon: {\r\n verticalAlign: \"sub\",\r\n marginRight: \"5px\",\r\n },\r\n shareInfoContainer: {\r\n display: \"flex\",\r\n marginTop: \"15px\",\r\n marginBottom: \"20px\",\r\n marginLeft: \"28px\",\r\n textDecoration: \"none\",\r\n },\r\n shareAvatar: {\r\n width: \"40px\",\r\n height: \"40px\",\r\n },\r\n stickFooter: {\r\n bottom: \"0px\",\r\n position: \"absolute\",\r\n backgroundColor: theme.palette.background.paper,\r\n width: \"100%\",\r\n },\r\n ownerInfo: {\r\n marginLeft: \"10px\",\r\n width: \"150px\",\r\n },\r\n minStickDrawer: {\r\n overflowY: \"auto\",\r\n },\r\n paddingList:{\r\n padding:theme.spacing(1),\r\n }\r\n});\r\nclass NavbarCompoment extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n mobileOpen: false,\r\n };\r\n this.UploaderRef = React.createRef();\r\n }\r\n\r\n UNSAFE_componentWillMount() {\r\n this.unlisten = this.props.history.listen(() => {\r\n this.setState(() => ({ mobileOpen: false }));\r\n });\r\n }\r\n componentWillUnmount() {\r\n this.unlisten();\r\n }\r\n\r\n componentDidMount() {\r\n changeThemeColor(\r\n this.props.selected.length <= 1 &&\r\n !(!this.props.isMultiple && this.props.withFile)\r\n ? this.props.theme.palette.primary.main\r\n : this.props.theme.palette.background.default\r\n );\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n if (\r\n (this.props.selected.length === 0) !==\r\n (nextProps.selected.length === 0)\r\n ) {\r\n changeThemeColor(\r\n !(this.props.selected.length === 0)\r\n ? this.props.theme.palette.type === \"dark\"\r\n ? this.props.theme.palette.background.default\r\n : this.props.theme.palette.primary.main\r\n : this.props.theme.palette.background.default\r\n );\r\n }\r\n };\r\n\r\n handleDrawerToggle = () => {\r\n this.setState((state) => ({ mobileOpen: !state.mobileOpen }));\r\n };\r\n\r\n openDownload = () => {\r\n this.props.startDownload(this.props.shareInfo, this.props.selected[0]);\r\n };\r\n\r\n openDirectoryDownload = (e) => {\r\n this.props.startDirectoryDownload(this.props.shareInfo);\r\n };\r\n\r\n archiveDownload = (e) => {\r\n this.props.startBatchDownload(this.props.shareInfo);\r\n };\r\n\r\n signOut = () => {\r\n API.delete(\"/user/session/\")\r\n .then(() => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"login.loggedOut\"),\r\n \"success\"\r\n );\r\n Auth.signout();\r\n window.location.reload();\r\n this.props.setSessionStatus(false);\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"warning\"\r\n );\r\n })\r\n .finally(() => {\r\n this.handleClose();\r\n });\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const user = Auth.GetUser(this.props.isLogin);\r\n const isHomePage = pathHelper.isHomePage(this.props.location.pathname);\r\n const isSharePage = pathHelper.isSharePage(\r\n this.props.location.pathname\r\n );\r\n\r\n const drawer = (\r\n
\r\n {pathHelper.isMobile() && }\r\n\r\n {Auth.Check(this.props.isLogin) && (\r\n <>\r\n
\r\n \r\n \r\n \r\n this.props.history.push(\"/shares?\")\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {user.group.allowRemoteDownload && (\r\n \r\n this.props.history.push(\"/aria2?\")\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {user.group.webdav && (\r\n \r\n this.props.history.push(\"/webdav?\")\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n this.props.history.push(\"/tasks?\")\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {pathHelper.isMobile() && (\r\n <>\r\n \r\n \r\n this.props.history.push(\r\n \"/setting?\"\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n )}\r\n\r\n {!Auth.Check(this.props.isLogin) && (\r\n
\r\n this.props.history.push(\"/login\")}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n {this.props.registerEnabled && (\r\n \r\n this.props.history.push(\"/signup\")\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n )}\r\n
\r\n );\r\n const iOS =\r\n process.browser && /iPad|iPhone|iPod/.test(navigator.userAgent);\r\n return (\r\n
\r\n \r\n \r\n {this.props.selected.length === 0 && (\r\n \r\n \r\n \r\n )}\r\n {this.props.selected.length === 0 && (\r\n \r\n this.props.handleDesktopToggle(\r\n !this.props.desktopOpen\r\n )\r\n }\r\n className={classes.menuButtonDesktop}\r\n >\r\n \r\n \r\n )}\r\n {this.props.selected.length > 0 &&\r\n (isHomePage ||\r\n pathHelper.isSharePage(\r\n this.props.location.pathname\r\n )) && (\r\n 0}>\r\n \r\n this.props.setSelectedTarget([])\r\n }\r\n >\r\n \r\n \r\n \r\n )}\r\n {this.props.selected.length === 0 && (\r\n {\r\n this.props.history.push(\"/\");\r\n }}\r\n >\r\n {this.props.subTitle\r\n ? this.props.subTitle\r\n : this.props.title}\r\n \r\n )}\r\n\r\n {!this.props.isMultiple &&\r\n (this.props.withFile || this.props.withFolder) &&\r\n !pathHelper.isMobile() && (\r\n \r\n {this.props.selected[0].name}{\" \"}\r\n {this.props.withFile &&\r\n (isHomePage ||\r\n pathHelper.isSharePage(\r\n this.props.location.pathname\r\n )) &&\r\n \"(\" +\r\n sizeToString(\r\n this.props.selected[0].size\r\n ) +\r\n \")\"}\r\n \r\n )}\r\n\r\n {this.props.selected.length > 1 &&\r\n !pathHelper.isMobile() && (\r\n \r\n {t(\"navbar.objectsSelected\", {\r\n num: this.props.selected.length,\r\n })}\r\n \r\n )}\r\n {this.props.selected.length === 0 && }\r\n
\r\n {this.props.selected.length > 0 &&\r\n (isHomePage || isSharePage) && (\r\n
\r\n {!this.props.isMultiple &&\r\n this.props.withFile &&\r\n isPreviewable(\r\n this.props.selected[0].name\r\n ) && (\r\n \r\n \r\n \r\n this.props.openPreview(\r\n this.props\r\n .shareInfo\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {!this.props.isMultiple &&\r\n this.props.withFile && (\r\n \r\n \r\n \r\n this.openDownload()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {(this.props.isMultiple ||\r\n this.props.withFolder) &&\r\n window.showDirectoryPicker &&\r\n window.isSecureContext && (\r\n \r\n \r\n \r\n this.openDirectoryDownload()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {(this.props.isMultiple ||\r\n this.props.withFolder) && (\r\n \r\n \r\n \r\n this.archiveDownload()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {!this.props.isMultiple &&\r\n !pathHelper.isMobile() &&\r\n !isSharePage && (\r\n \r\n \r\n \r\n this.props.openShareDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {!this.props.isMultiple && !isSharePage && (\r\n \r\n \r\n \r\n this.props.openRenameDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n {!isSharePage && (\r\n
\r\n {!pathHelper.isMobile() && (\r\n \r\n \r\n \r\n this.props.openMoveDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n\r\n \r\n \r\n \r\n this.props.openRemoveDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n\r\n {pathHelper.isMobile() && (\r\n \r\n \r\n \r\n this.props.changeContextMenu(\r\n \"file\",\r\n true\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n )}\r\n
\r\n )}\r\n {this.props.selected.length <= 1 &&\r\n !(!this.props.isMultiple && this.props.withFile) &&\r\n this.props.audioPreviewPlayingName != null && (\r\n \r\n \r\n \r\n )}\r\n\r\n {this.props.selected.length === 0 && }\r\n {this.props.selected.length === 0 &&\r\n pathHelper.isMobile() &&\r\n (isHomePage || this.props.shareInfo) && (\r\n \r\n )}\r\n \r\n \r\n \r\n\r\n \r\n \r\n this.setState(() => ({ mobileOpen: true }))\r\n }\r\n disableDiscovery={iOS}\r\n ModalProps={{\r\n keepMounted: true, // Better open performance on mobile.\r\n }}\r\n >\r\n {drawer}\r\n \r\n \r\n \r\n \r\n
\r\n {drawer}\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\nNavbarCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n};\r\n\r\nconst Navbar = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(\r\n withTheme(\r\n withStyles(styles)(withRouter(withTranslation()(NavbarCompoment)))\r\n )\r\n);\r\n\r\nexport default Navbar;\r\n","import { Task } from \"../types\";\r\nimport Logger from \"../logger\";\r\nimport { UploaderError, UploaderErrorName } from \"../errors\";\r\nimport { ChunkProgress } from \"../uploader/chunk\";\r\n\r\nexport const sizeToString = (bytes: number): string => {\r\n if (bytes === 0) return \"0 B\";\r\n const k = 1024;\r\n const sizes = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"];\r\n const i = Math.floor(Math.log(bytes) / Math.log(k));\r\n return (bytes / Math.pow(k, i)).toFixed(1) + \" \" + sizes[i];\r\n};\r\n\r\n// 文件分块\r\nexport function getChunks(\r\n file: File,\r\n chunkByteSize: number | undefined\r\n): Blob[] {\r\n // 如果 chunkByteSize 比文件大或为0,则直接取文件的大小\r\n if (!chunkByteSize || chunkByteSize > file.size || chunkByteSize == 0) {\r\n chunkByteSize = file.size;\r\n }\r\n\r\n const chunks: Blob[] = [];\r\n const count = Math.ceil(file.size / chunkByteSize);\r\n for (let i = 0; i < count; i++) {\r\n const chunk = file.slice(\r\n chunkByteSize * i,\r\n i === count - 1 ? file.size : chunkByteSize * (i + 1)\r\n );\r\n chunks.push(chunk);\r\n }\r\n\r\n if (chunks.length == 0) {\r\n chunks.push(file.slice(0));\r\n }\r\n return chunks;\r\n}\r\n\r\nexport function sumChunk(list: ChunkProgress[]) {\r\n return list.reduce((data, loaded) => data + loaded.loaded, 0);\r\n}\r\n\r\nconst resumeKeyPrefix = \"cd_upload_ctx_\";\r\n\r\nfunction isTask(toBeDetermined: Task | string): toBeDetermined is Task {\r\n return !!(toBeDetermined as Task).name;\r\n}\r\n\r\nexport function getResumeCtxKey(task: Task | string): string {\r\n if (isTask(task)) {\r\n return `${resumeKeyPrefix}name_${task.name}_dst_${task.dst}_size_${task.size}_policy_${task.policy.id}`;\r\n }\r\n\r\n return task;\r\n}\r\n\r\nexport function setResumeCtx(task: Task, logger: Logger) {\r\n const ctxKey = getResumeCtxKey(task);\r\n try {\r\n localStorage.setItem(ctxKey, JSON.stringify(task));\r\n } catch (err) {\r\n logger.warn(\r\n new UploaderError(\r\n UploaderErrorName.WriteCtxFailed,\r\n `setResumeCtx failed: ${ctxKey}`\r\n )\r\n );\r\n }\r\n}\r\n\r\nexport function removeResumeCtx(task: Task | string, logger: Logger) {\r\n const ctxKey = getResumeCtxKey(task);\r\n try {\r\n localStorage.removeItem(ctxKey);\r\n } catch (err) {\r\n logger.warn(\r\n new UploaderError(\r\n UploaderErrorName.RemoveCtxFailed,\r\n `removeResumeCtx failed. key: ${ctxKey}`\r\n )\r\n );\r\n }\r\n}\r\n\r\nexport function cleanupResumeCtx(logger: Logger) {\r\n for (let i = 0; i < localStorage.length; i++) {\r\n const key = localStorage.key(i);\r\n if (key && key.startsWith(resumeKeyPrefix)) {\r\n try {\r\n localStorage.removeItem(key);\r\n } catch (err) {\r\n logger.warn(\r\n new UploaderError(\r\n UploaderErrorName.RemoveCtxFailed,\r\n `removeResumeCtx failed. key: ${key}`\r\n )\r\n );\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport function getResumeCtx(task: Task | string, logger: Logger): Task | null {\r\n const ctxKey = getResumeCtxKey(task);\r\n let localInfoString: string | null = null;\r\n try {\r\n localInfoString = localStorage.getItem(ctxKey);\r\n } catch {\r\n logger.warn(\r\n new UploaderError(\r\n UploaderErrorName.ReadCtxFailed,\r\n `getResumeCtx failed. key: ${ctxKey}`\r\n )\r\n );\r\n }\r\n\r\n if (localInfoString == null) {\r\n return null;\r\n }\r\n\r\n let localInfo: Task | null = null;\r\n try {\r\n localInfo = JSON.parse(localInfoString);\r\n } catch {\r\n // 本地信息已被破坏,直接删除\r\n removeResumeCtx(task, logger);\r\n logger.warn(\r\n new UploaderError(\r\n UploaderErrorName.InvalidCtxData,\r\n `getResumeCtx failed to parse. key: ${ctxKey}`\r\n )\r\n );\r\n }\r\n\r\n if (\r\n localInfo &&\r\n localInfo.session &&\r\n localInfo.session.expires < Math.floor(Date.now() / 1000)\r\n ) {\r\n removeResumeCtx(task, logger);\r\n logger.warn(\r\n new UploaderError(\r\n UploaderErrorName.CtxExpired,\r\n `upload session already expired at ${localInfo.session.expires}. key: ${ctxKey}`\r\n )\r\n );\r\n return null;\r\n }\r\n\r\n return localInfo;\r\n}\r\n\r\nexport function listResumeCtx(logger: Logger): Task[] {\r\n const res: Task[] = [];\r\n for (let i = 0, len = localStorage.length; i < len; i++) {\r\n const key = localStorage.key(i);\r\n if (key && key.startsWith(resumeKeyPrefix)) {\r\n const value = getResumeCtx(key, logger);\r\n if (value) {\r\n res.push(value);\r\n }\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n\r\nexport function OBJtoXML(obj: any): string {\r\n let xml = \"\";\r\n for (const prop in obj) {\r\n xml += \"<\" + prop + \">\";\r\n if (Array.isArray(obj[prop])) {\r\n for (const array of obj[prop]) {\r\n // A real botch fix here\r\n xml += \"\";\r\n xml += \"<\" + prop + \">\";\r\n\r\n xml += OBJtoXML(new Object(array));\r\n }\r\n } else if (typeof obj[prop] == \"object\") {\r\n xml += OBJtoXML(new Object(obj[prop]));\r\n } else {\r\n xml += obj[prop];\r\n }\r\n xml += \"\";\r\n }\r\n return xml.replace(/<\\/?[0-9]{1,}>/g, \"\");\r\n}\r\n\r\nexport function getFileInput(id: number, isFolder: boolean): HTMLInputElement {\r\n const input = document.createElement(\"input\");\r\n input.type = \"file\";\r\n input.id = `upload-file-input-${id}`;\r\n if (isFolder) {\r\n input.id = `upload-folder-input-${id}`;\r\n input.setAttribute(\"webkitdirectory\", \"true\");\r\n input.setAttribute(\"mozdirectory\", \"true\");\r\n } else {\r\n input.id = `upload-file-input-${id}`;\r\n input.multiple = true;\r\n }\r\n input.hidden = true;\r\n document.body.appendChild(input);\r\n return input;\r\n}\r\n\r\nexport function pathJoin(parts: string[], sep = \"/\"): string {\r\n parts = parts.map((part, index) => {\r\n if (index) {\r\n part = part.replace(new RegExp(\"^\" + sep), \"\");\r\n }\r\n if (index !== parts.length - 1) {\r\n part = part.replace(new RegExp(sep + \"$\"), \"\");\r\n }\r\n return part;\r\n });\r\n return parts.join(sep);\r\n}\r\n\r\nfunction basename(path: string): string {\r\n const pathList = path.split(\"/\");\r\n pathList.pop();\r\n return pathList.join(\"/\") === \"\" ? \"/\" : pathList.join(\"/\");\r\n}\r\n\r\nexport function trimPrefix(src: string, prefix: string): string {\r\n if (src.startsWith(prefix)) {\r\n return src.slice(prefix.length);\r\n }\r\n return src;\r\n}\r\n\r\nexport function getDirectoryUploadDst(dst: string, file: any): string {\r\n let relPath = file.webkitRelativePath;\r\n if (!relPath || relPath == \"\") {\r\n relPath = file.fsPath;\r\n if (!relPath || relPath == \"\") {\r\n return dst;\r\n }\r\n }\r\n\r\n relPath = trimPrefix(relPath, \"/\");\r\n\r\n return basename(pathJoin([dst, relPath]));\r\n}\r\n\r\n// Wrap readEntries in a promise to make working with readEntries easier\r\nasync function readEntriesPromise(directoryReader: any): Promise {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n directoryReader.readEntries(resolve, reject);\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n}\r\n\r\nasync function readFilePromise(fileReader: any, path: string): Promise {\r\n try {\r\n return await new Promise((resolve, reject) => {\r\n fileReader.file((file: any) => {\r\n file.fsPath = path;\r\n resolve(file);\r\n });\r\n });\r\n } catch (err) {\r\n console.log(err);\r\n }\r\n}\r\n\r\n// Get all the entries (files or sub-directories) in a directory by calling readEntries until it returns empty array\r\nasync function readAllDirectoryEntries(directoryReader: any): Promise {\r\n const entries: any[] = [];\r\n let readEntries = await readEntriesPromise(directoryReader);\r\n while (readEntries.length > 0) {\r\n entries.push(...readEntries);\r\n readEntries = await readEntriesPromise(directoryReader);\r\n }\r\n return entries;\r\n}\r\n\r\n// Drop handler function to get all files\r\nexport async function getAllFileEntries(\r\n dataTransferItemList: DataTransferItemList\r\n): Promise {\r\n const fileEntries: any[] = [];\r\n // Use BFS to traverse entire directory/file structure\r\n const queue: any[] = [];\r\n // Unfortunately dataTransferItemList is not iterable i.e. no forEach\r\n for (let i = 0; i < dataTransferItemList.length; i++) {\r\n const fileEntry = dataTransferItemList[i].webkitGetAsEntry();\r\n if (!fileEntry) {\r\n const file = dataTransferItemList[i].getAsFile();\r\n if (file) {\r\n fileEntries.push(file);\r\n }\r\n }\r\n\r\n queue.push(dataTransferItemList[i].webkitGetAsEntry());\r\n }\r\n while (queue.length > 0) {\r\n const entry = queue.shift();\r\n if (!entry) {\r\n continue;\r\n }\r\n if (entry.isFile) {\r\n fileEntries.push(await readFilePromise(entry, entry.fullPath));\r\n } else if (entry.isDirectory) {\r\n const reader = entry.createReader();\r\n const entries: any = await readAllDirectoryEntries(reader);\r\n queue.push(...entries);\r\n }\r\n }\r\n return fileEntries;\r\n}\r\n\r\nexport function isFileDrop(e: DragEvent): boolean {\r\n return !!e.dataTransfer && e.dataTransfer.types.includes(\"Files\");\r\n}\r\n","export * from \"./pool\";\r\nexport * from \"./helper\";\r\nexport * from \"./validator\";\r\nexport * from \"./request\";\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport SearchIcon from \"@material-ui/icons/Search\";\r\nimport { fade } from \"@material-ui/core/styles/colorManipulator\";\r\nimport FileIcon from \"@material-ui/icons/InsertDriveFile\";\r\nimport ShareIcon from \"@material-ui/icons/Share\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {\r\n Fade,\r\n InputBase,\r\n ListItemIcon,\r\n ListItemText,\r\n MenuItem,\r\n Paper,\r\n Popper,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport { withRouter } from \"react-router\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport { configure, HotKeys } from \"react-hotkeys\";\r\nimport { searchMyFile } from \"../../redux/explorer\";\r\nimport FolderIcon from \"@material-ui/icons/Folder\";\r\nimport { Trans, withTranslation } from \"react-i18next\";\r\n\r\nconfigure({\r\n ignoreTags: [],\r\n});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n path: state.navigator.path,\r\n search: state.explorer.search,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n searchMyFile: (keywords, path) => {\r\n dispatch(searchMyFile(keywords, path));\r\n },\r\n };\r\n};\r\n\r\nconst styles = (theme) => ({\r\n search: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n position: \"relative\",\r\n borderRadius: theme.shape.borderRadius,\r\n backgroundColor: fade(theme.palette.common.white, 0.15),\r\n \"&:hover\": {\r\n backgroundColor: fade(theme.palette.common.white, 0.25),\r\n },\r\n marginRight: theme.spacing(2),\r\n marginLeft: 0,\r\n width: \"100%\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n marginLeft: theme.spacing(7.2),\r\n width: \"auto\",\r\n },\r\n },\r\n searchIcon: {\r\n width: theme.spacing(9),\r\n height: \"100%\",\r\n position: \"absolute\",\r\n pointerEvents: \"none\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n },\r\n inputRoot: {\r\n color: \"inherit\",\r\n width: \"100%\",\r\n },\r\n inputInput: {\r\n paddingTop: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n paddingBottom: theme.spacing(1),\r\n paddingLeft: theme.spacing(7),\r\n transition: theme.transitions.create(\"width\"),\r\n width: \"100%\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: 200,\r\n \"&:focus\": {\r\n width: 300,\r\n },\r\n },\r\n },\r\n suggestBox: {\r\n zIndex: \"9999\",\r\n width: 364,\r\n },\r\n});\r\n\r\nconst keyMap = {\r\n SEARCH: \"enter\",\r\n};\r\n\r\nclass SearchBarCompoment extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n anchorEl: null,\r\n input: \"\",\r\n };\r\n }\r\n\r\n handlers = {\r\n SEARCH: (e) => {\r\n if (pathHelper.isHomePage(this.props.location.pathname)) {\r\n this.searchMyFile(\"\")();\r\n } else {\r\n this.searchShare();\r\n }\r\n e.target.blur();\r\n },\r\n };\r\n\r\n handleChange = (event) => {\r\n const { currentTarget } = event;\r\n this.input = event.target.value;\r\n this.setState({\r\n anchorEl: currentTarget,\r\n input: event.target.value,\r\n });\r\n };\r\n\r\n cancelSuggest = () => {\r\n this.setState({\r\n input: \"\",\r\n });\r\n };\r\n\r\n searchMyFile = (path) => () => {\r\n this.props.searchMyFile(\"keywords/\" + this.input, path);\r\n };\r\n\r\n searchShare = () => {\r\n this.props.history.push(\r\n \"/search?keywords=\" + encodeURIComponent(this.input)\r\n );\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const { anchorEl } = this.state;\r\n const id = this.state.input !== \"\" ? \"simple-popper\" : null;\r\n const isHomePage = pathHelper.isHomePage(this.props.location.pathname);\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n \r\n {({ TransitionProps }) => (\r\n \r\n \r\n {isHomePage && (\r\n \r\n \r\n \r\n \r\n \r\n ,\r\n ]}\r\n />\r\n \r\n }\r\n />\r\n \r\n )}\r\n\r\n {isHomePage &&\r\n this.props.path !== \"/\" &&\r\n !this.props.search && (\r\n \r\n \r\n \r\n \r\n \r\n ,\r\n ]}\r\n />\r\n \r\n }\r\n />\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n ,\r\n ]}\r\n />\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nSearchBarCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst SearchBar = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(SearchBarCompoment))));\r\n\r\nexport default SearchBar;\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport StorageIcon from \"@material-ui/icons/Storage\";\r\nimport { connect } from \"react-redux\";\r\nimport API from \"../../middleware/Api\";\r\nimport { sizeToString } from \"../../utils\";\r\n\r\nimport {\r\n Divider,\r\n LinearProgress,\r\n Tooltip,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport ButtonBase from \"@material-ui/core/ButtonBase\";\r\nimport { withRouter } from \"react-router\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { Link as RouterLink } from \"react-router-dom\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n refresh: state.viewUpdate.storageRefresh,\r\n isLogin: state.viewUpdate.isLogin,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n };\r\n};\r\n\r\nconst styles = (theme) => ({\r\n iconFix: {\r\n marginLeft: \"32px\",\r\n marginRight: \"17px\",\r\n color: theme.palette.text.secondary,\r\n marginTop: \"2px\",\r\n },\r\n textFix: {\r\n padding: \" 0 0 0 16px\",\r\n },\r\n storageContainer: {\r\n display: \"flex\",\r\n marginTop: \"15px\",\r\n textAlign: \"left\",\r\n marginBottom: \"11px\",\r\n },\r\n detail: {\r\n width: \"100%\",\r\n marginRight: \"35px\",\r\n },\r\n info: {\r\n width: \"131px\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n [theme.breakpoints.down(\"xs\")]: {\r\n width: \"162px\",\r\n },\r\n marginTop: \"5px\",\r\n },\r\n bar: {\r\n marginTop: \"5px\",\r\n },\r\n stickFooter: {\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n});\r\n\r\n// TODO 使用 hooks 重构\r\nclass StorageBarCompoment extends Component {\r\n state = {\r\n percent: 0,\r\n used: null,\r\n total: null,\r\n showExpand: false,\r\n };\r\n\r\n firstLoad = true;\r\n\r\n componentDidMount = () => {\r\n if (this.firstLoad && this.props.isLogin) {\r\n this.firstLoad = !this.firstLoad;\r\n this.updateStatus();\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n this.firstLoad = false;\r\n }\r\n\r\n UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n if (\r\n (this.props.isLogin && this.props.refresh !== nextProps.refresh) ||\r\n (this.props.isLogin !== nextProps.isLogin && nextProps.isLogin)\r\n ) {\r\n this.updateStatus();\r\n }\r\n };\r\n\r\n updateStatus = () => {\r\n let percent = 0;\r\n API.get(\"/user/storage\")\r\n .then((response) => {\r\n if (response.data.used / response.data.total >= 1) {\r\n percent = 100;\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"navbar.exceedQuota\"),\r\n \"warning\"\r\n );\r\n } else {\r\n percent = (response.data.used / response.data.total) * 100;\r\n }\r\n this.setState({\r\n percent: percent,\r\n used: sizeToString(response.data.used),\r\n total: sizeToString(response.data.total),\r\n });\r\n })\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n .catch(() => {});\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n return (\r\n this.setState({ showExpand: true })}\r\n onMouseLeave={() => this.setState({ showExpand: false })}\r\n className={classes.stickFooter}\r\n >\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {t(\"navbar.storage\")}\r\n \r\n \r\n
\r\n \r\n \r\n {this.state.used === null\r\n ? \" -- \"\r\n : this.state.used}\r\n {\" / \"}\r\n {this.state.total === null\r\n ? \" -- \"\r\n : this.state.total}\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nStorageBarCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst StorageBar = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(StorageBarCompoment))));\r\n\r\nexport default StorageBar;\r\n","/* eslint-disable */\r\nclass Crc32 {\r\n constructor() {\r\n this.crc = -1;\r\n }\r\n\r\n append(data) {\r\n let crc = this.crc | 0;\r\n const table = this.table;\r\n for (let offset = 0, len = data.length | 0; offset < len; offset++) {\r\n crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xff];\r\n }\r\n this.crc = crc;\r\n }\r\n\r\n get() {\r\n return ~this.crc;\r\n }\r\n}\r\nCrc32.prototype.table = (() => {\r\n let i;\r\n let j;\r\n let t;\r\n const table = [];\r\n for (i = 0; i < 256; i++) {\r\n t = i;\r\n for (j = 0; j < 8; j++) {\r\n t = t & 1 ? (t >>> 1) ^ 0xedb88320 : t >>> 1;\r\n }\r\n table[i] = t;\r\n }\r\n return table;\r\n})();\r\n\r\nconst getDataHelper = (byteLength) => {\r\n const uint8 = new Uint8Array(byteLength);\r\n return {\r\n array: uint8,\r\n view: new DataView(uint8.buffer),\r\n };\r\n};\r\n\r\nconst pump = (zipObj) =>\r\n zipObj.reader.read().then((chunk) => {\r\n if (chunk.done) return zipObj.writeFooter();\r\n const outputData = chunk.value;\r\n zipObj.crc.append(outputData);\r\n zipObj.uncompressedLength += outputData.length;\r\n zipObj.compressedLength += outputData.length;\r\n zipObj.ctrl.enqueue(outputData);\r\n });\r\n\r\n/**\r\n * [createWriter description]\r\n * @param {Object} underlyingSource [description]\r\n * @return {Boolean} [description]\r\n */\r\nfunction createWriter(underlyingSource) {\r\n const files = Object.create(null);\r\n const filenames = [];\r\n const encoder = new TextEncoder();\r\n let offset = 0;\r\n let activeZipIndex = 0;\r\n let ctrl;\r\n let activeZipObject, closed;\r\n\r\n function next() {\r\n activeZipIndex++;\r\n activeZipObject = files[filenames[activeZipIndex]];\r\n if (activeZipObject) processNextChunk();\r\n else if (closed) closeZip();\r\n }\r\n\r\n const zipWriter = {\r\n enqueue(fileLike) {\r\n if (closed)\r\n throw new TypeError(\r\n \"Cannot enqueue a chunk into a readable stream that is closed or has been requested to be closed\"\r\n );\r\n\r\n let name = fileLike.name.trim();\r\n const date = new Date(\r\n typeof fileLike.lastModified === \"undefined\"\r\n ? Date.now()\r\n : fileLike.lastModified\r\n );\r\n\r\n if (fileLike.directory && !name.endsWith(\"/\")) name += \"/\";\r\n if (files[name]) throw new Error(\"File already exists.\");\r\n\r\n const nameBuf = encoder.encode(name);\r\n filenames.push(name);\r\n\r\n const zipObject = (files[name] = {\r\n level: 0,\r\n ctrl,\r\n directory: !!fileLike.directory,\r\n nameBuf,\r\n comment: encoder.encode(fileLike.comment || \"\"),\r\n compressedLength: 0,\r\n uncompressedLength: 0,\r\n writeHeader() {\r\n const header = getDataHelper(26);\r\n const data = getDataHelper(30 + nameBuf.length);\r\n\r\n zipObject.offset = offset;\r\n zipObject.header = header;\r\n if (zipObject.level !== 0 && !zipObject.directory) {\r\n header.view.setUint16(4, 0x0800);\r\n }\r\n header.view.setUint32(0, 0x14000808);\r\n header.view.setUint16(\r\n 6,\r\n (((date.getHours() << 6) | date.getMinutes()) << 5) |\r\n (date.getSeconds() / 2),\r\n true\r\n );\r\n header.view.setUint16(\r\n 8,\r\n ((((date.getFullYear() - 1980) << 4) |\r\n (date.getMonth() + 1)) <<\r\n 5) |\r\n date.getDate(),\r\n true\r\n );\r\n header.view.setUint16(22, nameBuf.length, true);\r\n data.view.setUint32(0, 0x504b0304);\r\n data.array.set(header.array, 4);\r\n data.array.set(nameBuf, 30);\r\n offset += data.array.length;\r\n ctrl.enqueue(data.array);\r\n },\r\n writeFooter() {\r\n const footer = getDataHelper(16);\r\n footer.view.setUint32(0, 0x504b0708);\r\n\r\n if (zipObject.crc) {\r\n zipObject.header.view.setUint32(\r\n 10,\r\n zipObject.crc.get(),\r\n true\r\n );\r\n zipObject.header.view.setUint32(\r\n 14,\r\n zipObject.compressedLength,\r\n true\r\n );\r\n zipObject.header.view.setUint32(\r\n 18,\r\n zipObject.uncompressedLength,\r\n true\r\n );\r\n footer.view.setUint32(4, zipObject.crc.get(), true);\r\n footer.view.setUint32(\r\n 8,\r\n zipObject.compressedLength,\r\n true\r\n );\r\n footer.view.setUint32(\r\n 12,\r\n zipObject.uncompressedLength,\r\n true\r\n );\r\n }\r\n\r\n ctrl.enqueue(footer.array);\r\n offset += zipObject.compressedLength + 16;\r\n next();\r\n },\r\n fileLike,\r\n });\r\n\r\n if (!activeZipObject) {\r\n activeZipObject = zipObject;\r\n processNextChunk();\r\n }\r\n },\r\n close() {\r\n if (closed)\r\n throw new TypeError(\r\n \"Cannot close a readable stream that has already been requested to be closed\"\r\n );\r\n if (!activeZipObject) closeZip();\r\n closed = true;\r\n },\r\n };\r\n\r\n function closeZip() {\r\n let length = 0;\r\n let index = 0;\r\n let indexFilename, file;\r\n for (\r\n indexFilename = 0;\r\n indexFilename < filenames.length;\r\n indexFilename++\r\n ) {\r\n file = files[filenames[indexFilename]];\r\n length += 46 + file.nameBuf.length + file.comment.length;\r\n }\r\n const data = getDataHelper(length + 22);\r\n for (\r\n indexFilename = 0;\r\n indexFilename < filenames.length;\r\n indexFilename++\r\n ) {\r\n file = files[filenames[indexFilename]];\r\n data.view.setUint32(index, 0x504b0102);\r\n data.view.setUint16(index + 4, 0x1400);\r\n data.array.set(file.header.array, index + 6);\r\n data.view.setUint16(index + 32, file.comment.length, true);\r\n if (file.directory) {\r\n data.view.setUint8(index + 38, 0x10);\r\n }\r\n data.view.setUint32(index + 42, file.offset, true);\r\n data.array.set(file.nameBuf, index + 46);\r\n data.array.set(file.comment, index + 46 + file.nameBuf.length);\r\n index += 46 + file.nameBuf.length + file.comment.length;\r\n }\r\n data.view.setUint32(index, 0x504b0506);\r\n data.view.setUint16(index + 8, filenames.length, true);\r\n data.view.setUint16(index + 10, filenames.length, true);\r\n data.view.setUint32(index + 12, length, true);\r\n data.view.setUint32(index + 16, offset, true);\r\n ctrl.enqueue(data.array);\r\n ctrl.close();\r\n }\r\n\r\n function processNextChunk() {\r\n if (!activeZipObject) return;\r\n if (activeZipObject.directory)\r\n return activeZipObject.writeFooter(activeZipObject.writeHeader());\r\n if (activeZipObject.reader) return pump(activeZipObject);\r\n if (activeZipObject.fileLike.stream) {\r\n activeZipObject.crc = new Crc32();\r\n activeZipObject.reader = activeZipObject.fileLike\r\n .stream()\r\n .getReader();\r\n activeZipObject.writeHeader();\r\n } else next();\r\n }\r\n return new ReadableStream({\r\n start: (c) => {\r\n ctrl = c;\r\n underlyingSource.start &&\r\n Promise.resolve(underlyingSource.start(zipWriter));\r\n },\r\n pull() {\r\n return (\r\n processNextChunk() ||\r\n (underlyingSource.pull &&\r\n Promise.resolve(underlyingSource.pull(zipWriter)))\r\n );\r\n },\r\n });\r\n}\r\n\r\nwindow.ZIP = createWriter;\r\n","import { CloudreveFile } from \"../types\";\r\nimport { list } from \"../services/navigate\";\r\nimport { pathJoin } from \"../component/Uploader/core/utils\";\r\n\r\nexport function getPreviewPath(selected: any): string {\r\n return encodeURIComponent(\r\n selected.path === \"/\"\r\n ? selected.path + selected.name\r\n : selected.path + \"/\" + selected.name\r\n );\r\n}\r\n\r\nexport async function walk(\r\n file: CloudreveFile[],\r\n share: any\r\n): Promise {\r\n let res: CloudreveFile[] = [];\r\n for (const f of file) {\r\n if (f.type === \"file\") {\r\n res.push(f);\r\n continue;\r\n }\r\n\r\n if (f.type === \"dir\") {\r\n const response = await list(\r\n pathJoin([f.path, f.name]),\r\n share,\r\n \"\",\r\n \"\"\r\n );\r\n const subs = await walk(response.data.objects, share);\r\n res = [...res, ...subs];\r\n }\r\n }\r\n\r\n return res;\r\n}\r\n","// get the paths of files (no directories) in the directory\r\n// parent: \"\" or \"/\"\r\nexport const getFileSystemDirectoryPaths = async (\r\n handle: FileSystemDirectoryHandle,\r\n parent = \"\"\r\n): Promise => {\r\n const paths: Array = [];\r\n\r\n for await (const [path, fileSystemHandle] of handle.entries()) {\r\n if (fileSystemHandle instanceof window.FileSystemFileHandle) {\r\n paths.push(`${parent}${path}`);\r\n } else {\r\n paths.push(\r\n ...(await getFileSystemDirectoryPaths(\r\n fileSystemHandle,\r\n `${parent}${path}/`\r\n ))\r\n );\r\n }\r\n }\r\n\r\n return paths;\r\n};\r\n\r\n// create the dst directory if it doesn't exist\r\n// return the dst directory handle\r\n// paths: \"/dir1/dir2\" => [\"dir1\",\"dir2\"]\r\nexport const createFileSystemDirectory = async (\r\n handle: FileSystemDirectoryHandle,\r\n paths: string[]\r\n) => {\r\n let cur = handle;\r\n while (paths.length > 0) {\r\n const path = paths.shift();\r\n if (!path) {\r\n break;\r\n }\r\n cur = await cur.getDirectoryHandle(path, { create: true });\r\n }\r\n return cur;\r\n};\r\n\r\n// save file into the dst directory\r\n// create the dst file if it doesn't exist by default\r\n// path: a/b/c.jpg\r\nexport const saveFileToFileSystemDirectory = async (\r\n handle: FileSystemDirectoryHandle,\r\n stream: FileSystemWriteChunkType,\r\n path: string,\r\n create = true\r\n) => {\r\n const paths = path.split(\"/\");\r\n const fileName = paths.pop();\r\n if (!fileName) return;\r\n\r\n const dir = await createFileSystemDirectory(handle, paths);\r\n const file = await dir.getFileHandle(fileName, { create });\r\n const writable = await file.createWritable();\r\n await writable.write(stream);\r\n await writable.close();\r\n};\r\n\r\n// verify or request the permission of the readwrite permission\r\nexport async function verifyFileSystemRWPermission(\r\n fileHandle: FileSystemDirectoryHandle\r\n) {\r\n const opts = { mode: \"readwrite\" as FileSystemPermissionMode };\r\n\r\n // Check if we already have permission, if so, return true.\r\n if ((await fileHandle.queryPermission(opts)) === \"granted\") {\r\n return true;\r\n }\r\n\r\n // Request permission to the file, if the user grants permission, return true.\r\n if ((await fileHandle.requestPermission(opts)) === \"granted\") {\r\n return true;\r\n }\r\n\r\n // The user did not grant permission, return false.\r\n return false;\r\n}\r\n","import { AnyAction } from \"redux\";\r\nimport { ThunkAction } from \"redux-thunk\";\r\nimport { CloudreveFile, SortMethod } from \"./../../types/index\";\r\nimport { closeContextMenu, setPagination } from \"../viewUpdate/action\";\r\nimport { Policy } from \"../../component/Uploader/core/types\";\r\nimport streamSaver from \"streamsaver\";\r\nimport \"../../utils/zip\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport { filePath, isMac } from \"../../utils\";\r\nimport API, { getBaseURL } from \"../../middleware/Api\";\r\nimport { pathJoin, trimPrefix } from \"../../component/Uploader/core/utils\";\r\nimport { getPreviewPath, walk } from \"../../utils/api\";\r\nimport { askForOption } from \"./async\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport { encodingRequired, isPreviewable } from \"../../config\";\r\nimport { push } from \"connected-react-router\";\r\nimport {\r\n changeContextMenu,\r\n closeAllModals,\r\n navigateTo,\r\n openDirectoryDownloadDialog,\r\n openGetSourceDialog,\r\n openLoadingDialog,\r\n openTorrentDownloadDialog,\r\n showAudioPreview,\r\n showImgPreivew,\r\n toggleSnackbar,\r\n} from \"./index\";\r\nimport { getDownloadURL } from \"../../services/file\";\r\nimport i18next from \"../../i18n\";\r\nimport {\r\n getFileSystemDirectoryPaths,\r\n saveFileToFileSystemDirectory,\r\n verifyFileSystemRWPermission,\r\n} from \"../../utils/filesystem\";\r\nimport { sortMethodFuncs } from \"../../component/FileManager/Sort\";\r\n\r\nexport interface ActionSetFileList extends AnyAction {\r\n type: \"SET_FILE_LIST\";\r\n list: CloudreveFile[];\r\n}\r\nexport const setFileList = (list: CloudreveFile[]): ActionSetFileList => {\r\n return {\r\n type: \"SET_FILE_LIST\",\r\n list,\r\n };\r\n};\r\n\r\nexport interface ActionSetDirList extends AnyAction {\r\n type: \"SET_DIR_LIST\";\r\n list: CloudreveFile[];\r\n}\r\nexport const setDirList = (list: CloudreveFile[]): ActionSetDirList => {\r\n return {\r\n type: \"SET_DIR_LIST\",\r\n list,\r\n };\r\n};\r\n\r\nexport interface ActionSetSortMethod extends AnyAction {\r\n type: \"SET_SORT_METHOD\";\r\n method: SortMethod;\r\n}\r\nexport const setSortMethod = (method: SortMethod): ActionSetSortMethod => {\r\n return {\r\n type: \"SET_SORT_METHOD\",\r\n method,\r\n };\r\n};\r\n\r\nexport const setSideBar = (open: boolean) => {\r\n return {\r\n type: \"SET_SIDE_BAR\",\r\n open,\r\n };\r\n};\r\n\r\nexport const setCurrentPolicy = (policy: Policy) => {\r\n return {\r\n type: \"SET_CURRENT_POLICY\",\r\n policy,\r\n };\r\n};\r\n\r\nexport const removeSelectedTargets = (fileIds: any) => {\r\n return {\r\n type: \"RMOVE_SELECTED_TARGETS\",\r\n fileIds,\r\n };\r\n};\r\nexport const addSelectedTargets = (targets: any) => {\r\n return {\r\n type: \"ADD_SELECTED_TARGETS\",\r\n targets,\r\n };\r\n};\r\nexport const setSelectedTarget = (targets: any) => {\r\n return {\r\n type: \"SET_SELECTED_TARGET\",\r\n targets,\r\n };\r\n};\r\nexport const setLastSelect = (file: any, index: any) => {\r\n return {\r\n type: \"SET_LAST_SELECT\",\r\n file,\r\n index,\r\n };\r\n};\r\nexport const setShiftSelectedIds = (shiftSelectedIds: any) => {\r\n return {\r\n type: \"SET_SHIFT_SELECTED_IDS\",\r\n shiftSelectedIds,\r\n };\r\n};\r\n\r\nexport const selectAll = (): ThunkAction => {\r\n return (dispatch, getState): void => {\r\n const state = getState();\r\n const { selected, fileList, dirList } = state.explorer;\r\n if (selected.length >= dirList.length + fileList.length) {\r\n dispatch(setSelectedTarget([]));\r\n } else {\r\n dispatch(setSelectedTarget([...dirList, ...fileList]));\r\n }\r\n };\r\n};\r\n\r\nexport const updateFileList = (\r\n list: CloudreveFile[]\r\n): ThunkAction => {\r\n return (dispatch, getState): void => {\r\n const state = getState();\r\n // TODO: define state type\r\n const { sortMethod, pagination } = state.viewUpdate;\r\n const dirList = list.filter((x) => {\r\n return x.type === \"dir\";\r\n });\r\n const fileList = list.filter((x) => {\r\n return x.type === \"file\";\r\n });\r\n const sortFunc = sortMethodFuncs[sortMethod as SortMethod];\r\n dispatch(setDirList(dirList.sort(sortFunc)));\r\n dispatch(setFileList(fileList.sort(sortFunc)));\r\n const total = dirList.length + fileList.length;\r\n if (pagination.page * pagination.size > total) {\r\n dispatch(\r\n setPagination({\r\n ...pagination,\r\n page: Math.max(Math.ceil(total / pagination.size), 1),\r\n })\r\n );\r\n }\r\n };\r\n};\r\n\r\nexport const changeSortMethod = (\r\n method: SortMethod\r\n): ThunkAction => {\r\n return (dispatch, getState): void => {\r\n const state = getState();\r\n const { fileList, dirList } = state.explorer;\r\n const sortFunc = sortMethodFuncs[method];\r\n Auth.SetPreference(\"sort\", method);\r\n dispatch(setSortMethod(method));\r\n dispatch(setDirList(dirList.slice().sort(sortFunc)));\r\n dispatch(setFileList(fileList.slice().sort(sortFunc)));\r\n };\r\n};\r\n\r\nexport const toggleObjectInfoSidebar = (\r\n open: boolean\r\n): ThunkAction => {\r\n return (dispatch, getState): void => {\r\n const state = getState();\r\n if (open) {\r\n dispatch(closeContextMenu());\r\n }\r\n dispatch(setSideBar(true));\r\n };\r\n};\r\n\r\nexport const serverSideBatchDownload = (\r\n share: any\r\n): ThunkAction => {\r\n return (dispatch, getState): void => {\r\n dispatch(\r\n openLoadingDialog(i18next.t(\"fileManager.preparingBathDownload\"))\r\n );\r\n const {\r\n explorer: { selected, fileList, dirList },\r\n router: {\r\n location: { pathname },\r\n },\r\n } = getState();\r\n const dirs: string[] = [],\r\n items: string[] = [];\r\n const fileSources: CloudreveFile[] = selected.length ? selected : [...dirList, ...fileList];\r\n fileSources.map((value) => {\r\n if (value.type === \"dir\") {\r\n dirs.push(value.id);\r\n } else {\r\n items.push(value.id);\r\n }\r\n return null;\r\n });\r\n\r\n let reqURL = \"/file/archive\";\r\n const postBody = {\r\n items: items,\r\n dirs: dirs,\r\n };\r\n if (pathHelper.isSharePage(pathname)) {\r\n reqURL = \"/share/archive/\" + share.key;\r\n postBody[\"path\"] = fileSources[0].path;\r\n }\r\n\r\n API.post(reqURL, postBody)\r\n .then((response: any) => {\r\n if (response.rawData.code === 0) {\r\n dispatch(closeAllModals());\r\n window.location.assign(response.data);\r\n } else {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n response.rawData.msg,\r\n \"warning\"\r\n )\r\n );\r\n }\r\n dispatch(closeAllModals());\r\n })\r\n .catch((error) => {\r\n dispatch(\r\n toggleSnackbar(\"top\", \"right\", error.message, \"error\")\r\n );\r\n dispatch(closeAllModals());\r\n });\r\n };\r\n};\r\n\r\nexport const startDownload = (\r\n share: any,\r\n file: CloudreveFile\r\n): ThunkAction => {\r\n return async (dispatch, getState): Promise => {\r\n const {\r\n router: {\r\n location: { pathname },\r\n },\r\n } = getState();\r\n const user = Auth.GetUser();\r\n if (\r\n pathHelper.isSharePage(pathname) &&\r\n !Auth.Check() &&\r\n user &&\r\n !user.group.shareDownload\r\n ) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"share.pleaseLogin\"),\r\n \"warning\"\r\n )\r\n );\r\n return;\r\n }\r\n\r\n dispatch(changeContextMenu(\"file\", false));\r\n dispatch(openLoadingDialog(i18next.t(\"fileManager.preparingDownload\")));\r\n try {\r\n const res = await getDownloadURL(file ? file : share);\r\n window.location.assign(res.data);\r\n dispatch(closeAllModals());\r\n } catch (e) {\r\n dispatch(toggleSnackbar(\"top\", \"right\", e.message, \"warning\"));\r\n dispatch(closeAllModals());\r\n }\r\n };\r\n};\r\n\r\nexport const startBatchDownload = (\r\n share: any\r\n): ThunkAction => {\r\n return async (dispatch, getState): Promise => {\r\n dispatch(changeContextMenu(\"file\", false));\r\n const {\r\n explorer: { selected, fileList, dirList },\r\n } = getState();\r\n\r\n const user = Auth.GetUser();\r\n if (user.group.allowArchiveDownload) {\r\n let option: any;\r\n try {\r\n option = await dispatch(\r\n askForOption(\r\n [\r\n {\r\n key: \"client\",\r\n name: i18next.t(\r\n \"fileManager.browserBatchDownload\"\r\n ),\r\n description: i18next.t(\r\n \"fileManager.browserBatchDownloadDescription\"\r\n ),\r\n },\r\n {\r\n key: \"server\",\r\n name: i18next.t(\r\n \"fileManager.serverBatchDownload\"\r\n ),\r\n description: i18next.t(\r\n \"fileManager.serverBatchDownloadDescription\"\r\n ),\r\n },\r\n ],\r\n i18next.t(\"fileManager.selectArchiveMethod\")\r\n )\r\n );\r\n } catch (e) {\r\n return;\r\n }\r\n\r\n if (option.key === \"server\") {\r\n dispatch(serverSideBatchDownload(share));\r\n return;\r\n }\r\n }\r\n\r\n dispatch(openLoadingDialog(i18next.t(\"modals.listingFiles\")));\r\n\r\n let queue: CloudreveFile[] = [];\r\n try {\r\n const walkSources = selected.length ? selected : [...dirList, ...fileList];\r\n queue = await walk(walkSources, share);\r\n } catch (e) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.listingFileError\", {\r\n message: e.message,\r\n }),\r\n \"warning\"\r\n )\r\n );\r\n dispatch(closeAllModals());\r\n return;\r\n }\r\n\r\n dispatch(closeAllModals());\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"center\",\r\n i18next.t(\"fileManager.batchDownloadStarted\"),\r\n \"info\"\r\n )\r\n );\r\n const fileStream = streamSaver.createWriteStream(\"archive.zip\");\r\n let failed = 0;\r\n const readableZipStream = new (window as any).ZIP({\r\n start(ctrl: any) {\r\n // ctrl.close()\r\n },\r\n async pull(ctrl: any) {\r\n while (queue.length > 0) {\r\n const next = queue.pop();\r\n if (next && next.type === \"file\") {\r\n const previewPath = getPreviewPath(next);\r\n const url =\r\n getBaseURL() +\r\n (pathHelper.isSharePage(location.pathname)\r\n ? \"/share/preview/\" +\r\n share.key +\r\n (previewPath !== \"\"\r\n ? \"?path=\" + previewPath\r\n : \"\")\r\n : \"/file/preview/\" + next.id);\r\n try {\r\n const res = await fetch(url, { cache: \"no-cache\" });\r\n const stream = () => res.body;\r\n const name = trimPrefix(\r\n pathJoin([next.path, next.name]),\r\n \"/\"\r\n );\r\n ctrl.enqueue({ name, stream });\r\n return;\r\n } catch (e) {\r\n failed++;\r\n }\r\n }\r\n }\r\n ctrl.close();\r\n },\r\n });\r\n\r\n // more optimized\r\n if (window.WritableStream && readableZipStream.pipeTo) {\r\n return readableZipStream\r\n .pipeTo(fileStream)\r\n .then(() => dispatch(closeAllModals()))\r\n .catch((e) => {\r\n console.log(e);\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.batchDownloadError\", {\r\n message: e && e.message,\r\n }),\r\n \"warning\"\r\n );\r\n dispatch(closeAllModals());\r\n });\r\n }\r\n };\r\n};\r\n\r\nlet directoryDownloadAbortController: AbortController;\r\nexport const cancelDirectoryDownload = () =>\r\n directoryDownloadAbortController.abort();\r\n\r\nexport const startDirectoryDownload = (\r\n share: any\r\n): ThunkAction => {\r\n return async (dispatch, getState): Promise => {\r\n dispatch(changeContextMenu(\"file\", false));\r\n\r\n directoryDownloadAbortController = new AbortController();\r\n if (!window.showDirectoryPicker || !window.isSecureContext) {\r\n return;\r\n }\r\n let handle: FileSystemDirectoryHandle;\r\n // we should show directory picker at first\r\n // https://web.dev/file-system-access/#:~:text=handle%3B%0A%7D-,Gotchas,-Sometimes%20processing%20the\r\n try {\r\n // can't use suggestedName for showDirectoryPicker (only available showSaveFilePicker)\r\n handle = await window.showDirectoryPicker({\r\n startIn: \"downloads\",\r\n mode: \"readwrite\",\r\n });\r\n // we should obtain the readwrite permission for the directory at first\r\n if (!(await verifyFileSystemRWPermission(handle))) {\r\n throw new Error(\r\n i18next.t(\"fileManager.directoryDownloadPermissionError\")\r\n );\r\n }\r\n dispatch(closeAllModals());\r\n } catch (e) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.directoryDownloadError\", {\r\n msg: e && e.message,\r\n }),\r\n \"error\"\r\n )\r\n );\r\n dispatch(closeAllModals());\r\n return;\r\n }\r\n\r\n const {\r\n explorer: { selected },\r\n navigator: { path },\r\n } = getState();\r\n\r\n // list files to download\r\n dispatch(openLoadingDialog(i18next.t(\"modals.listingFiles\")));\r\n\r\n let queue: CloudreveFile[] = [];\r\n try {\r\n queue = await walk(selected, share);\r\n } catch (e) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.listingFileError\", {\r\n message: e.message,\r\n }),\r\n \"warning\"\r\n )\r\n );\r\n dispatch(closeAllModals());\r\n return;\r\n }\r\n\r\n dispatch(closeAllModals());\r\n\r\n let failed = 0;\r\n let option: any;\r\n // preparation for downloading\r\n // get the files in the directory to compare with queue files\r\n // parent: \"\"\r\n const fsPaths = await getFileSystemDirectoryPaths(handle, \"\");\r\n\r\n // path: / or /abc (no sep suffix)\r\n // file.path: /abc/d (no sep suffix)\r\n // fsPaths: [\"abc/d/e.bin\",]\r\n const duplicates = queue\r\n .map((file) =>\r\n trimPrefix(\r\n `${file.path}/${file.name}`,\r\n path === \"/\" ? \"/\" : path + \"/\"\r\n )\r\n )\r\n .filter((path) => fsPaths.includes(path));\r\n\r\n // we should ask users for the duplication handle method\r\n if (duplicates.length > 0) {\r\n try {\r\n option = await dispatch(\r\n askForOption(\r\n [\r\n {\r\n key: \"replace\",\r\n name: i18next.t(\r\n \"fileManager.directoryDownloadReplace\"\r\n ),\r\n description: i18next.t(\r\n \"fileManager.directoryDownloadReplaceDescription\",\r\n {\r\n // display the first three duplications\r\n duplicates: duplicates\r\n .slice(\r\n 0,\r\n duplicates.length >= 3\r\n ? 3\r\n : duplicates.length\r\n )\r\n .join(\", \"),\r\n num: duplicates.length,\r\n }\r\n ),\r\n },\r\n {\r\n key: \"skip\",\r\n name: i18next.t(\r\n \"fileManager.directoryDownloadSkip\"\r\n ),\r\n description: i18next.t(\r\n \"fileManager.directoryDownloadSkipDescription\",\r\n {\r\n duplicates: duplicates\r\n .slice(\r\n 0,\r\n duplicates.length >= 3\r\n ? 3\r\n : duplicates.length\r\n )\r\n .join(\", \"),\r\n num: duplicates.length,\r\n }\r\n ),\r\n },\r\n ],\r\n i18next.t(\r\n \"fileManager.selectDirectoryDuplicationMethod\"\r\n )\r\n )\r\n );\r\n } catch (e) {\r\n return;\r\n }\r\n }\r\n dispatch(closeAllModals());\r\n\r\n // start the download\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"center\",\r\n i18next.t(\"fileManager.directoryDownloadStarted\"),\r\n \"info\"\r\n )\r\n );\r\n\r\n const updateLog = (log, done) => {\r\n dispatch(openDirectoryDownloadDialog(true, log, done));\r\n };\r\n let log = \"\";\r\n\r\n while (queue.length > 0) {\r\n const next = queue.pop();\r\n if (next && next.type === \"file\") {\r\n // donload url\r\n const previewPath = getPreviewPath(next);\r\n const url =\r\n getBaseURL() +\r\n (pathHelper.isSharePage(location.pathname)\r\n ? \"/share/preview/\" +\r\n share.key +\r\n (previewPath !== \"\" ? \"?path=\" + previewPath : \"\")\r\n : \"/file/preview/\" + next.id);\r\n\r\n // path to save this file\r\n // path: / or /abc (no sep suffix)\r\n // next.path: /abc/d (no sep suffix)\r\n // name: d/e.bin\r\n const name = trimPrefix(\r\n pathJoin([next.path, next.name]),\r\n path === \"/\" ? \"/\" : path + \"/\"\r\n );\r\n // TODO: improve the display of log\r\n // can we turn the upload queue component to the transition queue?\r\n // then we can easily cancel or retry the download\r\n // and the batch download queue can show as well.\r\n log =\r\n (log === \"\" ? \"\" : log + \"\\n\\n\") +\r\n i18next.t(\"modals.directoryDownloadStarted\", { name });\r\n updateLog(log, false);\r\n try {\r\n if (duplicates.includes(name)) {\r\n if (option.key === \"skip\") {\r\n log +=\r\n \"\\n\" +\r\n i18next.t(\r\n \"modals.directoryDownloadSkipNotifiction\",\r\n {\r\n name,\r\n }\r\n );\r\n updateLog(log, false);\r\n continue;\r\n } else {\r\n log +=\r\n \"\\n\" +\r\n i18next.t(\r\n \"modals.directoryDownloadReplaceNotifiction\",\r\n {\r\n name,\r\n }\r\n );\r\n updateLog(log, false);\r\n }\r\n }\r\n\r\n // TODO: need concurrent task queue?\r\n const res = await fetch(url, {\r\n cache: \"no-cache\",\r\n signal: directoryDownloadAbortController.signal,\r\n });\r\n await saveFileToFileSystemDirectory(\r\n handle,\r\n await res.blob(),\r\n name\r\n );\r\n log += \"\\n\" + i18next.t(\"modals.directoryDownloadFinished\");\r\n updateLog(log, false);\r\n } catch (e) {\r\n if (e.name === \"AbortError\") {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.directoryDownloadCancelled\"),\r\n \"warning\"\r\n )\r\n );\r\n log +=\r\n \"\\n\\n\" +\r\n i18next.t(\"modals.directoryDownloadCancelled\");\r\n updateLog(log, true);\r\n return;\r\n }\r\n\r\n failed++;\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\r\n \"modals.directoryDownloadErrorNotification\",\r\n {\r\n name,\r\n msg: e && e.message,\r\n }\r\n ),\r\n \"warning\"\r\n )\r\n );\r\n log +=\r\n \"\\n\" +\r\n i18next.t(\"modals.directoryDownloadError\", {\r\n msg: e.message,\r\n });\r\n updateLog(log, false);\r\n }\r\n }\r\n }\r\n log +=\r\n \"\\n\" +\r\n (failed === 0\r\n ? i18next.t(\"fileManager.directoryDownloadFinished\")\r\n : i18next.t(\"fileManager.directoryDownloadFinishedWithError\", {\r\n failed,\r\n }));\r\n updateLog(log, true);\r\n\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"center\",\r\n failed === 0\r\n ? i18next.t(\"fileManager.directoryDownloadFinished\")\r\n : i18next.t(\r\n \"fileManager.directoryDownloadFinishedWithError\",\r\n {\r\n failed,\r\n }\r\n ),\r\n \"success\"\r\n )\r\n );\r\n };\r\n};\r\n\r\nexport const getViewerURL = (\r\n viewer: string,\r\n file: any,\r\n isShare: boolean | \"\"\r\n): string => {\r\n const previewPath = getPreviewPath(file);\r\n if (isShare) {\r\n return (\r\n \"/s/\" +\r\n file.key +\r\n `/${viewer}?name=` +\r\n encodeURIComponent(file.name) +\r\n \"&share_path=\" +\r\n previewPath\r\n );\r\n }\r\n\r\n return `/${viewer}?p=` + previewPath + \"&id=\" + file.id;\r\n};\r\n\r\nexport const openViewer = (\r\n viewer: string,\r\n file: any,\r\n isShare: boolean | \"\"\r\n) => {\r\n return (dispatch: any, getState: any) => {\r\n dispatch(push(getViewerURL(viewer, file, isShare)));\r\n };\r\n};\r\n\r\nexport const openPreview = (share: any) => {\r\n return (dispatch: any, getState: any) => {\r\n const {\r\n explorer: { selected },\r\n router: {\r\n location: { pathname },\r\n },\r\n } = getState();\r\n const isShare = pathHelper.isSharePage(pathname);\r\n if (isShare) {\r\n const user = Auth.GetUser();\r\n if (!Auth.Check() && user && !user.group.shareDownload) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"share.pleaseLogin\"),\r\n \"warning\"\r\n )\r\n );\r\n dispatch(changeContextMenu(\"file\", false));\r\n return;\r\n }\r\n }\r\n\r\n dispatch(changeContextMenu(\"file\", false));\r\n switch (isPreviewable(selected[0].name)) {\r\n case \"img\":\r\n dispatch(showImgPreivew(selected[0]));\r\n return;\r\n case \"msDoc\":\r\n dispatch(openViewer(\"doc\", selected[0], isShare));\r\n return;\r\n case \"audio\":\r\n dispatch(showAudioPreview(selected[0]));\r\n return;\r\n case \"video\":\r\n dispatch(openViewer(\"video\", selected[0], isShare));\r\n return;\r\n case \"pdf\":\r\n dispatch(openViewer(\"pdf\", selected[0], isShare));\r\n return;\r\n case \"edit\":\r\n dispatch(openViewer(\"text\", selected[0], isShare));\r\n return;\r\n case \"code\":\r\n dispatch(openViewer(\"code\", selected[0], isShare));\r\n return;\r\n case \"epub\":\r\n dispatch(openViewer(\"epub\", selected[0], isShare));\r\n return;\r\n default:\r\n dispatch(startDownload(share, selected[0]));\r\n return;\r\n }\r\n };\r\n};\r\nexport const selectFile = (file: any, event: any, fileIndex: any) => {\r\n const { ctrlKey, metaKey, shiftKey } = event;\r\n return (dispatch: any, getState: any) => {\r\n // 多种组合操作忽略\r\n if (\r\n [ctrlKey, shiftKey].filter(Boolean).length > 1 ||\r\n [metaKey, shiftKey].filter(Boolean).length > 1\r\n ) {\r\n return;\r\n }\r\n const isMacbook = isMac();\r\n const { explorer } = getState();\r\n const { selected, lastSelect, dirList, fileList, shiftSelectedIds } =\r\n explorer;\r\n if (shiftKey && !ctrlKey && !metaKey && selected.length !== 0) {\r\n // shift 多选\r\n // 取消原有选择\r\n dispatch(removeSelectedTargets(selected.map((v: any) => v.id)));\r\n const all = [...dirList, ...fileList];\r\n // 添加新选择\r\n const begin = Math.min(lastSelect.index, fileIndex);\r\n const end = Math.max(lastSelect.index, fileIndex);\r\n const list = file.type === \"dir\" ? dirList : fileList;\r\n const newShiftSelected = all.slice(begin, end + 1);\r\n return dispatch(addSelectedTargets(newShiftSelected));\r\n }\r\n dispatch(setLastSelect(file, fileIndex));\r\n dispatch(setShiftSelectedIds([]));\r\n if ((ctrlKey && !isMacbook) || (metaKey && isMacbook)) {\r\n // Ctrl/Command 单击添加/删除\r\n const presentIndex = selected.findIndex((value: any) => {\r\n return value.id === file.id;\r\n });\r\n if (presentIndex !== -1) {\r\n return dispatch(removeSelectedTargets([file.id]));\r\n }\r\n return dispatch(addSelectedTargets([file]));\r\n }\r\n // 单选\r\n return dispatch(setSelectedTarget([file]));\r\n };\r\n};\r\n\r\nexport const submitCompressTask = (fileName: string, path: string) => {\r\n return async (dispatch: any, getState: any) => {\r\n const {\r\n explorer: { selected },\r\n } = getState();\r\n const dirs: string[] = [],\r\n items: string[] = [];\r\n // eslint-disable-next-line\r\n selected.map((value) => {\r\n if (value.type === \"dir\") {\r\n dirs.push(value.id);\r\n } else {\r\n items.push(value.id);\r\n }\r\n });\r\n\r\n return await API.post(\"/file/compress\", {\r\n src: {\r\n dirs: dirs,\r\n items: items,\r\n },\r\n name: fileName,\r\n dst: path === \"//\" ? \"/\" : path,\r\n });\r\n };\r\n};\r\n\r\nconst encodings = [\r\n \"ibm866\",\r\n \"iso8859_2\",\r\n \"iso8859_3\",\r\n \"iso8859_4\",\r\n \"iso8859_5\",\r\n \"iso8859_6\",\r\n \"iso8859_7\",\r\n \"iso8859_8\",\r\n \"iso8859_8I\",\r\n \"iso8859_10\",\r\n \"iso8859_13\",\r\n \"iso8859_14\",\r\n \"iso8859_15\",\r\n \"iso8859_16\",\r\n \"koi8r\",\r\n \"koi8u\",\r\n \"macintosh\",\r\n \"windows874\",\r\n \"windows1250\",\r\n \"windows1251\",\r\n \"windows1252\",\r\n \"windows1253\",\r\n \"windows1254\",\r\n \"windows1255\",\r\n \"windows1256\",\r\n \"windows1257\",\r\n \"windows1258\",\r\n \"macintoshcyrillic\",\r\n \"gbk\",\r\n \"big5\",\r\n \"eucjp\",\r\n \"iso2022jp\",\r\n \"shiftjis\",\r\n \"euckr\",\r\n \"utf16be\",\r\n \"utf16le\",\r\n];\r\n\r\nexport const submitDecompressTask = (path: string) => {\r\n return async (dispatch: any, getState: any) => {\r\n const {\r\n explorer: { selected },\r\n } = getState();\r\n\r\n let encoding = \"\";\r\n if (selected.length > 0 && encodingRequired(selected[0].name)) {\r\n let option: any;\r\n try {\r\n const allOptions = encodings.map((e) => {\r\n return {\r\n key: e,\r\n name: e.toUpperCase(),\r\n };\r\n });\r\n option = await dispatch(\r\n askForOption(\r\n [\r\n {\r\n key: \"\",\r\n name: i18next.t(\"modals.defaultEncoding\"),\r\n },\r\n {\r\n key: \"gb18030\",\r\n name: \"GB18030\",\r\n description: i18next.t(\r\n \"modals.chineseMajorEncoding\"\r\n ),\r\n },\r\n ...allOptions,\r\n ],\r\n i18next.t(\"modals.selectEncoding\")\r\n )\r\n );\r\n } catch (e) {\r\n throw new Error(i18next.t(\"modals.noEncodingSelected\"));\r\n }\r\n\r\n encoding = option.key;\r\n }\r\n\r\n return await API.post(\"/file/decompress\", {\r\n src: filePath(selected[0]),\r\n dst: path === \"//\" ? \"/\" : path,\r\n encoding: encoding,\r\n });\r\n };\r\n};\r\n\r\nexport const batchGetSource = (): ThunkAction => {\r\n return async (dispatch, getState): Promise => {\r\n const {\r\n explorer: { selected },\r\n router: {\r\n location: { pathname },\r\n },\r\n } = getState();\r\n\r\n if (selected.findIndex((f) => f.type === \"dir\") >= 0) {\r\n dispatch(openLoadingDialog(i18next.t(\"modals.listingFiles\")));\r\n }\r\n\r\n let queue: CloudreveFile[] = [];\r\n try {\r\n queue = await walk(selected, null);\r\n } catch (e) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.listingFileError\", {\r\n message: e.message,\r\n }),\r\n \"warning\"\r\n )\r\n );\r\n dispatch(closeAllModals());\r\n return;\r\n }\r\n\r\n dispatch(openLoadingDialog(i18next.t(\"modals.generatingSourceLinks\")));\r\n\r\n const items = queue\r\n .filter((value) => value.source_enabled && value.type === \"file\")\r\n .map((v) => v.id);\r\n\r\n if (items.length === 0) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.noFileCanGenerateSourceLink\"),\r\n \"warning\"\r\n )\r\n );\r\n dispatch(closeAllModals());\r\n return;\r\n }\r\n\r\n const user = Auth.GetUser();\r\n if (items.length > user.group.sourceBatch) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n i18next.t(\"modals.sourceBatchSizeExceeded\", {\r\n limit: user.group.sourceBatch,\r\n }),\r\n \"warning\"\r\n )\r\n );\r\n dispatch(closeAllModals());\r\n return;\r\n }\r\n\r\n API.post(\"/file/source\", { items: items })\r\n .then((response) => {\r\n dispatch(closeAllModals());\r\n if (response.data.length == 1 && response.data[0].error) {\r\n dispatch(\r\n toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n response.data[0].error,\r\n \"warning\"\r\n )\r\n );\r\n return;\r\n }\r\n\r\n dispatch(\r\n openGetSourceDialog(\r\n response.data.length == 1\r\n ? response.data[0].url\r\n : response.data\r\n .map(\r\n (res) =>\r\n `${res.name}: ${res.url}${\r\n res.error ? res.error : \"\"\r\n }`\r\n )\r\n .join(\"\\n\")\r\n )\r\n );\r\n })\r\n .catch((error) => {\r\n dispatch(\r\n toggleSnackbar(\"top\", \"right\", error.message, \"warning\")\r\n );\r\n dispatch(closeAllModals());\r\n });\r\n };\r\n};\r\n\r\nexport const openTorrentDownload = (): ThunkAction => {\r\n return (dispatch, getState): void => {\r\n const {\r\n explorer: { selected },\r\n } = getState();\r\n dispatch(openTorrentDownloadDialog(selected[0]));\r\n };\r\n};\r\n\r\nexport const openParentFolder = (): ThunkAction => {\r\n return async (dispatch, getState): Promise => {\r\n const {\r\n explorer: { selected },\r\n } = getState();\r\n\r\n dispatch(openLoadingDialog(i18next.t(\"modals.processing\")));\r\n API.get(\r\n \"/object/property/\" +\r\n selected[0].id +\r\n \"?trace_root=true&is_folder=\" +\r\n (selected[0].type === \"dir\").toString()\r\n )\r\n .then((response) => {\r\n const path =\r\n response.data.path === \"\"\r\n ? selected[0].path\r\n : response.data.path;\r\n dispatch(navigateTo(path));\r\n dispatch(closeAllModals());\r\n })\r\n .catch((error) => {\r\n dispatch(\r\n toggleSnackbar(\"top\", \"right\", error.message, \"warning\")\r\n );\r\n dispatch(closeAllModals());\r\n });\r\n };\r\n};\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { Typography, withStyles } from \"@material-ui/core\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport DarkModeSwitcher from \"./DarkModeSwitcher\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport { setUserPopover } from \"../../redux/explorer\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n isLogin: state.viewUpdate.isLogin,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n setUserPopover: (anchor) => {\r\n dispatch(setUserPopover(anchor));\r\n },\r\n };\r\n};\r\n\r\nconst styles = (theme) => ({\r\n userNav: {\r\n height: \"170px\",\r\n backgroundColor: theme.palette.primary.main,\r\n padding: \"20px 20px 2em\",\r\n backgroundImage:\r\n \"url(\\\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 1600 900'%3E%3Cpolygon fill='\" +\r\n theme.palette.primary.light.replace(\"#\", \"%23\") +\r\n \"' points='957 450 539 900 1396 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.primary.dark.replace(\"#\", \"%23\") +\r\n \"' points='957 450 872.9 900 1396 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.main.replace(\"#\", \"%23\") +\r\n \"' points='-60 900 398 662 816 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.dark.replace(\"#\", \"%23\") +\r\n \"' points='337 900 398 662 816 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.light.replace(\"#\", \"%23\") +\r\n \"' points='1203 546 1552 900 876 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.main.replace(\"#\", \"%23\") +\r\n \"' points='1203 546 1552 900 1162 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.primary.dark.replace(\"#\", \"%23\") +\r\n \"' points='641 695 886 900 367 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.primary.main.replace(\"#\", \"%23\") +\r\n \"' points='587 900 641 695 886 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.light.replace(\"#\", \"%23\") +\r\n \"' points='1710 900 1401 632 1096 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.dark.replace(\"#\", \"%23\") +\r\n \"' points='1710 900 1401 632 1365 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.main.replace(\"#\", \"%23\") +\r\n \"' points='1210 900 971 687 725 900'/%3E%3Cpolygon fill='\" +\r\n theme.palette.secondary.dark.replace(\"#\", \"%23\") +\r\n \"' points='943 900 1210 900 971 687'/%3E%3C/svg%3E\\\")\",\r\n backgroundSize: \"cover\",\r\n },\r\n avatar: {\r\n display: \"block\",\r\n width: \"70px\",\r\n height: \"70px\",\r\n border: \" 2px solid #fff\",\r\n borderRadius: \"50%\",\r\n overflow: \"hidden\",\r\n boxShadow:\r\n \"0 2px 5px 0 rgba(0,0,0,0.16), 0 2px 10px 0 rgba(0,0,0,0.12)\",\r\n },\r\n avatarImg: {\r\n width: \"66px\",\r\n height: \"66px\",\r\n },\r\n nickName: {\r\n color: \"#fff\",\r\n marginTop: \"15px\",\r\n fontSize: \"17px\",\r\n },\r\n flexAvatar: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n alignItems: \"flex-start\",\r\n },\r\n groupName: {\r\n color: \"#ffffff\",\r\n opacity: \"0.54\",\r\n },\r\n storageCircle: {\r\n width: \"200px\",\r\n },\r\n});\r\n\r\nclass UserInfoCompoment extends Component {\r\n showUserInfo = (e) => {\r\n this.props.setUserPopover(e.currentTarget);\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const isLogin = Auth.Check(this.props.isLogin);\r\n const user = Auth.GetUser(this.props.isLogin);\r\n\r\n return (\r\n
\r\n
\r\n {/* eslint-disable-next-line */}\r\n \r\n {isLogin && (\r\n \r\n )}\r\n {!isLogin && (\r\n \r\n )}\r\n \r\n \r\n
\r\n
\r\n \r\n {isLogin ? user.nickname : t(\"navbar.notLoginIn\")}\r\n \r\n \r\n {isLogin ? user.group.name : t(\"navbar.visitor\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nUserInfoCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst UserInfo = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withTranslation()(UserInfoCompoment)));\r\n\r\nexport default UserInfo;\r\n","import React, { Suspense, useCallback, useState } from \"react\";\r\nimport {\r\n Divider,\r\n List,\r\n ListItemIcon,\r\n ListItemText,\r\n makeStyles,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport { Clear, KeyboardArrowRight } from \"@material-ui/icons\";\r\nimport classNames from \"classnames\";\r\nimport FolderShared from \"@material-ui/icons/FolderShared\";\r\nimport UploadIcon from \"@material-ui/icons/CloudUpload\";\r\nimport VideoIcon from \"@material-ui/icons/VideoLibraryOutlined\";\r\nimport ImageIcon from \"@material-ui/icons/CollectionsOutlined\";\r\nimport MusicIcon from \"@material-ui/icons/LibraryMusicOutlined\";\r\nimport DocIcon from \"@material-ui/icons/FileCopyOutlined\";\r\nimport { useHistory, useLocation } from \"react-router\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport MuiExpansionPanel from \"@material-ui/core/ExpansionPanel\";\r\nimport MuiExpansionPanelSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport MuiExpansionPanelDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport MuiListItem from \"@material-ui/core/ListItem\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport {\r\n Circle,\r\n CircleOutline,\r\n FolderHeartOutline,\r\n Heart,\r\n HeartOutline,\r\n Hexagon,\r\n HexagonOutline,\r\n Hexagram,\r\n HexagramOutline,\r\n Rhombus,\r\n RhombusOutline,\r\n Square,\r\n SquareOutline,\r\n TagPlus,\r\n Triangle,\r\n TriangleOutline,\r\n} from \"mdi-material-ui\";\r\nimport ListItemSecondaryAction from \"@material-ui/core/ListItemSecondaryAction\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport API from \"../../middleware/Api\";\r\nimport { navigateTo, searchMyFile, toggleSnackbar } from \"../../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst ListItem = withStyles((theme) => ({\r\n root: {\r\n borderRadius:theme.shape.borderRadius,\r\n },\r\n}))(MuiListItem);\r\n\r\nconst ExpansionPanel = withStyles({\r\n root: {\r\n maxWidth: \"100%\",\r\n boxShadow: \"none\",\r\n \"&:not(:last-child)\": {\r\n borderBottom: 0,\r\n },\r\n \"&:before\": {\r\n display: \"none\",\r\n },\r\n \"&$expanded\": { margin: 0 },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanel);\r\n\r\nconst ExpansionPanelSummary = withStyles((theme) =>({\r\n root: {\r\n minHeight: 0,\r\n padding: 0,\r\n \"&$expanded\": {\r\n minHeight: 0,\r\n },\r\n },\r\n content: {\r\n maxWidth: \"100%\",\r\n margin: 0,\r\n display: \"block\",\r\n \"&$expanded\": {\r\n margin: \"0\",\r\n },\r\n },\r\n expanded: {},\r\n}))(MuiExpansionPanelSummary);\r\n\r\nconst ExpansionPanelDetails = withStyles((theme) => ({\r\n root: {\r\n display: \"block\",\r\n padding: theme.spacing(0),\r\n },\r\n}))(MuiExpansionPanelDetails);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n expand: {\r\n display: \"none\",\r\n transition: \".15s all ease-in-out\",\r\n },\r\n expanded: {\r\n display: \"block\",\r\n transform: \"rotate(90deg)\",\r\n },\r\n iconFix: {\r\n marginLeft: \"16px\",\r\n },\r\n hiddenButton: {\r\n display: \"none\",\r\n },\r\n subMenu: {\r\n marginLeft: theme.spacing(2),\r\n },\r\n overFlow: {\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n paddingList:{\r\n padding:theme.spacing(1),\r\n },\r\n paddingSummary:{\r\n paddingLeft:theme.spacing(1),\r\n paddingRight:theme.spacing(1),\r\n }\r\n}));\r\n\r\nconst icons = {\r\n Circle: Circle,\r\n CircleOutline: CircleOutline,\r\n Heart: Heart,\r\n HeartOutline: HeartOutline,\r\n Hexagon: Hexagon,\r\n HexagonOutline: HexagonOutline,\r\n Hexagram: Hexagram,\r\n HexagramOutline: HexagramOutline,\r\n Rhombus: Rhombus,\r\n RhombusOutline: RhombusOutline,\r\n Square: Square,\r\n SquareOutline: SquareOutline,\r\n Triangle: Triangle,\r\n TriangleOutline: TriangleOutline,\r\n FolderHeartOutline: FolderHeartOutline,\r\n};\r\n\r\nconst AddTag = React.lazy(() => import(\"../Modals/AddTag\"));\r\n\r\nexport default function FileTag() {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n\r\n const location = useLocation();\r\n const history = useHistory();\r\n\r\n const isHomePage = pathHelper.isHomePage(location.pathname);\r\n\r\n const [tagOpen, setTagOpen] = useState(true);\r\n const [addTagModal, setAddTagModal] = useState(false);\r\n const [tagHover, setTagHover] = useState(null);\r\n const [tags, setTags] = useState(\r\n Auth.GetUser().tags ? Auth.GetUser().tags : []\r\n );\r\n\r\n const dispatch = useDispatch();\r\n const SearchMyFile = useCallback((k, p) => dispatch(searchMyFile(k, p)), [\r\n dispatch,\r\n ]);\r\n const NavigateTo = useCallback((k) => dispatch(navigateTo(k)), [dispatch]);\r\n\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const getIcon = (icon, color) => {\r\n if (icons[icon]) {\r\n const IconComponent = icons[icon];\r\n return (\r\n \r\n );\r\n }\r\n return ;\r\n };\r\n\r\n const submitSuccess = (tag) => {\r\n const newTags = [...tags, tag];\r\n setTags(newTags);\r\n const user = Auth.GetUser();\r\n user.tags = newTags;\r\n Auth.SetUser(user);\r\n };\r\n\r\n const submitDelete = (id) => {\r\n API.delete(\"/tag/\" + id)\r\n .then(() => {\r\n const newTags = tags.filter((v) => {\r\n return v.id !== id;\r\n });\r\n setTags(newTags);\r\n const user = Auth.GetUser();\r\n user.tags = newTags;\r\n Auth.SetUser(user);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n \r\n setAddTagModal(false)}\r\n />\r\n \r\n isHomePage && setTagOpen(!tagOpen)}\r\n >\r\n \r\n
\r\n \r\n !isHomePage && history.push(\"/home?path=%2F\")\r\n }\r\n >\r\n \r\n \r\n {!(tagOpen && isHomePage) && (\r\n \r\n )}\r\n \r\n \r\n \r\n
\r\n\r\n \r\n \r\n\r\n \r\n setTagHover(null)}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {[\r\n {\r\n key: t(\"navbar.videos\"),\r\n id: \"video\",\r\n icon: (\r\n \r\n ),\r\n },\r\n {\r\n key: t(\"navbar.photos\"),\r\n id: \"image\",\r\n icon: (\r\n \r\n ),\r\n },\r\n {\r\n key: t(\"navbar.music\"),\r\n id: \"audio\",\r\n icon: (\r\n \r\n ),\r\n },\r\n {\r\n key: t(\"navbar.documents\"),\r\n id: \"doc\",\r\n icon: (\r\n \r\n ),\r\n },\r\n ].map((v) => (\r\n \r\n SearchMyFile(v.id + \"/internal\", \"\")\r\n }\r\n >\r\n \r\n {v.icon}\r\n \r\n \r\n \r\n ))}\r\n {tags.map((v) => (\r\n setTagHover(v.id)}\r\n onClick={() => {\r\n if (v.type === 0) {\r\n SearchMyFile(\"tag/\" + v.id, \"\");\r\n } else {\r\n NavigateTo(v.expression);\r\n }\r\n }}\r\n >\r\n \r\n {getIcon(\r\n v.type === 0\r\n ? v.icon\r\n : \"FolderHeartOutline\",\r\n v.type === 0 ? v.color : null\r\n )}\r\n \r\n \r\n\r\n {tagHover === v.id && (\r\n submitDelete(v.id)}\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n ))}\r\n\r\n setAddTagModal(true)}>\r\n \r\n \r\n \r\n \r\n \r\n {\" \"}\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { baseURL } from \"../../middleware/Api\";\r\nimport { imgPreviewSuffix } from \"../../config\";\r\nimport { withStyles } from \"@material-ui/core\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport { withRouter } from \"react-router\";\r\nimport { PhotoSlider } from \"react-photo-view\";\r\nimport \"react-photo-view/dist/index.css\";\r\nimport * as explorer from \"../../redux/explorer/reducer\";\r\nimport { showImgPreivew } from \"../../redux/explorer\";\r\n\r\nconst styles = () => ({});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n first: state.explorer.imgPreview.first,\r\n other: state.explorer.imgPreview.other,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n showImgPreivew: (first) => {\r\n dispatch(showImgPreivew(first));\r\n },\r\n };\r\n};\r\n\r\nclass ImagPreviewComponent extends Component {\r\n state = {\r\n items: [],\r\n photoIndex: 0,\r\n isOpen: false,\r\n };\r\n\r\n UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n const items = [];\r\n let firstOne = 0;\r\n if (nextProps.first.id !== \"\") {\r\n if (\r\n pathHelper.isSharePage(this.props.location.pathname) &&\r\n !nextProps.first.path\r\n ) {\r\n const newImg = {\r\n intro: nextProps.first.name,\r\n src: baseURL + \"/share/preview/\" + nextProps.first.key,\r\n };\r\n firstOne = 0;\r\n items.push(newImg);\r\n this.setState({\r\n photoIndex: firstOne,\r\n items: items,\r\n isOpen: true,\r\n });\r\n return;\r\n }\r\n // eslint-disable-next-line\r\n nextProps.other.map((value) => {\r\n const fileType = value.name.split(\".\").pop().toLowerCase();\r\n if (imgPreviewSuffix.indexOf(fileType) !== -1) {\r\n let src = \"\";\r\n if (pathHelper.isSharePage(this.props.location.pathname)) {\r\n src = baseURL + \"/share/preview/\" + value.key;\r\n src =\r\n src +\r\n \"?path=\" +\r\n encodeURIComponent(\r\n value.path === \"/\"\r\n ? value.path + value.name\r\n : value.path + \"/\" + value.name\r\n );\r\n } else {\r\n src = baseURL + \"/file/preview/\" + value.id;\r\n }\r\n const newImg = {\r\n intro: value.name,\r\n src: src,\r\n };\r\n if (\r\n value.path === nextProps.first.path &&\r\n value.name === nextProps.first.name\r\n ) {\r\n firstOne = items.length;\r\n }\r\n items.push(newImg);\r\n }\r\n });\r\n this.setState({\r\n photoIndex: firstOne,\r\n items: items,\r\n isOpen: true,\r\n });\r\n }\r\n };\r\n\r\n handleClose = () => {\r\n this.props.showImgPreivew(explorer.initState.imgPreview.first);\r\n this.setState({\r\n isOpen: false,\r\n });\r\n };\r\n\r\n render() {\r\n const { photoIndex, isOpen, items } = this.state;\r\n\r\n return (\r\n
\r\n {isOpen && (\r\n this.handleClose()}\r\n index={photoIndex}\r\n onIndexChange={(n) =>\r\n this.setState({\r\n photoIndex: n,\r\n })\r\n }\r\n />\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nImagPreviewComponent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n};\r\n\r\nconst ImgPreivew = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(ImagPreviewComponent)));\r\n\r\nexport default ImgPreivew;\r\n","import { ChunkProgress } from \"./uploader/chunk\";\r\n\r\nexport enum PolicyType {\r\n local = \"local\",\r\n remote = \"remote\",\r\n oss = \"oss\",\r\n qiniu = \"qiniu\",\r\n onedrive = \"onedrive\",\r\n cos = \"cos\",\r\n upyun = \"upyun\",\r\n s3 = \"s3\",\r\n}\r\n\r\nexport interface Policy {\r\n id: number;\r\n name: string;\r\n allowedSuffix: Nullable;\r\n maxSize: number;\r\n type: PolicyType;\r\n}\r\n\r\nexport enum TaskType {\r\n file,\r\n resumeHint,\r\n}\r\n\r\nexport interface Task {\r\n type: TaskType;\r\n name: string;\r\n size: number;\r\n policy: Policy;\r\n dst: string;\r\n file: File;\r\n child?: Task[];\r\n session?: UploadCredential;\r\n chunkProgress: ChunkProgress[];\r\n resumed: boolean;\r\n}\r\n\r\ntype Nullable = T | null;\r\n\r\nexport interface Response {\r\n code: number;\r\n data: T;\r\n msg: string;\r\n error: string;\r\n}\r\n\r\nexport interface UploadSessionRequest {\r\n path: string;\r\n size: number;\r\n name: string;\r\n policy_id: number;\r\n last_modified?: number;\r\n\r\n mime_type?: string;\r\n}\r\n\r\nexport interface UploadCredential {\r\n sessionID: string;\r\n expires: number;\r\n chunkSize: number;\r\n uploadURLs: string[];\r\n credential: string;\r\n uploadID: string;\r\n callback: string;\r\n policy: string;\r\n ak: string;\r\n keyTime: string;\r\n path: string;\r\n completeURL: string;\r\n}\r\n\r\nexport interface OneDriveError {\r\n error: {\r\n code: string;\r\n message: string;\r\n innererror?: {\r\n code: string;\r\n };\r\n retryAfterSeconds?: number;\r\n };\r\n}\r\n\r\nexport interface OneDriveChunkResponse {\r\n expirationDateTime: string;\r\n nextExpectedRanges: string[];\r\n}\r\n\r\nexport interface QiniuChunkResponse {\r\n etag: string;\r\n md5: string;\r\n}\r\n\r\nexport interface QiniuError {\r\n error: string;\r\n}\r\n\r\nexport interface QiniuPartsInfo {\r\n etag: string;\r\n partNumber: number;\r\n}\r\n\r\nexport interface QiniuFinishUploadRequest {\r\n parts: QiniuPartsInfo[];\r\n}\r\n\r\nexport interface UpyunError {\r\n message: string;\r\n code: number;\r\n}\r\n\r\nexport interface S3Part {\r\n ETag: string;\r\n PartNumber: number;\r\n}\r\n","// 所有 Uploader 的基类\r\nimport { PolicyType, Task } from \"../types\";\r\nimport UploadManager from \"../index\";\r\nimport Logger from \"../logger\";\r\nimport { validate } from \"../utils/validator\";\r\nimport { CancelToken } from \"../utils/request\";\r\nimport axios, { CancelTokenSource } from \"axios\";\r\nimport { createUploadSession, deleteUploadSession } from \"../api\";\r\nimport * as utils from \"../utils\";\r\nimport { RequestCanceledError, UploaderError } from \"../errors\";\r\n\r\nexport enum Status {\r\n added,\r\n resumable,\r\n initialized,\r\n queued,\r\n preparing,\r\n processing,\r\n finishing,\r\n finished,\r\n error,\r\n canceled,\r\n}\r\n\r\nexport interface UploadHandlers {\r\n onTransition: (newStatus: Status) => void;\r\n onError: (err: Error) => void;\r\n onProgress: (data: UploadProgress) => void;\r\n onMsg: (msg: string, color: string) => void;\r\n}\r\n\r\nexport interface UploadProgress {\r\n total: ProgressCompose;\r\n chunks?: ProgressCompose[];\r\n}\r\n\r\nexport interface ProgressCompose {\r\n size: number;\r\n loaded: number;\r\n percent: number;\r\n fromCache?: boolean;\r\n}\r\n\r\nexport interface Progress {\r\n total: number;\r\n loaded: number;\r\n}\r\n\r\nconst resumePolicy = [\r\n PolicyType.local,\r\n PolicyType.remote,\r\n PolicyType.qiniu,\r\n PolicyType.oss,\r\n PolicyType.onedrive,\r\n PolicyType.s3,\r\n];\r\nconst deleteUploadSessionDelay = 500;\r\n\r\nexport default abstract class Base {\r\n public child?: Base[];\r\n public status: Status = Status.added;\r\n public error?: Error;\r\n\r\n public id = ++Base.id;\r\n private static id = 0;\r\n\r\n protected logger: Logger;\r\n protected subscriber: UploadHandlers;\r\n // 用于取消请求\r\n protected cancelToken: CancelTokenSource = CancelToken.source();\r\n protected progress: UploadProgress;\r\n\r\n public lastTime = Date.now();\r\n public startTime = Date.now();\r\n\r\n constructor(public task: Task, protected manager: UploadManager) {\r\n this.logger = new Logger(\r\n this.manager.logger.level,\r\n \"UPLOADER\",\r\n this.id\r\n );\r\n this.logger.info(\"Initialize new uploader for task: \", task);\r\n this.subscriber = {\r\n /* eslint-disable @typescript-eslint/no-empty-function */\r\n onTransition: (newStatus: Status) => {},\r\n onError: (err: Error) => {},\r\n onProgress: (data: UploadProgress) => {},\r\n onMsg: (msg, color: string) => {},\r\n /* eslint-enable @typescript-eslint/no-empty-function */\r\n };\r\n }\r\n\r\n public subscribe = (handlers: UploadHandlers) => {\r\n this.subscriber = handlers;\r\n };\r\n\r\n public start = async () => {\r\n this.logger.info(\"Activate uploading task\");\r\n this.transit(Status.initialized);\r\n this.lastTime = this.startTime = Date.now();\r\n\r\n try {\r\n validate(this.task.file, this.task.policy);\r\n } catch (e) {\r\n this.logger.error(\"File validate failed with error:\", e);\r\n this.setError(e);\r\n return;\r\n }\r\n\r\n this.logger.info(\"Enqueued in manager pool\");\r\n this.transit(Status.queued);\r\n this.manager.pool.enqueue(this).catch((e) => {\r\n this.logger.info(\"Upload task failed with error:\", e);\r\n this.setError(e);\r\n });\r\n };\r\n\r\n public run = async () => {\r\n this.logger.info(\"Start upload task, create upload session...\");\r\n this.transit(Status.preparing);\r\n const cachedInfo = utils.getResumeCtx(this.task, this.logger);\r\n if (cachedInfo == null) {\r\n this.task.session = await createUploadSession(\r\n {\r\n path: this.task.dst,\r\n size: this.task.file.size,\r\n name: this.task.file.name,\r\n policy_id: this.task.policy.id,\r\n last_modified: this.task.file.lastModified,\r\n mime_type: this.task.file.type,\r\n },\r\n this.cancelToken.token\r\n );\r\n this.logger.info(\"Upload session created:\", this.task.session);\r\n } else {\r\n this.task.session = cachedInfo.session;\r\n this.task.resumed = true;\r\n this.task.chunkProgress = cachedInfo.chunkProgress;\r\n this.logger.info(\"Resume upload from cached ctx:\", cachedInfo);\r\n }\r\n\r\n this.transit(Status.processing);\r\n await this.upload();\r\n await this.afterUpload();\r\n utils.removeResumeCtx(this.task, this.logger);\r\n this.transit(Status.finished);\r\n this.logger.info(\"Upload task completed\");\r\n };\r\n\r\n public abstract async upload(): Promise;\r\n protected async afterUpload(): Promise {\r\n return;\r\n }\r\n\r\n public cancel = async () => {\r\n if (this.status === Status.finished) {\r\n return;\r\n }\r\n\r\n this.cancelToken.cancel();\r\n await this.cancelUploadSession();\r\n this.transit(Status.canceled);\r\n };\r\n\r\n public reset = () => {\r\n this.cancelToken = axios.CancelToken.source();\r\n this.progress = {\r\n total: {\r\n size: 0,\r\n loaded: 0,\r\n percent: 0,\r\n },\r\n };\r\n };\r\n\r\n protected setError(e: Error) {\r\n if (\r\n !(e instanceof UploaderError && e.Retryable()) ||\r\n !resumePolicy.includes(this.task.policy.type)\r\n ) {\r\n this.logger.warn(\"Non-resume error occurs, clean resume ctx cache\");\r\n this.cancelUploadSession();\r\n }\r\n\r\n if (!(e instanceof RequestCanceledError)) {\r\n this.status = Status.error;\r\n this.error = e;\r\n this.subscriber.onError(e);\r\n }\r\n }\r\n\r\n protected cancelUploadSession = (): Promise => {\r\n return new Promise((resolve) => {\r\n utils.removeResumeCtx(this.task, this.logger);\r\n if (this.task.session) {\r\n setTimeout(() => {\r\n deleteUploadSession(this.task.session!?.sessionID)\r\n .catch((e) => {\r\n this.logger.warn(\r\n \"Failed to cancel upload session: \",\r\n e\r\n );\r\n })\r\n .finally(() => {\r\n resolve();\r\n });\r\n }, deleteUploadSessionDelay);\r\n } else {\r\n resolve();\r\n }\r\n });\r\n };\r\n\r\n protected transit(status: Status) {\r\n this.status = status;\r\n this.subscriber.onTransition(status);\r\n }\r\n\r\n public getProgressInfoItem(\r\n loaded: number,\r\n size: number,\r\n fromCache?: boolean\r\n ): ProgressCompose {\r\n return {\r\n size,\r\n loaded,\r\n percent: (loaded / size) * 100,\r\n ...(fromCache == null ? {} : { fromCache }),\r\n };\r\n }\r\n\r\n public key(): string {\r\n return utils.getResumeCtxKey(this.task);\r\n }\r\n}\r\n","export type LogLevel = \"INFO\" | \"WARN\" | \"ERROR\" | \"OFF\";\r\n\r\nexport default class Logger {\r\n constructor(\r\n public level: LogLevel = \"OFF\",\r\n private prefix = \"UPLOAD\",\r\n private id: number = 1\r\n ) {}\r\n\r\n private getPrintPrefix(level: LogLevel) {\r\n return `Cloudreve-Uploader [${level}][${this.prefix}#${this.id}]:`;\r\n }\r\n\r\n info(...args: unknown[]) {\r\n const allowLevel: LogLevel[] = [\"INFO\"];\r\n if (allowLevel.includes(this.level)) {\r\n // eslint-disable-next-line no-console\r\n console.log(this.getPrintPrefix(\"INFO\"), ...args);\r\n }\r\n }\r\n\r\n warn(...args: unknown[]) {\r\n const allowLevel: LogLevel[] = [\"INFO\", \"WARN\"];\r\n if (allowLevel.includes(this.level)) {\r\n // eslint-disable-next-line no-console\r\n console.warn(this.getPrintPrefix(\"WARN\"), ...args);\r\n }\r\n }\r\n\r\n error(...args: unknown[]) {\r\n const allowLevel: LogLevel[] = [\"INFO\", \"WARN\", \"ERROR\"];\r\n if (allowLevel.includes(this.level)) {\r\n // eslint-disable-next-line no-console\r\n console.error(this.getPrintPrefix(\"ERROR\"), ...args);\r\n }\r\n }\r\n}\r\n","import {\r\n OneDriveChunkResponse,\r\n QiniuChunkResponse,\r\n QiniuFinishUploadRequest,\r\n QiniuPartsInfo,\r\n S3Part,\r\n UploadCredential,\r\n UploadSessionRequest,\r\n} from \"../types\";\r\nimport { OBJtoXML, request, requestAPI } from \"../utils\";\r\nimport {\r\n COSUploadCallbackError,\r\n COSUploadError,\r\n CreateUploadSessionError,\r\n DeleteUploadSessionError,\r\n HTTPError,\r\n LocalChunkUploadError,\r\n OneDriveChunkError,\r\n OneDriveFinishUploadError,\r\n QiniuChunkError,\r\n QiniuFinishUploadError,\r\n S3LikeChunkError,\r\n S3LikeFinishUploadError,\r\n S3LikeUploadCallbackError,\r\n SlaveChunkUploadError,\r\n UpyunUploadError,\r\n} from \"../errors\";\r\nimport { ChunkInfo, ChunkProgress } from \"../uploader/chunk\";\r\nimport { Progress } from \"../uploader/base\";\r\nimport { CancelToken } from \"axios\";\r\n\r\nexport async function createUploadSession(\r\n req: UploadSessionRequest,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await requestAPI(\"file/upload\", {\r\n method: \"put\",\r\n data: req,\r\n cancelToken: cancel,\r\n });\r\n\r\n if (res.data.code != 0) {\r\n throw new CreateUploadSessionError(res.data);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n\r\nexport async function deleteUploadSession(id: string): Promise {\r\n const res = await requestAPI(`file/upload/${id}`, {\r\n method: \"delete\",\r\n });\r\n\r\n if (res.data.code != 0) {\r\n throw new DeleteUploadSessionError(res.data);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n\r\nexport async function localUploadChunk(\r\n sessionID: string,\r\n chunk: ChunkInfo,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await requestAPI(\r\n `file/upload/${sessionID}/${chunk.index}`,\r\n {\r\n method: \"post\",\r\n headers: { \"content-type\": \"application/octet-stream\" },\r\n data: chunk.chunk,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n }\r\n );\r\n\r\n if (res.data.code != 0) {\r\n throw new LocalChunkUploadError(res.data, chunk.index);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n\r\nexport async function slaveUploadChunk(\r\n url: string,\r\n credential: string,\r\n chunk: ChunkInfo,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await request(`${url}?chunk=${chunk.index}`, {\r\n method: \"post\",\r\n headers: {\r\n \"content-type\": \"application/octet-stream\",\r\n Authorization: credential,\r\n },\r\n data: chunk.chunk,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n });\r\n\r\n if (res.data.code != 0) {\r\n throw new SlaveChunkUploadError(res.data, chunk.index);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n\r\nexport async function oneDriveUploadChunk(\r\n url: string,\r\n range: string, // if range is empty, this will be an request to query the session status\r\n chunk: ChunkInfo,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await request(url, {\r\n method: range === \"\" ? \"get\" : \"put\",\r\n headers: {\r\n \"content-type\": \"application/octet-stream\",\r\n ...(range !== \"\" && { \"content-range\": range }),\r\n },\r\n data: chunk.chunk,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new OneDriveChunkError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.data;\r\n}\r\n\r\nexport async function finishOneDriveUpload(\r\n sessionID: string,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await requestAPI(\r\n `callback/onedrive/finish/${sessionID}`,\r\n {\r\n method: \"post\",\r\n data: \"{}\",\r\n cancelToken: cancel,\r\n }\r\n );\r\n\r\n if (res.data.code != 0) {\r\n throw new OneDriveFinishUploadError(res.data);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n\r\nexport async function s3LikeUploadChunk(\r\n url: string,\r\n chunk: ChunkInfo,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await request(url, {\r\n method: \"put\",\r\n headers: {\r\n \"content-type\": \"application/octet-stream\",\r\n },\r\n data: chunk.chunk,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n responseType: \"document\",\r\n transformResponse: undefined,\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new S3LikeChunkError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.headers.etag;\r\n}\r\n\r\nexport async function s3LikeFinishUpload(\r\n url: string,\r\n isOss: boolean,\r\n chunks: ChunkProgress[],\r\n cancel: CancelToken\r\n): Promise {\r\n let body = \"\";\r\n if (!isOss) {\r\n body += \"\";\r\n chunks.forEach((chunk) => {\r\n body += \"\";\r\n const part: S3Part = {\r\n PartNumber: chunk.index + 1,\r\n ETag: chunk.etag!,\r\n };\r\n body += OBJtoXML(part);\r\n body += \"\";\r\n });\r\n body += \"\";\r\n }\r\n\r\n const res = await request(url, {\r\n method: \"post\",\r\n cancelToken: cancel,\r\n responseType: \"document\",\r\n transformResponse: undefined,\r\n data: body,\r\n headers: isOss\r\n ? {\r\n \"content-type\": \"application/octet-stream\",\r\n \"x-oss-forbid-overwrite\": \"true\",\r\n \"x-oss-complete-all\": \"yes\",\r\n }\r\n : {\r\n \"content-type\": \"application/xhtml+xml\",\r\n },\r\n validateStatus: function (status) {\r\n return status == 200;\r\n },\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new S3LikeFinishUploadError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.data;\r\n}\r\n\r\nexport async function qiniuDriveUploadChunk(\r\n url: string,\r\n upToken: string,\r\n chunk: ChunkInfo,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await request(`${url}/${chunk.index + 1}`, {\r\n method: \"put\",\r\n headers: {\r\n \"content-type\": \"application/octet-stream\",\r\n authorization: \"UpToken \" + upToken,\r\n },\r\n data: chunk.chunk,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new QiniuChunkError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.data;\r\n}\r\n\r\nexport async function qiniuFinishUpload(\r\n url: string,\r\n upToken: string,\r\n chunks: ChunkProgress[],\r\n cancel: CancelToken\r\n): Promise {\r\n const content: QiniuFinishUploadRequest = {\r\n parts: chunks.map(\r\n (chunk): QiniuPartsInfo => {\r\n return {\r\n etag: chunk.etag!,\r\n partNumber: chunk.index + 1,\r\n };\r\n }\r\n ),\r\n };\r\n\r\n const res = await request(`${url}`, {\r\n method: \"post\",\r\n headers: {\r\n \"content-type\": \"application/json\",\r\n authorization: \"UpToken \" + upToken,\r\n },\r\n data: content,\r\n cancelToken: cancel,\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new QiniuFinishUploadError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.data;\r\n}\r\n\r\nexport async function cosFormUploadChunk(\r\n url: string,\r\n file: File,\r\n policy: string,\r\n path: string,\r\n callback: string,\r\n sessionID: string,\r\n keyTime: string,\r\n credential: string,\r\n ak: string,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const bodyFormData = new FormData();\r\n bodyFormData.append(\"policy\", policy);\r\n bodyFormData.append(\"key\", path);\r\n bodyFormData.append(\"x-cos-meta-callback\", callback);\r\n bodyFormData.append(\"x-cos-meta-key\", sessionID);\r\n bodyFormData.append(\"q-sign-algorithm\", \"sha1\");\r\n bodyFormData.append(\"q-key-time\", keyTime);\r\n bodyFormData.append(\"q-ak\", ak);\r\n bodyFormData.append(\"q-signature\", credential);\r\n bodyFormData.append(\"name\", file.name);\r\n // File must be the last element in the form\r\n bodyFormData.append(\"file\", file);\r\n\r\n const res = await request(`${url}`, {\r\n method: \"post\",\r\n headers: {\r\n \"content-type\": \"multipart/form-data\",\r\n },\r\n data: bodyFormData,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n responseType: \"document\",\r\n transformResponse: undefined,\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new COSUploadError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.data;\r\n}\r\n\r\nexport async function cosUploadCallback(\r\n sessionID: string,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await requestAPI(`callback/cos/${sessionID}`, {\r\n method: \"get\",\r\n data: \"{}\",\r\n cancelToken: cancel,\r\n });\r\n\r\n if (res.data.code != 0) {\r\n throw new COSUploadCallbackError(res.data);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n\r\nexport async function upyunFormUploadChunk(\r\n url: string,\r\n file: File,\r\n policy: string,\r\n credential: string,\r\n onProgress: (p: Progress) => void,\r\n cancel: CancelToken\r\n): Promise {\r\n const bodyFormData = new FormData();\r\n bodyFormData.append(\"policy\", policy);\r\n bodyFormData.append(\"authorization\", credential);\r\n // File must be the last element in the form\r\n bodyFormData.append(\"file\", file);\r\n\r\n const res = await request(`${url}`, {\r\n method: \"post\",\r\n headers: {\r\n \"content-type\": \"multipart/form-data\",\r\n },\r\n data: bodyFormData,\r\n onUploadProgress: (progressEvent) => {\r\n onProgress({\r\n loaded: progressEvent.loaded,\r\n total: progressEvent.total,\r\n });\r\n },\r\n cancelToken: cancel,\r\n }).catch((e) => {\r\n if (e instanceof HTTPError && e.response) {\r\n throw new UpyunUploadError(e.response.data);\r\n }\r\n\r\n throw e;\r\n });\r\n\r\n return res.data;\r\n}\r\n\r\nexport async function s3LikeUploadCallback(\r\n sessionID: string,\r\n cancel: CancelToken\r\n): Promise {\r\n const res = await requestAPI(`callback/s3/${sessionID}`, {\r\n method: \"get\",\r\n data: \"{}\",\r\n cancelToken: cancel,\r\n });\r\n\r\n if (res.data.code != 0) {\r\n throw new S3LikeUploadCallbackError(res.data);\r\n }\r\n\r\n return res.data.data;\r\n}\r\n","import { Policy, PolicyType, Task, TaskType } from \"./types\";\r\nimport Logger, { LogLevel } from \"./logger\";\r\nimport { UnknownPolicyError, UploaderError, UploaderErrorName } from \"./errors\";\r\nimport Base from \"./uploader/base\";\r\nimport Local from \"./uploader/local\";\r\nimport { Pool } from \"./utils/pool\";\r\nimport {\r\n cleanupResumeCtx,\r\n getAllFileEntries,\r\n getDirectoryUploadDst,\r\n getFileInput,\r\n isFileDrop,\r\n listResumeCtx,\r\n} from \"./utils\";\r\nimport Remote from \"./uploader/remote\";\r\nimport OneDrive from \"./uploader/onedrive\";\r\nimport OSS from \"./uploader/oss\";\r\nimport Qiniu from \"./uploader/qiniu\";\r\nimport COS from \"./uploader/cos\";\r\nimport Upyun from \"./uploader/upyun\";\r\nimport S3 from \"./uploader/s3\";\r\nimport ResumeHint from \"./uploader/placeholder\";\r\n\r\nexport interface Option {\r\n logLevel: LogLevel;\r\n concurrentLimit: number;\r\n dropZone?: HTMLElement;\r\n onDropOver?: (e: DragEvent) => void;\r\n onDropLeave?: (e: DragEvent) => void;\r\n onToast: (type: string, msg: string) => void;\r\n onDropFileAdded?: (uploaders: Base[]) => void;\r\n}\r\n\r\nexport enum SelectType {\r\n File,\r\n Directory,\r\n}\r\n\r\nexport default class UploadManager {\r\n public logger: Logger;\r\n public pool: Pool;\r\n private static id = 0;\r\n private policy?: Policy;\r\n private fileInput: HTMLInputElement;\r\n private directoryInput: HTMLInputElement;\r\n private id = ++UploadManager.id;\r\n // used for proactive upload (drop, paste)\r\n private currentPath = \"/\";\r\n\r\n constructor(private o: Option) {\r\n this.logger = new Logger(o.logLevel, \"MANAGER\");\r\n this.logger.info(`Initialized with log level: ${o.logLevel}`);\r\n\r\n this.pool = new Pool(o.concurrentLimit);\r\n this.fileInput = getFileInput(this.id, false);\r\n this.directoryInput = getFileInput(this.id, true);\r\n\r\n if (o.dropZone) {\r\n this.logger.info(`Drag and drop container set to:`, o.dropZone);\r\n o.dropZone.addEventListener(\"dragenter\", (e) => {\r\n if (isFileDrop(e)) {\r\n e.preventDefault();\r\n if (o.onDropOver) {\r\n o.onDropOver(e);\r\n }\r\n }\r\n });\r\n\r\n o.dropZone.addEventListener(\"dragleave\", (e) => {\r\n if (isFileDrop(e)) {\r\n e.preventDefault();\r\n if (o.onDropLeave) {\r\n o.onDropLeave(e);\r\n }\r\n }\r\n });\r\n\r\n o.dropZone.addEventListener(\"drop\", this.onFileDroppedIn);\r\n }\r\n }\r\n\r\n changeConcurrentLimit = (newLimit: number) => {\r\n this.pool.limit = newLimit;\r\n };\r\n\r\n dispatchUploader(task: Task): Base {\r\n if (task.type == TaskType.resumeHint) {\r\n return new ResumeHint(task, this);\r\n }\r\n\r\n switch (task.policy.type) {\r\n case PolicyType.local:\r\n return new Local(task, this);\r\n case PolicyType.remote:\r\n return new Remote(task, this);\r\n case PolicyType.onedrive:\r\n return new OneDrive(task, this);\r\n case PolicyType.oss:\r\n return new OSS(task, this);\r\n case PolicyType.qiniu:\r\n return new Qiniu(task, this);\r\n case PolicyType.cos:\r\n return new COS(task, this);\r\n case PolicyType.upyun:\r\n return new Upyun(task, this);\r\n case PolicyType.s3:\r\n return new S3(task, this);\r\n default:\r\n throw new UnknownPolicyError(\r\n \"Unknown policy type.\",\r\n task.policy\r\n );\r\n }\r\n }\r\n\r\n // 设定当前存储策略\r\n public setPolicy(p: Policy, path: string) {\r\n this.policy = p;\r\n this.currentPath = path;\r\n if (p == undefined) {\r\n this.logger.info(`Currently no policy selected`);\r\n return;\r\n }\r\n\r\n this.logger.info(`Switching policy to:`, p);\r\n\r\n if (p.allowedSuffix != undefined && p.allowedSuffix.length > 0) {\r\n const acceptVal = p.allowedSuffix\r\n .map((v) => {\r\n return \".\" + v;\r\n })\r\n .join(\",\");\r\n this.logger.info(`Set allowed file suffix to ${acceptVal}`);\r\n this.fileInput.setAttribute(\"accept\", acceptVal);\r\n } else {\r\n this.logger.info(`Set allowed file suffix to *`);\r\n this.fileInput.removeAttribute(\"accept\");\r\n }\r\n }\r\n\r\n // 选择文件\r\n public select = (dst: string, type = SelectType.File): Promise => {\r\n return new Promise((resolve) => {\r\n if (this.policy == undefined) {\r\n this.logger.warn(\r\n `Calling file selector while no policy is set`\r\n );\r\n throw new UploaderError(\r\n UploaderErrorName.NoPolicySelected,\r\n \"No policy selected.\"\r\n );\r\n }\r\n\r\n this.fileInput.onchange = (ev: Event) =>\r\n this.fileSelectCallback(ev, dst, resolve);\r\n this.directoryInput.onchange = (ev: Event) =>\r\n this.fileSelectCallback(ev, dst, resolve);\r\n this.fileInput.value = \"\";\r\n this.directoryInput.value = \"\";\r\n type == SelectType.File\r\n ? this.fileInput.click()\r\n : this.directoryInput.click();\r\n });\r\n };\r\n\r\n public resumeTasks = (): Base[] => {\r\n const tasks = listResumeCtx(this.logger);\r\n if (tasks.length > 0) {\r\n this.logger.info(\r\n `Resumed ${tasks.length} unfinished task(s) from local storage:`,\r\n tasks\r\n );\r\n }\r\n return tasks\r\n .filter(\r\n (t) =>\r\n t.chunkProgress.length > 0 && t.chunkProgress[0].loaded > 0\r\n )\r\n .map((t) =>\r\n this.dispatchUploader({ ...t, type: TaskType.resumeHint })\r\n );\r\n };\r\n\r\n public cleanupSessions = () => {\r\n cleanupResumeCtx(this.logger);\r\n };\r\n\r\n private fileSelectCallback = (\r\n ev: Event | File[],\r\n dst: string,\r\n resolve: (value?: Base[] | PromiseLike | undefined) => void\r\n ) => {\r\n let files: File[] = [];\r\n if (ev instanceof Event) {\r\n const target = ev.target as HTMLInputElement;\r\n if (!ev || !target || !target.files) return;\r\n if (target.files.length > 0) {\r\n files = Array.from(target.files);\r\n }\r\n } else {\r\n files = ev as File[];\r\n }\r\n\r\n if (files.length > 0) {\r\n resolve(\r\n files.map(\r\n (file): Base =>\r\n this.dispatchUploader({\r\n type: TaskType.file,\r\n policy: this.policy as Policy,\r\n dst: getDirectoryUploadDst(dst, file),\r\n file: file,\r\n size: file.size,\r\n name: file.name,\r\n chunkProgress: [],\r\n resumed: false,\r\n })\r\n )\r\n );\r\n }\r\n };\r\n\r\n private onFileDroppedIn = async (e: DragEvent) => {\r\n const containFile =\r\n e.dataTransfer && e.dataTransfer.types.includes(\"Files\");\r\n if (containFile) {\r\n this.o.onDropLeave && this.o.onDropLeave(e);\r\n const items = await getAllFileEntries(e.dataTransfer!.items);\r\n console.log(items);\r\n const uploaders = await new Promise((resolve) =>\r\n this.fileSelectCallback(items, this.currentPath, resolve)\r\n );\r\n this.o.onDropFileAdded && this.o.onDropFileAdded(uploaders);\r\n }\r\n };\r\n}\r\n","import Base, { Status, UploadProgress } from \"./base\";\r\nimport * as utils from \"../utils\";\r\nimport { Task, TaskType } from \"../types\";\r\nimport UploadManager from \"../index\";\r\nimport Logger from \"../logger\";\r\n\r\nexport interface ChunkProgress {\r\n loaded: number;\r\n index: number;\r\n etag?: string;\r\n}\r\n\r\nexport interface ChunkInfo {\r\n chunk: Blob;\r\n index: number;\r\n}\r\n\r\nexport default abstract class Chunk extends Base {\r\n protected chunks: Blob[];\r\n\r\n public upload = async () => {\r\n this.logger.info(\"Preparing uploading file chunks.\");\r\n this.initBeforeUploadChunks();\r\n\r\n this.logger.info(\"Starting uploading file chunks:\", this.chunks);\r\n this.updateLocalCache();\r\n for (let i = 0; i < this.chunks.length; i++) {\r\n if (\r\n this.task.chunkProgress[i].loaded < this.chunks[i].size ||\r\n this.chunks[i].size == 0\r\n ) {\r\n await this.uploadChunk({ chunk: this.chunks[i], index: i });\r\n this.logger.info(`Chunk [${i}] uploaded.`);\r\n this.updateLocalCache();\r\n }\r\n }\r\n };\r\n\r\n private initBeforeUploadChunks() {\r\n this.chunks = utils.getChunks(\r\n this.task.file,\r\n this.task.session?.chunkSize\r\n );\r\n const cachedInfo = utils.getResumeCtx(this.task, this.logger);\r\n if (cachedInfo == null) {\r\n this.task.chunkProgress = this.chunks.map(\r\n (value, index): ChunkProgress => ({\r\n loaded: 0,\r\n index,\r\n })\r\n );\r\n }\r\n\r\n this.notifyResumeProgress();\r\n }\r\n\r\n protected abstract async uploadChunk(chunkInfo: ChunkInfo): Promise;\r\n\r\n protected updateChunkProgress(loaded: number, index: number) {\r\n this.task.chunkProgress[index].loaded = loaded;\r\n this.notifyResumeProgress();\r\n }\r\n\r\n private notifyResumeProgress() {\r\n this.progress = {\r\n total: this.getProgressInfoItem(\r\n utils.sumChunk(this.task.chunkProgress),\r\n this.task.file.size + 1\r\n ),\r\n chunks: this.chunks.map((chunk, index) => {\r\n return this.getProgressInfoItem(\r\n this.task.chunkProgress[index].loaded,\r\n chunk.size,\r\n false\r\n );\r\n }),\r\n };\r\n this.subscriber.onProgress(this.progress);\r\n }\r\n\r\n private updateLocalCache() {\r\n utils.setResumeCtx(this.task, this.logger);\r\n }\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport { localUploadChunk } from \"../api\";\r\n\r\nexport default class Local extends Chunk {\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n return localUploadChunk(\r\n this.task.session?.sessionID!,\r\n chunkInfo,\r\n (p) => {\r\n this.updateChunkProgress(p.loaded, chunkInfo.index);\r\n },\r\n this.cancelToken.token\r\n );\r\n }\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport { slaveUploadChunk } from \"../api\";\r\n\r\nexport default class Remote extends Chunk {\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n return slaveUploadChunk(\r\n `${this.task.session?.uploadURLs[0]!}`,\r\n this.task.session?.credential!,\r\n chunkInfo,\r\n (p) => {\r\n this.updateChunkProgress(p.loaded, chunkInfo.index);\r\n },\r\n this.cancelToken.token\r\n );\r\n }\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport { finishOneDriveUpload, oneDriveUploadChunk } from \"../api\";\r\nimport { OneDriveChunkError, OneDriveEmptyFileSelected } from \"../errors\";\r\nimport { Status } from \"./base\";\r\n\r\nexport default class OneDrive extends Chunk {\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n if (chunkInfo.chunk.size === 0) {\r\n throw new OneDriveEmptyFileSelected();\r\n }\r\n\r\n const rangeEnd = this.progress.total.loaded + chunkInfo.chunk.size - 1;\r\n return this.sendRange(\r\n chunkInfo,\r\n this.progress.total.loaded,\r\n rangeEnd,\r\n 0\r\n ).catch((e) => {\r\n if (\r\n e instanceof OneDriveChunkError &&\r\n e.response.error.innererror &&\r\n e.response.error.innererror.code == \"fragmentOverlap\"\r\n ) {\r\n return this.alignChunkOffset(chunkInfo);\r\n }\r\n\r\n throw e;\r\n });\r\n }\r\n\r\n private async sendRange(\r\n chunkInfo: ChunkInfo,\r\n start: number,\r\n end: number,\r\n chunkOffset: number\r\n ) {\r\n const range = `bytes ${start}-${end}/${this.task.file.size}`;\r\n return oneDriveUploadChunk(\r\n `${this.task.session?.uploadURLs[0]!}`,\r\n range,\r\n chunkInfo,\r\n (p) => {\r\n this.updateChunkProgress(\r\n chunkOffset + p.loaded,\r\n chunkInfo.index\r\n );\r\n },\r\n this.cancelToken.token\r\n );\r\n }\r\n\r\n private async alignChunkOffset(chunkInfo: ChunkInfo) {\r\n this.logger.info(\r\n `Chunk [${chunkInfo.index}] overlapped, checking next expected range...`\r\n );\r\n const rangeStatus = await oneDriveUploadChunk(\r\n `${this.task.session?.uploadURLs[0]!}`,\r\n \"\",\r\n chunkInfo,\r\n (p) => {\r\n return null;\r\n },\r\n this.cancelToken.token\r\n );\r\n const expectedStart = parseInt(\r\n rangeStatus.nextExpectedRanges[0].split(\"-\")[0]\r\n );\r\n this.logger.info(\r\n `Next expected range start from OneDrive is ${expectedStart}.`\r\n );\r\n\r\n if (expectedStart >= this.progress.total.loaded) {\r\n this.logger.info(`This whole chunk is overlapped, skipping...`);\r\n this.updateChunkProgress(chunkInfo.chunk.size, chunkInfo.index);\r\n return;\r\n } else {\r\n this.updateChunkProgress(0, chunkInfo.index);\r\n const rangeEnd =\r\n this.progress.total.loaded + chunkInfo.chunk.size - 1;\r\n const newChunkOffset = expectedStart - this.progress.total.loaded;\r\n chunkInfo.chunk = chunkInfo.chunk.slice(newChunkOffset);\r\n this.updateChunkProgress(newChunkOffset, chunkInfo.index);\r\n return this.sendRange(\r\n chunkInfo,\r\n expectedStart,\r\n rangeEnd,\r\n newChunkOffset\r\n );\r\n }\r\n }\r\n\r\n protected async afterUpload(): Promise {\r\n this.logger.info(`Finishing upload...`);\r\n this.transit(Status.finishing);\r\n return finishOneDriveUpload(\r\n this.task.session!.sessionID,\r\n this.cancelToken.token\r\n );\r\n }\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport { s3LikeFinishUpload, s3LikeUploadChunk } from \"../api\";\r\nimport { Status } from \"./base\";\r\n\r\nexport default class OSS extends Chunk {\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n return s3LikeUploadChunk(\r\n this.task.session?.uploadURLs[chunkInfo.index]!,\r\n chunkInfo,\r\n (p) => {\r\n this.updateChunkProgress(p.loaded, chunkInfo.index);\r\n },\r\n this.cancelToken.token\r\n );\r\n }\r\n\r\n protected async afterUpload(): Promise {\r\n this.logger.info(`Finishing multipart upload...`);\r\n this.transit(Status.finishing);\r\n return s3LikeFinishUpload(\r\n this.task.session!.completeURL,\r\n true,\r\n this.task.chunkProgress,\r\n this.cancelToken.token\r\n );\r\n }\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport { qiniuDriveUploadChunk, qiniuFinishUpload } from \"../api\";\r\nimport { Status } from \"./base\";\r\n\r\nexport default class Qiniu extends Chunk {\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n const chunkRes = await qiniuDriveUploadChunk(\r\n this.task.session?.uploadURLs[0]!,\r\n this.task.session?.credential!,\r\n chunkInfo,\r\n (p) => {\r\n this.updateChunkProgress(p.loaded, chunkInfo.index);\r\n },\r\n this.cancelToken.token\r\n );\r\n\r\n this.task.chunkProgress[chunkInfo.index].etag = chunkRes.etag;\r\n }\r\n\r\n protected async afterUpload(): Promise {\r\n this.logger.info(`Finishing multipart upload...`);\r\n this.transit(Status.finishing);\r\n return qiniuFinishUpload(\r\n this.task.session?.uploadURLs[0]!,\r\n this.task.session?.credential!,\r\n this.task.chunkProgress,\r\n this.cancelToken.token\r\n );\r\n }\r\n}\r\n","import Base, { Status } from \"./base\";\r\nimport { cosFormUploadChunk, cosUploadCallback } from \"../api\";\r\n\r\nexport default class COS extends Base {\r\n public upload = async () => {\r\n this.logger.info(\"Starting uploading file stream:\", this.task.file);\r\n await cosFormUploadChunk(\r\n this.task.session?.uploadURLs[0]!,\r\n this.task.file,\r\n this.task.session?.policy!,\r\n this.task.session?.path!,\r\n this.task.session?.callback!,\r\n this.task.session?.sessionID!,\r\n this.task.session?.keyTime!,\r\n this.task.session?.credential!,\r\n this.task.session?.ak!,\r\n (p) => {\r\n this.subscriber.onProgress({\r\n total: this.getProgressInfoItem(p.loaded, p.total),\r\n });\r\n },\r\n this.cancelToken.token\r\n );\r\n };\r\n\r\n protected async afterUpload(): Promise {\r\n this.transit(Status.finishing);\r\n this.logger.info(`Sending COS upload callback...`);\r\n try {\r\n await cosUploadCallback(\r\n this.task.session!.sessionID,\r\n this.cancelToken.token\r\n );\r\n } catch (e) {\r\n this.logger.warn(`Failed to finish COS upload:`, e);\r\n }\r\n }\r\n}\r\n","import Base from \"./base\";\r\nimport { upyunFormUploadChunk } from \"../api\";\r\n\r\nexport default class Upyun extends Base {\r\n public upload = async () => {\r\n this.logger.info(\"Starting uploading file stream:\", this.task.file);\r\n await upyunFormUploadChunk(\r\n this.task.session?.uploadURLs[0]!,\r\n this.task.file,\r\n this.task.session?.policy!,\r\n this.task.session?.credential!,\r\n (p) => {\r\n this.subscriber.onProgress({\r\n total: this.getProgressInfoItem(p.loaded, p.total),\r\n });\r\n },\r\n this.cancelToken.token\r\n );\r\n };\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport {\r\n s3LikeFinishUpload,\r\n s3LikeUploadCallback,\r\n s3LikeUploadChunk,\r\n} from \"../api\";\r\nimport { Status } from \"./base\";\r\n\r\nexport default class OSS extends Chunk {\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n const etag = await s3LikeUploadChunk(\r\n this.task.session?.uploadURLs[chunkInfo.index]!,\r\n chunkInfo,\r\n (p) => {\r\n this.updateChunkProgress(p.loaded, chunkInfo.index);\r\n },\r\n this.cancelToken.token\r\n );\r\n\r\n this.task.chunkProgress[chunkInfo.index].etag = etag;\r\n }\r\n\r\n protected async afterUpload(): Promise {\r\n this.logger.info(`Finishing multipart upload...`);\r\n this.transit(Status.finishing);\r\n await s3LikeFinishUpload(\r\n this.task.session!.completeURL,\r\n false,\r\n this.task.chunkProgress,\r\n this.cancelToken.token\r\n );\r\n\r\n this.logger.info(`Sending S3-like upload callback...`);\r\n return s3LikeUploadCallback(\r\n this.task.session!.sessionID,\r\n this.cancelToken.token\r\n );\r\n }\r\n}\r\n","import Chunk, { ChunkInfo } from \"./chunk\";\r\nimport { qiniuDriveUploadChunk, qiniuFinishUpload } from \"../api\";\r\nimport { Status } from \"./base\";\r\nimport { Task } from \"../types\";\r\nimport UploadManager from \"../index\";\r\nimport * as utils from \"../utils\";\r\n\r\nexport default class ResumeHint extends Chunk {\r\n constructor(task: Task, manager: UploadManager) {\r\n super(task, manager);\r\n this.status = Status.resumable;\r\n this.progress = {\r\n total: this.getProgressInfoItem(\r\n utils.sumChunk(this.task.chunkProgress),\r\n this.task.size + 1\r\n ),\r\n };\r\n this.subscriber.onProgress(this.progress);\r\n }\r\n\r\n protected async uploadChunk(chunkInfo: ChunkInfo) {\r\n return null;\r\n }\r\n}\r\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport { Badge, CircularProgress, makeStyles } from \"@material-ui/core\";\r\nimport SpeedDial from \"@material-ui/lab/SpeedDial\";\r\nimport SpeedDialIcon from \"@material-ui/lab/SpeedDialIcon\";\r\nimport SpeedDialAction from \"@material-ui/lab/SpeedDialAction\";\r\nimport CreateNewFolderIcon from \"@material-ui/icons/CreateNewFolder\";\r\nimport PublishIcon from \"@material-ui/icons/Publish\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport AutoHidden from \"./AutoHidden\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport { FilePlus, FolderUpload } from \"mdi-material-ui\";\r\nimport { green } from \"@material-ui/core/colors\";\r\nimport { SelectType } from \"../Uploader/core\";\r\nimport {\r\n openCreateFileDialog,\r\n openCreateFolderDialog,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n fab: {\r\n margin: 0,\r\n top: \"auto\",\r\n right: 20,\r\n bottom: 20,\r\n left: \"auto\",\r\n zIndex: 5,\r\n position: \"fixed\",\r\n },\r\n badge: {\r\n position: \"absolute\",\r\n bottom: 26,\r\n top: \"auto\",\r\n zIndex: 9999,\r\n right: 7,\r\n },\r\n \"@global\": {\r\n \".MuiSpeedDialAction-staticTooltipLabel\": {\r\n whiteSpace: \"nowrap\",\r\n },\r\n },\r\n fabProgress: {\r\n color: green[500],\r\n position: \"absolute\",\r\n bottom: -6,\r\n left: -6,\r\n zIndex: 1,\r\n },\r\n buttonSuccess: {\r\n backgroundColor: green[500],\r\n \"&:hover\": {\r\n backgroundColor: green[700],\r\n },\r\n },\r\n}));\r\n\r\nexport default function UploadButton(props) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"fileManager\" });\r\n const [open, setOpen] = useState(false);\r\n const [queued, setQueued] = useState(5);\r\n const path = useSelector((state) => state.navigator.path);\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const OpenNewFolderDialog = useCallback(\r\n () => dispatch(openCreateFolderDialog()),\r\n [dispatch]\r\n );\r\n const OpenNewFileDialog = useCallback(\r\n () => dispatch(openCreateFileDialog()),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n setQueued(props.Queued);\r\n }, [props.Queued]);\r\n\r\n const uploadClicked = () => {\r\n if (open) {\r\n if (queued !== 0) {\r\n props.openFileList();\r\n } else {\r\n props.selectFile(path);\r\n }\r\n }\r\n };\r\n\r\n const handleOpen = () => {\r\n setOpen(true);\r\n };\r\n\r\n const handleClose = () => {\r\n setOpen(false);\r\n };\r\n\r\n const circularProgress = useMemo(() => {\r\n if (props.progress.totalSize > 0) {\r\n return (\r\n \r\n );\r\n }\r\n }, [classes, props.progress]);\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport { sizeToString } from \"../../../utils\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport TimeAgo from \"timeago-react\";\r\nimport { Status } from \"../core/uploader/base\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n infoTitle: {\r\n fontWeight: 700,\r\n },\r\n infoValue: {\r\n color: theme.palette.text.secondary,\r\n wordBreak: \"break-all\",\r\n },\r\n}));\r\n\r\nexport default function TaskDetail({ uploader, navigateToDst, error }) {\r\n const { t } = useTranslation();\r\n const classes = useStyles();\r\n const items = [\r\n {\r\n name: t(\"uploader.fileName\"),\r\n value: uploader.task.name,\r\n },\r\n {\r\n name: t(\"uploader.fileSize\"),\r\n value: `${sizeToString(uploader.task.size)} ${\r\n uploader.task.session && uploader.task.session.chunkSize > 0\r\n ? t(\"uploader.chunkDescription\", {\r\n total: uploader.task.chunkProgress.length,\r\n size: sizeToString(uploader.task.session.chunkSize),\r\n })\r\n : t(\"uploader.noChunks\")\r\n }`,\r\n },\r\n {\r\n name: t(\"fileManager.storagePolicy\"),\r\n value: uploader.task.policy.name,\r\n },\r\n {\r\n name: t(\"uploader.destination\"),\r\n value: (\r\n navigateToDst(uploader.task.dst)}\r\n >\r\n {uploader.task.dst === \"/\"\r\n ? t(\"uploader.rootFolder\")\r\n : uploader.task.dst}\r\n \r\n ),\r\n },\r\n uploader.task.session\r\n ? {\r\n name: t(\"uploader.uploadSession\"),\r\n value: (\r\n <>\r\n ,\r\n ]}\r\n />\r\n \r\n ),\r\n }\r\n : null,\r\n uploader.status === Status.error\r\n ? {\r\n name: t(\"uploader.errorDetails\"),\r\n value: error,\r\n }\r\n : null,\r\n ];\r\n return (\r\n \r\n {items.map((i) => (\r\n <>\r\n {i && (\r\n \r\n \r\n {i.name}\r\n \r\n \r\n {i.value}\r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n );\r\n}\r\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport {\r\n Divider,\r\n Grow,\r\n IconButton,\r\n ListItem,\r\n ListItemText,\r\n makeStyles,\r\n Tooltip,\r\n} from \"@material-ui/core\";\r\nimport TypeIcon from \"../../FileManager/TypeIcon\";\r\nimport { useUpload } from \"../UseUpload\";\r\nimport { Status } from \"../core/uploader/base\";\r\nimport { UploaderError } from \"../core/errors\";\r\nimport { filename, sizeToString } from \"../../../utils\";\r\nimport { darken, lighten } from \"@material-ui/core/styles/colorManipulator\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport PlayArrow from \"@material-ui/icons/PlayArrow\";\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\nimport MuiExpansionPanel from \"@material-ui/core/ExpansionPanel\";\r\nimport MuiExpansionPanelSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport MuiExpansionPanelDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport TaskDetail from \"./TaskDetail\";\r\nimport { SelectType } from \"../core\";\r\nimport { navigateTo } from \"../../../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n progressContent: {\r\n position: \"relative\",\r\n zIndex: 9,\r\n },\r\n progress: {\r\n transition: \"width .4s linear\",\r\n zIndex: 1,\r\n height: \"100%\",\r\n position: \"absolute\",\r\n left: 0,\r\n top: 0,\r\n },\r\n progressContainer: {\r\n position: \"relative\",\r\n },\r\n listAction: {\r\n marginLeft: 20,\r\n marginRight: 20,\r\n },\r\n wordBreak: {\r\n wordBreak: \"break-all\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n successStatus: {\r\n color: theme.palette.success.main,\r\n },\r\n errorStatus: {\r\n color: theme.palette.warning.main,\r\n wordBreak: \"break-all\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n textOverflow: \"ellipsis\",\r\n },\r\n },\r\n disabledBadge: {\r\n marginLeft: theme.spacing(1),\r\n height: 18,\r\n },\r\n delete: {\r\n zIndex: 9,\r\n },\r\n dstLink: {\r\n color: theme.palette.success.main,\r\n fontWeight: 600,\r\n },\r\n fileNameContainer: {\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n}));\r\n\r\nconst ExpansionPanel = withStyles({\r\n root: {\r\n maxWidth: \"100%\",\r\n boxShadow: \"none\",\r\n \"&:not(:last-child)\": {\r\n borderBottom: 0,\r\n },\r\n \"&:before\": {\r\n display: \"none\",\r\n },\r\n \"&$expanded\": {\r\n margin: 0,\r\n },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanel);\r\n\r\nconst ExpansionPanelSummary = withStyles({\r\n root: {\r\n minHeight: 0,\r\n padding: 0,\r\n display: \"block\",\r\n \"&$expanded\": {},\r\n },\r\n content: {\r\n margin: 0,\r\n display: \"block\",\r\n \"&$expanded\": {\r\n margin: \"0\",\r\n },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanelSummary);\r\n\r\nconst ExpansionPanelDetails = withStyles((theme) => ({\r\n root: {\r\n paddingLeft: 16,\r\n paddingRight: 16,\r\n paddingTop: 8,\r\n paddingBottom: 8,\r\n display: \"block\",\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n}))(MuiExpansionPanelDetails);\r\n\r\nconst getSpeedText = (speed, speedAvg, useSpeedAvg) => {\r\n let displayedSpeed = speedAvg;\r\n if (!useSpeedAvg) {\r\n displayedSpeed = speed;\r\n }\r\n\r\n return `${sizeToString(displayedSpeed ? displayedSpeed : 0)} /s`;\r\n};\r\n\r\nconst getErrMsg = (error) => {\r\n let errMsg = error.message;\r\n if (error instanceof UploaderError) {\r\n errMsg = error.Message(\"\");\r\n }\r\n\r\n return errMsg;\r\n};\r\n\r\nexport default function UploadTask({\r\n uploader,\r\n useAvgSpeed,\r\n onCancel,\r\n onClose,\r\n selectFile,\r\n onRefresh,\r\n}) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"uploader\" });\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const [taskHover, setTaskHover] = useState(false);\r\n const [expanded, setExpanded] = useState(false);\r\n const { status, error, progress, speed, speedAvg, retry } = useUpload(\r\n uploader\r\n );\r\n const fullScreen = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n const [loading, setLoading] = useState(false);\r\n const dispatch = useDispatch();\r\n const NavigateTo = useCallback((k) => dispatch(navigateTo(k)), [dispatch]);\r\n const navigateToDst = (path) => {\r\n onClose(null, \"backdropClick\");\r\n NavigateTo(path);\r\n };\r\n\r\n const toggleDetail = (event, newExpanded) => {\r\n setExpanded(!!newExpanded);\r\n };\r\n\r\n useEffect(() => {\r\n if (status >= Status.finished) {\r\n onRefresh();\r\n }\r\n }, [status]);\r\n\r\n const statusText = useMemo(() => {\r\n const parent = filename(uploader.task.dst);\r\n switch (status) {\r\n case Status.added:\r\n case Status.initialized:\r\n case Status.queued:\r\n return
{t(\"pendingInQueue\")}
;\r\n case Status.preparing:\r\n return
{t(\"preparing\")}
;\r\n case Status.error:\r\n return (\r\n
\r\n {getErrMsg(error)}\r\n
\r\n
\r\n );\r\n case Status.finishing:\r\n return
{t(\"processing\")}
;\r\n case Status.resumable:\r\n return (\r\n
\r\n {t(\"progressDescription\", {\r\n uploaded: sizeToString(progress.total.loaded),\r\n total: sizeToString(progress.total.size),\r\n percentage: progress.total.percent.toFixed(2),\r\n })}\r\n
\r\n );\r\n case Status.processing:\r\n if (progress) {\r\n return (\r\n
\r\n {t(\"progressDescriptionFull\", {\r\n speed: getSpeedText(\r\n speed,\r\n speedAvg,\r\n useAvgSpeed\r\n ),\r\n uploaded: sizeToString(progress.total.loaded),\r\n total: sizeToString(progress.total.size),\r\n percentage: progress.total.percent.toFixed(2),\r\n })}\r\n
\r\n );\r\n }\r\n return
{t(\"progressDescriptionPlaceHolder\")}
;\r\n case Status.finished:\r\n return (\r\n
\r\n {t(\"uploadedTo\")}\r\n \r\n navigateToDst(uploader.task.dst)}\r\n >\r\n {parent === \"\" ? t(\"rootFolder\") : parent}\r\n \r\n \r\n
\r\n
\r\n );\r\n default:\r\n return
{t(\"unknownStatus\")}
;\r\n }\r\n }, [status, error, progress, speed, speedAvg, useAvgSpeed]);\r\n\r\n const resumeLabel = useMemo(\r\n () =>\r\n uploader.task.resumed && !fullScreen ? (\r\n \r\n ) : null,\r\n [status, fullScreen]\r\n );\r\n\r\n const continueLabel = useMemo(\r\n () =>\r\n status === Status.resumable && !fullScreen ? (\r\n \r\n ) : null,\r\n [status, fullScreen]\r\n );\r\n\r\n const progressBar = useMemo(\r\n () =>\r\n (status === Status.processing ||\r\n status === Status.finishing ||\r\n status === Status.resumable) &&\r\n progress ? (\r\n \r\n ) : null,\r\n [status, progress, theme]\r\n );\r\n\r\n const taskDetail = useMemo(() => {\r\n return (\r\n \r\n );\r\n }, [uploader, expanded]);\r\n\r\n const cancel = () => {\r\n setLoading(true);\r\n uploader.cancel().then(() => {\r\n setLoading(false);\r\n onCancel((u) => u.id != uploader.id);\r\n });\r\n };\r\n\r\n const stopRipple = (e) => {\r\n e.stopPropagation();\r\n };\r\n\r\n const secondaryAction = useMemo(() => {\r\n if (!taskHover && !fullScreen) {\r\n return <>;\r\n }\r\n\r\n const actions = [\r\n {\r\n show: status === Status.error,\r\n title: t(\"retry\"),\r\n click: retry,\r\n icon: ,\r\n loading: false,\r\n },\r\n {\r\n show: true,\r\n title:\r\n status === Status.finished\r\n ? t(\"deleteTask\")\r\n : t(\"cancelAndDelete\"),\r\n click: cancel,\r\n icon: ,\r\n loading: loading,\r\n },\r\n {\r\n show: status === Status.resumable,\r\n title: t(\"selectAndResume\"),\r\n click: () =>\r\n selectFile(uploader.task.dst, SelectType.File, uploader),\r\n icon: ,\r\n loading: false,\r\n },\r\n ];\r\n\r\n return (\r\n <>\r\n {actions.map((a) => (\r\n <>\r\n {a.show && (\r\n \r\n \r\n {\r\n e.stopPropagation();\r\n a.click();\r\n }}\r\n >\r\n {a.icon}\r\n \r\n \r\n \r\n )}\r\n \r\n ))}\r\n \r\n );\r\n }, [status, loading, taskHover, fullScreen, uploader]);\r\n\r\n const fileIcon = useMemo(() => {\r\n if (!fullScreen) {\r\n return ;\r\n }\r\n }, [uploader, fullScreen]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n setTaskHover(false)}\r\n onMouseOver={() => setTaskHover(true)}\r\n >\r\n {progressBar}\r\n \r\n {fileIcon}\r\n \r\n
\r\n {uploader.task.name}\r\n
\r\n
{resumeLabel}
\r\n
{continueLabel}
\r\n
\r\n }\r\n secondary={\r\n
\r\n {statusText}\r\n
\r\n }\r\n />\r\n {secondaryAction}\r\n \r\n \r\n \r\n {taskDetail}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\n\r\nexport function useUpload(uploader) {\r\n const startLoadedRef = useRef(0);\r\n const [status, setStatus] = useState(uploader.status);\r\n const [error, setError] = useState(uploader.error);\r\n const [progress, setProgress] = useState(uploader.progress);\r\n const dispatch = useDispatch();\r\n\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n /* eslint-disable @typescript-eslint/no-empty-function */\r\n uploader.subscribe({\r\n onTransition: (newStatus) => {\r\n setStatus(newStatus);\r\n },\r\n onError: (err) => {\r\n setError(err);\r\n setStatus(uploader.status);\r\n },\r\n onProgress: (data) => {\r\n setProgress(data);\r\n },\r\n onMsg: (msg, color) => {\r\n ToggleSnackbar(\"top\", \"right\", msg, color);\r\n },\r\n });\r\n }, []);\r\n\r\n // 获取上传速度\r\n const [speed, speedAvg] = React.useMemo(() => {\r\n if (\r\n progress == null ||\r\n progress.total == null ||\r\n progress.total.loaded == null\r\n )\r\n return [0, 0];\r\n const duration = (Date.now() - (uploader.lastTime || 0)) / 1000;\r\n const durationTotal = (Date.now() - (uploader.startTime || 0)) / 1000;\r\n const res =\r\n progress.total.loaded > startLoadedRef.current\r\n ? Math.floor(\r\n (progress.total.loaded - startLoadedRef.current) /\r\n duration\r\n )\r\n : 0;\r\n const resAvg =\r\n progress.total.loaded > 0\r\n ? Math.floor(progress.total.loaded / durationTotal)\r\n : 0;\r\n\r\n startLoadedRef.current = progress.total.loaded;\r\n uploader.lastTime = Date.now();\r\n return [res, resAvg];\r\n }, [progress]);\r\n\r\n const retry = () => {\r\n uploader.reset();\r\n uploader.start();\r\n };\r\n\r\n return { status, error, progress, speed, speedAvg, retry };\r\n}\r\n","import React, { useState } from \"react\";\r\nimport {\r\n Button,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Input,\r\n InputLabel,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({}));\r\n\r\nexport default function ConcurrentOptionDialog({ open, onClose, onSave }) {\r\n const { t } = useTranslation();\r\n const [count, setCount] = useState(\r\n Auth.GetPreferenceWithDefault(\"concurrent_limit\", \"5\")\r\n );\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {t(\"uploader.setConcurrent\")}\r\n \r\n\r\n \r\n \r\n \r\n {t(\"uploader.concurrentTaskNumber\")}\r\n \r\n setCount(e.target.value)}\r\n />\r\n \r\n \r\n\r\n \r\n \r\n
\r\n onSave(count)}\r\n >\r\n {t(\"ok\", { ns: \"common\" })}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import {\r\n Icon,\r\n ListItemIcon,\r\n makeStyles,\r\n Menu,\r\n MenuItem,\r\n Tooltip,\r\n} from \"@material-ui/core\";\r\nimport React, { useCallback, useMemo, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport API from \"../../../middleware/Api\";\r\nimport { TaskType } from \"../core/types\";\r\nimport { refreshStorage, toggleSnackbar } from \"../../../redux/explorer\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport CheckIcon from \"@material-ui/icons/Check\";\r\nimport { DeleteEmpty } from \"mdi-material-ui\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport ConcurrentOptionDialog from \"../../Modals/ConcurrentOption\";\r\nimport Auth from \"../../../middleware/Auth\";\r\nimport { ClearAll, Replay } from \"@material-ui/icons\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n icon: {\r\n minWidth: 38,\r\n },\r\n}));\r\n\r\nexport default function MoreActions({\r\n anchorEl,\r\n onClose,\r\n uploadManager,\r\n deleteTask,\r\n useAvgSpeed,\r\n setUseAvgSpeed,\r\n filter,\r\n setFilter,\r\n sorter,\r\n setSorter,\r\n cleanFinished,\r\n retryFailed,\r\n}) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"uploader\" });\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const [concurrentDialog, setConcurrentDialog] = useState(false);\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const RefreshStorage = useCallback(\r\n () => dispatch(refreshStorage()),\r\n [dispatch]\r\n );\r\n\r\n const actionClicked = (next) => () => {\r\n onClose();\r\n next();\r\n };\r\n\r\n const cleanupSessions = () => {\r\n uploadManager.cleanupSessions();\r\n API.delete(\"/file/upload\")\r\n .then((response) => {\r\n if (response.rawData.code === 0) {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"uploadSessionCleaned\"),\r\n \"success\"\r\n );\r\n } else {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n response.rawData.msg,\r\n \"warning\"\r\n );\r\n }\r\n deleteTask((u) => u.task.type !== TaskType.resumeHint);\r\n RefreshStorage();\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n };\r\n\r\n const open = Boolean(anchorEl);\r\n const id = open ? \"uploader-action-popover\" : undefined;\r\n\r\n const listItems = useMemo(\r\n () => [\r\n {\r\n tooltip: t(\"hideCompletedTooltip\"),\r\n onClick: () =>\r\n setFilter(filter === \"default\" ? \"ongoing\" : \"default\"),\r\n icon: filter !== \"default\" ? : ,\r\n text: t(\"hideCompleted\"),\r\n divider: true,\r\n },\r\n {\r\n tooltip: t(\"addTimeAscTooltip\"),\r\n onClick: () => setSorter(\"default\"),\r\n icon: sorter === \"default\" ? : ,\r\n text: t(\"addTimeAsc\"),\r\n divider: false,\r\n },\r\n {\r\n tooltip: t(\"addTimeDescTooltip\"),\r\n onClick: () => setSorter(\"reverse\"),\r\n icon: sorter === \"reverse\" ? : ,\r\n text: t(\"addTimeDesc\"),\r\n divider: true,\r\n },\r\n {\r\n tooltip: t(\"showInstantSpeedTooltip\"),\r\n onClick: () => setUseAvgSpeed(false),\r\n icon: useAvgSpeed ? : ,\r\n text: t(\"showInstantSpeed\"),\r\n divider: false,\r\n },\r\n {\r\n tooltip: t(\"showAvgSpeedTooltip\"),\r\n onClick: () => setUseAvgSpeed(true),\r\n icon: !useAvgSpeed ? : ,\r\n text: t(\"showAvgSpeed\"),\r\n divider: true,\r\n },\r\n {\r\n tooltip: t(\"cleanAllSessionTooltip\"),\r\n onClick: () => cleanupSessions(),\r\n icon: ,\r\n text: t(\"cleanAllSession\"),\r\n divider: false,\r\n },\r\n {\r\n tooltip: t(\"cleanCompletedTooltip\"),\r\n onClick: () => cleanFinished(),\r\n icon: ,\r\n text: t(\"cleanCompleted\"),\r\n divider: false,\r\n },\r\n {\r\n tooltip: t(\"retryFailedTasksTooltip\"),\r\n onClick: () => retryFailed(),\r\n icon: ,\r\n text: t(\"retryFailedTasks\"),\r\n divider: true,\r\n },\r\n {\r\n tooltip: t(\"setConcurrentTooltip\"),\r\n onClick: () => setConcurrentDialog(true),\r\n icon: ,\r\n text: t(\"setConcurrent\"),\r\n divider: false,\r\n },\r\n ],\r\n [\r\n useAvgSpeed,\r\n setUseAvgSpeed,\r\n sorter,\r\n setSorter,\r\n filter,\r\n setFilter,\r\n cleanFinished,\r\n ]\r\n );\r\n\r\n const onConcurrentLimitSave = (val) => {\r\n val = parseInt(val);\r\n if (val > 0) {\r\n Auth.SetPreference(\"concurrent_limit\", val);\r\n uploadManager.changeConcurrentLimit(parseInt(val));\r\n }\r\n setConcurrentDialog(false);\r\n };\r\n\r\n return (\r\n <>\r\n \r\n {listItems.map((item) => (\r\n <>\r\n \r\n \r\n \r\n {item.icon}\r\n \r\n {item.text}\r\n \r\n \r\n {item.divider && }\r\n \r\n ))}\r\n \r\n setConcurrentDialog(false)}\r\n onSave={onConcurrentLimitSave}\r\n />\r\n \r\n );\r\n}\r\n","import React, { useMemo, useState } from \"react\";\r\nimport {\r\n Accordion,\r\n AccordionDetails,\r\n AppBar,\r\n Dialog,\r\n DialogContent,\r\n Fade,\r\n IconButton,\r\n makeStyles,\r\n Slide,\r\n Toolbar,\r\n Tooltip,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport CloseIcon from \"@material-ui/icons/Close\";\r\nimport ExpandMoreIcon from \"@material-ui/icons/ExpandLess\";\r\nimport AddIcon from \"@material-ui/icons/Add\";\r\nimport classnames from \"classnames\";\r\nimport UploadTask from \"./UploadTask\";\r\nimport { MoreHoriz } from \"@material-ui/icons\";\r\nimport MoreActions from \"./MoreActions\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { Virtuoso } from \"react-virtuoso\";\r\nimport Nothing from \"../../Placeholder/Nothing\";\r\nimport { lighten } from \"@material-ui/core/styles/colorManipulator\";\r\nimport { Status } from \"../core/uploader/base\";\r\nimport Auth from \"../../../middleware/Auth\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { useUpload } from \"../UseUpload\";\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n rootOverwrite: {\r\n top: \"auto!important\",\r\n left: \"auto!important\",\r\n },\r\n appBar: {\r\n position: \"relative\",\r\n },\r\n flex: {\r\n flex: 1,\r\n },\r\n popup: {\r\n alignItems: \"flex-end\",\r\n justifyContent: \"flex-end\",\r\n },\r\n dialog: {\r\n margin: 0,\r\n right: 10,\r\n bottom: 10,\r\n zIndex: 9999,\r\n position: \"fixed\",\r\n inset: \"-1!important\",\r\n },\r\n paddingZero: {\r\n padding: 0,\r\n },\r\n dialogContent: {\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: 500,\r\n minHeight: 300,\r\n maxHeight: \"calc(100vh - 140px)\",\r\n },\r\n padding: 0,\r\n paddingTop: \"0!important\",\r\n },\r\n virtualList: {\r\n height: \"100%\",\r\n maxHeight: \"calc(100vh - 56px)\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n minHeight: 300,\r\n maxHeight: \"calc(100vh - 140px)\",\r\n },\r\n },\r\n expandIcon: {\r\n transform: \"rotate(0deg)\",\r\n transition: theme.transitions.create(\"transform\", {\r\n duration: theme.transitions.duration.shortest,\r\n }),\r\n },\r\n expandIconExpanded: {\r\n transform: \"rotate(180deg)\",\r\n },\r\n toolbar: {\r\n paddingLeft: theme.spacing(1),\r\n paddingRight: theme.spacing(1),\r\n },\r\n progress: {\r\n transition: \"width .4s linear\",\r\n zIndex: -1,\r\n height: \"100%\",\r\n position: \"absolute\",\r\n left: 0,\r\n top: 0,\r\n },\r\n}));\r\n\r\nconst sorters = {\r\n default: (a, b) => a.id - b.id,\r\n reverse: (a, b) => b.id - a.id,\r\n};\r\n\r\nconst filters = {\r\n default: (u) => true,\r\n ongoing: (u) => u.status < Status.finished,\r\n};\r\n\r\nexport default function TaskList({\r\n open,\r\n onClose,\r\n selectFile,\r\n taskList,\r\n onCancel,\r\n uploadManager,\r\n progress,\r\n setUploaders,\r\n}) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"uploader\" });\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const fullScreen = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n const path = useSelector((state) => state.navigator.path);\r\n const [expanded, setExpanded] = useState(true);\r\n const [useAvgSpeed, setUseAvgSpeed] = useState(\r\n Auth.GetPreferenceWithDefault(\"use_avg_speed\", true)\r\n );\r\n const [anchorEl, setAnchorEl] = useState(null);\r\n const [filter, setFilter] = useState(\r\n Auth.GetPreferenceWithDefault(\"task_filter\", \"default\")\r\n );\r\n const [sorter, setSorter] = useState(\r\n Auth.GetPreferenceWithDefault(\"task_sorter\", \"default\")\r\n );\r\n const [refreshList, setRefreshList] = useState(false);\r\n\r\n const handleActionClick = (event) => {\r\n setAnchorEl(event.currentTarget);\r\n };\r\n\r\n const handleActionClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const close = (e, reason) => {\r\n if (reason !== \"backdropClick\") {\r\n onClose();\r\n } else {\r\n setExpanded(false);\r\n }\r\n };\r\n const handlePanelChange = (event, isExpanded) => {\r\n setExpanded(isExpanded);\r\n };\r\n\r\n useMemo(() => {\r\n if (open) {\r\n setExpanded(true);\r\n }\r\n }, [taskList]);\r\n\r\n const progressBar = useMemo(\r\n () =>\r\n progress.totalSize > 0 ? (\r\n 0 && !expanded}>\r\n
\r\n \r\n
\r\n
\r\n ) : null,\r\n [progress, expanded, classes, theme]\r\n );\r\n\r\n const list = useMemo(() => {\r\n const currentList = taskList\r\n .filter(filters[filter])\r\n .sort(sorters[sorter]);\r\n if (currentList.length === 0) {\r\n return ;\r\n }\r\n\r\n return (\r\n (\r\n setRefreshList((r) => !r)}\r\n />\r\n )}\r\n />\r\n );\r\n }, [\r\n classes,\r\n taskList,\r\n useAvgSpeed,\r\n fullScreen,\r\n filter,\r\n sorter,\r\n refreshList,\r\n ]);\r\n\r\n const retryFailed = () => {\r\n taskList.forEach((task) => {\r\n if (task.status === Status.error) {\r\n task.reset();\r\n task.start();\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n {\r\n Auth.SetPreference(\"use_avg_speed\", v);\r\n setUseAvgSpeed(v);\r\n }}\r\n filter={filter}\r\n sorter={sorter}\r\n setFilter={(v) => {\r\n Auth.SetPreference(\"task_filter\", v);\r\n setFilter(v);\r\n }}\r\n setSorter={(v) => {\r\n Auth.SetPreference(\"task_sorter\", v);\r\n setSorter(v);\r\n }}\r\n retryFailed={retryFailed}\r\n cleanFinished={() =>\r\n setUploaders((u) => u.filter(filters[\"ongoing\"]))\r\n }\r\n />\r\n \r\n \r\n \r\n {progressBar}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"uploadTasks\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n selectFile(path)}\r\n >\r\n \r\n \r\n \r\n {!fullScreen && (\r\n \r\n setExpanded(!expanded)}\r\n >\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {list}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport Backdrop from \"@material-ui/core/Backdrop\";\r\nimport { createStyles, makeStyles } from \"@material-ui/core/styles\";\r\nimport UploadIcon from \"@material-ui/icons/CloudUpload\";\r\nimport { Typography } from \"@material-ui/core\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) =>\r\n createStyles({\r\n backdrop: {\r\n zIndex: theme.zIndex.drawer + 1,\r\n color: \"#fff\",\r\n flexDirection: \"column\",\r\n },\r\n })\r\n);\r\n\r\nexport function DropFileBackground({ open }) {\r\n const classes = useStyles();\r\n const { t } = useTranslation();\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n {t(\"uploader.dropFileHere\")}\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import React, { useCallback, useEffect, useMemo, useState } from \"react\";\r\nimport UploadManager, { SelectType } from \"./core\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport UploadButton from \"../Dial/Create\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { UploaderError } from \"./core/errors\";\r\nimport TaskList from \"./Popup/TaskList\";\r\nimport { Status } from \"./core/uploader/base\";\r\nimport { DropFileBackground } from \"../Placeholder/DropFile\";\r\nimport {\r\n refreshFileList,\r\n refreshStorage,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nlet totalProgressCollector = null;\r\nlet lastProgressStart = -1;\r\nlet dragCounter = 0;\r\n\r\nexport default function Uploader() {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"uploader\" });\r\n const [uploaders, setUploaders] = useState([]);\r\n const [taskListOpen, setTaskListOpen] = useState(false);\r\n const [dropBgOpen, setDropBgOpen] = useState(0);\r\n const [totalProgress, setTotalProgress] = useState({\r\n totalSize: 0,\r\n processedSize: 0,\r\n total: 0,\r\n processed: 0,\r\n });\r\n const search = useSelector((state) => state.explorer.search);\r\n const policy = useSelector((state) => state.explorer.currentPolicy);\r\n const isLogin = useSelector((state) => state.viewUpdate.isLogin);\r\n const path = useSelector((state) => state.navigator.path);\r\n const fileSelectCounter = useSelector(\r\n (state) => state.viewUpdate.openFileSelector\r\n );\r\n const folderSelectCounter = useSelector(\r\n (state) => state.viewUpdate.openFolderSelector\r\n );\r\n const location = useLocation();\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const RefreshFileList = useCallback(() => dispatch(refreshFileList()), [\r\n dispatch,\r\n ]);\r\n const RefreshStorage = useCallback(() => dispatch(refreshStorage()), [\r\n dispatch,\r\n ]);\r\n\r\n const enableUploader = useMemo(\r\n () => pathHelper.isHomePage(location.pathname) && isLogin && !search,\r\n [location.pathname, isLogin, search]\r\n );\r\n\r\n const taskAdded = (original = null) => (tasks) => {\r\n if (original !== null) {\r\n if (tasks.length !== 1 || tasks[0].key() !== original.key()) {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"fileNotMatchError\"),\r\n \"warning\"\r\n );\r\n return;\r\n }\r\n }\r\n\r\n tasks.forEach((t) => t.start());\r\n\r\n setTaskListOpen(true);\r\n setUploaders((uploaders) => {\r\n if (original !== null) {\r\n uploaders = uploaders.filter((u) => u.key() !== original.key());\r\n }\r\n\r\n return [...uploaders, ...tasks];\r\n });\r\n };\r\n\r\n const uploadManager = useMemo(() => {\r\n return new UploadManager({\r\n logLevel: \"INFO\",\r\n concurrentLimit: parseInt(\r\n Auth.GetPreferenceWithDefault(\"concurrent_limit\", \"5\")\r\n ),\r\n dropZone: document.querySelector(\"body\"),\r\n onToast: (type, msg) => {\r\n ToggleSnackbar(\"top\", \"right\", msg, type);\r\n },\r\n onDropOver: (e) => {\r\n dragCounter++;\r\n setDropBgOpen((value) => !value);\r\n },\r\n onDropLeave: (e) => {\r\n dragCounter--;\r\n setDropBgOpen((value) => !value);\r\n },\r\n onDropFileAdded: taskAdded(),\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n uploadManager.setPolicy(policy, path);\r\n }, [policy]);\r\n\r\n useEffect(() => {\r\n const unfinished = uploadManager.resumeTasks();\r\n setUploaders((uploaders) => [...uploaders, ...unfinished]);\r\n if (!totalProgressCollector) {\r\n totalProgressCollector = setInterval(() => {\r\n const progress = {\r\n totalSize: 0,\r\n processedSize: 0,\r\n total: 0,\r\n processed: 0,\r\n };\r\n setUploaders((uploaders) => {\r\n uploaders.forEach((u) => {\r\n if (u.id <= lastProgressStart) {\r\n return;\r\n }\r\n\r\n progress.totalSize += u.task.size;\r\n progress.total += 1;\r\n\r\n if (\r\n u.status === Status.finished ||\r\n u.status === Status.canceled ||\r\n u.status === Status.error\r\n ) {\r\n progress.processedSize += u.task.size;\r\n progress.processed += 1;\r\n }\r\n\r\n if (\r\n u.status === Status.added ||\r\n u.status === Status.initialized ||\r\n u.status === Status.queued ||\r\n u.status === Status.preparing ||\r\n u.status === Status.processing ||\r\n u.status === Status.finishing\r\n ) {\r\n progress.processedSize += u.progress\r\n ? u.progress.total.loaded\r\n : 0;\r\n }\r\n });\r\n\r\n if (\r\n progress.total > 0 &&\r\n progress.processed === progress.total\r\n ) {\r\n lastProgressStart = uploaders[uploaders.length - 1].id;\r\n }\r\n return uploaders;\r\n });\r\n\r\n if (\r\n progress.total > 0 &&\r\n progress.total === progress.processed\r\n ) {\r\n RefreshFileList();\r\n RefreshStorage();\r\n }\r\n\r\n setTotalProgress(progress);\r\n }, 2000);\r\n }\r\n }, []);\r\n\r\n const selectFile = (path, type = SelectType.File, original = null) => {\r\n setTaskListOpen(true);\r\n\r\n // eslint-disable-next-line no-unreachable\r\n uploadManager\r\n .select(path, type)\r\n .then(taskAdded(original))\r\n .catch((e) => {\r\n if (e instanceof UploaderError) {\r\n ToggleSnackbar(\"top\", \"right\", e.Message(), \"warning\");\r\n } else {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"unknownError\", { msg: e.message }),\r\n \"error\"\r\n );\r\n }\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n if (fileSelectCounter > 0) {\r\n selectFile(path);\r\n }\r\n }, [fileSelectCounter]);\r\n\r\n useEffect(() => {\r\n if (folderSelectCounter > 0) {\r\n selectFile(path, SelectType.Directory);\r\n }\r\n }, [folderSelectCounter]);\r\n\r\n const deleteTask = (filter) => {\r\n setUploaders((uploaders) => uploaders.filter(filter));\r\n };\r\n\r\n return (\r\n <>\r\n {enableUploader && (\r\n <>\r\n 0} />\r\n setTaskListOpen(true)}\r\n />\r\n setTaskListOpen(false)}\r\n setUploaders={setUploaders}\r\n />\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import i18next from \"./i18n\";\r\n\r\nexport const imgPreviewSuffix = [\r\n \"bmp\",\r\n \"png\",\r\n \"gif\",\r\n \"jpg\",\r\n \"jpeg\",\r\n \"svg\",\r\n \"webp\",\r\n];\r\nexport let msDocPreviewSuffix = [\r\n \"ppt\",\r\n \"pptx\",\r\n \"pps\",\r\n \"doc\",\r\n \"docx\",\r\n \"xlsx\",\r\n \"xls\",\r\n];\r\nexport const subtitleSuffix = [\"ass\", \"srt\", \"vrr\"];\r\nexport const audioPreviewSuffix = [\"mp3\", \"ogg\", \"wav\", \"flac\", \"m4a\"];\r\nexport const videoPreviewSuffix = [\"mp4\", \"mkv\", \"webm\", \"avi\", \"m3u8\", \"mov\"];\r\nexport const pdfPreviewSuffix = [\"pdf\"];\r\nexport const editSuffix = [\"md\", \"txt\"];\r\nexport const epubSuffix = [\"epub\"];\r\nexport const codePreviewSuffix = {\r\n json: \"json\",\r\n php: \"php\",\r\n py: \"python\",\r\n bat: \"bat\",\r\n cpp: \"cpp\",\r\n c: \"cpp\",\r\n h: \"cpp\",\r\n cs: \"csharp\",\r\n css: \"css\",\r\n dockerfile: \"dockerfile\",\r\n go: \"go\",\r\n html: \"html\",\r\n ini: \"ini\",\r\n java: \"java\",\r\n js: \"javascript\",\r\n jsx: \"javascript\",\r\n less: \"less\",\r\n lua: \"lua\",\r\n sh: \"shell\",\r\n sql: \"sql\",\r\n xml: \"xml\",\r\n yaml: \"yaml\",\r\n};\r\nexport const mediaType = {\r\n audio: [\"mp3\", \"flac\", \"ape\", \"wav\", \"acc\", \"ogg\", \"m4a\"],\r\n video: [\"mp4\", \"flv\", \"avi\", \"wmv\", \"mkv\", \"rm\", \"rmvb\", \"mov\", \"ogv\"],\r\n image: [\r\n \"bmp\",\r\n \"iff\",\r\n \"png\",\r\n \"gif\",\r\n \"jpg\",\r\n \"jpeg\",\r\n \"psd\",\r\n \"svg\",\r\n \"webp\",\r\n \"heif\",\r\n \"heic\",\r\n \"tiff\",\r\n \"avif\",\r\n ],\r\n pdf: [\"pdf\"],\r\n word: [\"doc\", \"docx\"],\r\n ppt: [\"ppt\", \"pptx\"],\r\n excel: [\"xls\", \"xlsx\", \"csv\"],\r\n text: [\"txt\", \"md\", \"html\"],\r\n torrent: [\"torrent\"],\r\n zip: [\"zip\", \"gz\", \"xz\", \"tar\", \"rar\", \"7z\"],\r\n excute: [\"exe\"],\r\n android: [\"apk\"],\r\n php: [\"php\"],\r\n go: [\"go\"],\r\n python: [\"py\"],\r\n cpp: [\"cpp\"],\r\n c: [\"c\"],\r\n js: [\"js\", \"jsx\"],\r\n epub: epubSuffix,\r\n};\r\nexport const isPreviewable = (name: any) => {\r\n const suffix = name.split(\".\").pop().toLowerCase();\r\n if (imgPreviewSuffix.indexOf(suffix) !== -1) {\r\n return \"img\";\r\n } else if (msDocPreviewSuffix.indexOf(suffix) !== -1) {\r\n return \"msDoc\";\r\n } else if (audioPreviewSuffix.indexOf(suffix) !== -1) {\r\n return \"audio\";\r\n } else if (videoPreviewSuffix.indexOf(suffix) !== -1) {\r\n return \"video\";\r\n } else if (editSuffix.indexOf(suffix) !== -1) {\r\n return \"edit\";\r\n } else if (pdfPreviewSuffix.indexOf(suffix) !== -1) {\r\n return \"pdf\";\r\n } else if (Object.keys(codePreviewSuffix).indexOf(suffix) !== -1) {\r\n return \"code\";\r\n } else if (epubSuffix.indexOf(suffix) !== -1) {\r\n return \"epub\";\r\n }\r\n return false;\r\n};\r\nexport const isTorrent = (name: any) => {\r\n const suffix = name.split(\".\").pop().toLowerCase();\r\n if (mediaType.torrent.indexOf(suffix) !== -1) {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\nexport const isCompressFile = (name: any) => {\r\n const suffix = name.split(\".\").pop().toLowerCase();\r\n return suffix !== \"7z\" && mediaType[\"zip\"].indexOf(suffix) !== -1;\r\n};\r\n\r\nexport const encodingRequired = (name: any) => {\r\n const suffix = name.split(\".\").pop().toLowerCase();\r\n return suffix === \"zip\";\r\n};\r\n\r\nconst taskStatus = [\r\n \"setting.queueing\",\r\n \"setting.processing\",\r\n \"setting.failed\",\r\n \"setting.canceled\",\r\n \"setting.finished\",\r\n];\r\nconst taskType = [\r\n \"fileManager.compress\",\r\n \"fileManager.decompress\",\r\n \"setting.fileTransfer\",\r\n \"setting.importFiles\",\r\n \"setting.fileRecycle\",\r\n];\r\nconst taskProgress = [\r\n \"setting.waiting\",\r\n \"setting.compressing\",\r\n \"setting.decompressing\",\r\n \"setting.downloading\",\r\n \"setting.transferring\",\r\n \"setting.indexing\",\r\n \"setting.listing\",\r\n];\r\n\r\nexport const getTaskStatus = (status: any) => {\r\n return i18next.t(taskStatus[status]);\r\n};\r\n\r\nexport const getTaskType = (status: any) => {\r\n return i18next.t(taskType[status]);\r\n};\r\n\r\nexport const getTaskProgress = (type: any, status: any) => {\r\n if (type === 2) {\r\n return i18next.t(\"setting.transferProgress\", {\r\n num: status,\r\n });\r\n }\r\n return i18next.t(taskProgress[status]);\r\n};\r\n\r\nexport const setWopiExts = (exts: string[]) => {\r\n msDocPreviewSuffix = exts;\r\n};","import { ThunkAction } from \"redux-thunk\";\r\nimport { AnyAction } from \"redux\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport { askForOption } from \"../explorer/async\";\r\nimport i18next, { languages } from \"../../i18n\";\r\n\r\nexport interface ActionSetSubtitle extends AnyAction {\r\n type: \"SET_SUBTITLE\";\r\n title: string;\r\n}\r\n\r\nexport const setSubtitle = (title: string): ActionSetSubtitle => {\r\n return {\r\n type: \"SET_SUBTITLE\",\r\n title,\r\n };\r\n};\r\n\r\nexport const closeContextMenu = () => {\r\n return {\r\n type: \"CLOSE_CONTEXT_MENU\",\r\n };\r\n};\r\n\r\nexport const changeContextMenu = (type: string, open: boolean) => {\r\n return {\r\n type: \"CHANGE_CONTEXT_MENU\",\r\n menuType: type,\r\n open: open,\r\n };\r\n};\r\n\r\nexport const changeSubTitle = (\r\n title: string\r\n): ThunkAction => {\r\n return (dispatch, getState) => {\r\n const state = getState();\r\n document.title =\r\n title === null || title === undefined\r\n ? state.siteConfig.title\r\n : title + \" - \" + state.siteConfig.title;\r\n dispatch(setSubtitle(title));\r\n };\r\n};\r\n\r\nexport const setOptionModal = (option: any) => {\r\n return {\r\n type: \"SET_OPTION_MODAL\",\r\n option: option,\r\n };\r\n};\r\n\r\nexport const openFileSelector = () => {\r\n return {\r\n type: \"OPEN_FILE_SELECTOR\",\r\n };\r\n};\r\n\r\nexport const openFolderSelector = () => {\r\n return {\r\n type: \"OPEN_FOLDER_SELECTOR\",\r\n };\r\n};\r\n\r\nexport const setPagination = (pagination) => {\r\n return {\r\n type: \"SET_PAGINATION\",\r\n pagination: pagination,\r\n };\r\n};\r\n\r\nexport const setShareInfo = (shareInfo) => {\r\n return {\r\n type: \"SET_SHARE_INFO\",\r\n shareInfo: shareInfo,\r\n };\r\n};\r\n\r\nexport const changePageSize = (\r\n size: number\r\n): ThunkAction => {\r\n return (dispatch, getState) => {\r\n const {\r\n explorer: { dirList, fileList },\r\n viewUpdate: { pagination },\r\n } = getState();\r\n const total = dirList.length + fileList.length;\r\n let page = pagination.page;\r\n if (pagination.page * size > total) {\r\n page = Math.max(Math.ceil(total / size), 1);\r\n } else if (size === -1) {\r\n page = 1;\r\n }\r\n Auth.SetPreference(\"pagination\", size);\r\n dispatch(\r\n setPagination({\r\n ...pagination,\r\n size: size,\r\n page: page,\r\n })\r\n );\r\n };\r\n};\r\n\r\nexport const selectLanguage = (): ThunkAction => {\r\n return async (dispatch, getState) => {\r\n let option: any;\r\n let lng = \"\";\r\n try {\r\n const allOptions = languages.map((e) => {\r\n return {\r\n key: e.code,\r\n name: e.displayName,\r\n };\r\n });\r\n option = await dispatch(\r\n askForOption(allOptions, i18next.t(\"setting.language\"))\r\n );\r\n } catch (e) {\r\n console.log(e);\r\n return;\r\n }\r\n\r\n lng = option.key;\r\n await i18next.changeLanguage(lng);\r\n };\r\n};\r\n","import dayjs from \"dayjs\";\r\nimport timezone from \"dayjs/plugin/timezone\";\r\nimport utc from \"dayjs/plugin/utc\";\r\nimport Auth from \"../middleware/Auth\";\r\nimport i18next from \"../i18n\";\r\n\r\ndayjs.extend(utc);\r\ndayjs.extend(timezone);\r\n\r\nlet userTimezone = \"\";\r\ntry {\r\n userTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\r\n} catch (e) {\r\n console.log(e);\r\n}\r\n\r\nif (!userTimezone || userTimezone==\"Etc/Unknown\") {\r\n userTimezone = \"Asia/Shanghai\";\r\n}\r\n\r\nconst preferTimeZone = Auth.GetPreference(\"timeZone\");\r\nexport let timeZone = preferTimeZone ? preferTimeZone : userTimezone;\r\n\r\nexport function refreshTimeZone() {\r\n timeZone = Auth.GetPreference(\"timeZone\");\r\n timeZone = timeZone ? timeZone : userTimezone;\r\n}\r\n\r\nexport function formatLocalTime(time) {\r\n return i18next.t(\"intlDateTime\", {\r\n ns: \"common\",\r\n val: dayjs(time).tz(timeZone).toDate(),\r\n formatParams: {\r\n val: {\r\n year: \"numeric\",\r\n month: \"numeric\",\r\n day: \"numeric\",\r\n hour: \"numeric\",\r\n minute: \"numeric\",\r\n second: \"numeric\",\r\n },\r\n },\r\n });\r\n}\r\n\r\nexport function validateTimeZone(name) {\r\n try {\r\n dayjs().tz(name).format();\r\n } catch (e) {\r\n return false;\r\n }\r\n return true;\r\n}\r\n","import React from \"react\";\r\nimport { mediaType } from \"../../config\";\r\nimport ImageIcon from \"@material-ui/icons/PhotoSizeSelectActual\";\r\nimport VideoIcon from \"@material-ui/icons/Videocam\";\r\nimport AudioIcon from \"@material-ui/icons/Audiotrack\";\r\nimport PdfIcon from \"@material-ui/icons/PictureAsPdf\";\r\nimport {\r\n Android,\r\n FileExcelBox,\r\n FilePowerpointBox,\r\n FileWordBox,\r\n LanguageC,\r\n LanguageCpp,\r\n LanguageGo,\r\n LanguageJavascript,\r\n LanguagePhp,\r\n LanguagePython,\r\n MagnetOn,\r\n ScriptText,\r\n WindowRestore,\r\n ZipBox,\r\n} from \"mdi-material-ui\";\r\nimport FileShowIcon from \"@material-ui/icons/InsertDriveFile\";\r\nimport { lighten } from \"@material-ui/core/styles\";\r\nimport useTheme from \"@material-ui/core/styles/useTheme\";\r\nimport { Avatar } from \"@material-ui/core\";\r\nimport { MenuBook } from \"@material-ui/icons\";\r\n\r\nconst icons = {\r\n audio: {\r\n color: \"#651fff\",\r\n icon: AudioIcon,\r\n },\r\n video: {\r\n color: \"#d50000\",\r\n icon: VideoIcon,\r\n },\r\n image: {\r\n color: \"#d32f2f\",\r\n icon: ImageIcon,\r\n },\r\n pdf: {\r\n color: \"#f44336\",\r\n icon: PdfIcon,\r\n },\r\n word: {\r\n color: \"#538ce5\",\r\n icon: FileWordBox,\r\n },\r\n ppt: {\r\n color: \"rgb(239, 99, 63)\",\r\n icon: FilePowerpointBox,\r\n },\r\n excel: {\r\n color: \"#4caf50\",\r\n icon: FileExcelBox,\r\n },\r\n text: {\r\n color: \"#607d8b\",\r\n icon: ScriptText,\r\n },\r\n torrent: {\r\n color: \"#5c6bc0\",\r\n icon: MagnetOn,\r\n },\r\n zip: {\r\n color: \"#f9a825\",\r\n icon: ZipBox,\r\n },\r\n excute: {\r\n color: \"#1a237e\",\r\n icon: WindowRestore,\r\n },\r\n android: {\r\n color: \"#8bc34a\",\r\n icon: Android,\r\n },\r\n file: {\r\n color: \"#607d8b\",\r\n icon: FileShowIcon,\r\n },\r\n php: {\r\n color: \"#777bb3\",\r\n icon: LanguagePhp,\r\n },\r\n go: {\r\n color: \"#16b3da\",\r\n icon: LanguageGo,\r\n },\r\n python: {\r\n color: \"#3776ab\",\r\n icon: LanguagePython,\r\n },\r\n c: {\r\n color: \"#a8b9cc\",\r\n icon: LanguageC,\r\n },\r\n cpp: {\r\n color: \"#004482\",\r\n icon: LanguageCpp,\r\n },\r\n js: {\r\n color: \"#f4d003\",\r\n icon: LanguageJavascript,\r\n },\r\n epub: {\r\n color: \"#81b315\",\r\n icon: MenuBook,\r\n },\r\n};\r\n\r\nconst getColor = (theme, color) =>\r\n theme.palette.type === \"light\" ? color : lighten(color, 0.2);\r\n\r\nlet color;\r\n\r\nconst TypeIcon = (props) => {\r\n const theme = useTheme();\r\n\r\n const fileSuffix = props.fileName.split(\".\").pop().toLowerCase();\r\n let fileType = \"file\";\r\n Object.keys(mediaType).forEach((k) => {\r\n if (mediaType[k].indexOf(fileSuffix) !== -1) {\r\n fileType = k;\r\n }\r\n });\r\n const IconComponent = icons[fileType].icon;\r\n color = getColor(theme, icons[fileType].color);\r\n if (props.getColorValue) {\r\n props.getColorValue(color);\r\n }\r\n\r\n return (\r\n <>\r\n {props.isUpload && (\r\n \r\n \r\n \r\n )}\r\n {!props.isUpload && (\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TypeIcon;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then((registration) => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === \"installed\") {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n \"New content is available and will be used when all \" +\r\n \"tabs for this page are closed. See https://bit.ly/CRA-PWA.\"\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log(\"Content is cached for offline use.\");\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch((error) => {\r\n console.error(\"Error during service worker registration:\", error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then((response) => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get(\"content-type\");\r\n if (\r\n response.status === 404 ||\r\n (contentType != null &&\r\n contentType.indexOf(\"javascript\") === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n \"No internet connection found. App is running in offline mode.\"\r\n );\r\n });\r\n}\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === \"localhost\" ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === \"[::1]\" ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === \"production\" && \"serviceWorker\" in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener(\"load\", () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n \"This web app is being served cache-first by a service \" +\r\n \"worker. To learn more, visit https://bit.ly/CRA-PWA\"\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport function unregister() {\r\n if (\"serviceWorker\" in navigator) {\r\n navigator.serviceWorker.ready.then((registration) => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from \"react\";\r\nimport Auth from \"./Auth\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\n\r\nfunction AuthRoute({ children, ...rest }) {\r\n return (\r\n \r\n Auth.Check(rest.isLogin) ? (\r\n children\r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default AuthRoute;\r\n","import React from \"react\";\r\nimport Auth from \"./Auth\";\r\nimport { Route, Redirect } from \"react-router-dom\";\r\n\r\nfunction NoAuthRoute({ children, ...rest }) {\r\n return (\r\n \r\n !Auth.Check(rest.isLogin) ? (\r\n children\r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n );\r\n}\r\n\r\nexport default NoAuthRoute;\r\n","import React from \"react\";\r\nimport SentimentVeryDissatisfiedIcon from \"@material-ui/icons/SentimentVeryDissatisfied\";\r\nimport { lighten, makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n icon: {\r\n fontSize: \"160px\",\r\n },\r\n emptyContainer: {\r\n bottom: \"0\",\r\n height: \"300px\",\r\n margin: \"50px auto\",\r\n width: \"300px\",\r\n color: lighten(theme.palette.text.disabled, 0.4),\r\n textAlign: \"center\",\r\n paddingTop: \"20px\",\r\n },\r\n emptyInfoBig: {\r\n fontSize: \"25px\",\r\n color: lighten(theme.palette.text.disabled, 0.4),\r\n },\r\n}));\r\n\r\nexport default function Notice(props) {\r\n const classes = useStyles();\r\n return (\r\n
\r\n \r\n
{props.msg}
\r\n
\r\n );\r\n}\r\n","import React from \"react\";\r\nimport ContentLoader from \"react-content-loader\";\r\n\r\nconst MyLoader = () => (\r\n \r\n \r\n \r\n);\r\n\r\nfunction captchaPlacholder() {\r\n return ;\r\n}\r\n\r\nexport default captchaPlacholder;\r\n","import React, {\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport API from \"../middleware/Api\";\r\nimport {\r\n FormControl,\r\n Input,\r\n InputAdornment,\r\n InputLabel,\r\n makeStyles,\r\n TextField,\r\n} from \"@material-ui/core\";\r\nimport Placeholder from \"../component/Placeholder/Captcha\";\r\nimport { defaultValidate, useStyle } from \"./useCaptcha\";\r\nimport { toggleSnackbar } from \"../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst NormalCaptcha = forwardRef(function NormalCaptcha(\r\n { captchaRef, setLoading },\r\n ref\r\n) {\r\n const { t } = useTranslation();\r\n const classes = useStyle();\r\n\r\n const [captcha, setCaptcha] = useState(\"\");\r\n const [captchaData, setCaptchaData] = useState(null);\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const refreshCaptcha = () => {\r\n API.get(\"/site/captcha\")\r\n .then((response) => {\r\n setCaptchaData(response.data);\r\n setLoading(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"login.captchaError\", { message: error.message }),\r\n \"error\"\r\n );\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n ref.current = refreshCaptcha;\r\n refreshCaptcha();\r\n }, []);\r\n\r\n useEffect(() => {\r\n captchaRef.current.captchaCode = captcha;\r\n }, [captcha]);\r\n\r\n return (\r\n
\r\n \r\n setCaptcha(e.target.value)}\r\n value={captcha}\r\n autoComplete\r\n InputProps={{\r\n endAdornment: (\r\n \r\n \r\n {captchaData === null && }\r\n {captchaData !== null && (\r\n \r\n )}\r\n
\r\n \r\n ),\r\n }}\r\n />\r\n {\" \"}\r\n \r\n );\r\n});\r\n\r\nexport default function useNormalCaptcha(captchaRefreshRef, setLoading) {\r\n const isValidate = useRef({\r\n isValidate: true,\r\n });\r\n\r\n const captchaParamsRef = useRef({\r\n captchaCode: \"\",\r\n });\r\n\r\n const CaptchaRender = useCallback(\r\n function Normal() {\r\n return (\r\n \r\n );\r\n },\r\n [captchaParamsRef, captchaRefreshRef, setLoading]\r\n );\r\n\r\n return {\r\n isValidate,\r\n validate: defaultValidate,\r\n captchaParamsRef,\r\n CaptchaRender,\r\n };\r\n}\r\n","import React from \"react\";\r\nimport PropTypes from \"prop-types\";\r\n\r\nexport default class ReCAPTCHA extends React.Component {\r\n constructor() {\r\n super();\r\n this.handleExpired = this.handleExpired.bind(this);\r\n this.handleErrored = this.handleErrored.bind(this);\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleRecaptchaRef = this.handleRecaptchaRef.bind(this);\r\n }\r\n\r\n getValue() {\r\n if (this.props.grecaptcha && this._widgetId !== undefined) {\r\n return this.props.grecaptcha.getResponse(this._widgetId);\r\n }\r\n return null;\r\n }\r\n\r\n getWidgetId() {\r\n if (this.props.grecaptcha && this._widgetId !== undefined) {\r\n return this._widgetId;\r\n }\r\n return null;\r\n }\r\n\r\n execute() {\r\n const { grecaptcha } = this.props;\r\n\r\n if (grecaptcha && this._widgetId !== undefined) {\r\n return grecaptcha.execute(this._widgetId);\r\n } else {\r\n this._executeRequested = true;\r\n }\r\n }\r\n\r\n reset() {\r\n if (this.props.grecaptcha && this._widgetId !== undefined) {\r\n this.props.grecaptcha.reset(this._widgetId);\r\n }\r\n }\r\n\r\n handleExpired() {\r\n if (this.props.onExpired) {\r\n this.props.onExpired();\r\n } else {\r\n this.handleChange(null);\r\n }\r\n }\r\n\r\n handleErrored() {\r\n if (this.props.onErrored) this.props.onErrored();\r\n }\r\n\r\n handleChange(token) {\r\n if (this.props.onChange) this.props.onChange(token);\r\n }\r\n\r\n explicitRender() {\r\n if (\r\n this.props.grecaptcha &&\r\n this.props.grecaptcha.render &&\r\n this._widgetId === undefined\r\n ) {\r\n const wrapper = document.createElement(\"div\");\r\n this._widgetId = this.props.grecaptcha.render(wrapper, {\r\n sitekey: this.props.sitekey,\r\n callback: this.handleChange,\r\n theme: this.props.theme,\r\n type: this.props.type,\r\n tabindex: this.props.tabindex,\r\n \"expired-callback\": this.handleExpired,\r\n \"error-callback\": this.handleErrored,\r\n size: this.props.size,\r\n stoken: this.props.stoken,\r\n hl: this.props.hl,\r\n badge: this.props.badge,\r\n });\r\n this.captcha.appendChild(wrapper);\r\n }\r\n if (\r\n this._executeRequested &&\r\n this.props.grecaptcha &&\r\n this._widgetId !== undefined\r\n ) {\r\n this._executeRequested = false;\r\n this.execute();\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.explicitRender();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.explicitRender();\r\n }\r\n\r\n componentWillUnmount() {\r\n if (this._widgetId !== undefined) {\r\n this.delayOfCaptchaIframeRemoving();\r\n this.reset();\r\n }\r\n }\r\n\r\n delayOfCaptchaIframeRemoving() {\r\n const temporaryNode = document.createElement(\"div\");\r\n document.body.appendChild(temporaryNode);\r\n temporaryNode.style.display = \"none\";\r\n\r\n // move of the recaptcha to a temporary node\r\n while (this.captcha.firstChild) {\r\n temporaryNode.appendChild(this.captcha.firstChild);\r\n }\r\n\r\n // delete the temporary node after reset will be done\r\n setTimeout(() => {\r\n document.body.removeChild(temporaryNode);\r\n }, 5000);\r\n }\r\n\r\n handleRecaptchaRef(elem) {\r\n this.captcha = elem;\r\n }\r\n\r\n render() {\r\n // consume properties owned by the reCATPCHA, pass the rest to the div so the user can style it.\r\n /* eslint-disable no-unused-vars */\r\n /* eslint-disable @typescript-eslint/no-unused-vars */\r\n const {\r\n sitekey,\r\n onChange,\r\n theme,\r\n type,\r\n tabindex,\r\n onExpired,\r\n onErrored,\r\n size,\r\n stoken,\r\n grecaptcha,\r\n badge,\r\n hl,\r\n ...childProps\r\n } = this.props;\r\n /* eslint-enable no-unused-vars */\r\n return
;\r\n }\r\n}\r\n\r\nReCAPTCHA.displayName = \"ReCAPTCHA\";\r\nReCAPTCHA.propTypes = {\r\n sitekey: PropTypes.string.isRequired,\r\n onChange: PropTypes.func,\r\n grecaptcha: PropTypes.object,\r\n theme: PropTypes.oneOf([\"dark\", \"light\"]),\r\n type: PropTypes.oneOf([\"image\", \"audio\"]),\r\n tabindex: PropTypes.number,\r\n onExpired: PropTypes.func,\r\n onErrored: PropTypes.func,\r\n size: PropTypes.oneOf([\"compact\", \"normal\", \"invisible\"]),\r\n stoken: PropTypes.string,\r\n hl: PropTypes.string,\r\n badge: PropTypes.oneOf([\"bottomright\", \"bottomleft\", \"inline\"]),\r\n};\r\nReCAPTCHA.defaultProps = {\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n onChange: () => {},\r\n theme: \"light\",\r\n type: \"image\",\r\n tabindex: 0,\r\n size: \"normal\",\r\n badge: \"bottomright\",\r\n};\r\n","import ReCAPTCHA from \"./ReCaptchaWrapper\";\r\nimport makeAsyncScriptLoader from \"react-async-script\";\r\n\r\nconst callbackName = \"onloadcallback\";\r\nconst globalName = \"grecaptcha\";\r\n\r\nfunction getURL() {\r\n const hostname = \"recaptcha.net\";\r\n return `https://${hostname}/recaptcha/api.js?onload=${callbackName}&render=explicit`;\r\n}\r\n\r\nexport default makeAsyncScriptLoader(getURL, {\r\n callbackName,\r\n globalName,\r\n})(ReCAPTCHA);\r\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { FormControl } from \"@material-ui/core\";\r\nimport ReCaptcha from \"../component/Login/ReCaptcha\";\r\nimport { defaultValidate, useStyle } from \"./useCaptcha\";\r\n\r\nconst Recaptcha = ({ captchaRef, setLoading }) => {\r\n const classes = useStyle();\r\n\r\n const [captcha, setCaptcha] = useState(\"\");\r\n\r\n const reCaptchaKey = useSelector(\r\n (state) => state.siteConfig.captcha_ReCaptchaKey\r\n );\r\n\r\n useEffect(() => {\r\n captchaRef.current.captchaCode = captcha;\r\n }, [captcha]);\r\n\r\n useEffect(() => setLoading(false), []);\r\n\r\n return (\r\n
\r\n \r\n
\r\n setCaptcha(value)}\r\n id=\"captcha\"\r\n name=\"captcha\"\r\n />\r\n
\r\n
{\" \"}\r\n
\r\n );\r\n};\r\n\r\nexport default function useRecaptcha(setLoading) {\r\n const isValidate = useRef({\r\n isValidate: true,\r\n });\r\n\r\n const captchaParamsRef = useRef({\r\n captchaCode: \"\",\r\n });\r\n\r\n const CaptchaRender = useCallback(\r\n function RecaptchaRender() {\r\n return (\r\n \r\n );\r\n },\r\n [captchaParamsRef, setLoading]\r\n );\r\n\r\n return {\r\n isValidate,\r\n validate: defaultValidate,\r\n captchaParamsRef,\r\n CaptchaRender,\r\n };\r\n}\r\n","import React, { forwardRef, useCallback, useRef } from \"react\";\r\nimport Script from \"react-load-script\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst TCaptcha = forwardRef(function TCaptcha(\r\n { captchaRef, setLoading, isValidateRef, submitRef },\r\n ref\r\n) {\r\n const appid = useSelector(\r\n (state) => state.siteConfig.tcaptcha_captcha_app_id\r\n );\r\n const onLoad = () => {\r\n try {\r\n ref.current = new window.TencentCaptcha(appid, function (res) {\r\n if (res.ret === 0) {\r\n captchaRef.current.ticket = res.ticket;\r\n captchaRef.current.randstr = res.randstr;\r\n\r\n isValidateRef.current.isValidate = true;\r\n submitRef.current.submit();\r\n console.log(submitRef);\r\n } else {\r\n submitRef.current.setLoading(false);\r\n }\r\n });\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n setLoading(false);\r\n };\r\n return (\r\n \r\n );\r\n});\r\n\r\nexport default function useTCaptcha(setLoading) {\r\n const isValidate = useRef({\r\n isValidate: false,\r\n });\r\n const captchaParamsRef = useRef({\r\n ticket: \"\",\r\n randstr: \"\",\r\n });\r\n const submitRef = useRef({\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n submit: () => {},\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n setLoading: () => {},\r\n });\r\n\r\n const captchaRef = useRef();\r\n\r\n const CaptchaRender = useCallback(\r\n function TCaptchaRender() {\r\n return (\r\n \r\n );\r\n },\r\n [captchaParamsRef, setLoading, isValidate, submitRef, captchaRef]\r\n );\r\n\r\n return {\r\n isValidate: isValidate,\r\n validate: (submit, setLoading) => {\r\n submitRef.current.submit = submit;\r\n submitRef.current.setLoading = setLoading;\r\n captchaRef.current.show();\r\n },\r\n captchaParamsRef,\r\n CaptchaRender,\r\n };\r\n}\r\n","import { useSelector } from \"react-redux\";\r\nimport { useRef, useState } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport useNormalCaptcha from \"./normal\";\r\nimport useRecaptcha from \"./recaptcha\";\r\nimport useTCaptcha from \"./tcaptcha\";\r\n\r\nexport const useStyle = makeStyles((theme) => ({\r\n captchaContainer: {\r\n display: \"flex\",\r\n marginTop: \"10px\",\r\n alignItems: \"center\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n marginTop: 0,\r\n display: \"block\",\r\n },\r\n },\r\n captchaInputContainer: {\r\n marginTop: 0,\r\n },\r\n captchaImageContainer: {\r\n cursor: \"pointer\",\r\n marginLeft: \"1rem\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n marginLeft: 0,\r\n },\r\n },\r\n captchaImage: {\r\n borderRadius: theme.shape.borderRadius,\r\n height: 48,\r\n marginTop: 4,\r\n },\r\n}));\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-unused-vars,@typescript-eslint/no-empty-function\r\nexport const defaultValidate = (submit, setLoading) => {};\r\n\r\nexport const useCaptcha = () => {\r\n const captchaType = useSelector((state) => state.siteConfig.captcha_type);\r\n\r\n const [captchaLoading, setCaptchaLoading] = useState(true);\r\n // eslint-disable-next-line @typescript-eslint/no-empty-function\r\n const captchaRefreshRef = useRef(() => {});\r\n\r\n const normal = useNormalCaptcha(captchaRefreshRef, setCaptchaLoading);\r\n const recaptcha = useRecaptcha(setCaptchaLoading);\r\n const tcaptcha = useTCaptcha(setCaptchaLoading);\r\n\r\n switch (captchaType) {\r\n case \"normal\":\r\n return { ...normal, captchaRefreshRef, captchaLoading };\r\n case \"recaptcha\":\r\n return { ...recaptcha, captchaRefreshRef, captchaLoading };\r\n case \"tcaptcha\":\r\n return { ...tcaptcha, captchaRefreshRef, captchaLoading };\r\n default:\r\n return { ...normal, captchaRefreshRef, captchaLoading };\r\n }\r\n};\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport LockOutlinedIcon from \"@material-ui/icons/LockOutlined\";\r\nimport {\r\n Avatar,\r\n Button,\r\n Divider,\r\n FormControl,\r\n Link,\r\n makeStyles,\r\n Paper,\r\n TextField,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { Link as RouterLink, useHistory } from \"react-router-dom\";\r\nimport API from \"../../middleware/Api\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport { bufferDecode, bufferEncode } from \"../../utils/index\";\r\nimport {\r\n EmailOutlined,\r\n Fingerprint,\r\n VpnKey,\r\n VpnKeyOutlined,\r\n} from \"@material-ui/icons\";\r\nimport VpnIcon from \"@material-ui/icons/VpnKeyOutlined\";\r\nimport { useLocation } from \"react-router\";\r\nimport { useCaptcha } from \"../../hooks/useCaptcha\";\r\nimport {\r\n applyThemes,\r\n setSessionStatus,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport InputAdornment from \"@material-ui/core/InputAdornment\";\r\nimport useMediaQuery from \"@material-ui/core/useMediaQuery\";\r\nimport { useTheme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"110px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: 400,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n marginBottom: 110,\r\n },\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n padding: `${theme.spacing(2)}px ${theme.spacing(3)}px ${theme.spacing(\r\n 3\r\n )}px`,\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: \"100%\", // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n marginTop: theme.spacing(3),\r\n },\r\n link: {\r\n marginTop: \"20px\",\r\n display: \"flex\",\r\n width: \"100%\",\r\n justifyContent: \"space-between\",\r\n },\r\n buttonContainer: {\r\n display: \"flex\",\r\n },\r\n authnLink: {\r\n textAlign: \"center\",\r\n marginTop: 16,\r\n },\r\n}));\r\n\r\nfunction useQuery() {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nfunction LoginForm() {\r\n const { t } = useTranslation();\r\n\r\n const [email, setEmail] = useState(\"\");\r\n const [pwd, setPwd] = useState(\"\");\r\n const [loading, setLoading] = useState(false);\r\n const [useAuthn, setUseAuthn] = useState(false);\r\n const [twoFA, setTwoFA] = useState(false);\r\n const [faCode, setFACode] = useState(\"\");\r\n\r\n const loginCaptcha = useSelector((state) => state.siteConfig.loginCaptcha);\r\n const registerEnabled = useSelector(\r\n (state) => state.siteConfig.registerEnabled\r\n );\r\n const title = useSelector((state) => state.siteConfig.title);\r\n const authn = useSelector((state) => state.siteConfig.authn);\r\n const theme = useTheme();\r\n const isMobile = useMediaQuery(theme.breakpoints.down(\"sm\"));\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const ApplyThemes = useCallback(\r\n (theme) => dispatch(applyThemes(theme)),\r\n [dispatch]\r\n );\r\n const SetSessionStatus = useCallback(\r\n (status) => dispatch(setSessionStatus(status)),\r\n [dispatch]\r\n );\r\n\r\n const history = useHistory();\r\n const location = useLocation();\r\n const {\r\n captchaLoading,\r\n isValidate,\r\n validate,\r\n CaptchaRender,\r\n captchaRefreshRef,\r\n captchaParamsRef,\r\n } = useCaptcha();\r\n const query = useQuery();\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n setEmail(query.get(\"username\"));\r\n }, [location]);\r\n\r\n const afterLogin = (data) => {\r\n Auth.authenticate(data);\r\n\r\n // 设置用户主题色\r\n if (data[\"preferred_theme\"] !== \"\") {\r\n ApplyThemes(data[\"preferred_theme\"]);\r\n }\r\n\r\n // 设置登录状态\r\n SetSessionStatus(true);\r\n\r\n // eslint-disable-next-line react-hooks/rules-of-hooks\r\n if (query.get(\"redirect\")) {\r\n history.push(query.get(\"redirect\"));\r\n } else {\r\n history.push(\"/home\");\r\n }\r\n ToggleSnackbar(\"top\", \"right\", t(\"login.success\"), \"success\");\r\n\r\n localStorage.removeItem(\"siteConfigCache\");\r\n };\r\n\r\n const authnLogin = (e) => {\r\n e.preventDefault();\r\n if (!navigator.credentials) {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"login.browserNotSupport\"),\r\n \"warning\"\r\n );\r\n\r\n return;\r\n }\r\n\r\n setLoading(true);\r\n\r\n API.get(\"/user/authn/\" + email)\r\n .then((response) => {\r\n const credentialRequestOptions = response.data;\r\n console.log(credentialRequestOptions);\r\n credentialRequestOptions.publicKey.challenge = bufferDecode(\r\n credentialRequestOptions.publicKey.challenge\r\n );\r\n credentialRequestOptions.publicKey.allowCredentials.forEach(\r\n function (listItem) {\r\n listItem.id = bufferDecode(listItem.id);\r\n }\r\n );\r\n\r\n return navigator.credentials.get({\r\n publicKey: credentialRequestOptions.publicKey,\r\n });\r\n })\r\n .then((assertion) => {\r\n const authData = assertion.response.authenticatorData;\r\n const clientDataJSON = assertion.response.clientDataJSON;\r\n const rawId = assertion.rawId;\r\n const sig = assertion.response.signature;\r\n const userHandle = assertion.response.userHandle;\r\n\r\n return API.post(\r\n \"/user/authn/finish/\" + email,\r\n JSON.stringify({\r\n id: assertion.id,\r\n rawId: bufferEncode(rawId),\r\n type: assertion.type,\r\n response: {\r\n authenticatorData: bufferEncode(authData),\r\n clientDataJSON: bufferEncode(clientDataJSON),\r\n signature: bufferEncode(sig),\r\n userHandle: bufferEncode(userHandle),\r\n },\r\n })\r\n );\r\n })\r\n .then((response) => {\r\n afterLogin(response.data);\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"warning\");\r\n })\r\n .then(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const login = (e) => {\r\n e.preventDefault();\r\n setLoading(true);\r\n if (!isValidate.current.isValidate && loginCaptcha) {\r\n validate(() => login(e), setLoading);\r\n return;\r\n }\r\n API.post(\"/user/session\", {\r\n userName: email,\r\n Password: pwd,\r\n ...captchaParamsRef.current,\r\n })\r\n .then((response) => {\r\n setLoading(false);\r\n if (response.rawData.code === 203) {\r\n setTwoFA(true);\r\n } else {\r\n afterLogin(response.data);\r\n }\r\n })\r\n .catch((error) => {\r\n setLoading(false);\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"warning\");\r\n captchaRefreshRef.current();\r\n });\r\n };\r\n\r\n const twoFALogin = (e) => {\r\n e.preventDefault();\r\n setLoading(true);\r\n API.post(\"/user/2fa\", {\r\n code: faCode,\r\n })\r\n .then((response) => {\r\n setLoading(false);\r\n afterLogin(response.data);\r\n })\r\n .catch((error) => {\r\n setLoading(false);\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"warning\");\r\n });\r\n };\r\n\r\n return (\r\n
\r\n {!twoFA && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n {t(\"login.title\", { title })}\r\n \r\n {!useAuthn && (\r\n
\r\n \r\n \r\n setEmail(e.target.value)\r\n }\r\n InputProps={{\r\n startAdornment: !isMobile && (\r\n \r\n \r\n \r\n ),\r\n }}\r\n autoComplete\r\n value={email}\r\n autoFocus\r\n />\r\n \r\n \r\n setPwd(e.target.value)}\r\n InputProps={{\r\n startAdornment: !isMobile && (\r\n \r\n \r\n \r\n ),\r\n }}\r\n value={pwd}\r\n autoComplete\r\n />\r\n \r\n {loginCaptcha && }\r\n\r\n \r\n {t(\"login.signIn\")}\r\n \r\n \r\n )}\r\n {useAuthn && (\r\n
\r\n \r\n \r\n \r\n \r\n ),\r\n }}\r\n onChange={(e) =>\r\n setEmail(e.target.value)\r\n }\r\n autoComplete\r\n value={email}\r\n autoFocus\r\n required\r\n />\r\n \r\n \r\n {t(\"login.continue\")}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n {t(\"login.forgetPassword\")}\r\n \r\n
\r\n
\r\n {registerEnabled && (\r\n \r\n {t(\"login.signUpAccount\")}\r\n \r\n )}\r\n
\r\n
\r\n
\r\n\r\n {authn && (\r\n
\r\n setUseAuthn(!useAuthn)}\r\n >\r\n {!useAuthn && (\r\n <>\r\n \r\n {t(\"login.useFIDO2\")}\r\n \r\n )}\r\n {useAuthn && (\r\n <>\r\n \r\n {t(\"login.usePassword\")}\r\n \r\n )}\r\n \r\n
\r\n )}\r\n \r\n )}\r\n {twoFA && (\r\n \r\n \r\n \r\n \r\n \r\n {t(\"login.2FA\")}\r\n \r\n
\r\n \r\n \r\n setFACode(event.target.value)\r\n }\r\n autoComplete\r\n value={faCode}\r\n autoFocus\r\n />\r\n \r\n \r\n {t(\"login.continue\")}\r\n {\" \"}\r\n {\" \"}\r\n \r\n
\r\n )}\r\n
\r\n );\r\n}\r\n\r\nexport default LoginForm;\r\n","import Highlighter from \"react-highlight-words\";\r\nimport { trimPrefix } from \"../Uploader/core/utils\";\r\nimport React from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n highlight: {\r\n backgroundColor: theme.palette.warning.light,\r\n },\r\n}));\r\n\r\nexport default function FileName({ name }) {\r\n const classes = useStyles();\r\n const search = useSelector((state) => state.explorer.search);\r\n if (!search) {\r\n return name;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n ButtonBase,\r\n fade,\r\n Tooltip,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport TypeIcon from \"./TypeIcon\";\r\nimport CheckCircleRoundedIcon from \"@material-ui/icons/CheckCircleRounded\";\r\nimport Grow from \"@material-ui/core/Grow\";\r\nimport { Folder } from \"@material-ui/icons\";\r\nimport FileName from \"./FileName\";\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n padding: \"7px\",\r\n },\r\n\r\n selected: {\r\n \"&:hover\": {\r\n border: \"1px solid #d0d0d0\",\r\n },\r\n backgroundColor: fade(\r\n theme.palette.primary.main,\r\n theme.palette.type === \"dark\" ? 0.3 : 0.18\r\n ),\r\n },\r\n notSelected: {\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.background.default,\r\n border: \"1px solid #d0d0d0\",\r\n },\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n\r\n button: {\r\n height: \"50px\",\r\n border: \"1px solid \" + theme.palette.divider,\r\n width: \"100%\",\r\n borderRadius: theme.shape.borderRadius,\r\n boxSizing: \"border-box\",\r\n transition:\r\n \"background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\r\n display: \"flex\",\r\n justifyContent: \"left\",\r\n alignItems: \"initial\",\r\n },\r\n icon: {\r\n margin: \"10px 10px 10px 16px\",\r\n height: \"30px\",\r\n minWidth: \"30px\",\r\n backgroundColor: theme.palette.background.paper,\r\n borderRadius: \"90%\",\r\n paddingTop: \"3px\",\r\n color: theme.palette.text.secondary,\r\n },\r\n folderNameSelected: {\r\n color:\r\n theme.palette.type === \"dark\" ? \"#fff\" : theme.palette.primary.dark,\r\n fontWeight: \"500\",\r\n },\r\n folderNameNotSelected: {\r\n color: theme.palette.text.secondary,\r\n },\r\n folderName: {\r\n marginTop: \"15px\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n marginRight: \"20px\",\r\n },\r\n checkIcon: {\r\n color: theme.palette.primary.main,\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n selected: state.explorer.selected,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nclass SmallIconCompoment extends Component {\r\n state = {};\r\n\r\n shouldComponentUpdate(nextProps, nextState, nextContext) {\r\n const isSelectedCurrent =\r\n this.props.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n const isSelectedNext =\r\n nextProps.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n if (\r\n nextProps.selected !== this.props.selected &&\r\n isSelectedCurrent === isSelectedNext\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n const isSelected =\r\n this.props.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n\r\n return (\r\n \r\n \r\n {!isSelected && (\r\n <>\r\n {this.props.isFolder && }\r\n {!this.props.isFolder && (\r\n \r\n )}\r\n \r\n )}\r\n {isSelected && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nSmallIconCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n file: PropTypes.object.isRequired,\r\n};\r\n\r\nconst SmallIcon = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(SmallIconCompoment));\r\n\r\nexport default SmallIcon;\r\n","import {\r\n ButtonBase,\r\n Divider,\r\n fade,\r\n Tooltip,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport classNames from \"classnames\";\r\nimport PropTypes from \"prop-types\";\r\nimport React, { Component } from \"react\";\r\nimport ContentLoader from \"react-content-loader\";\r\nimport { LazyLoadImage } from \"react-lazy-load-image-component\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router\";\r\nimport { baseURL } from \"../../middleware/Api\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport TypeIcon from \"./TypeIcon\";\r\nimport CheckCircleRoundedIcon from \"@material-ui/icons/CheckCircleRounded\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport Grow from \"@material-ui/core/Grow\";\r\nimport FileName from \"./FileName\";\r\n\r\nconst styles = (theme) => ({\r\n container: {},\r\n\r\n selected: {\r\n \"&:hover\": {\r\n border: \"1px solid #d0d0d0\",\r\n },\r\n backgroundColor: fade(\r\n theme.palette.primary.main,\r\n theme.palette.type === \"dark\" ? 0.3 : 0.18\r\n ),\r\n },\r\n\r\n notSelected: {\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.background.default,\r\n border: \"1px solid #d0d0d0\",\r\n },\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n\r\n button: {\r\n border: \"1px solid \" + theme.palette.divider,\r\n width: \"100%\",\r\n borderRadius: theme.shape.borderRadius,\r\n boxSizing: \"border-box\",\r\n transition:\r\n \"background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,border 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\r\n alignItems: \"initial\",\r\n display: \"initial\",\r\n },\r\n folderNameSelected: {\r\n color:\r\n theme.palette.type === \"dark\" ? \"#fff\" : theme.palette.primary.dark,\r\n fontWeight: \"500\",\r\n },\r\n folderNameNotSelected: {\r\n color: theme.palette.text.secondary,\r\n },\r\n folderName: {\r\n marginTop: \"15px\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n marginRight: \"20px\",\r\n },\r\n preview: {\r\n overflow: \"hidden\",\r\n height: \"150px\",\r\n width: \"100%\",\r\n borderRadius: \"12px 12px 0 0\",\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n previewIcon: {\r\n overflow: \"hidden\",\r\n height: \"149px\",\r\n width: \"100%\",\r\n borderRadius: \"12px 12px 0 0\",\r\n backgroundColor: theme.palette.background.paper,\r\n paddingTop: \"50px\",\r\n },\r\n iconBig: {\r\n fontSize: 50,\r\n },\r\n picPreview: {\r\n objectFit: \"cover\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n },\r\n fileInfo: {\r\n height: \"50px\",\r\n display: \"flex\",\r\n },\r\n icon: {\r\n margin: \"10px 10px 10px 16px\",\r\n height: \"30px\",\r\n minWidth: \"30px\",\r\n backgroundColor: theme.palette.background.paper,\r\n borderRadius: \"90%\",\r\n paddingTop: \"3px\",\r\n color: theme.palette.text.secondary,\r\n },\r\n hide: {\r\n display: \"none\",\r\n },\r\n loadingAnimation: {\r\n borderRadius: \"12px 12px 0 0\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n },\r\n shareFix: {\r\n marginLeft: \"20px\",\r\n },\r\n checkIcon: {\r\n color: theme.palette.primary.main,\r\n },\r\n noDrag: {\r\n userDrag: \"none\",\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n path: state.navigator.path,\r\n selected: state.explorer.selected,\r\n shareInfo: state.viewUpdate.shareInfo,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nclass FileIconCompoment extends Component {\r\n static defaultProps = {\r\n share: false,\r\n };\r\n\r\n state = {\r\n loading: false,\r\n showPicIcon: false,\r\n };\r\n\r\n shouldComponentUpdate(nextProps, nextState, nextContext) {\r\n const isSelectedCurrent =\r\n this.props.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n const isSelectedNext =\r\n nextProps.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n if (\r\n nextProps.selected !== this.props.selected &&\r\n isSelectedCurrent === isSelectedNext\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n const isSelected =\r\n this.props.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n const isSharePage = pathHelper.isSharePage(\r\n this.props.location.pathname\r\n );\r\n const isMobile = statusHelper.isMobile();\r\n\r\n return (\r\n
\r\n \r\n {this.props.file.thumb && !this.state.showPicIcon && (\r\n
\r\n \r\n this.setState({ loading: false })\r\n }\r\n beforeLoad={() =>\r\n this.setState({ loading: true })\r\n }\r\n onError={() =>\r\n this.setState({ showPicIcon: true })\r\n }\r\n />\r\n \r\n \r\n \r\n
\r\n )}\r\n {(!this.props.file.thumb || this.state.showPicIcon) && (\r\n
\r\n \r\n
\r\n )}\r\n {(!this.props.file.thumb || this.state.showPicIcon) && (\r\n \r\n )}\r\n
\r\n {!this.props.share && (\r\n \r\n {!isSelected && (\r\n \r\n )}\r\n {isSelected && (\r\n \r\n \r\n \r\n )}\r\n
\r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nFileIconCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n file: PropTypes.object.isRequired,\r\n};\r\n\r\nconst FileIcon = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(FileIconCompoment)));\r\n\r\nexport default FileIcon;\r\n","import React from \"react\";\r\nimport FolderIcon from \"@material-ui/icons/Folder\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n ButtonBase,\r\n fade,\r\n makeStyles,\r\n Tooltip,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport { useSelector } from \"react-redux\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport CheckCircleRoundedIcon from \"@material-ui/icons/CheckCircleRounded\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n container: {\r\n padding: \"7px\",\r\n },\r\n\r\n selected: {\r\n \"&:hover\": {\r\n border: \"1px solid #d0d0d0\",\r\n },\r\n backgroundColor: fade(\r\n theme.palette.primary.main,\r\n theme.palette.type === \"dark\" ? 0.3 : 0.18\r\n ),\r\n },\r\n\r\n notSelected: {\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.background.default,\r\n border: \"1px solid #d0d0d0\",\r\n },\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n\r\n button: {\r\n height: \"50px\",\r\n border: \"1px solid \" + theme.palette.divider,\r\n width: \"100%\",\r\n borderRadius: theme.shape.borderRadius,\r\n boxSizing: \"border-box\",\r\n transition:\r\n \"background-color 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms,box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1) 0ms\",\r\n display: \"flex\",\r\n justifyContent: \"left\",\r\n alignItems: \"initial\",\r\n },\r\n icon: {\r\n margin: \"10px 10px 10px 16px\",\r\n height: \"30px\",\r\n minWidth: \"30px\",\r\n backgroundColor: theme.palette.background.paper,\r\n borderRadius: \"90%\",\r\n paddingTop: \"3px\",\r\n color: theme.palette.text.secondary,\r\n },\r\n folderNameSelected: {\r\n color:\r\n theme.palette.type === \"dark\" ? \"#fff\" : theme.palette.primary.dark,\r\n fontWeight: \"500\",\r\n },\r\n folderNameNotSelected: {\r\n color: theme.palette.text.secondary,\r\n },\r\n folderName: {\r\n marginTop: \"15px\",\r\n textOverflow: \"ellipsis\",\r\n whiteSpace: \"nowrap\",\r\n overflow: \"hidden\",\r\n marginRight: \"20px\",\r\n },\r\n active: {\r\n boxShadow: \"0 0 0 2px \" + theme.palette.primary.light,\r\n },\r\n checkIcon: {\r\n color: theme.palette.primary.main,\r\n },\r\n}));\r\n\r\nexport default function Folder({ folder, isActive, onIconClick }) {\r\n const selected = useSelector((state) => state.explorer.selected);\r\n const classes = useStyles();\r\n const isMobile = statusHelper.isMobile();\r\n const isSelected =\r\n selected.findIndex((value) => {\r\n return value === folder;\r\n }) !== -1;\r\n\r\n return (\r\n \r\n \r\n {!isSelected && }\r\n {isSelected && (\r\n \r\n )}\r\n \r\n \r\n \r\n {folder.name}\r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport SmallIcon from \"../SmallIcon\";\r\nimport FileIcon from \"../FileIcon\";\r\nimport { useSelector } from \"react-redux\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport Folder from \"../Folder\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n dragging: {\r\n width: \"200px\",\r\n },\r\n cardDragged: {\r\n position: \"absolute\",\r\n \"transform-origin\": \"bottom left\",\r\n },\r\n}));\r\n\r\nconst diliverIcon = (object, viewMethod, classes) => {\r\n if (object.type === \"dir\") {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n if (object.type === \"file\" && viewMethod === \"icon\") {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n if (\r\n (object.type === \"file\" && viewMethod === \"smallIcon\") ||\r\n viewMethod === \"list\"\r\n ) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n};\r\n\r\nconst Preview = (props) => {\r\n const selected = useSelector((state) => state.explorer.selected);\r\n const viewMethod = useSelector(\r\n (state) => state.viewUpdate.explorerViewMethod\r\n );\r\n const classes = useStyles();\r\n return (\r\n <>\r\n {selected.length === 0 &&\r\n diliverIcon(props.object, viewMethod, classes)}\r\n {selected.length > 0 && (\r\n <>\r\n {selected.slice(0, 3).map((card, i) => (\r\n \r\n {diliverIcon(card, viewMethod, classes)}\r\n \r\n ))}\r\n \r\n )}\r\n \r\n );\r\n};\r\nexport default Preview;\r\n","import React, { useMemo } from \"react\";\r\nimport { useDragLayer } from \"react-dnd\";\r\nimport Preview from \"./Preview\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst layerStyles = {\r\n position: \"fixed\",\r\n pointerEvents: \"none\",\r\n zIndex: 100,\r\n left: 0,\r\n top: 0,\r\n width: \"100%\",\r\n height: \"100%\",\r\n};\r\n\r\nfunction getItemStyles(\r\n initialOffset,\r\n currentOffset,\r\n pointerOffset,\r\n viewMethod\r\n) {\r\n if (!initialOffset || !currentOffset) {\r\n return {\r\n display: \"none\",\r\n };\r\n }\r\n let { x, y } = currentOffset;\r\n if (viewMethod === \"list\") {\r\n x += pointerOffset.x - initialOffset.x;\r\n y += pointerOffset.y - initialOffset.y;\r\n }\r\n\r\n const transform = `translate(${x}px, ${y}px)`;\r\n return {\r\n opacity: 0.5,\r\n transform,\r\n WebkitTransform: transform,\r\n };\r\n}\r\nconst CustomDragLayer = (props) => {\r\n const {\r\n itemType,\r\n isDragging,\r\n item,\r\n initialOffset,\r\n currentOffset,\r\n pointerOffset,\r\n } = useDragLayer((monitor) => ({\r\n item: monitor.getItem(),\r\n itemType: monitor.getItemType(),\r\n initialOffset: monitor.getInitialSourceClientOffset(),\r\n currentOffset: monitor.getSourceClientOffset(),\r\n pointerOffset: monitor.getInitialClientOffset(),\r\n isDragging: monitor.isDragging(),\r\n }));\r\n const viewMethod = useSelector(\r\n (state) => state.viewUpdate.explorerViewMethod\r\n );\r\n const image = useMemo(() => {\r\n switch (itemType) {\r\n case \"object\":\r\n return ;\r\n default:\r\n return null;\r\n }\r\n }, [itemType, item]);\r\n if (!isDragging) {\r\n return null;\r\n }\r\n return (\r\n
\r\n \r\n {image}\r\n
\r\n \r\n );\r\n};\r\nexport default CustomDragLayer;\r\n","import {\r\n Divider,\r\n ListItemIcon,\r\n MenuItem,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport Menu from \"@material-ui/core/Menu\";\r\nimport { Archive, InfoOutlined, Unarchive } from \"@material-ui/icons\";\r\nimport RenameIcon from \"@material-ui/icons/BorderColor\";\r\nimport DownloadIcon from \"@material-ui/icons/CloudDownload\";\r\nimport UploadIcon from \"@material-ui/icons/CloudUpload\";\r\nimport NewFolderIcon from \"@material-ui/icons/CreateNewFolder\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\nimport FileCopyIcon from \"@material-ui/icons/FileCopy\";\r\nimport OpenFolderIcon from \"@material-ui/icons/FolderOpen\";\r\nimport MoveIcon from \"@material-ui/icons/Input\";\r\nimport LinkIcon from \"@material-ui/icons/InsertLink\";\r\nimport OpenIcon from \"@material-ui/icons/OpenInNew\";\r\nimport ShareIcon from \"@material-ui/icons/Share\";\r\nimport {\r\n FolderDownload,\r\n FolderUpload,\r\n MagnetOn,\r\n FilePlus,\r\n} from \"mdi-material-ui\";\r\nimport PropTypes from \"prop-types\";\r\nimport React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { isCompressFile, isPreviewable, isTorrent } from \"../../config\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\r\nimport {\r\n batchGetSource,\r\n openParentFolder,\r\n openPreview,\r\n openTorrentDownload,\r\n setSelectedTarget,\r\n startBatchDownload,\r\n startDirectoryDownload,\r\n startDownload,\r\n toggleObjectInfoSidebar,\r\n} from \"../../redux/explorer/action\";\r\nimport {\r\n changeContextMenu,\r\n navigateTo,\r\n openCompressDialog,\r\n openCopyDialog,\r\n openCreateFileDialog,\r\n openCreateFolderDialog,\r\n openDecompressDialog,\r\n openLoadingDialog,\r\n openMoveDialog,\r\n openMusicDialog,\r\n openRemoteDownloadDialog,\r\n openRemoveDialog,\r\n openRenameDialog,\r\n openShareDialog,\r\n refreshFileList,\r\n setNavigatorLoadingStatus,\r\n showImgPreivew,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { pathJoin } from \"../Uploader/core/utils\";\r\nimport {\r\n openFileSelector,\r\n openFolderSelector,\r\n} from \"../../redux/viewUpdate/action\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = () => ({\r\n propover: {},\r\n divider: {\r\n marginTop: 4,\r\n marginBottom: 4,\r\n },\r\n});\r\n\r\nconst StyledListItemIcon = withStyles({\r\n root: {\r\n minWidth: 38,\r\n },\r\n})(ListItemIcon);\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n menuType: state.viewUpdate.contextType,\r\n menuOpen: state.viewUpdate.contextOpen,\r\n isMultiple: state.explorer.selectProps.isMultiple,\r\n withFolder: state.explorer.selectProps.withFolder,\r\n withFile: state.explorer.selectProps.withFile,\r\n withSourceEnabled: state.explorer.selectProps.withSourceEnabled,\r\n path: state.navigator.path,\r\n selected: state.explorer.selected,\r\n search: state.explorer.search,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n changeContextMenu: (type, open) => {\r\n dispatch(changeContextMenu(type, open));\r\n },\r\n setNavigatorLoadingStatus: (status) => {\r\n dispatch(setNavigatorLoadingStatus(status));\r\n },\r\n setSelectedTarget: (targets) => {\r\n dispatch(setSelectedTarget(targets));\r\n },\r\n navigateTo: (path) => {\r\n dispatch(navigateTo(path));\r\n },\r\n openCreateFolderDialog: () => {\r\n dispatch(openCreateFolderDialog());\r\n },\r\n openCreateFileDialog: () => {\r\n dispatch(openCreateFileDialog());\r\n },\r\n openRenameDialog: () => {\r\n dispatch(openRenameDialog());\r\n },\r\n openMoveDialog: () => {\r\n dispatch(openMoveDialog());\r\n },\r\n openRemoveDialog: () => {\r\n dispatch(openRemoveDialog());\r\n },\r\n openShareDialog: () => {\r\n dispatch(openShareDialog());\r\n },\r\n showImgPreivew: (first) => {\r\n dispatch(showImgPreivew(first));\r\n },\r\n openMusicDialog: () => {\r\n dispatch(openMusicDialog());\r\n },\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n openRemoteDownloadDialog: () => {\r\n dispatch(openRemoteDownloadDialog());\r\n },\r\n openTorrentDownloadDialog: () => {\r\n dispatch(openTorrentDownload());\r\n },\r\n openCopyDialog: () => {\r\n dispatch(openCopyDialog());\r\n },\r\n openLoadingDialog: (text) => {\r\n dispatch(openLoadingDialog(text));\r\n },\r\n openDecompressDialog: () => {\r\n dispatch(openDecompressDialog());\r\n },\r\n openCompressDialog: () => {\r\n dispatch(openCompressDialog());\r\n },\r\n refreshFileList: () => {\r\n dispatch(refreshFileList());\r\n },\r\n openPreview: (share) => {\r\n dispatch(openPreview(share));\r\n },\r\n toggleObjectInfoSidebar: (open) => {\r\n dispatch(toggleObjectInfoSidebar(open));\r\n },\r\n startBatchDownload: (share) => {\r\n dispatch(startBatchDownload(share));\r\n },\r\n openFileSelector: () => {\r\n dispatch(openFileSelector());\r\n },\r\n openFolderSelector: () => {\r\n dispatch(openFolderSelector());\r\n },\r\n startDownload: (share, file) => {\r\n dispatch(startDownload(share, file));\r\n },\r\n batchGetSource: () => {\r\n dispatch(batchGetSource());\r\n },\r\n startDirectoryDownload: (share) => {\r\n dispatch(startDirectoryDownload(share));\r\n },\r\n openParentFolder: () => {\r\n dispatch(openParentFolder());\r\n },\r\n };\r\n};\r\n\r\nclass ContextMenuCompoment extends Component {\r\n X = 0;\r\n Y = 0;\r\n\r\n state = {};\r\n\r\n componentDidMount = () => {\r\n window.document.addEventListener(\"mousemove\", this.setPoint);\r\n };\r\n\r\n setPoint = (e) => {\r\n this.Y = e.clientY;\r\n this.X = e.clientX;\r\n };\r\n\r\n openArchiveDownload = () => {\r\n this.props.startBatchDownload(this.props.share);\r\n };\r\n\r\n openDirectoryDownload = () => {\r\n this.props.startDirectoryDownload(this.props.share);\r\n };\r\n\r\n openDownload = () => {\r\n this.props.startDownload(this.props.share, this.props.selected[0]);\r\n };\r\n\r\n enterFolder = () => {\r\n this.props.navigateTo(\r\n pathJoin([this.props.path, this.props.selected[0].name])\r\n );\r\n };\r\n\r\n // 暂时只对空白处右键菜单使用这个函数,疑似有bug会导致的一个菜单被默认选中。\r\n // 相关issue: https://github.com/mui-org/material-ui/issues/23747\r\n renderMenuItems = (items) => {\r\n const res = [];\r\n let key = 0;\r\n\r\n [\"top\", \"center\", \"bottom\"].forEach((position) => {\r\n let visibleCount = 0;\r\n items[position].forEach((item) => {\r\n if (item.condition) {\r\n res.push(\r\n \r\n {item.icon}\r\n \r\n {item.text}\r\n \r\n \r\n );\r\n key++;\r\n visibleCount++;\r\n }\r\n });\r\n if (visibleCount > 0 && position != \"bottom\") {\r\n res.push(\r\n \r\n );\r\n key++;\r\n }\r\n });\r\n\r\n return res;\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const user = Auth.GetUser();\r\n const isHomePage = pathHelper.isHomePage(this.props.location.pathname);\r\n const emptyMenuList = {\r\n top: [\r\n {\r\n condition: true,\r\n onClick: () => {\r\n this.props.refreshFileList();\r\n this.props.changeContextMenu(\r\n this.props.menuType,\r\n false\r\n );\r\n },\r\n icon: ,\r\n text: \"刷新\",\r\n },\r\n ],\r\n center: [\r\n {\r\n condition: true,\r\n onClick: () => this.props.openFileSelector(),\r\n icon: ,\r\n text: \"上传文件\",\r\n },\r\n {\r\n condition: true,\r\n onClick: () => this.props.openFolderSelector(),\r\n icon: ,\r\n text: \"上传目录\",\r\n },\r\n {\r\n condition: user.group.allowRemoteDownload,\r\n onClick: () => this.props.openRemoteDownloadDialog(),\r\n icon: ,\r\n text: \"离线下载\",\r\n },\r\n ],\r\n bottom: [\r\n {\r\n condition: true,\r\n onClick: () => this.props.openCreateFolderDialog(),\r\n icon: ,\r\n text: \"创建文件夹\",\r\n },\r\n {\r\n condition: true,\r\n onClick: () => this.props.openCreateFileDialog(),\r\n icon: ,\r\n text: \"创建文件\",\r\n },\r\n ],\r\n };\r\n\r\n return (\r\n
\r\n \r\n this.props.changeContextMenu(this.props.menuType, false)\r\n }\r\n anchorReference=\"anchorPosition\"\r\n anchorPosition={{ top: this.Y, left: this.X }}\r\n anchorOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"left\",\r\n }}\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"left\",\r\n }}\r\n >\r\n {this.props.menuType === \"empty\" && (\r\n
\r\n {\r\n this.props.refreshFileList();\r\n this.props.changeContextMenu(\r\n this.props.menuType,\r\n false\r\n );\r\n }}\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.refresh\")}\r\n \r\n \r\n \r\n this.props.openFileSelector()}\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.uploadFiles\")}\r\n \r\n \r\n this.props.openFolderSelector()}\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.uploadFolder\")}\r\n \r\n \r\n {user.group.allowRemoteDownload && (\r\n \r\n this.props.openRemoteDownloadDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.newRemoteDownloads\")}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n this.props.openCreateFolderDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.newFolder\")}\r\n \r\n \r\n \r\n this.props.openCreateFileDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.newFile\")}\r\n \r\n \r\n
\r\n )}\r\n {this.props.menuType !== \"empty\" && (\r\n
\r\n {!this.props.isMultiple && this.props.withFolder && (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {t(\"fileManager.enter\")}\r\n \r\n \r\n {isHomePage && (\r\n \r\n )}\r\n
\r\n )}\r\n {!this.props.isMultiple &&\r\n this.props.withFile &&\r\n (!this.props.share ||\r\n this.props.share.preview) &&\r\n isPreviewable(this.props.selected[0].name) && (\r\n
\r\n \r\n this.props.openPreview()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.open\")}\r\n \r\n \r\n
\r\n )}\r\n\r\n {this.props.search && !this.props.isMultiple && (\r\n
\r\n \r\n this.props.openParentFolder()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.openParentFolder\")}\r\n \r\n \r\n
\r\n )}\r\n\r\n {!this.props.isMultiple && this.props.withFile && (\r\n
\r\n \r\n this.openDownload(this.props.share)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.download\")}\r\n \r\n \r\n {isHomePage && (\r\n \r\n )}\r\n
\r\n )}\r\n\r\n {(this.props.isMultiple || this.props.withFolder) &&\r\n window.showDirectoryPicker &&\r\n window.isSecureContext && (\r\n \r\n this.openDirectoryDownload()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.download\")}\r\n \r\n \r\n )}\r\n\r\n {(this.props.isMultiple ||\r\n this.props.withFolder) && (\r\n this.openArchiveDownload()}\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.batchDownload\")}\r\n \r\n \r\n )}\r\n\r\n {isHomePage &&\r\n user.group.sourceBatch > 0 &&\r\n this.props.withSourceEnabled && (\r\n \r\n this.props.batchGetSource()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {this.props.isMultiple ||\r\n (this.props.withFolder &&\r\n !this.props.withFile)\r\n ? t(\r\n \"fileManager.getSourceLinkInBatch\"\r\n )\r\n : t(\r\n \"fileManager.getSourceLink\"\r\n )}\r\n \r\n \r\n )}\r\n\r\n {!this.props.isMultiple &&\r\n isHomePage &&\r\n user.group.allowRemoteDownload &&\r\n this.props.withFile &&\r\n isTorrent(this.props.selected[0].name) && (\r\n \r\n this.props.openTorrentDownloadDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\r\n \"fileManager.createRemoteDownloadForTorrent\"\r\n )}\r\n \r\n \r\n )}\r\n {!this.props.isMultiple &&\r\n isHomePage &&\r\n user.group.compress &&\r\n this.props.withFile &&\r\n isCompressFile(this.props.selected[0].name) && (\r\n \r\n this.props.openDecompressDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.decompress\")}\r\n \r\n \r\n )}\r\n\r\n {isHomePage && user.group.compress && (\r\n \r\n this.props.openCompressDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.compress\")}\r\n \r\n \r\n )}\r\n\r\n {!this.props.isMultiple && isHomePage && (\r\n this.props.openShareDialog()}\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.createShareLink\")}\r\n \r\n \r\n )}\r\n\r\n {!this.props.isMultiple && isHomePage && (\r\n \r\n this.props.toggleObjectInfoSidebar(true)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.viewDetails\")}\r\n \r\n \r\n )}\r\n\r\n {!this.props.isMultiple && isHomePage && (\r\n \r\n )}\r\n\r\n {!this.props.isMultiple && isHomePage && (\r\n
\r\n \r\n this.props.openRenameDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.rename\")}\r\n \r\n \r\n {!this.props.search && (\r\n \r\n this.props.openCopyDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.copy\")}\r\n \r\n \r\n )}\r\n
\r\n )}\r\n {isHomePage && (\r\n
\r\n {!this.props.search && (\r\n \r\n this.props.openMoveDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.move\")}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n this.props.openRemoveDialog()\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n {t(\"fileManager.delete\")}\r\n \r\n \r\n
\r\n )}\r\n
\r\n )}\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nContextMenuCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n menuType: PropTypes.string.isRequired,\r\n};\r\n\r\nconst ContextMenu = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(ContextMenuCompoment))));\r\n\r\nexport default ContextMenu;\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport FolderIcon from \"@material-ui/icons/Folder\";\r\nimport classNames from \"classnames\";\r\nimport { sizeToString } from \"../../utils/index\";\r\nimport {\r\n fade,\r\n TableCell,\r\n TableRow,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport TypeIcon from \"./TypeIcon\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport { withRouter } from \"react-router\";\r\nimport KeyboardReturnIcon from \"@material-ui/icons/KeyboardReturn\";\r\nimport CheckCircleRoundedIcon from \"@material-ui/icons/CheckCircleRounded\";\r\nimport Grow from \"@material-ui/core/Grow\";\r\nimport { formatLocalTime } from \"../../utils/datetime\";\r\nimport FileName from \"./FileName\";\r\n\r\nconst styles = (theme) => ({\r\n selected: {\r\n \"&:hover\": {},\r\n backgroundColor: fade(theme.palette.primary.main, 0.18),\r\n },\r\n\r\n selectedShared: {\r\n \"&:hover\": {},\r\n backgroundColor: fade(theme.palette.primary.main, 0.18),\r\n },\r\n\r\n notSelected: {\r\n \"&:hover\": {\r\n backgroundColor: theme.palette.action.hover,\r\n },\r\n },\r\n icon: {\r\n verticalAlign: \"middle\",\r\n marginRight: \"20px\",\r\n color: theme.palette.text.secondary,\r\n },\r\n tableIcon: {\r\n marginRight: \"20px\",\r\n verticalAlign: \"middle\",\r\n },\r\n folderNameSelected: {\r\n color:\r\n theme.palette.type === \"dark\" ? \"#fff\" : theme.palette.primary.dark,\r\n fontWeight: \"500\",\r\n userSelect: \"none\",\r\n },\r\n folderNameNotSelected: {\r\n color: theme.palette.text.secondary,\r\n userSelect: \"none\",\r\n },\r\n folderName: {\r\n marginRight: \"20px\",\r\n display: \"flex\",\r\n alignItems: \"center\",\r\n },\r\n hideAuto: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n tableRow: {\r\n padding: \"10px 16px\",\r\n },\r\n checkIcon: {\r\n color: theme.palette.primary.main,\r\n },\r\n active: {\r\n backgroundColor: fade(theme.palette.primary.main, 0.1),\r\n },\r\n});\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n selected: state.explorer.selected,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = () => {\r\n return {};\r\n};\r\n\r\nclass TableRowCompoment extends Component {\r\n state = {};\r\n\r\n shouldComponentUpdate(nextProps, nextState, nextContext) {\r\n const isSelectedCurrent =\r\n this.props.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n const isSelectedNext =\r\n nextProps.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n if (\r\n nextProps.selected !== this.props.selected &&\r\n isSelectedCurrent === isSelectedNext\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n const isShare = pathHelper.isSharePage(this.props.location.pathname);\r\n\r\n let icon;\r\n if (this.props.file.type === \"dir\") {\r\n icon = ;\r\n } else if (this.props.file.type === \"up\") {\r\n icon = ;\r\n } else {\r\n icon = (\r\n \r\n );\r\n }\r\n const isSelected =\r\n this.props.selected.findIndex((value) => {\r\n return value === this.props.file;\r\n }) !== -1;\r\n const isMobile = statusHelper.isMobile();\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {!isSelected && icon}\r\n {isSelected && (\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\" \"}\r\n {this.props.file.type !== \"dir\" &&\r\n this.props.file.type !== \"up\" &&\r\n sizeToString(this.props.file.size)}\r\n \r\n \r\n \r\n \r\n {\" \"}\r\n {formatLocalTime(this.props.file.date)}\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nTableRowCompoment.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n file: PropTypes.object.isRequired,\r\n};\r\n\r\nconst TableItem = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(TableRowCompoment)));\r\n\r\nexport default TableItem;\r\n","import React from \"react\";\r\nimport { useDrop } from \"react-dnd\";\r\nimport Folder from \"../Folder\";\r\nimport classNames from \"classnames\";\r\nimport TableItem from \"../TableRow\";\r\nexport default function FolderDropWarpper({\r\n isListView,\r\n folder,\r\n onIconClick,\r\n contextMenu,\r\n handleClick,\r\n handleDoubleClick,\r\n className,\r\n pref,\r\n}) {\r\n const [{ canDrop, isOver }, drop] = useDrop({\r\n accept: \"object\",\r\n drop: () => ({ folder }),\r\n collect: (monitor) => ({\r\n isOver: monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n });\r\n const isActive = canDrop && isOver;\r\n if (!isListView) {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n return (\r\n \r\n );\r\n}\r\n","import { useRef } from \"react\";\r\nimport { throttle } from \"lodash\";\r\n\r\nconst useDragScrolling = () => {\r\n const isScrolling = useRef(false);\r\n const target = document.querySelector(\"#explorer-container\");\r\n\r\n const goDown = () => {\r\n target.scrollTop += 10;\r\n\r\n const { offsetHeight, scrollTop, scrollHeight } = target;\r\n const isScrollEnd = offsetHeight + scrollTop >= scrollHeight;\r\n\r\n if (isScrolling.current && !isScrollEnd) {\r\n window.requestAnimationFrame(goDown);\r\n }\r\n };\r\n\r\n const goUp = () => {\r\n target.scrollTop -= 10;\r\n\r\n if (isScrolling.current && target.scrollTop > 0) {\r\n window.requestAnimationFrame(goUp);\r\n }\r\n };\r\n\r\n const onDragOver = (event) => {\r\n const isMouseOnTop = event.clientY < 100;\r\n const isMouseOnDown = window.innerHeight - event.clientY < 100;\r\n\r\n if (!isScrolling.current && (isMouseOnTop || isMouseOnDown)) {\r\n isScrolling.current = true;\r\n\r\n if (isMouseOnTop) {\r\n window.requestAnimationFrame(goUp);\r\n }\r\n\r\n if (isMouseOnDown) {\r\n window.requestAnimationFrame(goDown);\r\n }\r\n } else if (!isMouseOnTop && !isMouseOnDown) {\r\n isScrolling.current = false;\r\n }\r\n };\r\n\r\n const throttleOnDragOver = throttle(onDragOver, 300);\r\n\r\n const addEventListenerForWindow = () => {\r\n window.addEventListener(\"dragover\", throttleOnDragOver, false);\r\n };\r\n\r\n const removeEventListenerForWindow = () => {\r\n window.removeEventListener(\"dragover\", throttleOnDragOver, false);\r\n isScrolling.current = false;\r\n };\r\n\r\n return {\r\n addEventListenerForWindow,\r\n removeEventListenerForWindow,\r\n };\r\n};\r\n\r\nexport default useDragScrolling;\r\n","import React, { useCallback, useEffect } from \"react\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport FileIcon from \"./FileIcon\";\r\nimport SmallIcon from \"./SmallIcon\";\r\nimport TableItem from \"./TableRow\";\r\nimport classNames from \"classnames\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport { useDrag } from \"react-dnd\";\r\nimport { getEmptyImage } from \"react-dnd-html5-backend\";\r\nimport DropWarpper from \"./DnD/DropWarpper\";\r\nimport { useLocation } from \"react-router-dom\";\r\nimport { pathBack } from \"../../utils\";\r\nimport {\r\n changeContextMenu,\r\n dragAndDrop,\r\n navigateTo,\r\n openLoadingDialog,\r\n openPreview,\r\n selectFile,\r\n setSelectedTarget,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport useDragScrolling from \"./DnD/Scrolling\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n container: {\r\n padding: \"7px\",\r\n },\r\n fixFlex: {\r\n minWidth: 0,\r\n },\r\n dragging: {\r\n opacity: 0.4,\r\n },\r\n}));\r\n\r\nexport default function ObjectIcon(props) {\r\n const path = useSelector((state) => state.navigator.path);\r\n const shareInfo = useSelector((state) => state.viewUpdate.shareInfo);\r\n const selected = useSelector((state) => state.explorer.selected);\r\n const viewMethod = useSelector(\r\n (state) => state.viewUpdate.explorerViewMethod\r\n );\r\n const navigatorPath = useSelector((state) => state.navigator.path);\r\n const location = useLocation();\r\n\r\n const dispatch = useDispatch();\r\n const ContextMenu = useCallback(\r\n (type, open) => dispatch(changeContextMenu(type, open)),\r\n [dispatch]\r\n );\r\n const SetSelectedTarget = useCallback(\r\n (targets) => dispatch(setSelectedTarget(targets)),\r\n [dispatch]\r\n );\r\n\r\n const NavitateTo = useCallback((targets) => dispatch(navigateTo(targets)), [\r\n dispatch,\r\n ]);\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const DragAndDrop = useCallback(\r\n (source, target) => dispatch(dragAndDrop(source, target)),\r\n [dispatch]\r\n );\r\n const OpenLoadingDialog = useCallback(\r\n (text) => dispatch(openLoadingDialog(text)),\r\n [dispatch]\r\n );\r\n const OpenPreview = useCallback((share) => dispatch(openPreview(share)), [\r\n dispatch,\r\n ]);\r\n const StartDownload = useCallback(\r\n (share, file) => dispatch(StartDownload(share, file)),\r\n [dispatch]\r\n );\r\n\r\n const classes = useStyles();\r\n\r\n const contextMenu = (e) => {\r\n if (props.file.type === \"up\") {\r\n return;\r\n }\r\n e.preventDefault();\r\n if (\r\n selected.findIndex((value) => {\r\n return value === props.file;\r\n }) === -1\r\n ) {\r\n SetSelectedTarget([props.file]);\r\n }\r\n ContextMenu(\"file\", true);\r\n };\r\n\r\n const SelectFile = (e) => {\r\n dispatch(selectFile(props.file, e, props.index));\r\n };\r\n const enterFolder = () => {\r\n NavitateTo(\r\n path === \"/\" ? path + props.file.name : path + \"/\" + props.file.name\r\n );\r\n };\r\n const handleClick = (e) => {\r\n if (props.file.type === \"up\") {\r\n NavitateTo(pathBack(navigatorPath));\r\n return;\r\n }\r\n\r\n SelectFile(e);\r\n if (\r\n props.file.type === \"dir\" &&\r\n !e.ctrlKey &&\r\n !e.metaKey &&\r\n !e.shiftKey\r\n ) {\r\n enterFolder();\r\n }\r\n };\r\n\r\n const handleDoubleClick = () => {\r\n if (props.file.type === \"up\") {\r\n return;\r\n }\r\n if (props.file.type === \"dir\") {\r\n enterFolder();\r\n return;\r\n }\r\n\r\n OpenPreview(shareInfo);\r\n };\r\n\r\n const handleIconClick = (e) => {\r\n e.stopPropagation();\r\n if (!e.shiftKey) {\r\n e.ctrlKey = true;\r\n }\r\n SelectFile(e);\r\n return false;\r\n };\r\n\r\n const {\r\n addEventListenerForWindow,\r\n removeEventListenerForWindow,\r\n } = useDragScrolling();\r\n\r\n const [{ isDragging }, drag, preview] = useDrag({\r\n item: {\r\n object: props.file,\r\n type: \"object\",\r\n selected: [...selected],\r\n viewMethod: viewMethod,\r\n },\r\n begin: () => {\r\n addEventListenerForWindow();\r\n },\r\n end: (item, monitor) => {\r\n removeEventListenerForWindow();\r\n const dropResult = monitor.getDropResult();\r\n if (item && dropResult) {\r\n if (dropResult.folder) {\r\n if (\r\n item.object.id !== dropResult.folder.id ||\r\n item.object.type !== dropResult.folder.type\r\n ) {\r\n DragAndDrop(item.object, dropResult.folder);\r\n }\r\n }\r\n }\r\n },\r\n canDrag: () => {\r\n return (\r\n !statusHelper.isMobile() &&\r\n statusHelper.isHomePage(location.pathname)\r\n );\r\n },\r\n collect: (monitor) => ({\r\n isDragging: monitor.isDragging(),\r\n }),\r\n });\r\n\r\n useEffect(() => {\r\n preview(getEmptyImage(), { captureDraggingState: true });\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n if (viewMethod === \"list\") {\r\n return (\r\n <>\r\n {props.file.type === \"dir\" && (\r\n \r\n )}\r\n {props.file.type !== \"dir\" && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {props.file.type === \"dir\" && viewMethod !== \"list\" && (\r\n \r\n )}\r\n {props.file.type === \"file\" && viewMethod === \"icon\" && (\r\n \r\n )}\r\n {props.file.type === \"file\" && viewMethod === \"smallIcon\" && (\r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n","import {\r\n CircularProgress,\r\n Grid,\r\n Paper,\r\n Table,\r\n TableBody,\r\n TableCell,\r\n TableHead,\r\n TableRow,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport TableSortLabel from \"@material-ui/core/TableSortLabel\";\r\nimport classNames from \"classnames\";\r\nimport React, { useCallback, useEffect, useMemo } from \"react\";\r\nimport { configure, GlobalHotKeys } from \"react-hotkeys\";\r\nimport explorer, {\r\n changeContextMenu,\r\n openRemoveDialog,\r\n setSelectedTarget,\r\n} from \"../../redux/explorer\";\r\nimport { isMac } from \"../../utils\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport ContextMenu from \"./ContextMenu\";\r\nimport ImgPreivew from \"./ImgPreview\";\r\nimport ObjectIcon from \"./ObjectIcon\";\r\nimport Nothing from \"../Placeholder/Nothing\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { useLocation } from \"react-router\";\r\nimport { usePagination } from \"../../hooks/pagination\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n paper: {\r\n padding: theme.spacing(2),\r\n textAlign: \"center\",\r\n color: theme.palette.text.secondary,\r\n margin: \"10px\",\r\n },\r\n root: {\r\n padding: \"10px\",\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: \"calc(100vh - 113px)\",\r\n },\r\n },\r\n rootTable: {\r\n padding: \"0px\",\r\n backgroundColor: theme.palette.background.paper.white,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n height: \"calc(100vh - 113px)\",\r\n },\r\n },\r\n typeHeader: {\r\n margin: \"10px 25px\",\r\n color: \"#6b6b6b\",\r\n fontWeight: \"500\",\r\n },\r\n loading: {\r\n justifyContent: \"center\",\r\n display: \"flex\",\r\n marginTop: \"40px\",\r\n },\r\n errorBox: {\r\n padding: theme.spacing(4),\r\n },\r\n errorMsg: {\r\n marginTop: \"10px\",\r\n },\r\n hideAuto: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n flexFix: {\r\n minWidth: 0,\r\n },\r\n upButton: {\r\n marginLeft: \"20px\",\r\n marginTop: \"10px\",\r\n marginBottom: \"10px\",\r\n },\r\n clickAway: {\r\n height: \"100%\",\r\n width: \"100%\",\r\n },\r\n rootShare: {\r\n height: \"100%\",\r\n minHeight: 500,\r\n },\r\n visuallyHidden: {\r\n border: 0,\r\n clip: \"rect(0 0 0 0)\",\r\n height: 1,\r\n margin: -1,\r\n overflow: \"hidden\",\r\n padding: 0,\r\n position: \"absolute\",\r\n top: 20,\r\n width: 1,\r\n },\r\n gridContainer: {\r\n [theme.breakpoints.down(\"sm\")]: {\r\n gridTemplateColumns:\r\n \"repeat(auto-fill,minmax(180px,1fr))!important\",\r\n },\r\n [theme.breakpoints.up(\"md\")]: {\r\n gridTemplateColumns:\r\n \"repeat(auto-fill,minmax(220px,1fr))!important\",\r\n },\r\n display: \"grid!important\",\r\n },\r\n gridItem: {\r\n flex: \"1 1 220px!important\",\r\n },\r\n}));\r\n\r\nconst keyMap = {\r\n DELETE_FILE: \"del\",\r\n SELECT_ALL_SHOWED: `${isMac() ? \"command\" : \"ctrl\"}+a`,\r\n SELECT_ALL: `${isMac() ? \"command\" : \"ctrl\"}+shift+a`,\r\n DESELECT_ALL: \"esc\",\r\n};\r\n\r\nexport default function Explorer({ share }) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"fileManager\" });\r\n const location = useLocation();\r\n const dispatch = useDispatch();\r\n const selected = useSelector((state) => state.explorer.selected);\r\n const search = useSelector((state) => state.explorer.search);\r\n const loading = useSelector((state) => state.viewUpdate.navigatorLoading);\r\n const path = useSelector((state) => state.navigator.path);\r\n const sortMethod = useSelector((state) => state.viewUpdate.sortMethod);\r\n const navigatorErrorMsg = useSelector(\r\n (state) => state.viewUpdate.navigatorErrorMsg\r\n );\r\n const navigatorError = useSelector(\r\n (state) => state.viewUpdate.navigatorError\r\n );\r\n const viewMethod = useSelector(\r\n (state) => state.viewUpdate.explorerViewMethod\r\n );\r\n\r\n const OpenRemoveDialog = useCallback(() => dispatch(openRemoveDialog()), [\r\n dispatch,\r\n ]);\r\n const SetSelectedTarget = useCallback(\r\n (targets) => dispatch(setSelectedTarget(targets)),\r\n [dispatch]\r\n );\r\n const ChangeContextMenu = useCallback(\r\n (type, open) => dispatch(changeContextMenu(type, open)),\r\n [dispatch]\r\n );\r\n const ChangeSortMethod = useCallback(\r\n (method) => dispatch(explorer.actions.changeSortMethod(method)),\r\n [dispatch]\r\n );\r\n const SelectAll = useCallback(\r\n () => dispatch(explorer.actions.selectAll()),\r\n [dispatch]\r\n );\r\n\r\n const { dirList, fileList, startIndex } = usePagination();\r\n\r\n const handlers = {\r\n DELETE_FILE: () => {\r\n if (selected.length > 0 && !share) {\r\n OpenRemoveDialog();\r\n }\r\n },\r\n SELECT_ALL_SHOWED: (e) => {\r\n e.preventDefault();\r\n if (selected.length >= dirList.length + fileList.length) {\r\n SetSelectedTarget([]);\r\n } else {\r\n SetSelectedTarget([...dirList, ...fileList]);\r\n }\r\n },\r\n SELECT_ALL: (e) => {\r\n e.preventDefault();\r\n SelectAll();\r\n },\r\n DESELECT_ALL: (e) => {\r\n e.preventDefault();\r\n SetSelectedTarget([]);\r\n },\r\n };\r\n\r\n useEffect(\r\n () =>\r\n configure({\r\n ignoreTags: [\"input\", \"select\", \"textarea\"],\r\n }),\r\n []\r\n );\r\n\r\n const contextMenu = (e) => {\r\n e.preventDefault();\r\n if (!search && !pathHelper.isSharePage(location.pathname)) {\r\n if (!loading) {\r\n ChangeContextMenu(\"empty\", true);\r\n }\r\n }\r\n };\r\n\r\n const ClickAway = (e) => {\r\n const element = e.target;\r\n if (element.dataset.clickaway) {\r\n SetSelectedTarget([]);\r\n }\r\n };\r\n\r\n const classes = useStyles();\r\n const isHomePage = pathHelper.isHomePage(location.pathname);\r\n\r\n const showView =\r\n !loading && (dirList.length !== 0 || fileList.length !== 0);\r\n\r\n const listView = useMemo(\r\n () => (\r\n \r\n \r\n \r\n \r\n {\r\n ChangeSortMethod(\r\n sortMethod === \"namePos\"\r\n ? \"nameRev\"\r\n : \"namePos\"\r\n );\r\n }}\r\n >\r\n {t(\"name\")}\r\n {sortMethod === \"namePos\" ||\r\n sortMethod === \"nameRev\" ? (\r\n \r\n {sortMethod === \"nameRev\"\r\n ? \"sorted descending\"\r\n : \"sorted ascending\"}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {\r\n ChangeSortMethod(\r\n sortMethod === \"sizePos\"\r\n ? \"sizeRes\"\r\n : \"sizePos\"\r\n );\r\n }}\r\n >\r\n {t(\"size\")}\r\n {sortMethod === \"sizePos\" ||\r\n sortMethod === \"sizeRes\" ? (\r\n \r\n {sortMethod === \"sizeRes\"\r\n ? \"sorted descending\"\r\n : \"sorted ascending\"}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n {\r\n ChangeSortMethod(\r\n sortMethod === \"modifyTimePos\"\r\n ? \"modifyTimeRev\"\r\n : \"modifyTimePos\"\r\n );\r\n }}\r\n >\r\n {t(\"lastModified\")}\r\n {sortMethod === \"modifyTimePos\" ||\r\n sortMethod === \"modifyTimeRev\" ? (\r\n \r\n {sortMethod === \"sizeRes\"\r\n ? \"sorted descending\"\r\n : \"sorted ascending\"}\r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n {pathHelper.isMobile() && path !== \"/\" && (\r\n \r\n )}\r\n {dirList.map((value, index) => (\r\n \r\n ))}\r\n {fileList.map((value, index) => (\r\n \r\n ))}\r\n \r\n
\r\n ),\r\n [dirList, fileList, path, sortMethod, ChangeSortMethod, classes]\r\n );\r\n\r\n const normalView = useMemo(\r\n () => (\r\n
\r\n {dirList.length !== 0 && (\r\n <>\r\n \r\n {t(\"folders\")}\r\n \r\n \r\n {dirList.map((value, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )}\r\n {fileList.length !== 0 && (\r\n <>\r\n \r\n {t(\"files\")}\r\n \r\n \r\n {fileList.map((value, index) => (\r\n \r\n \r\n \r\n ))}\r\n \r\n \r\n )}\r\n
\r\n ),\r\n [dirList, fileList, classes]\r\n );\r\n\r\n const view = viewMethod === \"list\" ? listView : normalView;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {navigatorError && (\r\n \r\n \r\n {t(\"listError\")}\r\n \r\n \r\n {navigatorErrorMsg.message}\r\n \r\n \r\n )}\r\n\r\n {loading && !navigatorError && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {!search &&\r\n isHomePage &&\r\n dirList.length === 0 &&\r\n fileList.length === 0 &&\r\n !loading &&\r\n !navigatorError && (\r\n \r\n )}\r\n {((search &&\r\n dirList.length === 0 &&\r\n fileList.length === 0 &&\r\n !loading &&\r\n !navigatorError) ||\r\n (dirList.length === 0 &&\r\n fileList.length === 0 &&\r\n !loading &&\r\n !navigatorError &&\r\n !isHomePage)) && }\r\n {showView && view}\r\n \r\n );\r\n}\r\n","import React, { useMemo } from \"react\";\r\nimport { useSelector } from \"react-redux\";\r\n\r\nconst paginate = (array, page_size, page_number) =>\r\n page_size === -1\r\n ? array\r\n : array.slice((page_number - 1) * page_size, page_number * page_size);\r\n\r\nexport function usePagination() {\r\n const files = useSelector((state) => state.explorer.fileList);\r\n const folders = useSelector((state) => state.explorer.dirList);\r\n const pagination = useSelector((state) => state.viewUpdate.pagination);\r\n\r\n const { dirList, fileList, startIndex } = useMemo(() => {\r\n const all = paginate(\r\n [...folders, ...files],\r\n pagination.size,\r\n pagination.page\r\n );\r\n const dirList = [];\r\n const fileList = [];\r\n all.forEach((v) =>\r\n v.type === \"dir\" ? dirList.push(v) : fileList.push(v)\r\n );\r\n const startIndex = pagination.size * (pagination.page - 1);\r\n return { dirList, fileList, startIndex };\r\n }, [folders, files, pagination]);\r\n return { dirList, fileList, startIndex };\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport ExpandMore from \"@material-ui/icons/ExpandMore\";\r\nimport { Button } from \"@material-ui/core\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport { useDrop } from \"react-dnd\";\r\nimport classNames from \"classnames\";\r\nimport MoreIcon from \"@material-ui/icons/MoreHoriz\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n expandMore: {\r\n color: \"#8d8d8d\",\r\n },\r\n active: {\r\n boxShadow: \"0 0 0 2px \" + theme.palette.primary.light,\r\n },\r\n button: {\r\n textTransform: \"none\",\r\n },\r\n}));\r\n\r\nexport default function PathButton(props) {\r\n const inputRef = React.useRef(null);\r\n\r\n const [{ canDrop, isOver }, drop] = useDrop({\r\n accept: \"object\",\r\n drop: () => {\r\n if (props.more) {\r\n inputRef.current.click();\r\n } else {\r\n return {\r\n folder: {\r\n id: -1,\r\n path: props.path,\r\n name: props.folder === \"/\" ? \"\" : props.folder,\r\n },\r\n };\r\n }\r\n },\r\n collect: (monitor) => ({\r\n isOver: monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n });\r\n\r\n const isActive = canDrop && isOver;\r\n\r\n useEffect(() => {\r\n if (props.more && isActive) {\r\n inputRef.current.click();\r\n }\r\n // eslint-disable-next-line\r\n }, [isActive]);\r\n\r\n const classes = useStyles();\r\n return (\r\n \r\n \r\n {props.more && }\r\n {!props.more && (\r\n <>\r\n {props.folder}\r\n {props.last && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n \r\n );\r\n}\r\n","import React, { useEffect } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport FolderIcon from \"@material-ui/icons/Folder\";\r\nimport { MenuItem, ListItemIcon, ListItemText } from \"@material-ui/core\";\r\nimport { useDrop } from \"react-dnd\";\r\nimport classNames from \"classnames\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n active: {\r\n border: \"2px solid \" + theme.palette.primary.light,\r\n },\r\n}));\r\n\r\nexport default function DropDownItem(props) {\r\n const [{ canDrop, isOver }, drop] = useDrop({\r\n accept: \"object\",\r\n drop: () => {\r\n console.log({\r\n folder: {\r\n id: -1,\r\n path: props.path,\r\n name: props.folder === \"/\" ? \"\" : props.folder,\r\n },\r\n });\r\n },\r\n collect: (monitor) => ({\r\n isOver: monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n });\r\n\r\n const isActive = canDrop && isOver;\r\n\r\n useEffect(() => {\r\n props.setActiveStatus(props.id, isActive);\r\n // eslint-disable-next-line\r\n }, [isActive]);\r\n\r\n const classes = useStyles();\r\n return (\r\n props.navigateTo(e, props.id)}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import React from \"react\";\r\nimport DropDownItem from \"./DropDownItem\";\r\n\r\nexport default function DropDown(props) {\r\n let timer;\r\n let first = props.folders.length;\r\n const status = [];\r\n for (let index = 0; index < props.folders.length; index++) {\r\n status[index] = false;\r\n }\r\n\r\n const setActiveStatus = (id, value) => {\r\n status[id] = value;\r\n if (value) {\r\n clearTimeout(timer);\r\n } else {\r\n let shouldClose = true;\r\n status.forEach((element) => {\r\n if (element) {\r\n shouldClose = false;\r\n }\r\n });\r\n if (shouldClose) {\r\n if (first <= 0) {\r\n timer = setTimeout(() => {\r\n props.onClose();\r\n }, 100);\r\n } else {\r\n first--;\r\n }\r\n }\r\n }\r\n console.log(status);\r\n };\r\n\r\n return (\r\n <>\r\n {props.folders.map((folder, id) => (\r\n \r\n ))}\r\n \r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport PropTypes from \"prop-types\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport RightIcon from \"@material-ui/icons/KeyboardArrowRight\";\r\nimport ShareIcon from \"@material-ui/icons/Share\";\r\nimport NewFolderIcon from \"@material-ui/icons/CreateNewFolder\";\r\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\r\nimport explorer, {\r\n drawerToggleAction,\r\n navigateTo,\r\n navigateUp,\r\n openCompressDialog,\r\n openCreateFileDialog,\r\n openCreateFolderDialog,\r\n openShareDialog,\r\n refreshFileList,\r\n setNavigatorError,\r\n setNavigatorLoadingStatus,\r\n setSelectedTarget,\r\n} from \"../../../redux/explorer\";\r\nimport { fixUrlHash, setGetParameter } from \"../../../utils/index\";\r\nimport {\r\n Divider,\r\n ListItemIcon,\r\n Menu,\r\n MenuItem,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport PathButton from \"./PathButton\";\r\nimport DropDown from \"./DropDown\";\r\nimport pathHelper from \"../../../utils/page\";\r\nimport classNames from \"classnames\";\r\nimport Auth from \"../../../middleware/Auth\";\r\nimport Avatar from \"@material-ui/core/Avatar\";\r\nimport { Archive } from \"@material-ui/icons\";\r\nimport { FilePlus } from \"mdi-material-ui\";\r\nimport SubActions from \"./SubActions\";\r\nimport { setCurrentPolicy } from \"../../../redux/explorer/action\";\r\nimport { list } from \"../../../services/navigate\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n path: state.navigator.path,\r\n refresh: state.navigator.refresh,\r\n drawerDesktopOpen: state.viewUpdate.open,\r\n viewMethod: state.viewUpdate.explorerViewMethod,\r\n search: state.explorer.search,\r\n sortMethod: state.viewUpdate.sortMethod,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n navigateToPath: (path) => {\r\n dispatch(navigateTo(path));\r\n },\r\n navigateUp: () => {\r\n dispatch(navigateUp());\r\n },\r\n setNavigatorError: (status, msg) => {\r\n dispatch(setNavigatorError(status, msg));\r\n },\r\n updateFileList: (list) => {\r\n dispatch(explorer.actions.updateFileList(list));\r\n },\r\n setNavigatorLoadingStatus: (status) => {\r\n dispatch(setNavigatorLoadingStatus(status));\r\n },\r\n refreshFileList: () => {\r\n dispatch(refreshFileList());\r\n },\r\n setSelectedTarget: (target) => {\r\n dispatch(setSelectedTarget(target));\r\n },\r\n openCreateFolderDialog: () => {\r\n dispatch(openCreateFolderDialog());\r\n },\r\n openCreateFileDialog: () => {\r\n dispatch(openCreateFileDialog());\r\n },\r\n openShareDialog: () => {\r\n dispatch(openShareDialog());\r\n },\r\n handleDesktopToggle: (open) => {\r\n dispatch(drawerToggleAction(open));\r\n },\r\n openCompressDialog: () => {\r\n dispatch(openCompressDialog());\r\n },\r\n setCurrentPolicy: (policy) => {\r\n dispatch(setCurrentPolicy(policy));\r\n },\r\n };\r\n};\r\n\r\nconst delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));\r\n\r\nconst styles = (theme) => ({\r\n container: {\r\n [theme.breakpoints.down(\"xs\")]: {\r\n display: \"none\",\r\n },\r\n backgroundColor: theme.palette.background.paper,\r\n },\r\n navigatorContainer: {\r\n display: \"flex\",\r\n justifyContent: \"space-between\",\r\n },\r\n nav: {\r\n height: \"48px\",\r\n padding: \"5px 15px\",\r\n display: \"flex\",\r\n },\r\n optionContainer: {\r\n paddingTop: \"6px\",\r\n marginRight: \"10px\",\r\n },\r\n rightIcon: {\r\n marginTop: \"6px\",\r\n verticalAlign: \"top\",\r\n color: \"#868686\",\r\n },\r\n expandMore: {\r\n color: \"#8d8d8d\",\r\n },\r\n roundBorder: {\r\n borderRadius: \"4px 4px 0 0\",\r\n },\r\n});\r\n\r\nclass NavigatorComponent extends Component {\r\n search = undefined;\r\n currentID = 0;\r\n\r\n state = {\r\n hidden: false,\r\n hiddenFolders: [],\r\n folders: [],\r\n anchorEl: null,\r\n hiddenMode: false,\r\n anchorHidden: null,\r\n };\r\n\r\n constructor(props) {\r\n super(props);\r\n this.element = React.createRef();\r\n }\r\n\r\n componentDidMount = () => {\r\n const url = new URL(fixUrlHash(window.location.href));\r\n const c = url.searchParams.get(\"path\");\r\n this.renderPath(c === null ? \"/\" : c);\r\n\r\n if (!this.props.isShare) {\r\n // 如果是在个人文件管理页,首次加载时打开侧边栏\r\n this.props.handleDesktopToggle(true);\r\n }\r\n\r\n // 后退操作时重新导航\r\n window.onpopstate = () => {\r\n const url = new URL(fixUrlHash(window.location.href));\r\n const c = url.searchParams.get(\"path\");\r\n if (c !== null) {\r\n this.props.navigateToPath(c);\r\n }\r\n };\r\n };\r\n\r\n renderPath = (path = null) => {\r\n this.props.setNavigatorError(false, null);\r\n this.setState({\r\n folders:\r\n path !== null\r\n ? path.substr(1).split(\"/\")\r\n : this.props.path.substr(1).split(\"/\"),\r\n });\r\n const newPath = path !== null ? path : this.props.path;\r\n list(\r\n newPath,\r\n this.props.share,\r\n this.search ? this.search.keywords : \"\",\r\n this.search ? this.search.searchPath : \"\"\r\n )\r\n .then((response) => {\r\n this.currentID = response.data.parent;\r\n this.props.updateFileList(response.data.objects);\r\n this.props.setNavigatorLoadingStatus(false);\r\n if (!this.search) {\r\n setGetParameter(\"path\", encodeURIComponent(newPath));\r\n }\r\n if (response.data.policy) {\r\n this.props.setCurrentPolicy({\r\n id: response.data.policy.id,\r\n name: response.data.policy.name,\r\n type: response.data.policy.type,\r\n maxSize: response.data.policy.max_size,\r\n allowedSuffix: response.data.policy.file_type,\r\n });\r\n }\r\n })\r\n .catch((error) => {\r\n this.props.setNavigatorError(true, error);\r\n });\r\n\r\n this.checkOverFlow(true);\r\n };\r\n\r\n redresh = (path) => {\r\n this.props.setNavigatorLoadingStatus(true);\r\n this.props.setNavigatorError(false, \"error\");\r\n this.renderPath(path);\r\n };\r\n\r\n UNSAFE_componentWillReceiveProps = (nextProps) => {\r\n if (this.props.search !== nextProps.search) {\r\n this.search = nextProps.search;\r\n }\r\n if (this.props.path !== nextProps.path) {\r\n this.renderPath(nextProps.path);\r\n }\r\n if (this.props.refresh !== nextProps.refresh) {\r\n this.redresh(nextProps.path);\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n this.props.updateFileList([]);\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevStates) => {\r\n if (this.state.folders !== prevStates.folders) {\r\n this.checkOverFlow(true);\r\n }\r\n if (this.props.drawerDesktopOpen !== prevProps.drawerDesktopOpen) {\r\n delay(500).then(() => this.checkOverFlow());\r\n }\r\n };\r\n\r\n checkOverFlow = (force) => {\r\n if (this.overflowInitLock && !force) {\r\n return;\r\n }\r\n if (this.element.current !== null) {\r\n const hasOverflowingChildren =\r\n this.element.current.offsetHeight <\r\n this.element.current.scrollHeight ||\r\n this.element.current.offsetWidth <\r\n this.element.current.scrollWidth;\r\n if (hasOverflowingChildren) {\r\n this.overflowInitLock = true;\r\n this.setState({ hiddenMode: true });\r\n }\r\n if (!hasOverflowingChildren && this.state.hiddenMode) {\r\n this.setState({ hiddenMode: false });\r\n }\r\n }\r\n };\r\n\r\n navigateTo = (event, id) => {\r\n if (id === this.state.folders.length - 1) {\r\n //最后一个路径\r\n this.setState({ anchorEl: event.currentTarget });\r\n } else if (\r\n id === -1 &&\r\n this.state.folders.length === 1 &&\r\n this.state.folders[0] === \"\"\r\n ) {\r\n this.props.refreshFileList();\r\n this.handleClose();\r\n } else if (id === -1) {\r\n this.props.navigateToPath(\"/\");\r\n this.handleClose();\r\n } else {\r\n this.props.navigateToPath(\r\n \"/\" + this.state.folders.slice(0, id + 1).join(\"/\")\r\n );\r\n this.handleClose();\r\n }\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ anchorEl: null, anchorHidden: null, anchorSort: null });\r\n };\r\n\r\n showHiddenPath = (e) => {\r\n this.setState({ anchorHidden: e.currentTarget });\r\n };\r\n\r\n performAction = (e) => {\r\n this.handleClose();\r\n if (e === \"refresh\") {\r\n this.redresh();\r\n return;\r\n }\r\n const presentPath = this.props.path.split(\"/\");\r\n const newTarget = [\r\n {\r\n id: this.currentID,\r\n type: \"dir\",\r\n name: presentPath.pop(),\r\n path: presentPath.length === 1 ? \"/\" : presentPath.join(\"/\"),\r\n },\r\n ];\r\n //this.props.navitateUp();\r\n switch (e) {\r\n case \"share\":\r\n this.props.setSelectedTarget(newTarget);\r\n this.props.openShareDialog();\r\n break;\r\n case \"newfolder\":\r\n this.props.openCreateFolderDialog();\r\n break;\r\n case \"compress\":\r\n this.props.setSelectedTarget(newTarget);\r\n this.props.openCompressDialog();\r\n break;\r\n case \"newFile\":\r\n this.props.openCreateFileDialog();\r\n break;\r\n default:\r\n break;\r\n }\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const isHomePage = pathHelper.isHomePage(this.props.location.pathname);\r\n const user = Auth.GetUser();\r\n\r\n const presentFolderMenu = (\r\n \r\n this.performAction(\"refresh\")}>\r\n \r\n \r\n \r\n {t(\"fileManager.refresh\")}\r\n \r\n {!this.props.search && isHomePage && (\r\n
\r\n \r\n this.performAction(\"share\")}>\r\n \r\n \r\n \r\n {t(\"fileManager.share\")}\r\n \r\n {user.group.compress && (\r\n this.performAction(\"compress\")}\r\n >\r\n \r\n \r\n \r\n {t(\"fileManager.compress\")}\r\n \r\n )}\r\n \r\n this.performAction(\"newfolder\")}\r\n >\r\n \r\n \r\n \r\n {t(\"fileManager.newFolder\")}\r\n \r\n this.performAction(\"newFile\")}>\r\n \r\n \r\n \r\n {t(\"fileManager.newFile\")}\r\n \r\n
\r\n )}\r\n \r\n );\r\n\r\n return (\r\n \r\n
\r\n
\r\n \r\n this.navigateTo(e, -1)}\r\n />\r\n \r\n \r\n {this.state.hiddenMode && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n this.navigateTo(\r\n e,\r\n this.state.folders.length - 1\r\n )\r\n }\r\n />\r\n {presentFolderMenu}\r\n \r\n )}\r\n {!this.state.hiddenMode &&\r\n this.state.folders.map((folder, id, folders) => (\r\n \r\n {folder !== \"\" && (\r\n \r\n \r\n this.navigateTo(e, id)\r\n }\r\n />\r\n {id === folders.length - 1 &&\r\n presentFolderMenu}\r\n {id !== folders.length - 1 && (\r\n \r\n )}\r\n \r\n )}\r\n \r\n ))}\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nNavigatorComponent.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n path: PropTypes.string.isRequired,\r\n};\r\n\r\nconst Navigator = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(NavigatorComponent))));\r\n\r\nexport default Navigator;\r\n","import React from \"react\";\r\nimport { BulletList } from \"react-content-loader\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n loader: {\r\n width: \"100%\",\r\n // padding: 40,\r\n // [theme.breakpoints.down(\"md\")]: {\r\n // width: \"100%\",\r\n // padding: 10\r\n // }\r\n },\r\n}));\r\n\r\nconst MyLoader = (props) => (\r\n \r\n);\r\n\r\nfunction ListLoading() {\r\n const theme = useTheme();\r\n const classes = useStyles();\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default ListLoading;\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport Drawer from \"@material-ui/core/Drawer\";\r\nimport Toolbar from \"@material-ui/core/Toolbar\";\r\nimport { Clear, Folder } from \"@material-ui/icons\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport { setSideBar } from \"../../../redux/explorer/action\";\r\nimport TypeIcon from \"../TypeIcon\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport IconButton from \"@material-ui/core/IconButton\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport API from \"../../../middleware/Api\";\r\nimport { filename, sizeToString } from \"../../../utils\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport TimeAgo from \"timeago-react\";\r\nimport ListLoading from \"../../Placeholder/ListLoading\";\r\nimport Hidden from \"@material-ui/core/Hidden\";\r\nimport Dialog from \"@material-ui/core/Dialog\";\r\nimport Slide from \"@material-ui/core/Slide\";\r\nimport AppBar from \"@material-ui/core/AppBar\";\r\nimport { formatLocalTime } from \"../../../utils/datetime\";\r\nimport { navigateTo, toggleSnackbar } from \"../../../redux/explorer\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\n\r\nconst drawerWidth = 350;\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n drawer: {\r\n width: drawerWidth,\r\n flexShrink: 0,\r\n },\r\n drawerPaper: {\r\n width: drawerWidth,\r\n boxShadow:\r\n \"0px 8px 10px -5px rgb(0 0 0 / 20%), 0px 16px 24px 2px rgb(0 0 0 / 14%), 0px 6px 30px 5px rgb(0 0 0 / 12%)\",\r\n },\r\n drawerContainer: {\r\n overflow: \"auto\",\r\n },\r\n header: {\r\n display: \"flex\",\r\n padding: theme.spacing(3),\r\n placeContent: \"space-between\",\r\n },\r\n fileIcon: { width: 33, height: 33 },\r\n fileIconSVG: { fontSize: 20 },\r\n folderIcon: {\r\n color: theme.palette.text.secondary,\r\n width: 33,\r\n height: 33,\r\n },\r\n fileName: {\r\n marginLeft: theme.spacing(2),\r\n marginRight: theme.spacing(2),\r\n wordBreak: \"break-all\",\r\n flexGrow: 2,\r\n },\r\n closeIcon: {\r\n placeSelf: \"flex-start\",\r\n marginTop: 2,\r\n },\r\n propsContainer: {\r\n padding: theme.spacing(3),\r\n },\r\n propsLabel: {\r\n color: theme.palette.text.secondary,\r\n padding: theme.spacing(1),\r\n },\r\n propsTime: {\r\n color: theme.palette.text.disabled,\r\n padding: theme.spacing(1),\r\n },\r\n propsValue: {\r\n padding: theme.spacing(1),\r\n wordBreak: \"break-all\",\r\n },\r\n appBar: {\r\n position: \"relative\",\r\n },\r\n title: {\r\n marginLeft: theme.spacing(2),\r\n flex: 1,\r\n },\r\n}));\r\n\r\nconst Transition = React.forwardRef(function Transition(props, ref) {\r\n return ;\r\n});\r\n\r\nexport default function SideDrawer() {\r\n const { t } = useTranslation();\r\n const dispatch = useDispatch();\r\n const sideBarOpen = useSelector((state) => state.explorer.sideBarOpen);\r\n const selected = useSelector((state) => state.explorer.selected);\r\n const SetSideBar = useCallback((open) => dispatch(setSideBar(open)), [\r\n dispatch,\r\n ]);\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const NavigateTo = useCallback((k) => dispatch(navigateTo(k)), [dispatch]);\r\n const search = useSelector((state) => state.explorer.search);\r\n const [target, setTarget] = useState(null);\r\n const [details, setDetails] = useState(null);\r\n const loadProps = (object) => {\r\n API.get(\r\n \"/object/property/\" +\r\n object.id +\r\n \"?trace_root=\" +\r\n (search ? \"true\" : \"false\") +\r\n \"&is_folder=\" +\r\n (object.type === \"dir\").toString()\r\n )\r\n .then((response) => {\r\n setDetails(response.data);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n };\r\n\r\n useEffect(() => {\r\n setDetails(null);\r\n if (sideBarOpen) {\r\n if (selected.length !== 1) {\r\n SetSideBar(false);\r\n } else {\r\n setTarget(selected[0]);\r\n loadProps(selected[0]);\r\n }\r\n }\r\n }, [selected, sideBarOpen]);\r\n\r\n const classes = useStyles();\r\n const propsItem = [\r\n {\r\n label: t(\"fileManager.size\"),\r\n value: (d, target) =>\r\n sizeToString(d.size) +\r\n t(\"fileManager.bytes\", { bytes: d.size.toLocaleString() }),\r\n show: (d) => true,\r\n },\r\n {\r\n label: t(\"fileManager.storagePolicy\"),\r\n value: (d, target) => d.policy,\r\n show: (d) => d.type === \"file\",\r\n },\r\n {\r\n label: t(\"fileManager.childFolders\"),\r\n value: (d, target) =>\r\n t(\"fileManager.childCount\", {\r\n num: d.child_folder_num.toLocaleString(),\r\n }),\r\n show: (d) => d.type === \"dir\",\r\n },\r\n {\r\n label: t(\"fileManager.childFiles\"),\r\n value: (d, target) =>\r\n t(\"fileManager.childCount\", {\r\n num: d.child_file_num.toLocaleString(),\r\n }),\r\n show: (d) => d.type === \"dir\",\r\n },\r\n {\r\n label: t(\"fileManager.parentFolder\"),\r\n // eslint-disable-next-line react/display-name\r\n value: (d, target) => {\r\n const path = d.path === \"\" ? target.path : d.path;\r\n const name = filename(path);\r\n return (\r\n \r\n NavigateTo(path)}\r\n >\r\n {name === \"\" ? t(\"fileManager.rootFolder\") : name}\r\n \r\n \r\n );\r\n },\r\n show: (d) => true,\r\n },\r\n {\r\n label: t(\"fileManager.modifiedAt\"),\r\n value: (d, target) => formatLocalTime(d.updated_at),\r\n show: (d) => true,\r\n },\r\n {\r\n label: t(\"fileManager.createdAt\"),\r\n value: (d) => formatLocalTime(d.created_at),\r\n show: (d) => true,\r\n },\r\n ];\r\n const content = (\r\n \r\n {!details && }\r\n {details && (\r\n <>\r\n {propsItem.map((item) => {\r\n if (item.show(target)) {\r\n return (\r\n <>\r\n \r\n {item.label}\r\n \r\n \r\n {item.value(details, target)}\r\n \r\n \r\n );\r\n }\r\n })}\r\n {target.type === \"dir\" && (\r\n \r\n ,\r\n ,\r\n ,\r\n ]}\r\n />\r\n \r\n )}\r\n \r\n )}\r\n \r\n );\r\n return (\r\n <>\r\n \r\n \r\n {target && (\r\n <>\r\n \r\n \r\n SetSideBar(false)}\r\n aria-label=\"close\"\r\n >\r\n \r\n \r\n \r\n {target.name}\r\n \r\n \r\n \r\n {content}\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {target && (\r\n <>\r\n
\r\n {target.type === \"dir\" && (\r\n \r\n )}\r\n {target.type !== \"dir\" && (\r\n \r\n )}\r\n
\r\n \r\n {target.name}\r\n \r\n
\r\n SetSideBar(false)}\r\n className={classes.closeIcon}\r\n aria-label=\"close\"\r\n size={\"small\"}\r\n >\r\n \r\n \r\n
\r\n \r\n )}\r\n \r\n {content}\r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n","import React, { useEffect, useRef } from \"react\";\r\nimport { useDrop } from \"react-dnd\";\r\nimport { PaginationItem } from \"@material-ui/lab\";\r\n\r\nexport default function CustomPaginationItem(props) {\r\n const inputRef = useRef(null);\r\n\r\n const [{ canDrop, isOver }, drop] = useDrop({\r\n accept: \"object\",\r\n collect: (monitor) => ({\r\n isOver: monitor.isOver(),\r\n canDrop: monitor.canDrop(),\r\n }),\r\n });\r\n\r\n const isActive = canDrop && isOver;\r\n\r\n useEffect(() => {\r\n if (\r\n isActive &&\r\n props.onClick &&\r\n props.type !== \"start-ellipsis\" &&\r\n props.type !== \"end-ellipsis\"\r\n ) {\r\n console.log(\"ss\");\r\n props.onClick();\r\n }\r\n }, [isActive, inputRef]);\r\n\r\n if (\r\n props.isMobile &&\r\n (props.type === \"start-ellipsis\" ||\r\n props.type === \"end-ellipsis\" ||\r\n props.type === \"page\")\r\n ) {\r\n if (props.selected) {\r\n return (\r\n
\r\n {props.page} / {props.count}\r\n
\r\n );\r\n }\r\n return <>;\r\n }\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React, { useCallback, useMemo } from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport { Pagination } from \"@material-ui/lab\";\r\nimport CustomPaginationItem from \"./PaginationItem\";\r\nimport { setPagination } from \"../../redux/viewUpdate/action\";\r\nimport AutoHidden from \"../Dial/AutoHidden\";\r\nimport statusHelper from \"../../utils/page\";\r\nimport { useLocation } from \"react-router-dom\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n root: {\r\n position: \"fixed\",\r\n bottom: 23,\r\n /* left: 8px; */\r\n background: theme.palette.background.paper,\r\n borderRadius: 24,\r\n boxShadow:\r\n \" 0px 3px 5px -1px rgb(0 0 0 / 20%), 0px 6px 10px 0px rgb(0 0 0 / 14%), 0px 1px 18px 0px rgb(0 0 0 / 12%)\",\r\n padding: \"8px 4px 8px 4px\",\r\n marginLeft: 20,\r\n },\r\n placeholder: {\r\n marginTop: 80,\r\n },\r\n}));\r\n\r\nexport default function PaginationFooter() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n const files = useSelector((state) => state.explorer.fileList);\r\n const folders = useSelector((state) => state.explorer.dirList);\r\n const pagination = useSelector((state) => state.viewUpdate.pagination);\r\n const loading = useSelector((state) => state.viewUpdate.navigatorLoading);\r\n const location = useLocation();\r\n\r\n const SetPagination = useCallback((p) => dispatch(setPagination(p)), [\r\n dispatch,\r\n ]);\r\n\r\n const handleChange = (event, value) => {\r\n SetPagination({ ...pagination, page: value });\r\n };\r\n\r\n const count = useMemo(\r\n () => Math.ceil((files.length + folders.length) / pagination.size),\r\n [files, folders, pagination.size]\r\n );\r\n\r\n const isMobile = statusHelper.isMobile();\r\n const isSharePage = statusHelper.isSharePage(location.pathname);\r\n\r\n if (count > 1 && !loading) {\r\n return (\r\n <>\r\n {!isMobile && !isSharePage && (\r\n
\r\n )}\r\n \r\n
\r\n (\r\n \r\n )}\r\n color=\"secondary\"\r\n count={count}\r\n page={pagination.page}\r\n onChange={handleChange}\r\n />\r\n
\r\n \r\n \r\n );\r\n }\r\n return
;\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { DndProvider } from \"react-dnd\";\r\nimport HTML5Backend from \"react-dnd-html5-backend\";\r\nimport { connect } from \"react-redux\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { changeSubTitle } from \"../../redux/viewUpdate/action\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport DragLayer from \"./DnD/DragLayer\";\r\nimport Explorer from \"./Explorer\";\r\nimport Modals from \"./Modals\";\r\nimport Navigator from \"./Navigator/Navigator\";\r\nimport SideDrawer from \"./Sidebar/SideDrawer\";\r\nimport classNames from \"classnames\";\r\nimport {\r\n closeAllModals,\r\n navigateTo,\r\n setSelectedTarget,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport PaginationFooter from \"./Pagination\";\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\n\r\nconst styles = (theme) => ({\r\n root: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"calc(100vh - 64px)\",\r\n [theme.breakpoints.down(\"xs\")]: {\r\n height: \"100%\",\r\n },\r\n },\r\n rootShare: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n height: \"100%\",\r\n minHeight: 500,\r\n },\r\n explorer: {\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n overflowY: \"auto\",\r\n },\r\n});\r\n\r\nconst mapStateToProps = () => ({});\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n changeSubTitle: (text) => {\r\n dispatch(changeSubTitle(text));\r\n },\r\n setSelectedTarget: (targets) => {\r\n dispatch(setSelectedTarget(targets));\r\n },\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n closeAllModals: () => {\r\n dispatch(closeAllModals());\r\n },\r\n navigateTo: (path) => {\r\n dispatch(navigateTo(path));\r\n },\r\n };\r\n};\r\n\r\nclass FileManager extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.image = React.createRef();\r\n }\r\n componentWillUnmount() {\r\n this.props.setSelectedTarget([]);\r\n this.props.closeAllModals();\r\n this.props.navigateTo(\"/\");\r\n }\r\n\r\n componentDidMount() {\r\n if (pathHelper.isHomePage(this.props.location.pathname)) {\r\n this.props.changeSubTitle(null);\r\n }\r\n }\r\n render() {\r\n const { classes } = this.props;\r\n return (\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nFileManager.propTypes = {};\r\n\r\nexport default connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(FileManager)));\r\n","import React from \"react\";\r\nimport {\r\n Icon,\r\n ListItemIcon,\r\n makeStyles,\r\n Menu,\r\n MenuItem,\r\n} from \"@material-ui/core\";\r\nimport CheckIcon from \"@material-ui/icons/Check\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n icon: {\r\n minWidth: 38,\r\n },\r\n}));\r\n\r\nexport default function SelectMenu({\r\n options,\r\n anchorEl,\r\n handleClose,\r\n callback,\r\n selected,\r\n showIcon = true,\r\n}) {\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n {options.map((item) => (\r\n <>\r\n callback(item)}\r\n >\r\n {showIcon && (\r\n \r\n {item.name !== selected ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )}\r\n\r\n {item.name}\r\n \r\n \r\n ))}\r\n \r\n );\r\n}\r\n","import React, { Suspense, useCallback, useEffect, useState } from \"react\";\r\nimport { Button, Paper } from \"@material-ui/core\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport { useLocation, useParams, useRouteMatch } from \"react-router\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport UseFileSubTitle from \"../../hooks/fileSubtitle\";\r\nimport { getPreviewURL } from \"../../middleware/Api\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { basename, fileNameNoExt, isMobileSafari } from \"../../utils\";\r\nimport { list } from \"../../services/navigate\";\r\nimport { getViewerURL } from \"../../redux/explorer/action\";\r\nimport { subtitleSuffix, videoPreviewSuffix } from \"../../config\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { pathJoin } from \"../Uploader/core/utils\";\r\nimport { Launch, PlaylistPlay, Subtitles } from \"@material-ui/icons\";\r\nimport TextLoading from \"../Placeholder/TextLoading\";\r\nimport SelectMenu from \"./SelectMenu\";\r\nimport { getDownloadURL } from \"../../services/file\";\r\nimport { sortMethodFuncs } from \"../FileManager/Sort\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst Artplayer = React.lazy(() =>\r\n import(\r\n /* webpackChunkName: \"artplayer\" */ \"artplayer/examples/react/Artplayer\"\r\n )\r\n);\r\n\r\nconst externalPlayers = [\r\n {\r\n name: \"PotPlayer\",\r\n url: (source, title) => `potplayer://${source}`,\r\n },\r\n {\r\n name: \"VLC\",\r\n url: (source, title) => `vlc://${source}`,\r\n },\r\n {\r\n name: \"IINA\",\r\n url: (source, title) => `iina://weblink?url=${source}`,\r\n },\r\n {\r\n name: \"nPlayer\",\r\n url: (source, title) => `nplayer-${source}`,\r\n },\r\n {\r\n name: \"MXPlayer (Free)\",\r\n url: (source, title) =>\r\n `intent:${source}#Intent;package=com.mxtech.videoplayer.ad;S.title=${title};end`,\r\n },\r\n {\r\n name: \"MXPlayer (Pro)\",\r\n url: (source, title) =>\r\n `intent:${source}#Intent;package=com.mxtech.videoplayer.pro;S.title=${title};end`,\r\n },\r\n];\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n layout: {\r\n width: \"auto\",\r\n marginTop: 30,\r\n marginBottom: 20,\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n },\r\n player: {\r\n height: \"100vh\",\r\n maxHeight: \"calc(100vh - 180px)\",\r\n },\r\n actions: {\r\n marginTop: theme.spacing(2),\r\n },\r\n actionButton: {\r\n marginRight: theme.spacing(1),\r\n marginTop: theme.spacing(1),\r\n },\r\n \"@global\": {\r\n \"video,.art-video-player,.art-bottom\":{\r\n borderRadius: theme.shape.borderRadius,\r\n }\r\n }\r\n}));\r\n\r\nfunction useQuery() {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nexport default function VideoViewer() {\r\n const { t } = useTranslation();\r\n const math = useRouteMatch();\r\n const location = useLocation();\r\n const query = useQuery();\r\n const { id } = useParams();\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const { title, path } = UseFileSubTitle(query, math, location);\r\n const theme = useTheme();\r\n const [art, setArt] = useState(null);\r\n const history = useHistory();\r\n const [files, setFiles] = useState([]);\r\n const [subtitles, setSubtitles] = useState([]);\r\n const [playlist, setPlaylist] = useState([]);\r\n const [subtitleOpen, setSubtitleOpen] = useState(null);\r\n const [subtitleSelected, setSubtitleSelected] = useState(\"\");\r\n const [playlistOpen, setPlaylistOpen] = useState(null);\r\n const [externalPlayerOpen, setExternalPlayerOpen] = useState(null);\r\n const isShare = pathHelper.isSharePage(location.pathname);\r\n const sortMethod = useSelector((state) => state.viewUpdate.sortMethod);\r\n const sortFunc = sortMethodFuncs[sortMethod];\r\n\r\n useEffect(() => {\r\n art &&\r\n art.on(\"ready\", () => {\r\n art.autoHeight = true;\r\n });\r\n return () => {\r\n if (\r\n art !== null &&\r\n !isMobileSafari() &&\r\n document.pictureInPictureEnabled &&\r\n art.playing\r\n ) {\r\n art.pip = true;\r\n art.query(\".art-video\").addEventListener(\r\n \"leavepictureinpicture\",\r\n () => {\r\n art.pause();\r\n },\r\n false\r\n );\r\n }\r\n };\r\n }, [art]);\r\n\r\n const classes = useStyles();\r\n\r\n useEffect(() => {\r\n if (art !== null) {\r\n const newURL = getPreviewURL(\r\n isShare,\r\n id,\r\n query.get(\"id\"),\r\n query.get(\"share_path\")\r\n );\r\n if (newURL !== art.url) {\r\n if (art.subtitle) {\r\n art.subtitle.show = false;\r\n }\r\n art.switchUrl(newURL);\r\n if (path && path !== \"\") {\r\n list(\r\n basename(path),\r\n isShare ? { key: id } : null,\r\n \"\",\r\n \"\"\r\n ).then((res) => {\r\n setFiles(\r\n res.data.objects.sort(sortFunc).filter((o) => o.type === \"file\")\r\n );\r\n setPlaylist(\r\n res.data.objects.filter(\r\n (o) =>\r\n o.type === \"file\" &&\r\n videoPreviewSuffix.indexOf(\r\n o.name.split(\".\").pop().toLowerCase()\r\n ) !== -1\r\n )\r\n );\r\n });\r\n }\r\n }\r\n }\r\n }, [art, id, location, path]);\r\n\r\n const switchSubtitle = (f) => {\r\n if (art !== null) {\r\n const fileType = f.name.split(\".\").pop().toLowerCase();\r\n art.subtitle.switch(\r\n getPreviewURL(\r\n isShare,\r\n id,\r\n f.id,\r\n pathJoin([basename(query.get(\"share_path\")), f.name])\r\n ),\r\n {\r\n type: fileType,\r\n }\r\n );\r\n art.subtitle.show = true;\r\n setSubtitleSelected(f.name);\r\n ToggleSnackbar(\r\n \"top\",\r\n \"center\",\r\n t(\"fileManager.subtitleSwitchTo\", {\r\n subtitle: f.name,\r\n }),\r\n \"info\"\r\n );\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n if (files.length > 0) {\r\n const fileNameMatch = fileNameNoExt(title) + \".\";\r\n const options = files.filter((f) => {\r\n const fileType = f.name.split(\".\").pop().toLowerCase();\r\n return subtitleSuffix.indexOf(fileType) !== -1;\r\n }).sort((a, b) => {\r\n return (a.name.startsWith(fileNameMatch) && !b.name.startsWith(fileNameMatch)) ? -1 : 0;\r\n });\r\n if (options.length > 0 && options[0].name.startsWith(fileNameMatch)) {\r\n switchSubtitle(options[0]);\r\n }\r\n setSubtitles(options);\r\n }\r\n }, [files]);\r\n\r\n const switchVideo = (file) => {\r\n setSubtitleSelected(null);\r\n if (isShare) {\r\n file.key = id;\r\n }\r\n if (isMobileSafari()) {\r\n window.location.href = getViewerURL(\"video\", file, isShare);\r\n } else {\r\n history.push(getViewerURL(\"video\", file, isShare));\r\n }\r\n };\r\n\r\n const setSubtitle = (sub) => {\r\n setSubtitleOpen(null);\r\n switchSubtitle(sub);\r\n };\r\n\r\n const startSelectSubTitle = (e) => {\r\n if (subtitles.length === 0) {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"fileManager.noSubtitleAvailable\"),\r\n \"warning\"\r\n );\r\n return;\r\n }\r\n setSubtitleOpen(e.currentTarget);\r\n };\r\n\r\n const openInExternalPlayer = (player) => {\r\n const current = { name: title };\r\n current.id = query.get(\"id\");\r\n current.path = basename(path);\r\n if (isShare) {\r\n current.key = id;\r\n }\r\n\r\n setExternalPlayerOpen(null);\r\n getDownloadURL(current)\r\n .then((response) => {\r\n window.location.assign(player.url(response.data, title));\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n };\r\n\r\n return (\r\n
\r\n \r\n }>\r\n setArt(a)}\r\n />\r\n \r\n \r\n
\r\n }\r\n variant=\"outlined\"\r\n >\r\n {t(\"fileManager.subtitle\")}\r\n \r\n {playlist.length >= 2 && (\r\n setPlaylistOpen(e.currentTarget)}\r\n className={classes.actionButton}\r\n startIcon={}\r\n variant=\"outlined\"\r\n >\r\n {t(\"fileManager.playlist\")}\r\n \r\n )}\r\n setExternalPlayerOpen(e.currentTarget)}\r\n className={classes.actionButton}\r\n startIcon={}\r\n variant=\"outlined\"\r\n >\r\n {t(\"fileManager.openInExternalPlayer\")}\r\n \r\n
\r\n setSubtitleOpen(null)}\r\n />\r\n setPlaylistOpen(null)}\r\n />\r\n setExternalPlayerOpen(null)}\r\n />\r\n
\r\n );\r\n}\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport OpenIcon from \"@material-ui/icons/OpenInNew\";\r\nimport Pagination from \"@material-ui/lab/Pagination\";\r\nimport FolderIcon from \"@material-ui/icons/Folder\";\r\n\r\nimport {\r\n Avatar,\r\n Card,\r\n CardHeader,\r\n Grid,\r\n IconButton,\r\n Tooltip,\r\n Typography,\r\n} from \"@material-ui/core\";\r\nimport API from \"../../middleware/Api\";\r\nimport TypeIcon from \"../FileManager/TypeIcon\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport { useHistory } from \"react-router-dom\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { useLocation } from \"react-router\";\r\nimport TimeAgo from \"timeago-react\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport Nothing from \"../Placeholder/Nothing\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n cardContainer: {\r\n padding: theme.spacing(1),\r\n },\r\n card: {\r\n maxWidth: 400,\r\n margin: \"0 auto\",\r\n },\r\n actions: {\r\n display: \"flex\",\r\n },\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"50px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n },\r\n shareTitle: {\r\n maxWidth: \"200px\",\r\n },\r\n avatarFile: {\r\n backgroundColor: theme.palette.primary.light,\r\n },\r\n avatarFolder: {\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n gird: {\r\n marginTop: \"30px\",\r\n },\r\n loadMore: {\r\n textAlign: \"right\",\r\n marginTop: \"20px\",\r\n marginBottom: \"40px\",\r\n },\r\n badge: {\r\n marginLeft: theme.spacing(1),\r\n height: 17,\r\n },\r\n orderSelect: {\r\n textAlign: \"right\",\r\n marginTop: 5,\r\n },\r\n cardAction: {\r\n marginTop: 0,\r\n },\r\n}));\r\n\r\nfunction useQuery() {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nexport default function SearchResult() {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"share\" });\r\n const { t: tGlobal } = useTranslation();\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const query = useQuery();\r\n const location = useLocation();\r\n const history = useHistory();\r\n\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const [page, setPage] = useState(1);\r\n const [total, setTotal] = useState(0);\r\n const [shareList, setShareList] = useState([]);\r\n const [orderBy, setOrderBy] = useState(\"created_at DESC\");\r\n\r\n const search = useCallback((keywords, page, orderBy) => {\r\n const order = orderBy.split(\" \");\r\n API.get(\r\n \"/share/search?page=\" +\r\n page +\r\n \"&order_by=\" +\r\n order[0] +\r\n \"&order=\" +\r\n order[1] +\r\n \"&keywords=\" +\r\n encodeURIComponent(keywords)\r\n )\r\n .then((response) => {\r\n setTotal(response.data.total);\r\n setShareList(response.data.items);\r\n })\r\n .catch(() => {\r\n ToggleSnackbar(\"top\", \"right\", t(\"listLoadingError\"), \"error\");\r\n });\r\n }, []);\r\n\r\n useEffect(() => {\r\n const keywords = query.get(\"keywords\");\r\n if (keywords) {\r\n search(keywords, page, orderBy);\r\n } else {\r\n ToggleSnackbar(\"top\", \"right\", t(\"enterKeywords\"), \"warning\");\r\n }\r\n }, [location]);\r\n\r\n const handlePageChange = (event, value) => {\r\n setPage(value);\r\n const keywords = query.get(\"keywords\");\r\n search(keywords, value, orderBy);\r\n };\r\n\r\n const handleOrderChange = (event) => {\r\n setOrderBy(event.target.value);\r\n const keywords = query.get(\"keywords\");\r\n search(keywords, page, event.target.value);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {t(\"searchResult\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"createdAtDesc\")}\r\n \r\n \r\n {t(\"createdAtAsc\")}\r\n \r\n \r\n {t(\"downloadsDesc\")}\r\n \r\n \r\n {t(\"downloadsAsc\")}\r\n \r\n \r\n {t(\"viewsDesc\")}\r\n \r\n \r\n {t(\"viewsAsc\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {shareList.length === 0 && }\r\n {shareList.map((value) => (\r\n \r\n \r\n \r\n {!value.is_dir && (\r\n \r\n )}{\" \"}\r\n {value.is_dir && (\r\n \r\n \r\n \r\n )}\r\n
\r\n }\r\n action={\r\n \r\n \r\n history.push(\"/s/\" + value.key)\r\n }\r\n >\r\n \r\n \r\n \r\n }\r\n title={\r\n \r\n \r\n {value.source\r\n ? value.source.name\r\n : t(\"sourceNotFound\")}\r\n \r\n \r\n }\r\n subheader={\r\n \r\n ,\r\n ]}\r\n />\r\n \r\n }\r\n />\r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n
{\" \"}\r\n \r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport OpenIcon from \"@material-ui/icons/OpenInNew\";\r\nimport Pagination from \"@material-ui/lab/Pagination\";\r\nimport FolderIcon from \"@material-ui/icons/Folder\";\r\nimport LockIcon from \"@material-ui/icons/Lock\";\r\nimport UnlockIcon from \"@material-ui/icons/LockOpen\";\r\nimport EyeIcon from \"@material-ui/icons/RemoveRedEye\";\r\nimport DeleteIcon from \"@material-ui/icons/Delete\";\r\n\r\nimport {\r\n Avatar,\r\n Button,\r\n Card,\r\n CardActions,\r\n CardHeader,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n Grid,\r\n IconButton,\r\n TextField,\r\n Tooltip,\r\n Typography,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport API from \"../../middleware/Api\";\r\nimport TypeIcon from \"../FileManager/TypeIcon\";\r\nimport Chip from \"@material-ui/core/Chip\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport { VisibilityOff, VpnKey } from \"@material-ui/icons\";\r\nimport Select from \"@material-ui/core/Select\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport FormControl from \"@material-ui/core/FormControl\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport ToggleIcon from \"material-ui-toggle-icon\";\r\nimport { formatLocalTime } from \"../../utils/datetime\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport Nothing from \"../Placeholder/Nothing\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = (theme) => ({\r\n cardContainer: {\r\n padding: theme.spacing(1),\r\n },\r\n card: {\r\n maxWidth: 400,\r\n margin: \"0 auto\",\r\n },\r\n actions: {\r\n display: \"flex\",\r\n },\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"50px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n },\r\n shareTitle: {\r\n maxWidth: \"200px\",\r\n },\r\n avatarFile: {\r\n backgroundColor: theme.palette.primary.light,\r\n },\r\n avatarFolder: {\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n gird: {\r\n marginTop: \"30px\",\r\n },\r\n loadMore: {\r\n textAlign: \"right\",\r\n marginTop: \"20px\",\r\n marginBottom: \"40px\",\r\n },\r\n badge: {\r\n marginLeft: theme.spacing(1),\r\n height: 17,\r\n },\r\n orderSelect: {\r\n textAlign: \"right\",\r\n marginTop: 5,\r\n },\r\n});\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n };\r\n};\r\n\r\nclass MyShareCompoment extends Component {\r\n state = {\r\n page: 1,\r\n total: 0,\r\n shareList: [],\r\n showPwd: null,\r\n orderBy: \"created_at DESC\",\r\n };\r\n\r\n componentDidMount = () => {\r\n this.loadList(1, this.state.orderBy);\r\n };\r\n\r\n showPwd = (pwd) => {\r\n this.setState({ showPwd: pwd });\r\n };\r\n\r\n handleClose = () => {\r\n this.setState({ showPwd: null });\r\n };\r\n\r\n removeShare = (id) => {\r\n API.delete(\"/share/\" + id)\r\n .then(() => {\r\n let oldList = this.state.shareList;\r\n oldList = oldList.filter((value) => {\r\n return value.key !== id;\r\n });\r\n this.setState({\r\n shareList: oldList,\r\n total: this.state.total - 1,\r\n });\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"share.shareCanceled\"),\r\n \"success\"\r\n );\r\n if (oldList.length === 0) {\r\n this.loadList(1, this.state.orderBy);\r\n }\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n });\r\n };\r\n\r\n changePermission = (id) => {\r\n const newPwd = Math.random().toString(36).substr(2).slice(2, 8);\r\n const oldList = this.state.shareList;\r\n const shareIndex = oldList.findIndex((value) => {\r\n return value.key === id;\r\n });\r\n API.patch(\"/share/\" + id, {\r\n prop: \"password\",\r\n value: oldList[shareIndex].password === \"\" ? newPwd : \"\",\r\n })\r\n .then((response) => {\r\n oldList[shareIndex].password = response.data;\r\n this.setState({\r\n shareList: oldList,\r\n });\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n });\r\n };\r\n\r\n changePreviewOption = (id) => {\r\n const oldList = this.state.shareList;\r\n const shareIndex = oldList.findIndex((value) => {\r\n return value.key === id;\r\n });\r\n API.patch(\"/share/\" + id, {\r\n prop: \"preview_enabled\",\r\n value: oldList[shareIndex].preview ? \"false\" : \"true\",\r\n })\r\n .then((response) => {\r\n oldList[shareIndex].preview = response.data;\r\n this.setState({\r\n shareList: oldList,\r\n });\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n });\r\n };\r\n\r\n loadList = (page, orderBy) => {\r\n const order = orderBy.split(\" \");\r\n API.get(\r\n \"/share?page=\" +\r\n page +\r\n \"&order_by=\" +\r\n order[0] +\r\n \"&order=\" +\r\n order[1]\r\n )\r\n .then((response) => {\r\n this.setState({\r\n total: response.data.total,\r\n shareList: response.data.items,\r\n });\r\n })\r\n .catch(() => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"share.listLoadingError\"),\r\n \"error\"\r\n );\r\n });\r\n };\r\n\r\n handlePageChange = (event, value) => {\r\n this.setState({\r\n page: value,\r\n });\r\n this.loadList(value, this.state.orderBy);\r\n };\r\n\r\n handleOrderChange = (event) => {\r\n this.setState({\r\n orderBy: event.target.value,\r\n });\r\n this.loadList(this.state.page, event.target.value);\r\n };\r\n\r\n isExpired = (share) => {\r\n return share.expire < -1 || share.remain_downloads === 0;\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n {t(\"share.sharedFiles\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"share.createdAtDesc\")}\r\n \r\n \r\n {t(\"share.createdAtAsc\")}\r\n \r\n \r\n {t(\"share.downloadsDesc\")}\r\n \r\n \r\n {t(\"share.downloadsAsc\")}\r\n \r\n \r\n {t(\"share.viewsDesc\")}\r\n \r\n \r\n {t(\"share.viewsAsc\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n {this.state.shareList.length === 0 && (\r\n \r\n )}\r\n {this.state.shareList.map((value) => (\r\n \r\n \r\n \r\n {!value.is_dir && (\r\n \r\n )}{\" \"}\r\n {value.is_dir && (\r\n \r\n \r\n \r\n )}\r\n
\r\n }\r\n title={\r\n \r\n \r\n {value.source\r\n ? value.source.name\r\n : t(\"share.sourceNotFound\")}\r\n \r\n \r\n }\r\n subheader={\r\n \r\n {formatLocalTime(value.create_date)}\r\n {this.isExpired(value) && (\r\n \r\n )}\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n \r\n this.props.history.push(\r\n \"/s/\" +\r\n value.key +\r\n (value.password === \"\"\r\n ? \"\"\r\n : \"?password=\" +\r\n value.password)\r\n )\r\n }\r\n >\r\n \r\n \r\n {\" \"}\r\n {value.password !== \"\" && (\r\n <>\r\n \r\n this.changePermission(\r\n value.key\r\n )\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n this.showPwd(value.password)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {value.password === \"\" && (\r\n \r\n this.changePermission(value.key)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n )}\r\n \r\n this.changePreviewOption(value.key)\r\n }\r\n >\r\n \r\n \r\n }\r\n offIcon={\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n this.removeShare(value.key)\r\n }\r\n >\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n
\r\n \r\n
{\" \"}\r\n \r\n {t(\"share.sharePassword\")} {\" \"}\r\n \r\n \r\n {\" \"}\r\n \r\n {\" \"}\r\n {\" \"}\r\n {\" \"}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst MyShare = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(MyShareCompoment))));\r\n\r\nexport default MyShare;\r\n","import React, { useEffect, useState } from \"react\";\r\nimport {\r\n Button,\r\n CircularProgress,\r\n Dialog,\r\n DialogActions,\r\n DialogContent,\r\n DialogTitle,\r\n makeStyles,\r\n} from \"@material-ui/core\";\r\nimport FormGroup from \"@material-ui/core/FormGroup\";\r\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\r\nimport Checkbox from \"@material-ui/core/Checkbox\";\r\nimport MenuItem from \"@material-ui/core/MenuItem\";\r\nimport { Virtuoso } from \"react-virtuoso\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n contentFix: {\r\n padding: \"10px 24px 0px 24px\",\r\n },\r\n wrapper: {\r\n margin: theme.spacing(1),\r\n position: \"relative\",\r\n },\r\n buttonProgress: {\r\n color: theme.palette.secondary.light,\r\n position: \"absolute\",\r\n top: \"50%\",\r\n left: \"50%\",\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n content: {\r\n padding: 0,\r\n },\r\n scroll: {\r\n maxHeight: \"calc(100vh - 200px)\",\r\n },\r\n}));\r\n\r\nexport default function SelectFileDialog(props) {\r\n const { t } = useTranslation();\r\n const [files, setFiles] = useState(props.files);\r\n\r\n useEffect(() => {\r\n setFiles(props.files);\r\n }, [props.files]);\r\n\r\n const handleChange = (index) => (event) => {\r\n const filesCopy = [...files];\r\n // eslint-disable-next-line\r\n filesCopy.map((v, k) => {\r\n if (v.index === index) {\r\n filesCopy[k] = {\r\n ...filesCopy[k],\r\n selected: event.target.checked ? \"true\" : \"false\",\r\n };\r\n }\r\n });\r\n setFiles(filesCopy);\r\n };\r\n\r\n const submit = () => {\r\n const index = [];\r\n // eslint-disable-next-line\r\n files.map((v) => {\r\n if (v.selected === \"true\") {\r\n index.push(parseInt(v.index));\r\n }\r\n });\r\n props.onSubmit(index);\r\n };\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n {t(\"download.selectDownloadingFile\")}\r\n \r\n \r\n (\r\n \r\n \r\n \r\n }\r\n label={v.path}\r\n />\r\n \r\n \r\n )}\r\n />\r\n \r\n \r\n \r\n
\r\n \r\n {t(\"ok\", { ns: \"common\" })}\r\n {props.modalsLoading && (\r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n );\r\n}\r\n","import {\r\n Card,\r\n CardContent,\r\n darken,\r\n IconButton,\r\n lighten,\r\n LinearProgress,\r\n makeStyles,\r\n Typography,\r\n useTheme,\r\n} from \"@material-ui/core\";\r\nimport Badge from \"@material-ui/core/Badge\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport MuiExpansionPanel from \"@material-ui/core/ExpansionPanel\";\r\nimport MuiExpansionPanelDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport MuiExpansionPanelSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport { ExpandMore, HighlightOff } from \"@material-ui/icons\";\r\nimport PermMediaIcon from \"@material-ui/icons/PermMedia\";\r\nimport classNames from \"classnames\";\r\nimport React, { useCallback, useEffect, useMemo } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport TimeAgo from \"timeago-react\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport API from \"../../middleware/Api\";\r\nimport { hex2bin, sizeToString } from \"../../utils\";\r\nimport TypeIcon from \"../FileManager/TypeIcon\";\r\nimport SelectFileDialog from \"../Modals/SelectFile\";\r\nimport { useHistory } from \"react-router\";\r\nimport { TableVirtuoso } from \"react-virtuoso\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst ExpansionPanel = withStyles({\r\n root: {\r\n maxWidth: \"100%\",\r\n boxShadow: \"none\",\r\n \"&:not(:last-child)\": {\r\n borderBottom: 0,\r\n },\r\n \"&:before\": {\r\n display: \"none\",\r\n },\r\n \"&$expanded\": {},\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanel);\r\n\r\nconst ExpansionPanelSummary = withStyles({\r\n root: {\r\n minHeight: 0,\r\n padding: 0,\r\n\r\n \"&$expanded\": {\r\n minHeight: 56,\r\n },\r\n },\r\n content: {\r\n maxWidth: \"100%\",\r\n margin: 0,\r\n display: \"flex\",\r\n \"&$expanded\": {\r\n margin: \"0\",\r\n },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanelSummary);\r\n\r\nconst ExpansionPanelDetails = withStyles((theme) => ({\r\n root: {\r\n display: \"block\",\r\n padding: theme.spacing(0),\r\n },\r\n}))(MuiExpansionPanelDetails);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n card: {\r\n marginTop: \"20px\",\r\n justifyContent: \"space-between\",\r\n },\r\n iconContainer: {\r\n width: \"90px\",\r\n height: \"96px\",\r\n padding: \" 35px 29px 29px 29px\",\r\n paddingLeft: \"35px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n content: {\r\n width: \"100%\",\r\n minWidth: 0,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n borderInlineStart: \"1px \" + theme.palette.divider + \" solid\",\r\n },\r\n },\r\n contentSide: {\r\n minWidth: 0,\r\n paddingTop: \"24px\",\r\n paddingRight: \"28px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n iconBig: {\r\n fontSize: \"30px\",\r\n },\r\n iconMultiple: {\r\n fontSize: \"30px\",\r\n color: \"#607D8B\",\r\n },\r\n progress: {\r\n marginTop: 8,\r\n marginBottom: 4,\r\n },\r\n expand: {\r\n transition: \".15s transform ease-in-out\",\r\n },\r\n expanded: {\r\n transform: \"rotate(180deg)\",\r\n },\r\n subFile: {\r\n width: \"100%\",\r\n minWidth: 300,\r\n wordBreak: \"break-all\",\r\n },\r\n subFileName: {\r\n display: \"flex\",\r\n },\r\n subFileIcon: {\r\n marginRight: \"20px\",\r\n },\r\n subFileSize: {\r\n minWidth: 120,\r\n },\r\n subFilePercent: {\r\n minWidth: 105,\r\n },\r\n scroll: {\r\n overflow: \"auto\",\r\n maxHeight: \"300px\",\r\n },\r\n action: {\r\n padding: theme.spacing(2),\r\n textAlign: \"right\",\r\n },\r\n actionButton: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n info: {\r\n padding: theme.spacing(2),\r\n },\r\n infoTitle: {\r\n fontWeight: 700,\r\n textAlign: \"left\",\r\n },\r\n infoValue: {\r\n color: theme.palette.text.secondary,\r\n textAlign: \"left\",\r\n paddingLeft:theme.spacing(1),\r\n },\r\n bitmap: {\r\n width: \"100%\",\r\n height: \"50px\",\r\n backgroundColor: theme.palette.background.default,\r\n },\r\n}));\r\n\r\nexport default function DownloadingCard(props) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"download\" });\r\n const { t: tGlobal } = useTranslation();\r\n const canvasRef = React.createRef();\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const history = useHistory();\r\n\r\n const [expanded, setExpanded] = React.useState(\"\");\r\n const [task, setTask] = React.useState(props.task);\r\n const [loading, setLoading] = React.useState(false);\r\n const [selectDialogOpen, setSelectDialogOpen] = React.useState(false);\r\n const [selectFileOption, setSelectFileOption] = React.useState([]);\r\n\r\n const handleChange = (panel) => (event, newExpanded) => {\r\n setExpanded(newExpanded ? panel : false);\r\n };\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n setTask(props.task);\r\n }, [props.task]);\r\n\r\n useEffect(() => {\r\n if (task.info.bitfield === \"\") {\r\n return;\r\n }\r\n let result = \"\";\r\n task.info.bitfield.match(/.{1,2}/g).forEach((str) => {\r\n result += hex2bin(str);\r\n });\r\n const canvas = canvasRef.current;\r\n const context = canvas.getContext(\"2d\");\r\n context.clearRect(0, 0, canvas.width, canvas.height);\r\n context.strokeStyle = theme.palette.primary.main;\r\n for (let i = 0; i < canvas.width; i++) {\r\n let bit =\r\n result[\r\n Math.round(((i + 1) / canvas.width) * task.info.numPieces)\r\n ];\r\n bit = bit ? bit : result.slice(-1);\r\n if (bit === \"1\") {\r\n context.beginPath();\r\n context.moveTo(i, 0);\r\n context.lineTo(i, canvas.height);\r\n context.stroke();\r\n }\r\n }\r\n // eslint-disable-next-line\r\n }, [task.info.bitfield, task.info.numPieces, theme]);\r\n\r\n const getPercent = (completed, total) => {\r\n if (total === 0) {\r\n return 0;\r\n }\r\n return (completed / total) * 100;\r\n };\r\n\r\n const activeFiles = useCallback(() => {\r\n return task.info.files.filter((v) => v.selected === \"true\");\r\n }, [task.info.files]);\r\n\r\n const deleteFile = (index) => {\r\n setLoading(true);\r\n const current = activeFiles();\r\n const newIndex = [];\r\n const newFiles = [];\r\n // eslint-disable-next-line\r\n current.map((v) => {\r\n if (v.index !== index && v.selected) {\r\n newIndex.push(parseInt(v.index));\r\n newFiles.push({\r\n ...v,\r\n selected: \"true\",\r\n });\r\n } else {\r\n newFiles.push({\r\n ...v,\r\n selected: \"false\",\r\n });\r\n }\r\n });\r\n API.put(\"/aria2/select/\" + task.info.gid, {\r\n indexes: newIndex,\r\n })\r\n .then(() => {\r\n setTask({\r\n ...task,\r\n info: {\r\n ...task.info,\r\n files: newFiles,\r\n },\r\n });\r\n ToggleSnackbar(\"top\", \"right\", t(\"taskFileDeleted\"), \"success\");\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n })\r\n .then(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const getDownloadName = useCallback(() => {\r\n if (task.info.bittorrent.info.name !== \"\") {\r\n return task.info.bittorrent.info.name;\r\n }\r\n return task.name === \".\" ? t(\"unknownTaskName\") : task.name;\r\n }, [task]);\r\n\r\n const getIcon = useCallback(() => {\r\n if (task.info.bittorrent.mode === \"multi\") {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n // eslint-disable-next-line\r\n }, [task, classes]);\r\n\r\n const cancel = () => {\r\n setLoading(true);\r\n API.delete(\"/aria2/task/\" + task.info.gid)\r\n .then(() => {\r\n ToggleSnackbar(\"top\", \"right\", t(\"taskCanceled\"), \"success\");\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n })\r\n .then(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const changeSelectedFile = (fileIndex) => {\r\n setLoading(true);\r\n API.put(\"/aria2/select/\" + task.info.gid, {\r\n indexes: fileIndex,\r\n })\r\n .then(() => {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"operationSubmitted\"),\r\n \"success\"\r\n );\r\n setSelectDialogOpen(false);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n })\r\n .then(() => {\r\n setLoading(false);\r\n });\r\n };\r\n\r\n const subFileList = useMemo(() => {\r\n const processStyle = (value) => ({\r\n background:\r\n \"linear-gradient(to right, \" +\r\n (theme.palette.type ===\r\n \"dark\"\r\n ? darken(\r\n theme.palette\r\n .primary\r\n .main,\r\n 0.4\r\n )\r\n : lighten(\r\n theme.palette\r\n .primary\r\n .main,\r\n 0.85\r\n )) +\r\n \" 0%,\" +\r\n (theme.palette.type ===\r\n \"dark\"\r\n ? darken(\r\n theme.palette\r\n .primary\r\n .main,\r\n 0.4\r\n )\r\n : lighten(\r\n theme.palette\r\n .primary\r\n .main,\r\n 0.85\r\n )) +\r\n \" \" +\r\n getPercent(\r\n value.completedLength,\r\n value.length\r\n ).toFixed(0) +\r\n \"%,\" +\r\n theme.palette.background\r\n .paper +\r\n \" \" +\r\n getPercent(\r\n value.completedLength,\r\n value.length\r\n ).toFixed(0) +\r\n \"%,\" +\r\n theme.palette.background\r\n .paper +\r\n \" 100%)\",\r\n });\r\n\r\n const subFileCell = (value) => (\r\n <>\r\n \r\n \r\n \r\n {value.path}\r\n \r\n \r\n \r\n \r\n {\" \"}\r\n {sizeToString(\r\n value.length\r\n )}\r\n \r\n \r\n \r\n \r\n {getPercent(\r\n value.completedLength,\r\n value.length\r\n ).toFixed(2)}\r\n %\r\n \r\n \r\n \r\n \r\n \r\n deleteFile(\r\n value.index\r\n )\r\n }\r\n disabled={loading}\r\n size={\"small\"}\r\n >\r\n \r\n \r\n \r\n \r\n \r\n );\r\n\r\n return activeFiles().length > 5 ? (\r\n ,\r\n // eslint-disable-next-line react/display-name\r\n TableRow: (props) => {\r\n const index = props[\"data-index\"];\r\n const value = activeFiles()[index];\r\n return (\r\n \r\n );\r\n },\r\n }}\r\n data={activeFiles()}\r\n itemContent={(index, value) => (\r\n subFileCell(value)\r\n )}\r\n />\r\n ) : (\r\n
\r\n
\r\n \r\n {activeFiles().map((value) => {\r\n return (\r\n \r\n {subFileCell(value)}\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n );\r\n }, [\r\n classes,\r\n theme,\r\n activeFiles,\r\n ]);\r\n\r\n return (\r\n \r\n setSelectDialogOpen(false)}\r\n modalsLoading={loading}\r\n files={selectFileOption}\r\n onSubmit={changeSelectedFile}\r\n />\r\n \r\n \r\n
{getIcon()}
\r\n \r\n \r\n \r\n {getDownloadName()}\r\n \r\n \r\n \r\n \r\n {task.total > 0 && (\r\n \r\n {getPercent(\r\n task.downloaded,\r\n task.total\r\n ).toFixed(2)}\r\n % -{\" \"}\r\n {task.downloaded === 0\r\n ? \"0Bytes\"\r\n : sizeToString(task.downloaded)}\r\n /\r\n {task.total === 0\r\n ? \"0Bytes\"\r\n : sizeToString(task.total)}{\" \"}\r\n -{\" \"}\r\n {task.speed === \"0\"\r\n ? \"0B/s\"\r\n : sizeToString(task.speed) + \"/s\"}\r\n \r\n )}\r\n {task.total === 0 && - }\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {task.info.bittorrent.mode === \"multi\" && subFileList}\r\n
\r\n \r\n history.push(\r\n \"/home?path=\" + encodeURIComponent(task.dst)\r\n )\r\n }\r\n >\r\n {t(\"openDstFolder\")}\r\n \r\n {task.info.bittorrent.mode === \"multi\" && (\r\n {\r\n setSelectDialogOpen(true);\r\n setSelectFileOption([\r\n ...props.task.info.files,\r\n ]);\r\n }}\r\n >\r\n {t(\"selectDownloadingFile\")}\r\n \r\n )}\r\n \r\n {t(\"cancelTask\")}\r\n \r\n
\r\n \r\n
\r\n {task.info.bitfield !== \"\" && (\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n {t(\"updatedAt\")}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {t(\"uploaded\")}\r\n \r\n \r\n {sizeToString(task.info.uploadLength)}\r\n \r\n \r\n \r\n \r\n {t(\"uploadSpeed\")}\r\n \r\n \r\n {sizeToString(task.info.uploadSpeed)} / s\r\n \r\n \r\n {task.info.bittorrent.mode !== \"\" && (\r\n <>\r\n \r\n \r\n {t(\"InfoHash\")}\r\n \r\n \r\n {task.info.infoHash}\r\n \r\n \r\n \r\n \r\n {t(\"seederCount\")}\r\n \r\n \r\n {task.info.numSeeders}\r\n \r\n \r\n \r\n \r\n {t(\"seeding\")}\r\n \r\n \r\n {task.info.seeder === \"true\"\r\n ? t(\"isSeeding\")\r\n : t(\"notSeeding\")}\r\n \r\n \r\n \r\n )}\r\n \r\n \r\n {t(\"chunkSize\")}\r\n \r\n \r\n {sizeToString(task.info.pieceLength)}\r\n \r\n \r\n \r\n \r\n {t(\"chunkNumbers\")}\r\n \r\n \r\n {task.info.numPieces}\r\n \r\n \r\n {props.task.node && \r\n \r\n {t(\"downloadNode\")}\r\n \r\n \r\n {props.task.node}\r\n \r\n }\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React, { useCallback, useMemo } from \"react\";\r\nimport {\r\n Card,\r\n CardContent,\r\n IconButton,\r\n makeStyles,\r\n Typography,\r\n useTheme,\r\n} from \"@material-ui/core\";\r\nimport { sizeToString } from \"../../utils\";\r\nimport PermMediaIcon from \"@material-ui/icons/PermMedia\";\r\nimport TypeIcon from \"../FileManager/TypeIcon\";\r\nimport MuiExpansionPanel from \"@material-ui/core/ExpansionPanel\";\r\nimport MuiExpansionPanelSummary from \"@material-ui/core/ExpansionPanelSummary\";\r\nimport MuiExpansionPanelDetails from \"@material-ui/core/ExpansionPanelDetails\";\r\nimport withStyles from \"@material-ui/core/styles/withStyles\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport { ExpandMore } from \"@material-ui/icons\";\r\nimport classNames from \"classnames\";\r\nimport Table from \"@material-ui/core/Table\";\r\nimport TableBody from \"@material-ui/core/TableBody\";\r\nimport TableRow from \"@material-ui/core/TableRow\";\r\nimport TableCell from \"@material-ui/core/TableCell\";\r\nimport Badge from \"@material-ui/core/Badge\";\r\nimport Tooltip from \"@material-ui/core/Tooltip\";\r\nimport Button from \"@material-ui/core/Button\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport API from \"../../middleware/Api\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport { useHistory } from \"react-router\";\r\nimport { formatLocalTime } from \"../../utils/datetime\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { TableVirtuoso } from \"react-virtuoso\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nconst ExpansionPanel = withStyles({\r\n root: {\r\n maxWidth: \"100%\",\r\n boxShadow: \"none\",\r\n \"&:not(:last-child)\": {\r\n borderBottom: 0,\r\n },\r\n \"&:before\": {\r\n display: \"none\",\r\n },\r\n \"&$expanded\": {},\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanel);\r\n\r\nconst ExpansionPanelSummary = withStyles({\r\n root: {\r\n minHeight: 0,\r\n padding: 0,\r\n\r\n \"&$expanded\": {\r\n minHeight: 56,\r\n },\r\n },\r\n content: {\r\n maxWidth: \"100%\",\r\n margin: 0,\r\n display: \"flex\",\r\n \"&$expanded\": {\r\n margin: \"0\",\r\n },\r\n },\r\n expanded: {},\r\n})(MuiExpansionPanelSummary);\r\n\r\nconst ExpansionPanelDetails = withStyles((theme) => ({\r\n root: {\r\n display: \"block\",\r\n padding: theme.spacing(0),\r\n },\r\n}))(MuiExpansionPanelDetails);\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n card: {\r\n marginTop: \"20px\",\r\n justifyContent: \"space-between\",\r\n },\r\n iconContainer: {\r\n width: \"90px\",\r\n height: \"96px\",\r\n padding: \" 35px 29px 29px 29px\",\r\n paddingLeft: \"35px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n content: {\r\n width: \"100%\",\r\n minWidth: 0,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n borderInlineStart: \"1px \" + theme.palette.divider + \" solid\",\r\n },\r\n textAlign: \"left\",\r\n },\r\n contentSide: {\r\n minWidth: 0,\r\n paddingTop: \"24px\",\r\n paddingRight: \"28px\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n display: \"none\",\r\n },\r\n },\r\n iconBig: {\r\n fontSize: \"30px\",\r\n },\r\n iconMultiple: {\r\n fontSize: \"30px\",\r\n color: \"#607D8B\",\r\n },\r\n progress: {\r\n marginTop: 8,\r\n marginBottom: 4,\r\n },\r\n expand: {\r\n transition: \".15s transform ease-in-out\",\r\n },\r\n expanded: {\r\n transform: \"rotate(180deg)\",\r\n },\r\n subFile: {\r\n width: \"100%\",\r\n minWidth: 300,\r\n wordBreak: \"break-all\",\r\n },\r\n subFileName: {\r\n display: \"flex\",\r\n },\r\n subFileIcon: {\r\n marginRight: \"20px\",\r\n },\r\n subFileSize: {\r\n minWidth: 115,\r\n },\r\n subFilePercent: {\r\n minWidth: 100,\r\n },\r\n scroll: {\r\n overflow: \"auto\",\r\n maxHeight: \"300px\",\r\n },\r\n action: {\r\n padding: theme.spacing(2),\r\n textAlign: \"right\",\r\n },\r\n actionButton: {\r\n marginLeft: theme.spacing(1),\r\n },\r\n info: {\r\n padding: theme.spacing(2),\r\n },\r\n infoTitle: {\r\n fontWeight: 700,\r\n textAlign: \"left\",\r\n },\r\n infoValue: {\r\n color: theme.palette.text.secondary,\r\n textAlign: \"left\",\r\n paddingLeft: theme.spacing(1),\r\n },\r\n}));\r\n\r\nexport default function FinishedCard(props) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"download\" });\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n const history = useHistory();\r\n\r\n const [expanded, setExpanded] = React.useState(false);\r\n const [loading, setLoading] = React.useState(false);\r\n\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n const handleChange = () => (event, newExpanded) => {\r\n setExpanded(!!newExpanded);\r\n };\r\n\r\n const getPercent = (completed, total) => {\r\n if (total === 0) {\r\n return 0;\r\n }\r\n return (completed / total) * 100;\r\n };\r\n\r\n const cancel = () => {\r\n setLoading(true);\r\n API.delete(\"/aria2/task/\" + props.task.gid)\r\n .then(() => {\r\n ToggleSnackbar(\"top\", \"right\", t(\"taskDeleted\"), \"success\");\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n })\r\n .then(() => {\r\n window.location.reload();\r\n });\r\n };\r\n\r\n const getDownloadName = useCallback(() => {\r\n return props.task.name === \".\" ? t(\"unknownTaskName\") : props.task.name;\r\n }, [props.task.name]);\r\n\r\n const activeFiles = useCallback(() => {\r\n return props.task.files.filter((v) => v.selected === \"true\");\r\n }, [props.task.files]);\r\n\r\n const getIcon = useCallback(() => {\r\n if (props.task.files.length > 1) {\r\n return (\r\n \r\n \r\n \r\n );\r\n } else {\r\n return (\r\n \r\n );\r\n }\r\n }, [props.task, classes]);\r\n\r\n const getTaskError = (error) => {\r\n try {\r\n const res = JSON.parse(error);\r\n return res.msg + \":\" + res.error;\r\n } catch (e) {\r\n return t(\"transferFailed\");\r\n }\r\n };\r\n\r\n const subFileList = useMemo(() => {\r\n const subFileCell = (value) => (\r\n <>\r\n \r\n \r\n \r\n {value.path}\r\n \r\n \r\n \r\n \r\n {\" \"}\r\n {sizeToString(value.length)}\r\n \r\n \r\n \r\n \r\n {getPercent(\r\n value.completedLength,\r\n value.length\r\n ).toFixed(2)}\r\n %\r\n \r\n \r\n \r\n );\r\n\r\n return activeFiles().length > 5 ? (\r\n ,\r\n }}\r\n data={activeFiles()}\r\n itemContent={(index, value) => subFileCell(value)}\r\n />\r\n ) : (\r\n
\r\n
\r\n \r\n {activeFiles().map((value) => {\r\n return (\r\n \r\n {subFileCell(value)}\r\n \r\n );\r\n })}\r\n \r\n
\r\n \r\n );\r\n }, [classes, activeFiles]);\r\n\r\n return (\r\n \r\n \r\n \r\n
{getIcon()}
\r\n \r\n \r\n \r\n {getDownloadName()}\r\n \r\n \r\n {props.task.status === 3 && (\r\n \r\n \r\n {t(\"downloadFailed\", {\r\n msg: props.task.error,\r\n })}\r\n \r\n \r\n )}\r\n {props.task.status === 5 && (\r\n \r\n {t(\"canceledStatus\")}\r\n {props.task.error !== \"\" && (\r\n ({props.task.error})\r\n )}\r\n \r\n )}\r\n {props.task.status === 4 &&\r\n props.task.task_status === 4 && (\r\n \r\n {t(\"finishedStatus\")}\r\n \r\n )}\r\n {props.task.status === 4 &&\r\n props.task.task_status === 0 && (\r\n \r\n {t(\"pending\")}\r\n \r\n )}\r\n {props.task.status === 4 &&\r\n props.task.task_status === 1 && (\r\n \r\n {t(\"transferring\")}\r\n \r\n )}\r\n {props.task.status === 4 &&\r\n props.task.task_status === 2 && (\r\n \r\n \r\n {getTaskError(props.task.task_error)}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.task.files.length > 1 && subFileList}\r\n
\r\n \r\n history.push(\r\n \"/home?path=\" +\r\n encodeURIComponent(props.task.dst)\r\n )\r\n }\r\n >\r\n {t(\"openDstFolder\")}\r\n \r\n \r\n {t(\"deleteRecord\")}\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n {t(\"createdAt\")}\r\n \r\n \r\n {formatLocalTime(props.task.create)}\r\n \r\n \r\n \r\n \r\n {t(\"updatedAt\")}\r\n \r\n \r\n {formatLocalTime(props.task.update)}\r\n \r\n \r\n {props.task.node && (\r\n \r\n \r\n {t(\"downloadNode\")}\r\n \r\n \r\n {props.task.node}\r\n \r\n \r\n )}\r\n \r\n
\r\n
\r\n \r\n
\r\n );\r\n}\r\n","import React, { useCallback } from \"react\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport AutoHidden from \"./AutoHidden\";\r\nimport { makeStyles } from \"@material-ui/core\";\r\nimport Fab from \"@material-ui/core/Fab\";\r\nimport { Add } from \"@material-ui/icons\";\r\nimport Modals from \"../FileManager/Modals\";\r\nimport { openRemoteDownloadDialog } from \"../../redux/explorer\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n fab: {\r\n margin: 0,\r\n top: \"auto\",\r\n right: 20,\r\n bottom: 20,\r\n left: \"auto\",\r\n zIndex: 5,\r\n position: \"fixed\",\r\n },\r\n}));\r\n\r\nexport default function RemoteDownloadButton() {\r\n const classes = useStyles();\r\n const dispatch = useDispatch();\r\n\r\n const OpenRemoteDownloadDialog = useCallback(\r\n () => dispatch(openRemoteDownloadDialog()),\r\n [dispatch]\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n OpenRemoteDownloadDialog()}\r\n >\r\n \r\n \r\n \r\n \r\n );\r\n}\r\n","import { Button, IconButton, Typography, withStyles } from \"@material-ui/core\";\r\nimport RefreshIcon from \"@material-ui/icons/Refresh\";\r\nimport React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport API from \"../../middleware/Api\";\r\nimport DownloadingCard from \"./DownloadingCard\";\r\nimport FinishedCard from \"./FinishedCard\";\r\nimport RemoteDownloadButton from \"../Dial/Aria2\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport Nothing from \"../Placeholder/Nothing\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = (theme) => ({\r\n actions: {\r\n display: \"flex\",\r\n },\r\n title: {\r\n marginTop: \"20px\",\r\n },\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"30px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 700,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n },\r\n shareTitle: {\r\n maxWidth: \"200px\",\r\n },\r\n avatarFile: {\r\n backgroundColor: theme.palette.primary.light,\r\n },\r\n avatarFolder: {\r\n backgroundColor: theme.palette.secondary.light,\r\n },\r\n gird: {\r\n marginTop: \"30px\",\r\n },\r\n hide: {\r\n display: \"none\",\r\n },\r\n loadingAnimation: {\r\n borderRadius: \"6px 6px 0 0\",\r\n },\r\n shareFix: {\r\n marginLeft: \"20px\",\r\n },\r\n loadMore: {\r\n textAlign: \"center\",\r\n marginTop: \"20px\",\r\n marginBottom: \"20px\",\r\n },\r\n margin: {\r\n marginTop: theme.spacing(2),\r\n },\r\n});\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n };\r\n};\r\n\r\nclass DownloadComponent extends Component {\r\n page = 0;\r\n interval = 0;\r\n previousDownloading = -1;\r\n\r\n state = {\r\n downloading: [],\r\n loading: false,\r\n finishedList: [],\r\n continue: true,\r\n };\r\n\r\n componentDidMount = () => {\r\n this.loadDownloading();\r\n };\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.interval);\r\n }\r\n\r\n loadDownloading = () => {\r\n this.setState({\r\n loading: true,\r\n });\r\n API.get(\"/aria2/downloading\")\r\n .then((response) => {\r\n this.setState({\r\n downloading: response.data,\r\n loading: false,\r\n });\r\n // 设定自动更新\r\n clearTimeout(this.interval);\r\n if (response.data.length > 0) {\r\n this.interval = setTimeout(\r\n this.loadDownloading,\r\n 1000 *\r\n response.data.reduce(function (prev, current) {\r\n return prev.interval < current.interval\r\n ? prev\r\n : current;\r\n }).interval\r\n );\r\n }\r\n\r\n // 下载中条目变更时刷新已完成列表\r\n if (response.data.length !== this.previousDownloading) {\r\n this.page = 0;\r\n this.setState({\r\n finishedList: [],\r\n continue: true,\r\n });\r\n this.loadMore();\r\n }\r\n this.previousDownloading = response.data.length;\r\n })\r\n .catch((error) => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n error.message,\r\n \"error\"\r\n );\r\n });\r\n };\r\n\r\n loadMore = () => {\r\n this.setState({\r\n loading: true,\r\n });\r\n API.get(\"/aria2/finished?page=\" + ++this.page)\r\n .then((response) => {\r\n this.setState({\r\n finishedList: [\r\n ...this.state.finishedList,\r\n ...response.data,\r\n ],\r\n loading: false,\r\n continue: response.data.length >= 10,\r\n });\r\n })\r\n .catch(() => {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"download.failedToLoad\"),\r\n \"error\"\r\n );\r\n this.setState({\r\n loading: false,\r\n });\r\n });\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n const user = Auth.GetUser();\r\n\r\n return (\r\n
\r\n {user.group.allowRemoteDownload && }\r\n \r\n {t(\"download.active\")}\r\n \r\n \r\n \r\n \r\n {this.state.downloading.length === 0 && (\r\n \r\n )}\r\n {this.state.downloading.map((value, k) => (\r\n \r\n ))}\r\n \r\n {t(\"download.finished\")}\r\n \r\n
\r\n {this.state.finishedList.length === 0 && (\r\n \r\n )}\r\n {this.state.finishedList.map((value, k) => {\r\n if (value.files) {\r\n return ;\r\n }\r\n return null;\r\n })}\r\n \r\n {t(\"download.loadMore\")}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst Download = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withTranslation()(DownloadComponent)));\r\n\r\nexport default Download;\r\n","import React from \"react\";\r\nimport { Facebook } from \"react-content-loader\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n loader: {\r\n width: \"80%\",\r\n [theme.breakpoints.up(\"md\")]: {\r\n width: \" 50%\",\r\n },\r\n\r\n marginTop: 30,\r\n },\r\n}));\r\n\r\nconst MyLoader = (props) => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nfunction PageLoading() {\r\n const theme = useTheme();\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default PageLoading;\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\n\r\nimport {\r\n Avatar,\r\n Button,\r\n Card,\r\n CardActions,\r\n CardContent,\r\n CardHeader,\r\n Divider,\r\n TextField,\r\n withStyles,\r\n} from \"@material-ui/core\";\r\nimport { withRouter } from \"react-router\";\r\nimport { formatLocalTime } from \"../../utils/datetime\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nconst styles = (theme) => ({\r\n card: {\r\n maxWidth: 400,\r\n margin: \"0 auto\",\r\n },\r\n actions: {\r\n display: \"flex\",\r\n },\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"110px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n },\r\n continue: {\r\n marginLeft: \"auto\",\r\n marginRight: \"10px\",\r\n marginRottom: \"10px\",\r\n },\r\n});\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n };\r\n};\r\n\r\nclass LockedFileCompoment extends Component {\r\n constructor(props) {\r\n super(props);\r\n const query = new URLSearchParams(this.props.location.search);\r\n this.state = {\r\n pwd: query.get(\"password\"),\r\n };\r\n }\r\n\r\n handleChange = (name) => (event) => {\r\n this.setState({ [name]: event.target.value });\r\n };\r\n\r\n submit = (e) => {\r\n e.preventDefault();\r\n if (this.state.pwd === \"\") {\r\n return;\r\n }\r\n this.props.setPassowrd(this.state.pwd);\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n }\r\n title={t(\"share.privateShareTitle\", {\r\n nick: this.props.share.creator.nick,\r\n })}\r\n subheader={formatLocalTime(\r\n this.props.share.create_date\r\n )}\r\n />\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n {t(\"share.continue\")}\r\n \r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst LockedFile = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(LockedFileCompoment))));\r\n\r\nexport default LockedFile;\r\n","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/core/styles\";\r\nimport { Avatar, Typography } from \"@material-ui/core\";\r\nimport { useHistory } from \"react-router\";\r\nimport Link from \"@material-ui/core/Link\";\r\nimport { formatLocalTime } from \"../../utils/datetime\";\r\nimport { Trans, useTranslation } from \"react-i18next\";\r\n\r\nconst useStyles = makeStyles((theme) => ({\r\n boxHeader: {\r\n textAlign: \"center\",\r\n padding: 24,\r\n },\r\n avatar: {\r\n backgroundColor: theme.palette.secondary.main,\r\n margin: \"0 auto\",\r\n width: 50,\r\n height: 50,\r\n cursor: \"pointer\",\r\n },\r\n shareDes: {\r\n marginTop: 12,\r\n },\r\n shareInfo: {\r\n color: theme.palette.text.disabled,\r\n fontSize: 14,\r\n },\r\n}));\r\n\r\nexport default function Creator(props) {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"share\" });\r\n const classes = useStyles();\r\n const history = useHistory();\r\n\r\n const getSecondDes = () => {\r\n if (props.share.expire > 0) {\r\n if (props.share.expire >= 24 * 3600) {\r\n return t(\"expireInXDays\", {\r\n num: Math.round(props.share.expire / (24 * 3600)),\r\n });\r\n }\r\n\r\n return t(\"expireInXHours\", {\r\n num: Math.round(props.share.expire / 3600),\r\n });\r\n }\r\n return formatLocalTime(props.share.create_date);\r\n };\r\n\r\n const userProfile = () => {\r\n history.push(\"/profile/\" + props.share.creator.key);\r\n props.onClose && props.onClose();\r\n };\r\n\r\n return (\r\n
\r\n userProfile()}\r\n />\r\n \r\n {props.isFolder && (\r\n userProfile()}\r\n href={\"javascript:void(0)\"}\r\n color=\"inherit\"\r\n />,\r\n ]}\r\n />\r\n )}\r\n {!props.isFolder && (\r\n userProfile()}\r\n href={\"javascript:void(0)\"}\r\n color=\"inherit\"\r\n />,\r\n ]}\r\n />\r\n )}\r\n \r\n \r\n {t(\"statistics\", {\r\n views: props.share.views,\r\n downloads: props.share.downloads,\r\n time: getSecondDes(),\r\n })}\r\n \r\n
\r\n );\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { sizeToString, vhCheck } from \"../../utils\";\r\nimport { isPreviewable } from \"../../config\";\r\nimport { Button, Typography, withStyles } from \"@material-ui/core\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\nimport TypeIcon from \"../FileManager/TypeIcon\";\r\nimport Auth from \"../../middleware/Auth\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport Creator from \"./Creator\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport {\r\n openMusicDialog,\r\n openResaveDialog,\r\n setSelectedTarget,\r\n showAudioPreview,\r\n showImgPreivew,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { startDownload } from \"../../redux/explorer/action\";\r\nimport { withTranslation } from \"react-i18next\";\r\n\r\nvhCheck();\r\nconst styles = (theme) => ({\r\n layout: {\r\n width: \"auto\",\r\n marginTop: \"90px\",\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginTop: \"90px\",\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n marginTop: 0,\r\n marginLeft: 0,\r\n marginRight: 0,\r\n },\r\n justifyContent: \"center\",\r\n display: \"flex\",\r\n },\r\n player: {\r\n borderRadius: \"4px\",\r\n },\r\n fileCotainer: {\r\n width: \"200px\",\r\n margin: \"0 auto\",\r\n },\r\n buttonCotainer: {\r\n width: \"400px\",\r\n margin: \"0 auto\",\r\n textAlign: \"center\",\r\n marginTop: \"20px\",\r\n },\r\n paper: {\r\n padding: theme.spacing(2),\r\n },\r\n icon: {\r\n borderRadius: \"10%\",\r\n marginTop: 2,\r\n },\r\n\r\n box: {\r\n width: \"100%\",\r\n maxWidth: 440,\r\n backgroundColor: theme.palette.background.paper,\r\n borderRadius: theme.shape.borderRadius,\r\n boxShadow: \"0 8px 16px rgba(29,39,55,.25)\",\r\n [theme.breakpoints.down(\"sm\")]: {\r\n height: \"calc(var(--vh, 100vh) - 56px)\",\r\n borderRadius: 0,\r\n maxWidth: 1000,\r\n },\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n },\r\n boxContent: {\r\n padding: 24,\r\n display: \"flex\",\r\n flex: \"1\",\r\n },\r\n fileName: {\r\n marginLeft: 20,\r\n },\r\n fileSize: {\r\n color: theme.palette.text.disabled,\r\n fontSize: 14,\r\n },\r\n boxFooter: {\r\n display: \"flex\",\r\n padding: \"20px 16px\",\r\n justifyContent: \"space-between\",\r\n },\r\n downloadButton: {\r\n marginLeft: 8,\r\n },\r\n});\r\nconst mapStateToProps = () => {\r\n return {};\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n openMusicDialog: (first) => {\r\n dispatch(showAudioPreview(first));\r\n },\r\n setSelectedTarget: (targets) => {\r\n dispatch(setSelectedTarget(targets));\r\n },\r\n showImgPreivew: (first) => {\r\n dispatch(showImgPreivew(first));\r\n },\r\n openResave: (key) => {\r\n dispatch(openResaveDialog(key));\r\n },\r\n startDownload: (share, file) => {\r\n dispatch(startDownload(share, file));\r\n },\r\n };\r\n};\r\n\r\nconst Modals = React.lazy(() => import(\"../FileManager/Modals\"));\r\nconst ImgPreview = React.lazy(() => import(\"../FileManager/ImgPreview\"));\r\n\r\nclass SharedFileCompoment extends Component {\r\n state = {\r\n anchorEl: null,\r\n open: false,\r\n purchaseCallback: null,\r\n loading: false,\r\n };\r\n\r\n downloaded = false;\r\n\r\n // TODO merge into react thunk\r\n preview = () => {\r\n if (pathHelper.isSharePage(this.props.location.pathname)) {\r\n const user = Auth.GetUser();\r\n if (!Auth.Check() && user && !user.group.shareDownload) {\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"share.pleaseLogin\"),\r\n \"warning\"\r\n );\r\n return;\r\n }\r\n }\r\n\r\n switch (isPreviewable(this.props.share.source.name)) {\r\n case \"img\":\r\n this.props.showImgPreivew({\r\n key: this.props.share.key,\r\n name: this.props.share.source.name,\r\n });\r\n return;\r\n case \"msDoc\":\r\n this.props.history.push(\r\n this.props.share.key +\r\n \"/doc?name=\" +\r\n encodeURIComponent(this.props.share.source.name)\r\n );\r\n return;\r\n case \"audio\":\r\n this.props.openMusicDialog({\r\n key: this.props.share.key,\r\n name: this.props.share.source.name,\r\n type: \"share\",\r\n });\r\n return;\r\n case \"video\":\r\n this.props.history.push(\r\n this.props.share.key +\r\n \"/video?name=\" +\r\n encodeURIComponent(this.props.share.source.name)\r\n );\r\n return;\r\n case \"edit\":\r\n this.props.history.push(\r\n this.props.share.key +\r\n \"/text?name=\" +\r\n encodeURIComponent(this.props.share.source.name)\r\n );\r\n return;\r\n case \"pdf\":\r\n this.props.history.push(\r\n this.props.share.key +\r\n \"/pdf?name=\" +\r\n encodeURIComponent(this.props.share.source.name)\r\n );\r\n return;\r\n case \"code\":\r\n this.props.history.push(\r\n this.props.share.key +\r\n \"/code?name=\" +\r\n encodeURIComponent(this.props.share.source.name)\r\n );\r\n return;\r\n case \"epub\":\r\n this.props.history.push(\r\n this.props.share.key +\r\n \"/epub?name=\" +\r\n encodeURIComponent(this.props.share.source.name)\r\n );\r\n return;\r\n default:\r\n this.props.toggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n this.props.t(\"share.cannotShare\"),\r\n \"warning\"\r\n );\r\n return;\r\n }\r\n };\r\n\r\n componentWillUnmount() {\r\n this.props.setSelectedTarget([]);\r\n }\r\n\r\n scoreHandle = (callback) => (event) => {\r\n callback(event);\r\n };\r\n\r\n download = () => {\r\n this.props.startDownload(this.props.share, null);\r\n };\r\n\r\n render() {\r\n const { classes, t } = this.props;\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n {this.props.share.source.name}\r\n \r\n \r\n {sizeToString(this.props.share.source.size)}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n {this.props.share.preview && (\r\n \r\n {t(\"share.preview\")}\r\n \r\n )}\r\n
\r\n
\r\n \r\n {t(\"fileManager.download\")}\r\n \r\n
\r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst SharedFile = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(withTranslation()(SharedFileCompoment))));\r\n\r\nexport default SharedFile;\r\n","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { Typography, withStyles } from \"@material-ui/core\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport FileManager from \"../FileManager/FileManager\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\nimport Popover from \"@material-ui/core/Popover\";\r\nimport Creator from \"./Creator\";\r\nimport ClickAwayListener from \"@material-ui/core/ClickAwayListener\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport {\r\n openMusicDialog,\r\n openResaveDialog,\r\n setSelectedTarget,\r\n setShareUserPopover,\r\n showImgPreivew,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport { setShareInfo } from \"../../redux/viewUpdate/action\";\r\n\r\nconst styles = (theme) => ({\r\n layout: {\r\n width: \"auto\",\r\n marginTop: 30,\r\n marginBottom: 30,\r\n marginLeft: theme.spacing(3),\r\n marginRight: theme.spacing(3),\r\n [theme.breakpoints.up(1100 + theme.spacing(3) * 2)]: {\r\n width: 1100,\r\n marginLeft: \"auto\",\r\n marginRight: \"auto\",\r\n },\r\n [theme.breakpoints.down(\"sm\")]: {\r\n marginTop: theme.spacing(2),\r\n marginLeft: theme.spacing(1),\r\n marginRight: theme.spacing(1),\r\n },\r\n },\r\n managerContainer: {\r\n overflowY: \"auto\",\r\n },\r\n});\r\n\r\nconst ReadMe = React.lazy(() => import(\"./ReadMe\"));\r\n\r\nconst mapStateToProps = (state) => {\r\n return {\r\n anchorEl: state.viewUpdate.shareUserPopoverAnchorEl,\r\n fileList: state.explorer.fileList,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n toggleSnackbar: (vertical, horizontal, msg, color) => {\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color));\r\n },\r\n openMusicDialog: () => {\r\n dispatch(openMusicDialog());\r\n },\r\n setSelectedTarget: (targets) => {\r\n dispatch(setSelectedTarget(targets));\r\n },\r\n showImgPreivew: (first) => {\r\n dispatch(showImgPreivew(first));\r\n },\r\n openResave: (key) => {\r\n dispatch(openResaveDialog(key));\r\n },\r\n setShareUserPopover: (e) => {\r\n dispatch(setShareUserPopover(e));\r\n },\r\n setShareInfo: (s) => {\r\n dispatch(setShareInfo(s));\r\n },\r\n };\r\n};\r\n\r\nclass SharedFolderComponent extends Component {\r\n state = {};\r\n\r\n UNSAFE_componentWillMount() {\r\n this.props.setShareInfo(this.props.share);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.setShareInfo(null);\r\n this.props.setSelectedTarget([]);\r\n }\r\n\r\n handleClickAway = (e) => {\r\n const ignore = e && e.clientY && e.clientY <= 64;\r\n if (!pathHelper.isMobile() && !ignore) {\r\n this.props.setSelectedTarget([]);\r\n }\r\n };\r\n\r\n render() {\r\n const { classes } = this.props;\r\n let readmeShowed = false;\r\n const id = this.props.anchorEl !== null ? \"simple-popover\" : undefined;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n {/* eslint-disable-next-line */}\r\n {this.props.fileList.map((value) => {\r\n if (\r\n (value.name.toLowerCase() === \"readme.md\" ||\r\n value.name.toLowerCase() === \"readme.txt\") &&\r\n !readmeShowed\r\n ) {\r\n readmeShowed = true;\r\n return ;\r\n }\r\n })}\r\n this.props.setShareUserPopover(null)}\r\n anchorOrigin={{\r\n vertical: \"bottom\",\r\n horizontal: \"center\",\r\n }}\r\n transformOrigin={{\r\n vertical: \"top\",\r\n horizontal: \"center\",\r\n }}\r\n >\r\n \r\n this.props.setShareUserPopover(null)}\r\n share={this.props.share}\r\n />\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst SharedFolder = connect(\r\n mapStateToProps,\r\n mapDispatchToProps\r\n)(withStyles(styles)(withRouter(SharedFolderComponent)));\r\n\r\nexport default SharedFolder;\r\n","import React, { Suspense, useCallback, useEffect, useState } from \"react\";\r\nimport PageLoading from \"../Placeholder/PageLoading\";\r\nimport { useParams } from \"react-router\";\r\nimport API from \"../../middleware/Api\";\r\nimport { changeSubTitle } from \"../../redux/viewUpdate/action\";\r\nimport { useDispatch } from \"react-redux\";\r\nimport Notice from \"./NotFound\";\r\nimport LockedFile from \"./LockedFile\";\r\nimport SharedFile from \"./SharedFile\";\r\nimport SharedFolder from \"./SharedFolder\";\r\nimport { toggleSnackbar } from \"../../redux/explorer\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\nexport default function SharePreload() {\r\n const { t } = useTranslation(\"application\", { keyPrefix: \"share\" });\r\n const dispatch = useDispatch();\r\n const { id } = useParams();\r\n\r\n const [share, setShare] = useState(undefined);\r\n const [loading, setLoading] = useState(false);\r\n const [password, setPassword] = useState(\"\");\r\n\r\n const SetSubTitle = useCallback(\r\n (title) => dispatch(changeSubTitle(title)),\r\n [dispatch]\r\n );\r\n\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n if (share) {\r\n if (share.locked) {\r\n SetSubTitle(\r\n t(\"privateShareTitle\", { nick: share.creator.nick })\r\n );\r\n if (password !== \"\") {\r\n ToggleSnackbar(\r\n \"top\",\r\n \"right\",\r\n t(\"incorrectPassword\"),\r\n \"warning\"\r\n );\r\n }\r\n } else {\r\n SetSubTitle(share.source.name);\r\n }\r\n } else {\r\n SetSubTitle();\r\n }\r\n }, [share, SetSubTitle, ToggleSnackbar]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n SetSubTitle();\r\n };\r\n // eslint-disable-next-line\r\n }, []);\r\n\r\n useEffect(() => {\r\n setLoading(true);\r\n let withPassword = \"\";\r\n if (password !== \"\") {\r\n withPassword = \"?password=\" + password;\r\n }\r\n API.get(\"/share/info/\" + id + withPassword)\r\n .then((response) => {\r\n setShare(response.data);\r\n setLoading(false);\r\n })\r\n .catch((error) => {\r\n setLoading(false);\r\n if (error.code === 404) {\r\n setShare(null);\r\n } else {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n }\r\n });\r\n }, [id, password, ToggleSnackbar]);\r\n\r\n return (\r\n }>\r\n {share === undefined && }\r\n {share === null && }\r\n {share && share.locked && (\r\n \r\n )}\r\n {share && !share.locked && !share.is_dir && (\r\n \r\n )}\r\n {share && !share.locked && share.is_dir && (\r\n \r\n )}\r\n \r\n );\r\n}\r\n","import React, { useCallback, useEffect, useState } from \"react\";\r\nimport { makeStyles, useTheme } from \"@material-ui/core/styles\";\r\nimport { useLocation, useParams, useRouteMatch } from \"react-router\";\r\nimport API from \"../../middleware/Api\";\r\nimport { useDispatch, useSelector } from \"react-redux\";\r\nimport pathHelper from \"../../utils/page\";\r\nimport {\r\n closeAllModals,\r\n openShareDialog,\r\n setModalsLoading,\r\n setSelectedTarget,\r\n toggleSnackbar,\r\n} from \"../../redux/explorer\";\r\nimport UseFileSubTitle from \"../../hooks/fileSubtitle\";\r\nimport i18n from \"i18next\";\r\nimport CreatShare from \"../Modals/CreateShare\";\r\n\r\nconst useStyles = makeStyles(() => ({\r\n layout: {\r\n width: \"auto\",\r\n },\r\n \"@global\": {\r\n iframe: {\r\n border: \"none\",\r\n width: \"100%\",\r\n height: \"calc(100vh - 64px)\",\r\n marginBottom: -10,\r\n },\r\n },\r\n}));\r\n\r\nfunction useQuery() {\r\n return new URLSearchParams(useLocation().search);\r\n}\r\n\r\nexport default function DocViewer() {\r\n const [session, setSession] = useState(null);\r\n const [file, setFile] = useState(null);\r\n const math = useRouteMatch();\r\n const location = useLocation();\r\n const query = useQuery();\r\n const { id } = useParams();\r\n const theme = useTheme();\r\n const { title } = UseFileSubTitle(query, math, location);\r\n\r\n const shareOpened = useSelector((state) => state.viewUpdate.modals.share);\r\n const modalLoading = useSelector((state) => state.viewUpdate.modalsLoading);\r\n const dispatch = useDispatch();\r\n const ToggleSnackbar = useCallback(\r\n (vertical, horizontal, msg, color) =>\r\n dispatch(toggleSnackbar(vertical, horizontal, msg, color)),\r\n [dispatch]\r\n );\r\n const CloseAllModals = useCallback(\r\n () => dispatch(closeAllModals()),\r\n [dispatch]\r\n );\r\n const OpenShareDialog = useCallback(\r\n () => dispatch(openShareDialog()),\r\n [dispatch]\r\n );\r\n const SetModalsLoading = useCallback(\r\n (status) => dispatch(setModalsLoading(status)),\r\n [dispatch]\r\n );\r\n\r\n useEffect(() => {\r\n let requestURL = \"/file/doc/\" + query.get(\"id\");\r\n if (pathHelper.isSharePage(location.pathname)) {\r\n requestURL = \"/share/doc/\" + id;\r\n if (query.get(\"share_path\") !== \"\") {\r\n requestURL +=\r\n \"?path=\" + encodeURIComponent(query.get(\"share_path\"));\r\n }\r\n }\r\n API.get(requestURL)\r\n .then((response) => {\r\n if (response.data.access_token) {\r\n response.data.url = response.data.url.replaceAll(\r\n \"lng\",\r\n i18n.resolvedLanguage.toLowerCase()\r\n );\r\n response.data.url = response.data.url.replaceAll(\r\n \"darkmode\",\r\n theme.palette.type === \"dark\" ? \"2\" : \"1\"\r\n );\r\n }\r\n\r\n setSession(response.data);\r\n })\r\n .catch((error) => {\r\n ToggleSnackbar(\"top\", \"right\", error.message, \"error\");\r\n });\r\n // eslint-disable-next-line\r\n }, [math.params[0], location]);\r\n\r\n const classes = useStyles();\r\n\r\n const handlePostMessage = (e) => {\r\n console.log(\"Received PostMessage from \" + e.origin, e.data);\r\n let msg;\r\n try {\r\n msg = JSON.parse(e.data);\r\n } catch (e) {\r\n return;\r\n }\r\n\r\n if (msg.MessageId === \"UI_Sharing\") {\r\n setFile([\r\n {\r\n name: title,\r\n id: query.get(\"id\"),\r\n type: \"file\",\r\n },\r\n ]);\r\n OpenShareDialog();\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n const frameholder = document.getElementById(\"frameholder\");\r\n const office_frame = document.createElement(\"iframe\");\r\n if (session && session.access_token && frameholder) {\r\n office_frame.name = \"office_frame\";\r\n office_frame.id = \"office_frame\";\r\n\r\n // The title should be set for accessibility\r\n office_frame.title = \"Office Frame\";\r\n\r\n // This attribute allows true fullscreen mode in slideshow view\r\n // when using PowerPoint's 'view' action.\r\n office_frame.setAttribute(\"allowfullscreen\", \"true\");\r\n\r\n // The sandbox attribute is needed to allow automatic redirection to the O365 sign-in page in the business user flow\r\n office_frame.setAttribute(\r\n \"sandbox\",\r\n \"allow-scripts allow-same-origin allow-forms allow-popups allow-top-navigation allow-popups-to-escape-sandbox\"\r\n );\r\n frameholder.appendChild(office_frame);\r\n document.getElementById(\"office_form\").submit();\r\n window.addEventListener(\"message\", handlePostMessage, false);\r\n\r\n return () => {\r\n window.removeEventListener(\"message\", handlePostMessage, false);\r\n };\r\n }\r\n }, [session]);\r\n\r\n return (\r\n
\r\n CloseAllModals()}\r\n modalsLoading={modalLoading}\r\n setModalsLoading={SetModalsLoading}\r\n selected={file}\r\n />\r\n {session && !session.access_token && (\r\n