fix: upload q and drive size error (#220)

* refactor: usetransfers hook functions
* refactor: bulk actions code style and readability
* fix: use upload q inflight size for subsequent uploads
* refactor: runUploadQueue execution
This commit is contained in:
Bálint Ujvári
2026-03-10 12:42:34 +01:00
parent bc2c0addbb
commit 8992c189fd
8 changed files with 348 additions and 328 deletions
@@ -16,7 +16,7 @@ import { useView } from '../../../../pages/filemanager/ViewContext'
import { Context as FMContext } from '../../../../providers/FileManager'
import { Context as SettingsContext } from '../../../../providers/Settings'
import { FileAction, FileTransferType, TransferStatus, ViewType } from '../../constants/transfers'
import { useBulkActions } from '../../hooks/useBulkActions'
import { BulkActionsResult, useBulkActions } from '../../hooks/useBulkActions'
import { useContextMenu } from '../../hooks/useContextMenu'
import { useDragAndDrop } from '../../hooks/useDragAndDrop'
import { useFileFiltering } from '../../hooks/useFileFiltering'
@@ -118,7 +118,7 @@ type FileBrowserContextMenuBlockProps = {
dropDir: Dir
drives: DriveInfo[]
view: ViewType
bulk: ReturnType<typeof useBulkActions>
bulk: BulkActionsResult
adminStamp: PostageBatch | undefined
doRefresh: () => void
onContextUploadFile: () => void
@@ -162,11 +162,11 @@ function FileBrowserContextMenuBlock({
onRefresh={doRefresh}
enableRefresh={Boolean(adminStamp)}
onUploadFile={onContextUploadFile}
onBulkDownload={() => bulk.bulkDownload(bulk.selectedFiles)}
onBulkDownload={() => bulk.download(bulk.selectedFiles)}
onBulkRestore={() => setConfirmBulkRestore(true)}
onBulkDelete={() => setShowBulkDeleteModal(true)}
onBulkDestroy={() => setShowDestroyDriveModal(true)}
onBulkForget={() => bulk.bulkForget(bulk.selectedFiles)}
onBulkForget={() => bulk.forget(bulk.selectedFiles)}
/>
</div>
)
@@ -196,7 +196,6 @@ export function FileBrowser({ errorMessage, setErrorMessage }: FileBrowserProps)
const [safePos, setSafePos] = useState<Point>(pos)
const [dropDir, setDropDir] = useState<Dir>(Dir.Down)
const legacyUploadRef = useRef<HTMLInputElement | null>(null)
const contentRef = useRef<HTMLDivElement | null>(null)
const bodyRef = useRef<HTMLDivElement | null>(null)
const isMountedRef = useRef(true)
@@ -281,20 +280,7 @@ export function FileBrowser({ errorMessage, setErrorMessage }: FileBrowserProps)
}
const onContextUploadFile = () => {
const el = legacyUploadRef.current
if (!el) return
try {
if (typeof (el as HTMLInputElement).showPicker === 'function') {
;(el as HTMLInputElement).showPicker()
} else {
el.click()
}
} catch {
el.click()
}
bulk.uploadFromPicker()
requestAnimationFrame(() => handleCloseContext())
}
@@ -323,7 +309,7 @@ export function FileBrowser({ errorMessage, setErrorMessage }: FileBrowserProps)
setShowBulkDeleteModal(false)
if (action === FileAction.Trash) {
return await bulk.bulkTrash(bulk.selectedFiles)
return await bulk.trash(bulk.selectedFiles)
}
if (action === FileAction.Forget) {
@@ -489,9 +475,9 @@ export function FileBrowser({ errorMessage, setErrorMessage }: FileBrowserProps)
const onBulk = useMemo(
() => ({
download: () => bulk.bulkDownload(bulk.selectedFiles),
download: () => bulk.download(bulk.selectedFiles),
restore: () => setConfirmBulkRestore(true),
forget: () => bulk.bulkForget(bulk.selectedFiles),
forget: () => bulk.forget(bulk.selectedFiles),
destroy: () => setShowDestroyDriveModal(true),
delete: () => setShowBulkDeleteModal(true),
}),
@@ -502,7 +488,6 @@ export function FileBrowser({ errorMessage, setErrorMessage }: FileBrowserProps)
<>
{conflictPortal}
<input type="file" ref={legacyUploadRef} style={{ display: 'none' }} onChange={onFileSelected} multiple />
<input type="file" ref={bulk.fileInputRef} style={{ display: 'none' }} onChange={onFileSelected} multiple />
<div className="fm-file-browser-container" data-search-mode={isSearchMode ? 'true' : 'false'}>
@@ -605,12 +590,12 @@ export function FileBrowser({ errorMessage, setErrorMessage }: FileBrowserProps)
onDeleteCancel={() => setShowBulkDeleteModal(false)}
onDeleteProceed={handleDeleteModalProceed}
onForgetConfirm={async () => {
await bulk.bulkForget(bulk.selectedFiles)
await bulk.forget(bulk.selectedFiles)
setConfirmBulkForget(false)
}}
onForgetCancel={() => setConfirmBulkForget(false)}
onRestoreConfirm={async () => {
await bulk.bulkRestore(bulk.selectedFiles)
await bulk.restore(bulk.selectedFiles)
setConfirmBulkRestore(false)
}}
onRestoreCancel={() => setConfirmBulkRestore(false)}
@@ -1,14 +1,14 @@
import { ReactElement } from 'react'
import DownIcon from 'remixicon-react/ArrowDownSLineIcon'
import { useBulkActions } from '../../../hooks/useBulkActions'
import { BulkActionsResult } from '../../../hooks/useBulkActions'
import { SortDir, SortKey } from '../../../hooks/useSorting'
import { capitalizeFirstLetter } from '@/modules/filemanager/utils/common'
interface FileBrowserHeaderProps {
isSearchMode: boolean
bulk: ReturnType<typeof useBulkActions>
bulk: BulkActionsResult
sortKey: SortKey
sortDir: SortDir
onSortName: () => void
@@ -435,7 +435,15 @@ export function VersionsList({ versions, headFi, restoreVersion, onDownload }: V
await startDownloadingQueue(
fm,
[{ uuid, info: fileInfo }],
[onDownload({ uuid, name: fileInfo.name, size: formatBytes(rawSize), expectedSize, driveName })],
[
onDownload({
uuid,
name: fileInfo.name,
size: formatBytes(rawSize),
expectedSize,
driveName: driveName ?? 'unknown',
}),
],
)
},
[handleCloseContext, fm, beeApi, onDownload, drives, currentDrive],