Commit graph

3723 commits

Author SHA1 Message Date
SergeantPanda
3d8fe8f1e9
Merge pull request #1317 from sv-dispatcharr/feat/new-plugins-url
migrate official plugin repo URL to GitHub Pages
2026-06-06 17:26:44 -05:00
SergeantPanda
7d6bef5507 Enhancement: Enhance DVR recording reliability and error tolerance
- Improve DVR recording stability by ensuring FFmpeg restarts on mid-stream outages, maintaining segment continuity and proper numbering.
- Update HLS→MKV concatenation to handle timestamp splices and corrupt segments, utilizing error-tolerant FFmpeg flags.
- Introduce helper functions for managing HLS segment counts and retry logic, ensuring robust handling of recording interruptions.
- Update tests to validate new retry logic and error handling in recording processes. (Closes #1170)
2026-06-05 16:14:23 -05:00
SergeantPanda
3d87001958 chore: update dependencies in package.json and package-lock.json
Upgrade vitest to version 4.1.8 and add @hookform/resolvers as a new dependency. Update related dependencies for @vitest packages to their latest versions, ensuring compatibility and improved functionality.
2026-06-05 13:38:49 -05:00
SergeantPanda
2c6a636c73 changelog: Update for security updates. 2026-06-05 13:33:48 -05:00
SergeantPanda
3caa2ca705 chore: update dependencies in package.json and package-lock.json
Upgrade vitest to version 4.1.8 and add @hookform/resolvers as a new dependency. Update related dependencies for @vitest packages to their latest versions, ensuring compatibility and improved functionality.
2026-06-05 13:33:28 -05:00
SergeantPanda
70d900f346 feat(epg): implement auto-apply functionality for EPG logos
Add support for automatically applying channel logos from EPG data during refresh. Introduce a new toggle in the UI for enabling/disabling this feature, and update the backend to handle both channel IDs and EPG source IDs for logo application. Enhance the logo application task to process large libraries efficiently in chunks, improving performance and memory usage. Update changelog to reflect these changes.
2026-06-05 12:49:05 -05:00
SergeantPanda
d4c1622463 changelog: Link FR. 2026-06-05 11:21:44 -05:00
SergeantPanda
c98fd6140b changelog: Update for SD PR 2026-06-05 11:11:40 -05:00
SergeantPanda
1de3022ec5
Merge pull request #1247 from Shokkstokk/feature/schedules-direct-epg
Implement Schedules Direct EPG Integration
2026-06-05 11:02:59 -05:00
SergeantPanda
e25d470565 feat(epg): add force option back to parse_programs_for_tvg_id function 2026-06-05 10:48:40 -05:00
SergeantPanda
87b8035e06 refactor(epg): replace synchronous WebSocket send function with unified send_epg_update
Remove the _sd_send_ws_sync function and replace its usage with send_epg_update in the fetch_schedules_direct function. This change simplifies the code by ensuring all WebSocket updates are sent through a single function, improving maintainability and consistency in handling EPG updates.
2026-06-05 10:42:39 -05:00
SergeantPanda
7e906ad78e feat(epg): enhance poster style selection and fetching logic
Introduce a new poster style selection feature in the EPG settings, allowing users to choose their preferred artwork style. Update the logic for fetching and displaying program artwork from Schedules Direct, ensuring that the selected style is honored with appropriate fallbacks. Set default poster art to 'primary'. Add comprehensive tests to validate the poster selection functionality across various scenarios.
2026-06-05 10:14:07 -05:00
SergeantPanda
ff081d7dc8 feat(epg): implement poster artwork fetching and logo auto-apply functionality
Add a new task to fetch program artwork from Schedules Direct and auto-apply logos to channels based on EPG data. Enhance the existing logic to handle poster backfill and update program records with fetched artwork. Readd the WebSocket handler to manage IP lookup events and adjust the EPGsTable component to display relevant credentials based on the source type.
2026-06-05 09:28:55 -05:00
SergeantPanda
4eab95793e refactor: rename useSDLogos to autoApplySDLogos for clarity
Update the variable name in the EPG settings to better reflect its purpose. Adjust related logic in the UI to ensure consistent handling of the auto-apply feature for SD logos.
2026-06-05 09:08:26 -05:00
Shokkstokk
b6a5738f7d refactor: remove useSDLogos guard from logo style handler
Allow logo style selection to save regardless of toggle state.
2026-06-05 07:33:03 +00:00
None
cae040d45d fix(channels): make compact numbering repack idempotent
The compact repack read its channels with no ORDER BY, so the pack followed PostgreSQL's physical row order. That order drifts after the
UPDATEs each repack issues, so successive syncs
packed the same channels into different numbers within the configured range. Auto-synced channel numbers reshuffled on every sync even when the provider had not changed.

- Add .order_by("id") to the _repack_inner channel query so the pack is deterministic. id order is creation order, which tracks the provider stream order used by the default "provider" sort.
- Add c.id as a secondary key to the name / tvg_id / updated_at sorts so equal values (e.g. blank tvg_id) break ties deterministically instead of churning.
- Add a deterministic regression test that forces a physical heap reorder (CLUSTER) and asserts two consecutive repacks produce identical channel numbers.
2026-06-05 00:01:22 -05:00
Shokkstokk
8ed0030223 refactor: always enable logo style picker per reviewer feedback
Logo style selection should always be available so users can set their
preference before enabling SD logos.
2026-06-05 03:37:50 +00:00
SergeantPanda
c4d73eae39 fix(epg): repair SD poster display and backfill missing artwork
Build absolute poster proxy URLs via build_absolute_uri_with_port so
program detail images resolve correctly in dev and behind reverse
proxies. Backfill sd_icon for programs when poster fetch is enabled
but a delta refresh skips program metadata. Add a dev-mode frontend
fallback for relative image paths and correct the poster caching
description in the SD settings UI.
2026-06-04 22:00:15 -05:00
SergeantPanda
3835954024 fix: enhance API request headers and improve cast handling in schedule fetching
Add User-Agent header to API requests in ProgramViewSet for better tracking. Update cast processing logic in fetch_schedules_direct to align with XMLTV standards, ensuring proper categorization of main cast and guest stars.
2026-06-04 21:30:05 -05:00
Shokkstokk
e731527104 fix: add data-testid to TextInput mock in EPG test 2026-06-05 01:26:51 +00:00
Shokkstokk
c0b7cc5fe8 fix: add updateSDSettings to API mock in EPG test 2026-06-05 01:19:53 +00:00
Shokkstokk
6b5c745962 fix: add remaining Mantine component mocks to EPG test
Add UnstyledButton, Alert, Stack, Text, TextInput mocks to prevent
test failures from unmocked Mantine components in SD settings UI.
2026-06-05 00:57:19 +00:00
Shokkstokk
4ae0796b3d fix: add Switch mock to EPG test for SD logo toggle
Frontend test was failing because the Mantine core mock didn't include
the Switch component used by the SD logo style picker.
2026-06-05 00:28:50 +00:00
Shokkstokk
aa9e78f858 fix: allow unauthenticated access to SD poster proxy endpoint
ProgramViewSet.get_permissions() was falling through to Authenticated()
for the poster action since it wasn't in permission_classes_by_action.
Add explicit AllowAny check for the poster action.
2026-06-05 00:12:17 +00:00
Goldenfreddy0703
abdf2d7864 Fix credential release on deleted profile and round 3 review items.
Store credential Redis keys at reserve so release works when the profile row is deleted. Return reserve failure reasons to avoid fingerprint DB queries on logging paths. Document unlimited profile bypass in pool logic and Server Group UI.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-04 19:51:20 -04:00
Shokkstokk
7c91508f3c fix: add missing updateSDSettings API method and EPG refresh handlers
Add updateSDSettings method to API client for SD logo style and settings
management. Add fetchEPGData and requeryChannels calls after EPG match
completion to ensure UI refreshes immediately. Add SD logo style picker
and cache-busting for channel logos.
2026-06-04 23:46:40 +00:00
mwhit
661d1690d2 feat: expose SD enrichment fields in serializer and frontend
Add content_advisory, content_ratings, event_details, runtime to
ProgramDetailSerializer. Display content advisory, sports venue/teams,
and first-aired date in ProgramDetailModal.
2026-06-04 22:28:18 +00:00
SergeantPanda
ac3a83a1aa fix: Fix removed code from bad merge. 2026-06-04 15:37:27 -05:00
SergeantPanda
30843c0c4c fix: Fix migrations 2026-06-04 15:20:14 -05:00
SergeantPanda
8f060e8b3a feat: Output SD program poster images during xml output and enhance caching logic 2026-06-04 15:17:58 -05:00
mwhit
763d1430fd fix: add channel_group_id to M3U stream bulk_update fields
Streams matched by hash during refresh were not updating channel_group_id,
causing cleanup to delete all streams when group IDs change (e.g., after
migration reset). Adds channel_group_id to comparison, assignment, only()
fetch, and bulk_update in both standard and XC processing paths.
2026-06-04 04:14:23 +00:00
mwhit
b6afcafc98 feat: SD data enrichment, artwork improvement, and bug fixes
- Fix channel_group_id not updating on M3U stream refresh
- Fix SD content rating region selection (country-aware filtering)
- Fix SD season/episode metadata iteration
- Add SD data enrichment: entityType, showType, contentAdvisory, originalAirDate, country, runtime, star ratings, event details, character names
- Cap cast to top-billed, remove role noise
- Switch artwork preference to Banner-L1 (branded key art)
- Add content advisory, sports details, runtime to program detail modal
- Logo cache-busting for browser cache invalidation
- SD API compliance: rolling 24h lineup reset, tokenExpires caching, error caching
2026-06-04 03:40:22 +00:00
Shokkstokk
4eec542ef8
Merge branch 'dev' into feature/schedules-direct-epg 2026-06-03 23:38:54 -04:00
Five Boroughs
d204d6ad64
feat(frontend): multi-word, accent-insensitive EPG channel filter 2026-06-03 20:31:52 +02:00
Seth Van Niekerk
37e11c8fc4
migrate official plugin repo URL to GitHub Pages 2026-06-03 12:36:07 -04:00
SergeantPanda
bdf59b8c19 feat: enhance package installation logic by resolving candidate packages 2026-06-02 21:53:07 -05:00
SergeantPanda
60a9f6843b refactor: simplify initialization wait logic by removing keepalive packet handling (Fixes #1280) 2026-06-02 20:54:59 -05:00
SergeantPanda
2ad997f6ff Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-06-02 20:37:52 -05:00
SergeantPanda
e261642e6c changelog: Update for vod fix. 2026-06-02 20:37:42 -05:00
SergeantPanda
2dc07bbe84
Merge pull request #1315 from R3XCHRIS:fix/vod-streamid-fallback-on-dead-uuid
fix(vod_proxy): fall back to stream_id when content UUID is dead (#961)
2026-06-02 20:32:11 -05:00
SergeantPanda
20f50f6fd9
Merge pull request #1313 from CodeBormen/fix/1263-1276-override-fixes
fix(channels): repair Channel Group Override interactions (compact numbering + clear-override)
2026-06-02 13:35:58 -05:00
SergeantPanda
92df3f7070 changelog: Update changelog for auto sync fixes. 2026-06-02 13:35:34 -05:00
R3XCHRIS
ff60bbec1a fix(vod_proxy): fall back to stream_id when content UUID is dead
Issue: When `process_movie_batch` / `process_series_batch`
(apps/vod/tasks.py) creates duplicate vod_movie / vod_episode records
during a refresh, existing M3U*Relation rows get repointed to the new
records. The old UUIDs that external players (Emby / Jellyfin /
ChannelsDVR) cached in `.strm` URLs are left orphaned, and the proxy
404s on every subsequent request — even though the same request
already carries a stable `stream_id` that uniquely identifies a live
relation.

This patch makes `_get_content_and_relation` use a soft UUID lookup
and, if it misses, fall back to resolving content via
`M3UMovieRelation.stream_id` / `M3UEpisodeRelation.stream_id`. The
fallback respects the strictest match first: when
`preferred_m3u_account_id` is also present, that account is queried
first; otherwise the highest-priority active relation matching the
stream_id wins (same ordering the existing relation-selection logic
uses).

This is read-side graceful degradation, complementary to the
write-side root fix proposed in closed #973 (re-use the relation's
existing movie/series during refresh rather than rematching by TMDB
ID). The two PRs together would fully resolve #961: #973 prevents new
orphaning, this PR makes any URL that ships a stream_id survive past
orphaning. URLs without a stream_id (e.g. XC-compat
`/movie/<user>/<pass>/<id>.mkv`) are NOT covered by this patch — they
need the root fix.

Series-UUID lookups (`/proxy/vod/series/<UUID>`) are left UUID-only by
design — players cache episode and movie URLs, not series URLs. Same
pattern can be added as a follow-up if needed.

Tests: 7 new mock-based regression tests covering both branches,
verified against `:dev`. UUID-first happy path is unchanged
(M3U*Relation table never queried when the UUID resolves).

Related: #961 (open), closed #973 (root fix abandoned for inactivity).
2026-06-02 19:29:58 +01:00
None
2a5889f5b2 fix(channels): Channel Group Override interactions
- Compact numbering: resolve the source relation when an override stores channels under the target group, so hiding releases the slot, unhiding assigns one, and repack sees the channels (no more spurious RANGE_EXHAUSTED). Type-safe override match; the bulk path stays single-query on the common path.
- Channel form: keep the clear-override control available when an override's value equals the provider value (isFormFieldOverridden is now existence-aware).
- Tests: compact override hide/unhide/repack, no-override fast-path guard, repack query-scaling guard, and existence-aware override detection.
2026-06-02 00:04:44 -05:00
SergeantPanda
36896d7a45
Merge pull request #938 from FiveBoroughs/feature/epg-channel-preview
EPG program preview in channel form
2026-06-01 19:44:27 -05:00
SergeantPanda
1fd37b9a51 feat(channel-form): reorganize channel edit form into three semantic columns for improved layout and usability 2026-06-01 19:34:39 -05:00
SergeantPanda
f2a4c1f665 changelog: Update changelog for EPG pgrogram preview PR. 2026-06-01 19:01:48 -05:00
SergeantPanda
8e03427844 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/FiveBoroughs/938 2026-06-01 18:58:14 -05:00
SergeantPanda
ec06a52fd4 refactor(epg): change logger level from info to debug for building byte-offset index 2026-06-01 18:58:00 -05:00
SergeantPanda
c081354150 feat(websocket): enhance connection handling with cached IP lookup 2026-05-31 19:28:19 -05:00