Major New Features
EPG Assignment Removal
- New action: "Remove EPG Assignments" - removes EPG from channels found with missing program data
- New action: "Remove EPG Assignments matching REGEX within Group(s)" - removes EPG based on regex pattern matching EPG names
- New action: "Remove ALL EPG Assignments from Group(s)" - nuclear option to remove all EPG from specified groups
Channel Renaming
New action: "Add Bad EPG Suffix to Channels" - adds configurable suffix (default: " [BadEPG]") to channels with missing data
Includes duplicate prevention logic
API Integration
- Now requires Dispatcharr URL, username, and password for authentication
- Uses token-based API access instead of direct Django ORM queries where possible
- Includes API error handling and fallback to Django ORM
GUI Updates
- Triggers M3U refresh after bulk operations to update the interface via WebSockets
- Shows sample renamed channels in action responses
New Settings Fields
- dispatcharr_url: Full URL of Dispatcharr instance
- dispatcharr_username: Admin username for API access
- dispatcharr_password: Admin password (secure input type)
- epg_regex_to_remove: Regular expression to match EPG channel names for removal
- bad_epg_suffix: Configurable suffix for problematic channels (default: " [BadEPG]")
Technical Changes
- Added authentication method _get_api_token()
- Added API helper methods: _get_api_data(), _post_api_data(), _patch_api_data()
- Added _trigger_m3u_refresh() for GUI updates
- Bulk update operations use /api/channels/channels/edit/bulk/ endpoint
- Confirmation dialogs added for destructive actions