Commit Graph
16 Commits
Author SHA1 Message Date
nessi a90b516f49 fix: replace glob() with iterdir() in external_subtitle_files() to handle square brackets in media filenames
Replace glob pattern matching with iterdir() + startswith() filtering to avoid glob interpreting square brackets (e.g., [Bluray-1080p]) as pattern characters. Add OSError exception handling to return empty list when directory access fails.
2026-08-14 14:32:28 +02:00
nessi 04ca437054 feat: merge external subtitle files with embedded subtitle languages in media row display
Update media_row() to combine embedded subtitle_languages from ffprobe with external subtitle files detected via external_subtitle_languages(). Apply unique_langs() to deduplicate language codes when local_path is available, ensuring both .mkv internal subs and external .srt/.ass files appear in the subtitle language list.
2026-08-14 14:30:22 +02:00
nessi 61d65d5988 feat: add external subtitle file detection with language parsing and cache invalidation on subtitle changes
Add EXTERNAL_SUBTITLE_EXTENSIONS set with common subtitle formats (.srt, .ass, .ssa, .vtt, .sub, .idx, .sup). Add external_subtitle_files() to glob subtitle files matching media stem and external_subtitle_languages() to parse language codes from filenames (de/deu/ger/german/deutsch, en/eng/english, fr/fra/fre/french/französisch, es/spa/spanish/spanisch, it/ita/italian/italienisch).

Update run_ffprobe() to merge external subtitle
2026-08-14 13:25:37 +02:00
nessi b5365170fb feat: add parallel file scanning with dedicated executor and support for scanning all sources simultaneously
Add scan_executor ThreadPoolExecutor with 4 workers for parallel file scanning. Import as_completed from concurrent.futures to process scan results. Replace sequential scan_one() loop with parallel futures submission and result collection using as_completed().

Update /api/rescan endpoint to accept "all" source parameter for scanning both Radarr and Sonarr simultaneously. Fix cache deletion
2026-08-14 13:22:15 +02:00
nessi bcefa02c32 feat: add dashboard insights section with media statistics and status cards showing file counts, missing items, and monitoring status
Add dashboard_stats dictionary to index() route calculating movie/episode totals, available files, missing items, and downloading counts. Pass stats to template for dashboard insights display.

Add dashboard-insights CSS grid with 4 insight cards showing media availability (movies/episodes), monitoring status, and live updates. Each card has color-coded icon with
2026-08-14 11:08:31 +02:00
nessi 7daee41f65 feat: rename "Daten" disk mount to "Medien" and consolidate Filme/Serien mount paths with explanatory comment
Add German comment explaining that Filme and Serien share the same host storage (/nesflix) and are made visible in the container via media mounts. Update mount_paths list to replace "Daten" label with "Medien" and combine Filme/Serien paths under single "Medien" label. Add dashboard-view CSS class with flex layout, min-height constraints, and increased disk-list gap for improved vertical
2026-08-13 16:42:20 +02:00
nessi 5912b7078c feat: add system metrics dashboard with live CPU, RAM, and disk usage monitoring plus service status overview
Add system_metrics() function to read CPU usage from /proc/stat with delta calculation, memory stats from /proc/meminfo, and disk usage for System/Daten/Filme/Serien mounts with device deduplication. Add /api/system endpoint returning metrics JSON with error handling.

Add dashboard view as default tab with hero section, 4-card overview grid showing movie/series/missing/download counts, system
2026-08-13 16:38:19 +02:00
nessi 3d4fb52fa3 feat: filter "Without German" tab to show only existing or downloading media and exclude season 0 episodes
Add is_german_review_candidate() helper function to filter media that exists locally or is currently being downloaded, excluding season 0 (specials) episodes. Apply filter to missing_german_movies and missing_german_series lists to show only actionable items. Update tab description text from "Kein deutsches Audio und keine deutschen Untertitel" to "Vorhanden oder wird gerade geladen · Staffel
2026-08-13 16:32:21 +02:00
nessi 05e32fb5af feat: add enhanced SABnzbd download dashboard with remaining data calculation and visual redesign
Add parse_size_bytes() and format_bytes() helper functions to convert and format file sizes. Calculate total remaining bytes from queue and include active_count, history_count, remaining_bytes, and formatted remaining in downloads API response. Update error responses to include new fields.

Add media-mark.svg favicon with gradient background, golden lines, and green checkmark. Replace text logo with inline
2026-08-13 16:28:10 +02:00
nessi 7b788f7dc8 feat: add "Without German" tab to filter media missing German audio or subtitles
Add new navigation tab showing count of movies and episodes without German tracks. Implement has_german_track() helper to check for German audio or subtitles. Filter movies and series to create missing_german_movies and missing_german_series lists passed to template. Add dedicated view section with tables for movies and series lacking German content, including empty state message. Update navigation translation logic
2026-08-13 16:25:57 +02:00
nessi 6da8204855 feat: add season dividers to series episode lists
Add visual separators between seasons in series episode tables. Extract season number from episode data and insert divider rows with "Staffel N" labels when season changes. Style dividers with dark background and subtle borders to improve readability of long episode lists.
2026-08-13 11:37:25 +02:00
nessi d252024dbc feat: improve download matching with fuzzy token-based algorithm and add downloading state styling
Replace exact title matching with token-based fuzzy matching that requires 75% of significant tokens (3+ chars) to match. Add "downloading" class to state column and apply purple badge styling to quality column for downloading items. Update download refresh to trigger markDownloading() and initialize download markers on page load.
2026-08-13 11:35:55 +02:00
nessi 6ab78ff9ad feat: mark missing files as pending and auto-mount series volume when Sonarr is active
Add "pending" flag to cached() error response for missing files to enable download status detection. Update docker-compose to always mount series volume with fallback default path instead of requiring manual uncomment. Update README to clarify that SERIES_MEDIA_VOLUME must point to actual host path when Sonarr is enabled.
2026-08-13 11:07:40 +02:00
nessi f78944795c feat: add SABnzbd download monitoring with language detection and source tracking
Add SABnzbd integration to display active and completed downloads with progress tracking, speed monitoring, and automatic language detection from release names. Downloads are matched against Radarr/Sonarr queues to identify source application. Add new Downloads tab in navigation, API endpoint for queue/history data, and auto-refresh every 4 seconds. Include configuration for SAB_URL and SAB_API_KEY in docker-compose and
2026-08-13 11:00:57 +02:00
nessi acbf3215bb feat: add Sonarr support with background scanning and progress tracking
Add Sonarr integration alongside existing Radarr functionality. Implement background ffprobe scanning with ThreadPoolExecutor, progress tracking API, and separate navigation for movies/series. Series are grouped by show with collapsible episodes. Reduce Gunicorn workers to 1, add scan status endpoint, and update README with Sonarr configuration instructions.
2026-08-13 10:49:39 +02:00
nessi 6ee9610b11 feat: add Radarr language dashboard with Docker support
Add a Flask-based dashboard for monitoring audio/subtitle languages in Radarr media files. Includes ffprobe integration for media analysis, SQLite caching, path mapping between Radarr and host filesystems, and a responsive web UI with filtering and statistics.
2026-08-13 10:46:45 +02:00