Commit graph

67 commits

Author SHA1 Message Date
SergeantPanda
9ffd595c96 Enhancement: Added stream_id (provider stream identifier) and stream_chno (provider channel number) fields to Stream model. For XC accounts, the stream hash now uses the stable stream_id instead of the URL when hashing, ensuring XC streams maintain their identity and channel associations even when account credentials or server URLs change. Supports both XC num and M3U tvg-chno/channel-number attributes. 2026-01-31 17:47:46 -06:00
SergeantPanda
620d65d1de Bug Fix: Fixed XtreamCodes API crash when channels have NULL channel_group: The player_api.php endpoint (xc_get_live_streams) now gracefully handles channels without an assigned channel_group by dynamically looking up and assigning them to "Default Group" instead of crashing with AttributeError. Additionally, the Channel serializer now auto-assigns new channels to "Default Group" when channel_group_id is omitted during creation, preventing future NULL channel_group issues. 2026-01-18 15:52:50 -06:00
SergeantPanda
d33d047a94 Enhancement: - Mature content filtering support:
- Added `is_adult` boolean field to both Stream and Channel models with database indexing for efficient filtering and sorting
  - Automatically populated during M3U/XC refresh operations by extracting `is_adult` value from provider data
  - Type-safe conversion supporting both integer (0/1) and string ("0"/"1") formats from different providers
  - UI controls in channel edit form (Switch with tooltip) and bulk edit form (Select dropdown) for easy management
  - XtreamCodes API support with proper integer formatting (0/1) in live stream responses
  - Automatic propagation from streams to channels during both single and bulk channel creation operations
  - Included in serializers for full API support
  - User-level content filtering: Non-admin users can opt to hide mature content channels across all interfaces (web UI, M3U playlists, EPG data, XtreamCodes API) via "Hide Mature Content" toggle in user settings (stored in custom_properties, admin users always see all content)
2026-01-17 15:00:28 -06:00
SergeantPanda
a84553d15c Enhancement: Stale status indicators for streams and groups: Added is_stale field to both Stream and ChannelGroupM3UAccount models to track items in their grace period (seen in previous refresh but not current). 2026-01-09 13:53:01 -06:00
SergeantPanda
16bbc1d875 Refactor forms to use react-hook-form and Yup for validation
- Replaced Formik with react-hook-form in Logo, M3UGroupFilter, M3UProfile, Stream, StreamProfile, and UserAgent components.
- Integrated Yup for schema validation in all updated forms.
- Updated form submission logic to accommodate new form handling methods.
- Adjusted state management and error handling to align with react-hook-form's API.
- Ensured compatibility with existing functionality while improving code readability and maintainability.
2026-01-04 20:40:16 -06:00
SergeantPanda
204a5a0c76
Merge pull request #659 from FiveBoroughs/fix/channel-stream-order-serialization
Fix: Preserve stream order in ChannelSerializer PATCH/PUT responses
2025-11-19 15:59:38 -06:00
FiveBoroughs
bbe1f6364b Fix: Preserve stream order in ChannelSerializer PATCH/PUT responses
The ChannelSerializer.to_representation() method was not respecting the
ChannelStream.order field when serializing PATCH/PUT responses. This
caused streams to be returned in an arbitrary order rather than the
order specified in the request.

The update() method correctly saves the stream order to the database
using the ChannelStream.order field, and GET requests (with
include_streams=True) correctly return ordered streams via
get_streams(). However, standard PATCH/PUT responses were using
PrimaryKeyRelatedField which doesn't respect the ordering.

This fix ensures that all representations (GET, PATCH, PUT) return
streams ordered by the channelstream__order field.

Impact:
- PATCH/PUT responses now correctly reflect the stream order saved
- Clients can trust the response data without needing a follow-up GET
- No breaking changes - only fixes inconsistent behavior

Tested with:
- PATCH request with ordered stream IDs
- Verified response matches request order
- Verified GET request confirms order persisted to database
2025-11-16 23:29:17 +01:00
SergeantPanda
da628705df Separate VOD and channel logos into distinct tables with dedicated management UI
- Created VODLogo model for movies/series, separate from Logo (channels only)
- Added database migration to create vodlogo table and migrate existing VOD logos
- Implemented VODLogoViewSet with pagination, filtering (used/unused/movies/series), and bulk operations
- Built VODLogosTable component with server-side pagination matching channel logos styling
- Added VOD logos tab with on-demand loading to Logos page
- Fixed orphaned VOD content cleanup to always remove unused entries
- Removed redundant channel_assignable filtering from channel logos
2025-11-07 13:19:18 -06:00
Dispatcharr
dea6411e1c Time Zones
- Added time zone settings
2025-10-06 07:46:23 -05:00
Dispatcharr
6536f35dc0 FIxed bug
Fixed bug that stopped stream from ending
2025-09-19 19:47:59 -05:00
Dispatcharr
eee4ab0725 Update for recurring rules 2025-09-19 16:21:28 -05:00
Dispatcharr
424a450654 DVR Features and bug fixes
Added ability to use custom comskip.ini
Added series recording without reliance on EPG
Fixed comskip bug
Fixed timezone mismatch when scheduling DVR recordings

No migrations completed yet
2025-09-18 10:23:16 -05:00
Dispatcharr
c85316b912 Added DVR offset
Added pre/post offset for DVR recordings.
2025-09-11 20:58:42 -05:00
SergeantPanda
6f6c28ca7c Convert custom_properties to jsonb in the backend. 2025-09-02 09:41:51 -05:00
SergeantPanda
b92d7c2c21 Major rework of how logos are handle. We will no longer load logos on login and they will only be loaded into the store when needed. 2025-08-26 13:19:29 -05:00
dekzter
11bc2e57a9 optimized vod parsing, added in vod category filtering, added UI individual tabs for movies vs series VOD category filters 2025-08-25 14:37:20 -04:00
dekzter
efcf4c7920 missed commit 2025-08-22 17:31:22 -04:00
dekzter
a19bd14a84 added vod category filtering 2025-08-22 16:59:00 -04:00
SergeantPanda
7b5a617bf8 Use custom validator for urls fields to allow for non fqdn hostnames.
Fixes #63
2025-08-01 11:28:51 -05:00
SergeantPanda
6180b4ffef Save stream stats to database. 2025-07-28 21:40:29 -05:00
SergeantPanda
1475ca70ab Fixes being unable to add a new logo via URL. 2025-07-27 14:18:48 -05:00
SergeantPanda
e7771d5b67 Allow deleting logos that are assigned to channels. 2025-07-18 11:36:15 -05:00
SergeantPanda
122b902f0f Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into logo-manager 2025-07-17 19:56:11 -05:00
SergeantPanda
a5f7a88ba0 Add option to force dummy epg. 2025-07-17 16:54:37 -05:00
SergeantPanda
cd30f6da66 Enhance Logo management with filtering and usage details in API and UI 2025-07-15 20:26:02 -05:00
SergeantPanda
b91a2286e4 Add auto-created tracking to Channel model and related serializers
- Introduced `auto_created` and `auto_created_by` fields in the Channel model to track channels created via M3U auto channel sync.
- Updated ChannelSerializer to include these new fields and added a method to retrieve the name of the M3U account that created the channel.
- Modified sync_auto_channels task to set these fields when creating channels and to filter existing channels accordingly.
2025-07-13 16:32:52 -05:00
SergeantPanda
ea81cfb1af Add auto channel sync settings to ChannelGroupM3UAccount and update related components
- Introduced `auto_channel_sync` and `auto_sync_channel_start` fields in the ChannelGroupM3UAccount model.
- Added API endpoint to update M3U group settings.
- Updated M3UGroupFilter component to manage auto sync settings.
- Enhanced M3URefreshNotification and M3U components for better user guidance.
- Created a Celery task for automatic channel synchronization after M3U refresh.
2025-07-13 15:59:25 -05:00
SergeantPanda
adc6604fa2 Disable buttons that can't be used. 2025-07-12 16:57:05 -05:00
dekzter
74d58515d0 user management, user levels, user level channel access 2025-05-18 11:19:34 -04:00
SergeantPanda
8ee1581588 Forms support floats now. 2025-05-15 15:32:21 -05:00
MooseOnTheLoose
88a7312397
Merge branch 'dev' into main 2025-05-08 19:16:49 -05:00
MooseyOnTheLoosey
f6ea1b41b3 Removing debug 2025-05-08 09:15:08 -05:00
MooseyOnTheLoosey
88866cc905 Updated channel numbers from integer to float 2025-05-08 09:12:10 -05:00
Reggie Burnett
fcd1722d3a Add support for Channels DVR tvc-guide-stationid 2025-05-03 19:24:51 -05:00
SergeantPanda
104bad8f04 Added last seen as an api output for streams. 2025-05-03 12:38:45 -05:00
dekzter
8e6f8d59e0 fixed channel creation from stream 2025-04-24 17:58:11 -04:00
dekzter
8fe83fd9ee channel streams optimizations, bug fixes in tables, parallel api calls for paginated data fetching 2025-04-24 17:14:25 -04:00
dekzter
ccdb8ab00d more table bug fixes, query optimizations, re-added channel expansion stream table with reworked drag-and-drop 2025-04-19 08:37:43 -04:00
dekzter
c6d83bf1f9 Merge remote-tracking branch 'origin/dev' into table-rewrite 2025-04-17 17:56:55 -04:00
dekzter
6a0ce574b0 rewrite with tanstack table 2025-04-16 13:06:51 -04:00
SergeantPanda
c5748346eb Fixes stream ordering. 2025-04-16 09:40:29 -05:00
SergeantPanda
b4ddf08e4a Fixes, notifications that don't give good error messges, epg's not refreshing when linking epg to channel. 2025-04-15 12:22:00 -05:00
dekzter
e31036079e allow null for channel_number so we auto assign 2025-04-08 17:24:38 -04:00
dekzter
ee4e227e02 fixing m3u file upload 2025-04-07 18:12:45 -04:00
dekzter
b3551fe32f fixed potential timezone issue 2025-04-06 19:14:32 -04:00
dekzter
00f6e7c1cd first run at recordings, among other things 2025-04-05 18:59:15 -04:00
dekzter
827e824651 bulk update of enabling channels by profile, more UI tweaks and updates 2025-04-05 09:50:47 -04:00
dekzter
b69aa6ad80 logo caching 2025-04-04 09:21:53 -04:00
dekzter
a41b205629 fully supported channel profiles 2025-04-03 08:59:06 -04:00
dekzter
c5e0de5d48 logos, channel numbers, websocket regex test so we can properly test against python regex and not javascript 2025-04-02 16:27:28 -04:00