This commit implements a comprehensive YouTube download feature that allows
administrators to download audio from YouTube videos and playlists.
Backend Changes:
- Add yt-dlp-wrap npm dependency for YouTube downloading
- Create YouTubeDownloadManager to handle download queue and execution
- Create YouTubeDownloadController with API endpoints for download/queue/cancel
- Add YouTube utility functions for URL validation and metadata extraction
- Create YouTubeDownload object model for tracking download state
- Add API routes: POST /api/youtube/download, GET /api/youtube/queue, DELETE /api/youtube/download/:id
- Implement playlist support - automatically queue all videos from playlist URLs
- Download audio in MP3 format with best quality
- Organize files in subfolder structure: <Uploader>/<Video Title>/
- Extract metadata and create library items automatically
- Real-time progress updates via Socket.io
Frontend Changes:
- Create YouTubeDownloadModal component for user-friendly download interface
- Add download button to Appbar header (admin-only, visible with current library)
- Update Vuex store with modal state management
- Register modal globally in default layout
- Implement Socket.io listeners for download events (started, progress, completed, failed, queued)
- Show toast notifications for download status updates
Features:
- Admin-only access control
- Support for single videos and playlists
- Audio quality selection (best, 320kbps, 256kbps, 192kbps, 128kbps)
- Library and folder selection
- Download queue management
- Real-time progress tracking
- Automatic thumbnail download as cover image
- Automatic library item creation with metadata
- Error handling and user feedback
Technical Details:
- Uses yt-dlp for reliable YouTube downloading
- Integrates with existing task management system
- Respects library folder permissions
- Follows existing code patterns (similar to podcast downloads)
- Socket.io events for real-time updates
* Add strings for PublishedDecade and PublishedDecades
* Add publishedDecades filter options to LibraryFilterSelect
* Add publishedDecades to libraries store
* Add publishedDecades to getFilterData
* Add database method to add published decades to filter data
* Add published decade in BookScanner
* Add 'publishedDecades' to invalidFilters in user.js
* Add publishedDecades filter group to MediaGroupQuery
* Update client/strings/en-us.json
* Auto formatting
---------
Co-authored-by: advplyr <dev@advplyr.com>
Co-authored-by: advplyr <advplyr@protonmail.com>
* Add playback settings string to en-us
* Add playback settings UI for jump forwards and jump backwards
* Remove jump forwards and jump backwards settings
* Remove jump forwards and jump backwards en-us strings
* Update player UI to include player settings button
* Add label view player settings string
* Add PlayerSettingsModal component
Includes a toggle switch for enabling/disabling the chapter track feature.
* Add player settings modal component to MediaPlayerContainer
* Handle useChapterTrack changes in PlayerUI
* Add jump forwards and jump backwards settings to user store
* Add jump forwards and jump backwards label strings
* Add jump forwards and jump backwards settings to PlayerSettingsModal
* Update jump forwards and jump backwards to handle user state values in PlayerHandler
* Update jump backwards icon in PlayerPlaybackControls
* Add playback settings string to en-us
* Add playback settings UI for jump forwards and jump backwards
* Remove jump forwards and jump backwards settings
* Remove jump forwards and jump backwards en-us strings
* Update player UI to include player settings button
* Add label view player settings string
* Add PlayerSettingsModal component
Includes a toggle switch for enabling/disabling the chapter track feature.
* Add player settings modal component to MediaPlayerContainer
* Handle useChapterTrack changes in PlayerUI
* Add jump forwards and jump backwards settings to user store
* Add jump forwards and jump backwards label strings
* Add jump forwards and jump backwards settings to PlayerSettingsModal
* Update jump forwards and jump backwards to handle user state values in PlayerHandler
* Update jump backwards icon in PlayerPlaybackControls
* Add jump amounts to playback controls tooltips
* Fix merge issues and add new Material Symbols to player ui
* Alphabetize strings in en-us.json
* Update dropdown component with SelectInput to support menu overflowing modal
* Update localization for player settings
* Update en-us strings order
---------
Co-authored-by: advplyr <advplyr@protonmail.com>