import { FocusContext, useFocusable } from '@noriginmedia/norigin-spatial-navigation'; import { Block, createFileRoute } from '@tanstack/react-router'; import DownloadDirectoryOption from '@/mainview/components/options/DownloadDirectoryOption'; import { useIsMutating, useMutation, useQuery } from '@tanstack/react-query'; import { changeDownloadsMutation, downloadDrivesQuery } from '@/mainview/scripts/queries'; import { DownloadsDrive } from '@/shared/constants'; import prettyBytes from 'pretty-bytes'; import classNames from 'classnames'; import { GamePadButtonCode, Shortcut, useShortcuts } from '@/mainview/scripts/shortcuts'; import { Download, FolderOpen, HardDrive, Save, Usb } from 'lucide-react'; import { twMerge } from 'tailwind-merge'; import { OptionSpace } from '@/mainview/components/options/OptionSpace'; import { Button } from '@/mainview/components/options/Button'; import { systemApi } from '@/mainview/scripts/clientApi'; import useActiveControl from '@/mainview/scripts/gamepads'; export const Route = createFileRoute('/settings/directories')({ component: RouteComponent, }); function DriveComponent (data: { drive: DownloadsDrive; downloadsSize: number; refetchDrives: () => void; }) { const { ref, focused, focusKey } = useFocusable({ focusKey: data.drive.device, onFocus: () => (ref.current as HTMLElement)?.scrollIntoView({ block: 'nearest', behavior: 'smooth' }) }); const isMoving = useIsMutating(changeDownloadsMutation); const usedWithoutDownlods = data.drive.used - (data.drive.isCurrentlyUsed ? data.downloadsSize : 0); const usedPercent = usedWithoutDownlods / data.drive.size; const usedPercentRaw = data.drive.used / data.drive.size; const changeDownloads = useMutation({ ...changeDownloadsMutation, onSuccess: data.refetchDrives }); data.drive.unusableReason; const shortcuts: Shortcut[] = []; const valid = !data.drive.unusableReason && isMoving <= 0; const handleAction = () => changeDownloads.mutate(data.drive.mountPoint); if (valid) { shortcuts.push({ label: "Move Downloads", button: GamePadButtonCode.A, action: handleAction }); } useShortcuts(focusKey, () => shortcuts, [shortcuts]); const { isPointer } = useActiveControl(); return
(Not Enough Space)
} {data.drive.unusableReason === 'already_used' &&(Currently Used)
} {data.drive.unusableReason !== 'already_used' && data.drive.isCurrentlyUsed &&(Custom Path)
}