Commit Graph

94 Commits

Author SHA1 Message Date
6021cdef28 feat: add anime metadata editing and NFO diagnostics
- Add PUT /anime/{key} endpoint for updating anime key, tmdb_id, tvdb_id
- Add NFO diagnostics and repair endpoints (GET/POST /nfo/diagnostics)
- Add edit modal UI with context menu integration
- Add frontend JS modules for context-menu and edit-modal
- Add comprehensive tests for edit, rename, and NFO repair flows
2026-05-31 18:31:56 +02:00
94ed013172 Revert "feat: add manual TMDB/TVDB ID entry for failed lookups"
This reverts commit 30858f441c.
2026-05-30 12:17:48 +02:00
30858f441c feat: add manual TMDB/TVDB ID entry for failed lookups
- Add PATCH /api/anime/{key}/metadata-ids endpoint to update IDs
- Add POST /api/anime/{key}/refresh-nfo endpoint to force NFO regeneration
- Add Edit Metadata IDs modal in frontend
- Add showEditMetadataModal, saveMetadataIds, refreshSeriesNfo JS functions
- Add edit-metadata-btn to series cards with database icon
- IDs validated as positive integers or null

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-05-28 18:38:34 +02:00
9a81b04b65 fix: downloaded episodes no longer appear as missing
Use the database as the authoritative source for missing-episode lists so
that episodes marked is_downloaded=True are never shown as missing, even
when the in-memory state is stale.

Key changes:
- EpisodeService.get_by_series() gains only_missing flag
- AnimeService uses DB-backed episodeDict and preserves downloaded episodes
  during sync, skipping them when adding/removing missing episodes
- DownloadService broadcasts series_updated after marking an episode downloaded
  so the frontend reflects the change immediately
- Frontend filters out series with zero missing episodes client-side and
  fixes renderSeries to respect the active filter
- Unit tests updated to assert the broadcast is sent
2026-05-25 21:30:31 +02:00
c39ae9d0fc feat(scheduler): add folder_scan_enabled toggle to SchedulerConfig
- Add folder_scan_enabled boolean field (default false) to SchedulerConfig
- Update data/config.json example with new field
- Add checkbox to setup.html and include in JS payload
- Handle field in auth.py setup endpoint
- Expose field in scheduler API response
- Log and return field in scheduler_service.py
- Update docs/CONFIGURATION.md and docs/ARCHITECTURE.md
- Update index.html UI, app.js and scheduler-config.js handlers
- Verified backward compatibility: old configs load with default False
2026-05-11 21:02:05 +02:00
151a08e033 fix: support missing/no-episodes library filters (API, UI, docs, tests) 2026-03-16 21:01:59 +01:00
624c0db16e Remove per-card NFO action buttons; add bulk NFO refresh for selected 2026-02-26 20:52:21 +01:00
ddf10327c7 Remove deprecated legacy interval field from setup and settings UI 2026-02-22 17:42:01 +01:00
dd45494717 Setup page: add full scheduler config (time, days, auto-download) 2026-02-22 17:25:11 +01:00
eed75ff08b fix: config modal scrollbar, scheduler-config.js, logging API endpoint, static cache-busting 2026-02-22 10:01:52 +01:00
0265ae2a70 feat: cron-based scheduler with auto-download after rescan
- Replace asyncio sleep loop with APScheduler AsyncIOScheduler + CronTrigger
- Add schedule_time (HH:MM), schedule_days (days of week), auto_download_after_rescan fields to SchedulerConfig
- Add _auto_download_missing() to queue missing episodes after rescan
- Reload config live via reload_config(SchedulerConfig) without restart
- Update GET/POST /api/scheduler/config to return {success, config, status} envelope
- Add day-of-week pill toggles to Settings -> Scheduler section in UI
- Update JS loadSchedulerConfig / saveSchedulerConfig for new API shape
- Add 29 unit tests for SchedulerConfig model, 18 unit tests for SchedulerService
- Rewrite 23 endpoint tests and 36 integration tests for APScheduler behaviour
- Coverage: 96% api/scheduler, 95% scheduler_service, 90% total (>= 80% threshold)
- Update docs: API.md, CONFIGURATION.md, features.md, CHANGELOG.md
2026-02-21 08:56:17 +01:00
d72b8cb1ab Add sync_single_series_after_scan with NFO metadata and WebSocket updates
- Implement sync_single_series_after_scan to persist scanned series to database
- Enhanced _broadcast_series_updated to include full NFO metadata (nfo_created_at, nfo_updated_at, tmdb_id, tvdb_id)
- Add immediate episode scanning in add_series endpoint when background loader isn't running
- Implement updateSingleSeries in frontend to handle series_updated WebSocket events
- Add SERIES_UPDATED event constant to WebSocket event definitions
- Update background loader to use sync_single_series_after_scan method
- Simplified background loader initialization in FastAPI app
- Add comprehensive tests for series update WebSocket payload and episode counting logic
- Import reorganization: move get_background_loader_service to dependencies module
2026-02-06 18:47:47 +01:00
f8634bf605 Fix WebSocket room subscription format 2026-01-23 15:25:47 +01:00
026e96b66c Fix setup/loading flow and WebSocket connection
1. Setup redirect flow (setup -> loading -> login):
   - Add /loading to exempt paths
   - Redirect setup to login after completion
   - Redirect loading to login when initialization complete

2. Close pages after completion:
   - Block access to /setup after setup is done
   - Block access to /loading after initialization complete
   - Proper redirect handling prevents re-access

3. Fix WebSocket 403 error:
   - Change /ws/progress to /ws/connect (correct endpoint)
   - Add /ws/connect to exempt paths
   - Subscribe to 'system' room for progress updates
   - Fix message data handling format
2026-01-23 15:18:12 +01:00
48a2fd0f2a feat: add loading page with real-time initialization progress
- Create loading.html template with WebSocket-based progress updates
- Update initialization_service to emit progress events via ProgressService
- Modify setup endpoint to run initialization in background and redirect to loading page
- Add /loading route in page_controller
- Show real-time progress for series sync, NFO scan, and media scan steps
- Display completion message with button to continue to app
- Handle errors with visual feedback
2026-01-23 14:54:56 +01:00
0b4fb10d65 Add frontend UI for async series loading
- Add SERIES_LOADING_UPDATE WebSocket event
- Update series cards to display loading indicators
- Add real-time status updates via WebSocket
- Include progress tracking (episodes, NFO, logo, images)
- Add CSS styling for loading states
- Implement updateSeriesLoadingStatus function
2026-01-19 07:20:29 +01:00
c92e2d340e Fix JSON parsing in NFO JavaScript modules
- Add response.json() calls in nfo-manager.js for all API calls
- Add response.json() calls in nfo-config.js for all API calls
- Fix createNFO, refreshNFO, viewNFO, getSeriesWithoutNFO functions
- Fix load and testTMDBConnection functions
- All API responses must be parsed before accessing properties
2026-01-18 12:18:42 +01:00
4e29c4ed80 Enhanced setup and settings pages with full configuration
- Extended SetupRequest model to include all configuration fields
- Updated setup API endpoint to handle comprehensive configuration
- Created new setup.html with organized configuration sections
- Enhanced config modal in index.html with all settings
- Updated JavaScript modules to use unified config API
- Added backup configuration section
- Documented new features in features.md and instructions.md
2026-01-17 18:01:15 +01:00
d676cb7dca Fix NFO API endpoint mismatch in frontend
- Update nfo-manager.js to use correct API routes:
  * POST /api/nfo/{id}/create (was /api/nfo/series/{id})
  * PUT /api/nfo/{id}/update (was /api/nfo/series/{id})
  * GET /api/nfo/{id}/content (was /api/nfo/series/{id})
- Add request body to createNFO with default options
- Fix response handling to check actual API fields
- Remove non-existent getStatistics function
- Fix getSeriesWithoutNFO response structure
- Update instructions.md with fix documentation
2026-01-16 20:48:46 +01:00
120b26b9f7 feat: Add NFO configuration settings (Task 7)
- Added NFOConfig model with TMDB API key, auto-create, media downloads, image size settings
- Created NFO settings section in UI with form fields and validation
- Implemented nfo-config.js module for loading, saving, and testing TMDB connection
- Added TMDB API key validation endpoint (POST /api/config/tmdb/validate)
- Integrated NFO config into AppConfig and ConfigUpdate models
- Added 5 unit tests for NFO config model validation
- Added API test for TMDB validation endpoint
- All 16 config model tests passing, all 10 config API tests passing
- Documented in docs/task7_status.md (100% complete)
2026-01-16 19:33:23 +01:00
ecfa8d3c10 feat: Add NFO UI features (Task 6)
- Extended AnimeSummary model with NFO fields (has_nfo, nfo_created_at, nfo_updated_at, tmdb_id, tvdb_id)
- Updated list_anime endpoint to fetch and return NFO data from database
- Added NFO status badges to series cards (green=exists, gray=missing)
- Created nfo-manager.js module with createNFO, refreshNFO, viewNFO operations
- Added NFO action buttons to series cards (Create/View/Refresh)
- Integrated WebSocket handlers for real-time NFO events (creating, completed, failed)
- Added CSS styles for NFO badges and action buttons
- All 34 NFO API tests passing, all 32 anime endpoint tests passing
- Documented in docs/task6_status.md (90% complete, NFO status page deferred)
2026-01-16 19:18:50 +01:00
803f35ef39 Update config.json and workspace context as of 27. Dezember 2025 2025-12-27 21:10:53 +01:00
2e5731b5d6 refactor: split CSS and JS into modular files (SRP) 2025-12-26 13:55:02 +01:00
b2728a7cf4 style: simplify status-indicator by removing background and border 2025-12-25 13:24:31 +01:00
9f4ea84b47 Improve scan status indicator reliability on page reload
- Add debug logging to checkActiveScanStatus() for better tracing
- Update status indicator before showing overlay for faster feedback
- Add warning logs when DOM elements are not found
- Ensure idle state is explicitly set when no scan is running
- Add debug logging to AnimeService.get_scan_status()
2025-12-25 13:19:10 +01:00
9e393adb00 fix: rescan-status indicator now updates and is clickable after page reload
- Added defensive check for rescan-status element before adding event listener
- Added e.stopPropagation() to prevent click event bubbling issues
- Added console logging for debugging click events
- Call checkActiveScanStatus() directly in init() method, not just on socket connect
  This ensures scan status is checked immediately on page load even if WebSocket
  connection is delayed
2025-12-24 21:35:57 +01:00
458ca1d776 Improve scan overlay UX
- Show overlay immediately when rescan is clicked (before API response)
- Add click-outside-to-close on overlay background
- Add click on rescan-status indicator to reopen overlay
- Add cursor pointer to rescan-status for clickability feedback
- All 1024 tests passing
2025-12-24 21:27:32 +01:00
19cb8c11a0 Show scan overlay after page reload
- Add is_scanning state tracking in AnimeService
- Add get_scan_status method to AnimeService
- Add /api/anime/scan/status endpoint to check scan state
- Add checkActiveScanStatus in JS to restore overlay on reconnect
- All 1024 tests passing
2025-12-24 21:06:22 +01:00
72ac201153 Show total items to scan in progress overlay
- Add total_items parameter to broadcast_scan_started and broadcast_scan_progress
- Pass total from SeriesApp to WebSocket broadcasts in AnimeService
- Update JS overlay to show progress bar and current/total count
- Add CSS for progress bar styling
- Add unit tests for new total_items parameter
- All 1024 tests passing
2025-12-24 20:54:27 +01:00
a24f07a36e Add MP4 scan progress visibility in UI
- Add broadcast_scan_started, broadcast_scan_progress, broadcast_scan_completed to WebSocketService
- Inject WebSocketService into AnimeService for real-time scan progress broadcasts
- Add CSS styles for scan progress overlay with spinner, stats, and completion state
- Update app.js to handle scan events and display progress overlay
- Add unit tests for new WebSocket broadcast methods
- All 1022 tests passing
2025-12-23 18:24:32 +01:00
9b071fe370 backup 2025-12-23 18:13:10 +01:00
700f491ef9 fix: progress broadcasts now use correct WebSocket room names
- Fixed room name mismatch: ProgressService was broadcasting to
  'download_progress' but JS clients join 'downloads' room
- Added _get_room_for_progress_type() mapping function
- Updated all progress methods to use correct room names
- Added 13 new tests for room name mapping and broadcast verification
- Updated existing tests to expect correct room names
- Fixed JS clients to join valid rooms (downloads, queue, scan)
2025-12-16 19:21:30 +01:00
a833077f97 Phase 5: Frontend - Use key as primary series identifier
- Updated app.js to use 'key' as primary series identifier
  - selectedSeries Set now uses key instead of folder
  - createSerieCard() uses data-key attribute for identification
  - toggleSerieSelection() uses key for lookups
  - downloadSelected() iterates with key values
  - updateSelectionUI() and toggleSelectAll() use key

- Updated WebSocket service tests
  - Tests now include key and folder in broadcast data
  - Verified both fields are included in messages

- No changes needed for queue.js and other JS files
  - They use download item IDs correctly, not series identifiers

- No template changes needed
  - Series cards rendered dynamically in app.js

All 996 tests passing
2025-11-28 16:18:33 +01:00
9a42442f47 removed downloaded and total mb 2025-11-20 19:34:01 +01:00
57da1f1272 fix: download status 2025-11-20 19:02:04 +01:00
cf503c8d77 fixed empty queu 2025-11-20 18:53:22 +01:00
4c7657ce75 fixed: removed js 2025-11-14 09:51:57 +01:00
a80bfba873 removed useless stuff 2025-11-02 15:25:07 +01:00
64e78bb9b8 chore: removed locks 2025-11-02 15:18:30 +01:00
ca4bf72fde fix progress issues 2025-11-02 08:33:44 +01:00
d5f7b1598f use of websockets 2025-11-01 19:23:32 +01:00
0b5faeffc9 fix adding issues 2025-11-01 18:22:48 +01:00
18faf3fe91 added remove all item from queue 2025-11-01 18:09:23 +01:00
4dba4db344 fix: wrong folder was created 2025-11-01 17:51:30 +01:00
33aeac0141 download the queue 2025-11-01 16:13:28 +01:00
eaf6bb9957 fix queue issues 2025-11-01 16:07:31 +01:00
3be175522f download re implemented 2025-10-30 22:06:41 +01:00
fadd4973da cleanup unused methods 2025-10-30 21:22:43 +01:00
727486795c fix download 2025-10-30 21:13:08 +01:00
627f8b0cc4 fix download 2025-10-30 19:56:22 +01:00