SergeantPanda
d0ce2fdd6d
perf(M3UAccountSerializer): optimize stream count retrieval to avoid redundant queries
2026-05-02 11:51:13 -05:00
SergeantPanda
d08298b9c3
perf(M3UAccount): optimize list endpoint with pre-aggregated stream counts
2026-05-02 11:50:53 -05:00
SergeantPanda
f84ef95d3c
perf(serializers): optimize channel group counts with queryset annotation fallback
2026-05-02 11:50:13 -05:00
SergeantPanda
133a15496a
perf: optimize ChannelGroup and Channel viewsets for efficient querying and serialization
2026-05-02 11:49:49 -05:00
None
0c0e802cf2
refactor(orphan-cleanup): store as custom_properties mode
...
Drop 3UAccount.auto_cleanup_unused_channels field and its migration (apps/m3u/0020). Replace with a 3-state string under M3UAccount.custom_properties.orphan_channel_cleanup: "always" (default), "preserve_customized", "never".
Move the UI from a checkbox on the M3U account form to a SegmentedControl at the top of LiveGroupFilter. Local state mirrors the prop for immediate click feedback; reverts on API error.
M3UAccountSerializer.update() now merges incoming custom_properties before layering the typed preference fields on top.
Add LiveGroupFilter.test.jsx (5 cases). Replace AutoCleanupToggleTests with OrphanCleanupModeTests (5 cases) for the new 3-state contract.
2026-05-01 23:24:40 -05:00
None
b2b108bfe5
rename Channel.user_hidden to Channel.hidden_from_output
...
The previous name suggested "hidden from a specific user account" rather than "hidden from downstream client output", which was the actual
behavior. The new name is unambiguous and matches the help_text language ("Exclude this channel from downstream client output").
Mechanical rename across the migration, model, serializer, signals, sync logic, output endpoints, frontend forms / tables / utils, tests, and CHANGELOG. 77 occurrences across 20 files.
No behavior change.
2026-05-01 19:44:16 -05:00
None
b9b3ded71c
refactor(migrations): merge channels FR #1196 migrations into single 0037
...
Consolidates 0037_channeloverride_and_user_hidden, 0038_backfill_auto_created_by_null,
0039_channelgroupm3uaccount_auto_sync_channel_end, and 0040_channel_channel_number_nullable
into a single 0037_auto_sync_overhaul migration.
The merged migration runs operations in dependency-respecting order:
1. AddField Channel.user_hidden
2. CreateModel ChannelOverride
3. AddField ChannelGroupM3UAccount.auto_sync_channel_end
4. RunPython backfill_auto_created_by_null
5. AlterField Channel.channel_number (nullable)
6. RunPython noop / reverse_backfill_channel_number_nulls
Also, update CHANGELOG.md and update migration references in test
2026-05-01 18:32:23 -05:00
None
6fed444e43
feat: Auto-sync overhaul (FR #1196 )
...
Per-field channel overrides for auto-synced channels, hide-from-output flag, range-bounded auto-numbering with re-pack, multi-stream channel safety, multi-provider shared-range merging, and an across-the-board move from per-row sync writes to bulk operations.
Migrations:
apps/channels:
0036_channeloverride_and_user_hidden,
0037_backfill_auto_created_by_null,
0038_channelgroupm3uaccount_auto_sync_channel_end,
0039_channel_channel_number_nullable
apps/m3u:
0020_m3uaccount_auto_cleanup_unused_channels
See CHANGELOG.md for the full commit log
2026-05-01 14:05:06 -05:00
SergeantPanda
37922a44ab
Enhancement: Update user connection reporting in xc_get_info to reflect active connections and max connections based on user stream limits. ( Fixes #990 )
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Waiting to run
2026-04-30 20:33:30 -05:00
SergeantPanda
a80af16e6a
Enhancement: Implement targeted stream-stats refresh for channel table using a new lightweight delta endpoint
2026-04-30 17:46:49 -05:00
SergeantPanda
8e858045d6
Enhancement: Throttle Redis stats writes in StreamGenerator to reduce traffic during high viewer load
2026-04-30 16:23:51 -05:00
SergeantPanda
a5ac0e78fc
Enhancement: Optimize Redis writes in StreamBuffer by using pipelining for chunk storage and timestamp management
2026-04-30 16:22:36 -05:00
SergeantPanda
f2069caa62
Refactor: Simplify orphaned channel deletion and optimize M3UAccount fetching in send_m3u_update
2026-04-30 16:11:37 -05:00
SergeantPanda
2ef9ab0dcf
Refactor: Remove unused stream deactivation and filtering methods from M3UAccount and M3UFilter classes
2026-04-30 16:01:55 -05:00
SergeantPanda
db6755a009
Enhancement: Add database index on Stream.name to improve query performance and reduce disk spill during sorting ( Fixes #1209 )
2026-04-30 14:28:26 -05:00
SergeantPanda
3801dd7aab
Security: Implement network access checks for HDHomeRun discovery endpoints and remove dangerouslySetInnerHTML from M3U Profile regex preview to prevent XSS vulnerabilities
2026-04-30 14:03:30 -05:00
SergeantPanda
dd911cc711
Refactor: Remove SSDP advertisement implementation and related code from HDHomeRun app
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
2026-04-30 12:23:37 -05:00
SergeantPanda
ddb03289b4
Enhancement: Improve plugin discovery process by adding a completion flag and refining in-memory registry handling
2026-04-30 10:33:41 -05:00
SergeantPanda
1e5298a8d3
Bug Fix: Implement Redis locks in run_recording and worker_ready to prevent duplicate ffmpeg processes and ensure single execution across workers
2026-04-30 10:15:03 -05:00
SergeantPanda
1eda68db7a
Enhancement: Refactor run_recording to improve directory handling and remove unused cancellation check
2026-04-26 13:27:50 -05:00
SergeantPanda
a7b8e54747
Enhancement: Refactor HLS handling in RecordingViewSet and implement cleanup for empty parent directories
2026-04-26 13:27:32 -05:00
SergeantPanda
0cca34a2dc
Enhancement: Implement user authorization for recording playback and inject JWT into HLS requests
2026-04-26 12:25:05 -05:00
SergeantPanda
914c612db9
Enhancement: Implement network access checks for streaming and update recording status handling during worker shutdown
2026-04-26 11:40:46 -05:00
SergeantPanda
14a6bf4473
Initial DVR HLS refactor.
2026-04-26 09:06:48 -05:00
SergeantPanda
29739ede36
Enhancement: VOD start/stop notifications and system events.
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Waiting to run
2026-04-23 18:03:02 -05:00
SergeantPanda
eb9dd391d5
Enhancement: Consolidate client connection notifications and update timestamp handling; replace 'connected_since' with 'connected_at' for improved accuracy in duration calculations.
2026-04-23 11:03:02 -05:00
SergeantPanda
29228612aa
perf/fix: eliminate per-tick DB queries in stats; fix channel notifications
...
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Waiting to run
- Write channel_name (and stream_name fallback) into Redis metadata at
channel init time; read directly from Redis in get_basic_channel_info,
removing Stream and M3UAccountProfile DB queries on every stats tick
- Pass channel.name from views.py into ChannelService.initialize_channel
via new optional channel_name param, skipping the redundant Channel DB
lookup on the normal streaming path
- Pass stream_name from get_stream_info_for_switch through change_stream_url
into _update_channel_metadata, skipping the Stream DB lookup on switches
- Resolve m3u_profile_name on the frontend from the playlists store instead
of querying the DB per tick; StreamConnectionCard builds an id→profile map
- Fix channel start notification showing no name and stop notification
showing UUID: both now use channel_name from the stats WebSocket payload
2026-04-21 18:55:38 -05:00
SergeantPanda
625dab0357
Enhancement: The default profile in the M3U profiles editor now exposes Search Pattern and Replace Pattern fields
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Waiting to run
2026-04-21 17:20:45 -05:00
SergeantPanda
69e0cba86e
Bug Fix: EPG channel name vlaue too long for type character varying(255) ( Fixes #1134 )
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
2026-04-21 09:23:35 -05:00
SergeantPanda
452a493df3
Performance: Fixed N+1 UPDATE queries in the stream-order write path
2026-04-19 09:55:56 -05:00
SergeantPanda
d676903825
Enhancement: Cache channel names to reduce repeated DB queries in StreamManager and StreamGenerator. This improves performance by avoiding unnecessary database calls during retries and logging events. ( Fixes #1138 )
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
2026-04-17 10:55:41 -05:00
SergeantPanda
6cd6d3ef9a
Enhancement: - **Output bitrate DB persistence**: the ffmpeg_output_bitrate stat is no longer written to the database on every FFmpeg stats tick (~2/second). Instead, a local exponential moving average (EMA, α=0.1) accumulates readings continuously. The first 10 samples (~5 seconds) are discarded as warmup to avoid polluting the average with FFmpeg's unstable ramp-up values. After warmup, the smoothed value is flushed to the database at most once every 30 seconds, and a final flush occurs when the stream stops but only if the EMA has been seeded (i.e. the stream ran past warmup). Streams that stop during warmup leave the existing database value untouched, preserving previously accurate measurements when channel-hopping.
2026-04-16 17:15:54 -05:00
SergeantPanda
54ab3e8981
performance:
...
- Performance: `xc_get_epg` now uses `select_related('epg_data__epg_source')` on all three channel fetch paths. Previously each request triggered 2 additional queries to resolve `channel.epg_data` and `channel.epg_data.epg_source`.
- Performance: `generate_m3u` now uses `prefetch_related` for streams when `?direct=true` is requested, eliminating N+1 stream queries (one per channel) on that code path.
- Performance: `EPGGridAPIView` (`apps/epg/api_views.py`) now uses `select_related('epg_data__epg_source')` on the `channels_with_custom_dummy` queryset, eliminating 2 extra queries per channel (for `epg_data` and `epg_source`) in the dummy EPG generation loop.
2026-04-16 13:19:19 -05:00
SergeantPanda
16984bc386
performance:
...
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
- `generate_epg` now uses `select_related('epg_data__epg_source')` on all EPG channel querysets
- `generate_epg` now issues a single cross-channel `ProgramData` bulk query. `.values()` returns plain dicts
- `xc_get_live_streams` no longer calls `ChannelGroup.objects.get_or_create(name="Default Group")` once per null-group channel
2026-04-16 11:12:53 -05:00
SergeantPanda
04ce2dacd1
Merge pull request #1165 from xBOBxSAGETx:perf/select-related-channel-queries
...
CI Pipeline / prepare (push) Has been cancelled
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
Frontend Tests / test (push) Has been cancelled
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Has been cancelled
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
CI Pipeline / create-manifest (push) Has been cancelled
Add select_related to Channel queries in output views
2026-04-14 17:50:10 -05:00
SergeantPanda
e603ff7a49
fix(migration): Fix plugin repo migration that specified AutoField for id instead of BigAutoField.
2026-04-14 16:36:16 -05:00
SergeantPanda
c4972f7dc9
fix: clear previous failure entries after successful logo fetch in LogoViewSet and VODLogoViewSet
2026-04-14 13:34:17 -05:00
SergeantPanda
978714a74d
fix: improve remote logo fetching with timeout and caching for failures
2026-04-14 13:04:45 -05:00
SergeantPanda
f98bb183da
Bug Fix: Fixed a provider TCP connection leak in the VOD proxy
2026-04-13 19:33:22 -05:00
SergeantPanda
55048b60e3
fix(vod-proxy): prevent double profile decrement and clean up stream counter naming
2026-04-13 18:40:33 -05:00
SergeantPanda
d73071b20f
Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/firestaerter3/1125
2026-04-13 17:42:43 -05:00
SergeantPanda
f8407610c8
Bug Fix/Enhancement: Improve logic for get xc epg endpoint for short epgs. Also support epg_days from xc user for xc epg endpoint.
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Has been cancelled
2026-04-12 18:51:40 -05:00
SergeantPanda
9f3d4ff7ff
Enhancement: Improved the EPG response cache key
2026-04-12 18:19:19 -05:00
SergeantPanda
ba967f47d9
Enhancement: **EPG historical data window**: the EPG XML output and XC EPG API now support a prev_days URL parameter (e.g. &prev_days=3) to include past programs in the EPG response. This allows third-party players that request historical program schedules to receive the data they need. The EPG URL builder in the Channels page exposes "Days forward" and "Days back" controls. Per-user defaults for both values (epg_days / epg_prev_days) can be configured in the User settings modal and are applied automatically when no URL parameter is present. ( Closes #1154 )
2026-04-12 16:34:15 -05:00
SergeantPanda
a83b9fdf62
Enhancement: EPG channel scanning now automatically removes stale EPGData entries.
2026-04-12 15:37:28 -05:00
SergeantPanda
b629836b3d
Bug Fix: Fixed stream switch metadata (url, user_agent, stream_id, m3u_profile) being written to Redis before the switch was confirmed to succeed
2026-04-12 12:02:20 -05:00
SergeantPanda
65d14644b4
Bug Fix: Fixed the next_stream rotation endpoint applying the same class of bug
2026-04-12 11:36:08 -05:00
SergeantPanda
ef030b3da0
Bug Fix: Manual stream selection from the Stats page not enforcing M3U profile connection limits in multi-worker deployments
2026-04-12 10:03:46 -05:00
SergeantPanda
f1a82e8843
Bug Fix: Fixed several incorrect or incomplete OpenAPI (@extend_schema) schemas across the API
CI Pipeline / prepare (push) Waiting to run
CI Pipeline / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
CI Pipeline / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
CI Pipeline / create-manifest (push) Blocked by required conditions
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Waiting to run
2026-04-11 17:02:07 -05:00
SergeantPanda
1adbc70f53
Bug Fix: Fix bulk channel edit API when including streams array. ( Fixes #883 )
2026-04-11 16:11:45 -05:00