6.5 KiB
Database and UI Updates - 2025-12-28
Summary
Fixed the status filter issue and added container format and encoder columns to the dashboard table.
Changes Made
1. Fixed Status Filter (dashboard.py:717)
Issue: Status filter dropdown wasn't working for "Discovered" state - API was rejecting it as invalid.
Fix: Added 'discovered' to the valid_states list in the /api/files endpoint.
# Before
valid_states = ['pending', 'processing', 'completed', 'failed', 'skipped', None]
# After
valid_states = ['discovered', 'pending', 'processing', 'completed', 'failed', 'skipped', None]
Testing: Select "Discovered" in the status filter dropdown - should now properly filter files.
2. Added Container Format Column to Database
Files Modified:
dashboard.py(lines 161, 210)reencode.py(lines 374, 388, 400, 414, 417, 934, 951, 966)
Database Schema Changes:
ALTER TABLE files ADD COLUMN container_format TEXT
Scanner Updates:
- Extracts container format from FFprobe output during library scan
- Format name extracted from
format.format_name(e.g., "matroska", "mov,mp4,m4a,3gp,3g2,mj2") - Takes first format if multiple listed
Migration: Automatic - runs on next dashboard or scanner startup
3. Added Dashboard Table Columns
dashboard.html Changes:
Table Headers (lines 667-675):
- Added "Container" column (shows file container format like MKV, MP4)
- Added "Encoder" column (shows encoder used for completed files)
- Moved existing columns to accommodate
Table Column Order:
- Checkbox
- File
- State
- Resolution (now shows actual resolution like "1920x1080")
- Container (NEW - shows MKV, MP4, AVI, etc.)
- Encoder (NEW - shows encoder used like "hevc_qsv", "h264_nvenc")
- Original Size
- Encoded Size
- Savings
- Status
Data Display (lines 1518-1546):
- Resolution: Shows
widthxheight(e.g., "1920x1080") or "-" - Container: Shows uppercase format name (e.g., "MATROSKA", "MP4") or "-"
- Encoder: Shows encoder_used from database (e.g., "hevc_qsv") or "-"
Colspan Updates: Changed from 8 to 10 to match new column count
4. Database Update Script
File: update-database.py
Purpose: Populate container_format for existing database records
Usage:
# Auto-detect database location
python update-database.py
# Specify database path
python update-database.py path/to/state.db
What It Does:
- Finds all files with NULL or empty container_format
- Uses ffprobe to extract container format
- Updates database with format information
- Shows progress for each file
- Commits every 10 files for safety
Requirements: ffprobe must be installed and in PATH
Example Output:
Opening database: data/state.db
Found 42 files to update
[1/42] Updated: movie1.mkv -> matroska
[2/42] Updated: movie2.mp4 -> mov,mp4,m4a,3gp,3g2,mj2
...
Update complete!
Updated: 40
Failed: 2
Total: 42
How Container Format is Populated
For New Scans (Automatic)
When you run "Scan Library", the scanner now:
- Runs FFprobe on each file
- Extracts
format.format_namefrom JSON output - Takes first format if comma-separated list
- Stores in database during
add_file()
Example:
- MKV files:
format_name = "matroska,webm"→ stored as "matroska" - MP4 files:
format_name = "mov,mp4,m4a,3gp,3g2,mj2"→ stored as "mov"
For Existing Records (Manual)
Run the update script to populate container format for files already in database:
python update-database.py
Encoder Column
The "Encoder" column shows which encoder was used for completed encodings:
Data Source: files.encoder_used column (already existed)
Display:
- Completed files: Shows encoder name (e.g., "hevc_qsv", "h264_nvenc")
- Other states: Shows "-"
Updated By: The encoding process already sets this when completing a file
Common Values:
hevc_qsv- Intel QSV H.265av1_qsv- Intel QSV AV1h264_nvenc- NVIDIA NVENC H.264hevc_nvenc- NVIDIA NVENC H.265libx265- CPU H.265libx264- CPU H.264
Testing Checklist
Status Filter
- Select "All States" - shows all files
- Select "Discovered" - shows only discovered files
- Select "Pending" - shows only pending files
- Select "Completed" - shows only completed files
- Combine with attribute filter (e.g., Discovered + 4K)
Dashboard Table
- Table has 10 columns (was 8)
- Resolution column shows actual resolution or "-"
- Container column shows format name or "-"
- Encoder column shows encoder for completed files or "-"
- All columns align properly
New Scans
- Run "Scan Library"
- Check database - new files should have container_format populated
- Dashboard should show container formats immediately
Database Update Script
- Run
python update-database.py - Verify container_format populated for existing files
- Check dashboard - existing files should now show containers
Migration Notes
Backward Compatible: Yes
- New columns have NULL default
- Existing code works without changes
- Database auto-migrates on startup
Data Loss: None
- Existing data preserved
- Only adds new columns
Rollback: Safe
- Can remove columns with ALTER TABLE DROP COLUMN (SQLite 3.35+)
- Or restore from backup
Files Changed
-
dashboard.py
- Line 161: Added container_format to schema
- Line 210: Added container_format migration
- Line 717: Fixed valid_states to include 'discovered'
-
reencode.py
- Line 374: Added container_format migration
- Line 388: Added container_format parameter to add_file()
- Lines 400, 414, 417: Updated SQL to include container_format
- Lines 934, 951: Extract and pass container_format during scan
- Line 966: Pass container_format to add_file()
-
templates/dashboard.html
- Lines 670-671: Added Container and Encoder column headers
- Line 680: Updated colspan from 8 to 10
- Line 1472: Updated empty state colspan to 10
- Lines 1518-1525: Added resolution, container, encoder formatting
- Lines 1544-1546: Added new columns to table row
-
update-database.py (NEW)
- Standalone script to populate container_format for existing records
Next Steps
- Restart Flask Application to load database changes
- Test Status Filter - verify "Discovered" works
- Scan Library (optional) - populates container format for new files
- Run Update Script -
python update-database.pyto update existing files - Verify Dashboard - check that all columns display correctly