8e161fe9ce
Add a source-wide "Select all" across all playlist groups, and make one click queue every indexed video (the previous 100-per-click cap is gone). Bulk download skips items that are already downloaded or in flight, so it can't enqueue duplicates, and it includes failed/canceled ones so it also retries them. Make the UI hold up at channel scale (1000s of videos): virtualize both the Downloads queue and the Library item list with @tanstack/react-virtual so only on-screen rows hit the DOM, memoize the queue row so they don't all reconcile on every progress tick, and batch the enqueue so queuing a whole channel stays O(n) instead of O(n^2). - VirtualList: reusable windowed list that owns its own scroll container - DownloadsView: virtualized, flex-filled queue - LibraryView: groups flattened to rows; virtualized panel above 100 rows, inline below so small sources are unchanged - QueueItem: React.memo - downloads store: addMany (one state update + one pump); sources: enqueue the whole selection via addMany, no cap Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
48 lines
1.5 KiB
JSON
48 lines
1.5 KiB
JSON
{
|
|
"name": "aerofetch",
|
|
"version": "0.4.1",
|
|
"description": "A yt-dlp frontend for Windows",
|
|
"main": "./out/main/index.js",
|
|
"author": "AeroFetch",
|
|
"homepage": "https://github.com/yt-dlp/yt-dlp",
|
|
"private": true,
|
|
"type": "module",
|
|
"scripts": {
|
|
"dev": "electron-vite dev",
|
|
"dev:watch": "electron-vite dev --watch",
|
|
"ui": "vite",
|
|
"ui:build": "vite build",
|
|
"ui:preview": "vite preview",
|
|
"build": "electron-vite build",
|
|
"build:win": "electron-vite build && electron-builder --win",
|
|
"start": "electron-vite preview",
|
|
"typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
|
|
"typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
|
|
"typecheck": "npm run typecheck:node && npm run typecheck:web",
|
|
"test": "vitest run"
|
|
},
|
|
"dependencies": {
|
|
"@electron-toolkit/utils": "^4.0.0",
|
|
"@fluentui/react-components": "^9.74.1",
|
|
"@fluentui/react-icons": "^2.0.330",
|
|
"@tanstack/react-virtual": "^3.14.3",
|
|
"electron-store": "^11.0.2",
|
|
"react": "^19.2.7",
|
|
"react-dom": "^19.2.7",
|
|
"zustand": "^5.0.14"
|
|
},
|
|
"devDependencies": {
|
|
"@electron-toolkit/tsconfig": "^2.0.0",
|
|
"@types/node": "^26.0.0",
|
|
"@types/react": "^19.2.17",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@vitejs/plugin-react": "^5.2.0",
|
|
"electron": "^42.4.1",
|
|
"electron-builder": "^26.15.3",
|
|
"electron-vite": "^5.0.0",
|
|
"typescript": "^6.0.3",
|
|
"vite": "^7.3.5",
|
|
"vitest": "^4.1.9"
|
|
}
|
|
}
|