diff --git a/src/components/AddDownloadsModal.tsx b/src/components/AddDownloadsModal.tsx index f5202eb..7b25cd1 100644 --- a/src/components/AddDownloadsModal.tsx +++ b/src/components/AddDownloadsModal.tsx @@ -5,7 +5,7 @@ import { type AddDownloadAction } from '../store/useDownloadStore'; import { useSettingsStore } from '../store/useSettingsStore'; -import { FolderPlus, Settings, Shield, RefreshCw, FileText, HardDrive, Database, Link, ArrowRight, Play, ChevronDown, ChevronRight, Video, Film, Music, ListPlus, Rows3, type LucideIcon } from 'lucide-react'; +import { FolderPlus, Settings, Shield, RefreshCw, FileText, HardDrive, Database, Link, ArrowRight, Play, ChevronDown, ChevronRight, Video, Film, Music, type LucideIcon } from 'lucide-react'; import { open } from '@tauri-apps/plugin-dialog'; import { invokeCommand as invoke } from '../ipc'; import { DuplicateResolutionModal, DuplicateConflict } from './DuplicateResolutionModal'; @@ -73,7 +73,6 @@ export const AddDownloadsModal = () => { const [pendingAction, setPendingAction] = useState({ type: 'start-now' }); const [pendingUseSharedDestination, setPendingUseSharedDestination] = useState(false); const [resolvedLocation, setResolvedLocation] = useState(''); - const [isActionMenuOpen, setIsActionMenuOpen] = useState(false); const [isQueueMenuOpen, setIsQueueMenuOpen] = useState(false); const actionMenuRef = useRef(null); @@ -119,7 +118,6 @@ export const AddDownloadsModal = () => { ].filter(Boolean).join('\n')); setCookies(pendingAddCookies); setMirrors(''); - setIsActionMenuOpen(false); setIsQueueMenuOpen(false); } else { setUrls(''); @@ -135,31 +133,29 @@ export const AddDownloadsModal = () => { ]); useEffect(() => { - if (!isActionMenuOpen) return; + if (!isQueueMenuOpen) return; const closeMenu = (event: PointerEvent) => { if (!actionMenuRef.current?.contains(event.target as Node)) { - setIsActionMenuOpen(false); setIsQueueMenuOpen(false); } }; window.addEventListener('pointerdown', closeMenu); return () => window.removeEventListener('pointerdown', closeMenu); - }, [isActionMenuOpen]); + }, [isQueueMenuOpen]); useEffect(() => { - if (!isActionMenuOpen && !showingDuplicates) return; + if (!isQueueMenuOpen && !showingDuplicates) return; const closeOnEscape = (event: KeyboardEvent) => { if (event.key !== 'Escape') return; if (showingDuplicates) { setShowingDuplicates(false); } else { - setIsActionMenuOpen(false); setIsQueueMenuOpen(false); } }; window.addEventListener('keydown', closeOnEscape); return () => window.removeEventListener('keydown', closeOnEscape); - }, [isActionMenuOpen, showingDuplicates]); + }, [isQueueMenuOpen, showingDuplicates]); useEffect(() => { if (!saveLocation) return; @@ -945,68 +941,34 @@ export const AddDownloadsModal = () => {
- {isActionMenuOpen && ( + {isQueueMenuOpen && (
- -
+ {queues.map(queue => ( -
- {queues.map(queue => ( - - ))} -
-
+ ))}
)}
diff --git a/src/components/DownloadTable.tsx b/src/components/DownloadTable.tsx index 1305d84..95d3636 100644 --- a/src/components/DownloadTable.tsx +++ b/src/components/DownloadTable.tsx @@ -154,7 +154,7 @@ export const DownloadTable: React.FC = ({ filter }) => { const filteredDownloads = downloads.filter((d: DownloadItem) => { if (filter.startsWith('queue:')) { - return d.queueId === filter.replace('queue:', ''); + return d.queueId === filter.replace('queue:', '') && d.status !== 'completed'; } switch (filter) { case 'all': return true; @@ -375,7 +375,7 @@ export const DownloadTable: React.FC = ({ filter }) => { {contextMenu && contextItem && (
{ expect(useDownloadStore.getState().backendRegisteredIds.has('1')).toBe(true); // Re-registered by dispatchItem }); - it('adds to the list in the main queue without dispatching', async () => { - await useDownloadStore.getState().addDownload({ - id: 'list-1', - url: 'https://example.com/list.bin', - fileName: 'list.bin', - category: 'Other', - dateAdded: '' - }, { type: 'add-to-list' }); - - const item = useDownloadStore.getState().downloads[0]; - expect(item.status).toBe('ready'); - expect(item.queueId).toBe('00000000-0000-0000-0000-000000000001'); - expect(ipc.invokeCommand).not.toHaveBeenCalledWith('enqueue_download', expect.anything()); - }); it('adds to the selected queue without dispatching', async () => { await useDownloadStore.getState().addDownload({ diff --git a/src/store/useDownloadStore.ts b/src/store/useDownloadStore.ts index db36751..3c4e21f 100644 --- a/src/store/useDownloadStore.ts +++ b/src/store/useDownloadStore.ts @@ -143,7 +143,6 @@ export type { DownloadItem, Queue }; export type ExtensionDownloadRequest = ExtensionDownload; export type AddDownloadAction = | { type: 'start-now' } - | { type: 'add-to-list' } | { type: 'add-to-queue'; queueId: string }; export type DownloadDraft = Omit; @@ -305,8 +304,6 @@ export const useDownloadStore = create((set, get) => ({ get().updateDownload(item.id, { hasBeenDispatched: true }); } info(`Download ${item.id} started`); - } else { - info(`Download ${item.id} added to list`); } }, applyProperties: async (id, updates) => {