Commit graph

3521 commits

Author SHA1 Message Date
Five Boroughs
4ecfbb237e
Remove dev-only django.views.static.serve routes from urls.py 2026-05-31 17:13:11 +02:00
Five Boroughs
2bf4e8cd0f
WIP: EPG channel preview with byte-offset index lookup 2026-05-31 17:13:11 +02:00
FiveBoroughs
4594cce47a
Revert unintended linter style changes in api_views.py 2026-05-31 17:13:11 +02:00
FiveBoroughs
ef1518a8dd
Fix: Auto-parse EPG programs for unlinked channels on preview
When selecting an EPG channel in the channel form, if that EPG entry's
programs had never been parsed, the preview showed "No current program".
This was because parse_programs_for_tvg_id requires a linked channel.

- Add force parameter to parse_programs_for_tvg_id to bypass channel check
- Auto-trigger parsing from current-programs API when no programs exist
- Check Redis task lock to prevent duplicate parse tasks from concurrent requests
- Frontend retries up to 3 times with 10s delay to pick up parsed results
- Skip parsing for dummy EPG sources
2026-05-31 17:13:11 +02:00
FiveBoroughs
e733b9872f
Refactor: Extract shared ProgramPreview component and fix EPG preview bugs
- Extract ProgramPreview component from duplicated code in Channel.jsx
  and StreamConnectionCard.jsx (~80+ lines each)
- Fix watch('epg_data_id') called directly in useEffect dependency array,
  which could cause infinite re-renders
- Add request cancellation for rapid EPG selection changes in channel form
- Remove unused imports (Radio, Progress, ChevronDown, ChevronRight)
2026-05-31 17:13:11 +02:00
FiveBoroughs
9367d76dac
Add EPG program preview to channel edit/create modal
- Extended CurrentProgramsAPIView to accept epg_data_ids parameter
- Added getCurrentProgramForEpg() API method in frontend
- Added UI in Channel form showing current program with tooltip
- Shows loading state, no program state, and program details
- Includes expandable description, progress bar with elapsed/remaining time
- Matches stats page 'Now Playing' feature behavior
2026-05-31 17:13:11 +02:00
SergeantPanda
450b384419 fix(vod_proxy): Fix stream_vod to handle session_id in path for VOD proxy URLs 2026-05-30 20:48:17 -05:00
SergeantPanda
50f0c37fa5 refactor(backups): simplify PostgreSQL engine check in _is_postgresql function 2026-05-30 20:18:50 -05:00
SergeantPanda
ae3c839812 feat(backups): refactor SQLite backup and restore methods for improved reliability 2026-05-30 20:15:08 -05:00
SergeantPanda
ae16e1202c feat(views): import build_absolute_uri_with_port in views.py 2026-05-30 17:58:01 -05:00
SergeantPanda
20f54b2bf6 feat(utils): move get_host_and_port and build_absolute_uri_with_port to core/utils.py 2026-05-30 17:26:58 -05:00
SergeantPanda
2196660aec feat(debian_install): switch from Gunicorn to uWSGI and update installation script 2026-05-30 14:46:15 -05:00
SergeantPanda
d388f45137 feat(nginx): add X-Forwarded-Port header to proxy settings 2026-05-30 14:16:35 -05:00
SergeantPanda
569dce1ba4 changelog: Update for playlist deletion pr. 2026-05-30 12:51:38 -05:00
SergeantPanda
2156ea6283
Merge pull request #1284 from nemesbak:fix/delete-last-playlist-error
fix(frontend): clean up profiles state when playlists are deleted
2026-05-30 12:49:26 -05:00
SergeantPanda
df6f98a806 tests: Add tests for playlist deletion. 2026-05-30 12:43:41 -05:00
SergeantPanda
36968631a6 tests: Fix frontend series and vod tests. 2026-05-30 11:28:07 -05:00
SergeantPanda
72d1520400 feat(auth): add QueryParamJWTAuthentication for token retrieval via query parameters
feat(vod): include token in stream URL for episode and movie requests (Fixes #1224)
2026-05-30 11:14:59 -05:00
SergeantPanda
effa03b2a5 Enhancementvod): optimize xc_get_series for performance and reduce API response time 2026-05-30 09:08:54 -05:00
SergeantPanda
97bfc6f802 changelog: Update for refactor pr. 2026-05-30 08:49:02 -05:00
SergeantPanda
157c87ce4d feat(vod): optimize xc_get_vod_streams for performance and reduce API response time 2026-05-29 22:12:55 -05:00
SergeantPanda
dd06ba57f5 changelog: Update changelog for vod metadata pr. 2026-05-29 21:38:37 -05:00
SergeantPanda
efea46b08b
Merge pull request #1287 from nemesbak/fix/vod-metadata-director-cast-releasedate
fix(vod): import director, actors and release_date from XC provider during sync
2026-05-29 21:32:39 -05:00
SergeantPanda
fc867b7f77 fix(vod): enhance metadata extraction for actors and preserve existing values 2026-05-29 21:18:16 -05:00
SergeantPanda
dba93b1d20 changelog: Update changelog for get_vod_streams changes. 2026-05-29 21:05:27 -05:00
SergeantPanda
e871010366 feat(vod): enhance xc_get_vod_streams with additional movie details and updated trailer field 2026-05-29 20:55:29 -05:00
SergeantPanda
d29a9ef88c fix(tests): update API call expectations in useVODStore tests to include null parameter 2026-05-29 20:00:55 -05:00
SergeantPanda
1d5a005888
Merge pull request #1285 from nemesbak:fix/vod-series-provider-switch
fix(vod): respect relation_id when switching providers in Series/Movie modal
2026-05-29 19:39:59 -05:00
SergeantPanda
06046c8961 changelog: Update changelog for vod pr. 2026-05-29 19:26:20 -05:00
SergeantPanda
d8ead97049 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/nemesbak/1285 2026-05-29 19:24:35 -05:00
SergeantPanda
7cbc71f7fb refactor(vod): Apply prettier. 2026-05-29 19:23:51 -05:00
SergeantPanda
36879c10f2 fix(vod): validate relation_id and handle loading state in VODModal 2026-05-29 19:23:13 -05:00
nemesbak
ac84916974 fix(vod): preserve advanced-refresh metadata and fix youtube_trailer key
- Use 'youtube_trailer' key (matching api_views.py and advanced refresh)
  instead of orphaned 'trailer' key that was never consumed.
- On basic sync, only write director/actors/release_date to
  custom_properties when the field is currently empty. This prevents
  basic sync from overwriting richer data previously stored by
  refresh_movie_advanced_data, while still populating those fields for
  movies that have never had an advanced refresh run.

Tested: logic verified against all three scenarios (preserve existing
rich data, populate empty fields, youtube_trailer key propagation).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-30 01:06:58 +02:00
SergeantPanda
b19184d7aa changelog: Update changelog for stream profile bugfix. 2026-05-29 17:12:38 -05:00
SergeantPanda
e45e4fc86f
Merge pull request #1288 from nemesbak:fix/stream-profile-override-ignored
fix(channels): honor per-channel stream profile override during streaming
2026-05-29 17:08:40 -05:00
SergeantPanda
b63650799a docs: Restored todo as this did not resolve it. Cleaned up overly verbose comment. 2026-05-29 17:07:55 -05:00
SergeantPanda
a164194c61 changelog: Update changelog for web player pr. 2026-05-29 14:58:34 -05:00
SergeantPanda
87accc2f63
Merge pull request #1305 from nemesbak:fix/output-profile-guide-player
fix(frontend): apply web-player output profile in TV Guide and all live stream calls
2026-05-29 14:53:49 -05:00
nemes
c717df50f9 fix(frontend): update getShowVideoUrl tests to expect output_format and output_profile 2026-05-29 17:32:24 +02:00
nemes
98d7acd3c0 fix(frontend): apply output_profile and output_format in all live stream player calls
getShowVideoUrl was returning a raw proxy URL without calling
buildLiveStreamUrl, so the web-player output profile preference stored in
localStorage was ignored when starting a live stream from the TV Guide,
Program Detail modal, DVR page, Recording Details modal, and Recording Card.

Fixes #1304
2026-05-29 17:32:22 +02:00
SergeantPanda
e04afff04a
Merge pull request #1274 from nick4810:tests/frontend-unit-tests
Tests/frontend unit tests
2026-05-29 09:35:00 -05:00
nemes
17ce532326 fix(frontend): update getShowVideoUrl tests to verify output_format and output_profile 2026-05-29 13:23:22 +02:00
nemes
14c54b60f1 fix(frontend): apply output_profile and output_format in all live stream player calls
getShowVideoUrl was building raw proxy URLs without calling buildLiveStreamUrl,
so the web-player output profile preference stored in localStorage was silently
ignored when starting a live stream from the TV Guide, Program Detail modal,
DVR page, Recording Details modal, and Recording Card.

Fix: import buildLiveStreamUrl in RecordingCardUtils and call it at the end of
getShowVideoUrl so every caller inherits the correct output_format=mpegts
param and any configured output_profile automatically.

Fixes #1304
2026-05-29 13:20:35 +02:00
Nick Sandstrom
714f1b5cf5 Updated rendering behavior 2026-05-28 18:46:57 -07:00
Nick Sandstrom
5eeca5fc94 Fixed test behavior 2026-05-28 18:46:57 -07:00
Nick Sandstrom
cc59718997 Small cleanup 2026-05-28 18:46:57 -07:00
SergeantPanda
cc450f0a97
Merge pull request #1272 from JCBird1012/fix/db-connection-pool-exhaustion
perf: replace per-request DB connections with geventpool
2026-05-28 20:01:13 -05:00
SergeantPanda
f6acbb0c98 changelog: Update changelog for connection pooling pr. 2026-05-28 19:42:06 -05:00
SergeantPanda
f5ed272807 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/JCBird1012/1272 2026-05-28 19:32:10 -05:00
SergeantPanda
a2656184e8 perf/fix: migrate DB driver to psycopg3, fix pool settings
- Switch engine to postgresql_psycopg3 (PR had wrong engine name,
  and we're migrating from psycopg2 to psycopg3 as part of this work)
- Set CONN_MAX_AGE=0 (required by geventpool; PR had None)
- Reduce MAX_CONNS 20→8, REUSE_CONNS 10→3 to avoid exhausting
  pg max_connections across 4 uWSGI workers + Celery
- Add pool=False to explicitly disable Django's native psycopg3 pool
2026-05-28 19:31:50 -05:00