Commit graph

3001 commits

Author SHA1 Message Date
SergeantPanda
159c2d0de7 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-03-15 17:46:44 -05:00
SergeantPanda
d84580710b changelog: Update changelog for uWSGI config PR. 2026-03-15 17:46:37 -05:00
SergeantPanda
cc5a0eb7f7
Merge pull request #929 from jcasimir/fix/uwsgi-gevent-segfault-clean
Fix uWSGI segfaults by disabling threads when using gevent
2026-03-15 17:45:24 -05:00
SergeantPanda
41ce381130 changelog: Update changelog for tests PR. 2026-03-15 17:28:00 -05:00
SergeantPanda
28b9de94dc Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-03-15 17:00:00 -05:00
SergeantPanda
c44a3ad5f9 Bug Fix: Stream.last_seen and ChannelGroupM3UAccount.last_seen model defaults now use django.utils.timezone.now instead of datetime.datetime.now, eliminating spurious RuntimeWarning: DateTimeField received a naive datetime warnings emitted during test database creation and on new record creation when USE_TZ=True. 2026-03-15 16:59:51 -05:00
SergeantPanda
c4a8e01fb4
Merge pull request #1108 from nick4810/tests/frontend-unit-tests
Tests/frontend unit tests
2026-03-15 16:54:02 -05:00
SergeantPanda
e0ed2296b2
Merge pull request #1096 from Dispatcharr/xc-account-expiration-management
Some checks are pending
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
Enhancement: Account expiration tracking and notifications for M3U profiles
2026-03-15 16:42:33 -05:00
SergeantPanda
0815b3df14 tests: Add backend test for expiration feature. 2026-03-15 16:42:11 -05:00
Nick Sandstrom
e421c007cc Conforming to style guide 2026-03-15 14:05:54 -07:00
Nick Sandstrom
e95285ec8c Added forms/settings tests 2026-03-15 14:05:54 -07:00
SergeantPanda
bd11b0e832 Change notification for account expiry to admin only. 2026-03-15 16:03:41 -05:00
SergeantPanda
09d5f6bb9f Update expiration date handling in M3U components to ensure UTC format 2026-03-15 16:00:23 -05:00
SergeantPanda
1d4603dadd Enhancement: Optimize profile expiration handling and update task naming for clarity 2026-03-15 12:42:34 -05:00
SergeantPanda
b22f9e8e07 Enhancement: Account expiration tracking and notifications for M3U profiles 2026-03-14 18:38:59 -05:00
SergeantPanda
5b9b0162da Merge branch 'main' of https://github.com/Dispatcharr/Dispatcharr into dev
Some checks failed
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
Base Image Build / prepare (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
2026-03-14 13:10:08 -05:00
SergeantPanda
c33a7b72f8 Security: Update Django and django celery beat. Also update license in pyproject.toml
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Base Image Build / prepare (push) Has been cancelled
Base Image Build / docker (amd64, ubuntu-24.04) (push) Has been cancelled
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Has been cancelled
Base Image Build / create-manifest (push) Has been cancelled
2026-03-14 13:09:39 -05:00
SergeantPanda
9ac113cd88 Update license in pyproject.toml 2026-03-14 13:03:40 -05:00
SergeantPanda
7b60a958a5 Security: Update dependencies for Django and django-celery-beat to address security vulnerabilities 2026-03-14 12:57:07 -05:00
SergeantPanda
2b8ebc7882 Security: Updated flatted to 3.4.1, resolving **high** unbounded recursion DoS in the parse() revive phase 2026-03-14 12:32:38 -05:00
SergeantPanda
f30e044689 Enhancement: When selecting an EPG source for a channel, the EPG source dropdown now only lists enabled (active) EPGs, sorted alphabetically.
Some checks are pending
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-03-13 17:21:31 -05:00
SergeantPanda
12e7d6219d Enhancement: Add icon to programdetailmodal for custom dummy epgs. 2026-03-13 17:12:32 -05:00
SergeantPanda
4dffe36d63 Changelog: Add change for guide PR 2026-03-13 16:52:43 -05:00
SergeantPanda
216dd7fc40
Merge pull request #1072 from CodeBormen/feat/1065-Add-Subtitle-and-Season-Episode-to-Guide
feat: Add subtitle and season/episode to TV Guide (#1065)
2026-03-13 16:48:20 -05:00
SergeantPanda
a0cea5abb4 Remove vite deps and add to gitignore. 2026-03-13 16:45:46 -05:00
SergeantPanda
115e0de55b Remove shadow filter from logo. 2026-03-13 16:13:28 -05:00
SergeantPanda
284aafcf5e Bug Fix: EPG programme parsing crash when an XMLTV source contains programme titles exceeding 255 characters. Previously, a single oversized title would cause the entire bulk_create batch to fail with a database truncation error, silently dropping all programmes in that batch. Titles are now truncated to 255 characters before being saved. (Fixes #1039)
Some checks are pending
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-03-13 15:35:43 -05:00
SergeantPanda
03e1061716 Bug Fix: Fix postgres lock file permissions before starting and upgrading Postgres. 2026-03-13 14:59:46 -05:00
SergeantPanda
1f50217dbe perf(epg): speed up TV guide grid load 2k channels from 18s to ~8s
Replace DRF ModelSerializer with .values() + plain dict construction in
EPGGridAPIView, eliminating per-row serializer instantiation, field
object creation, and OrderedDict overhead across ~12k programs.

Pre-compute season/episode at import time instead of on every API request:
- Extract S/E from onscreen episode-num inline in extract_custom_properties()
  immediately after storing the raw value, rather than in a separate pass
- Add missing description-based S/E fallback to parse_programs_for_tvg_id(),
  bringing it in line with parse_programs_for_source()

Remove runtime extract_season_episode() call from ProgramDataSerializer and
EPGGridAPIView — values are now guaranteed to be in custom_properties after
import, so season/episode resolution is a plain dict lookup at request time.

Also remove unnecessary select_related("epg") JOIN and .count() query from
the grid endpoint.
2026-03-13 12:16:10 -05:00
SergeantPanda
850692cc30 changelog: Add thanks to to changelog for startup pr. 2026-03-13 10:28:03 -05:00
SergeantPanda
d8ca703862
Merge pull request #1091 from CodeBormen:fix/1078-puid-pgid-postgres-conflict
fix: Run PostgreSQL as PUID/PGID user to resolve container startup failures
2026-03-13 10:23:23 -05:00
None
93032a6c18 Correct tests to reflect recent changes 2026-03-12 21:42:32 -05:00
None
fc01a6d04d Improve ProgramDetailModal layout per feedback
- Move channel name/number into modal header title bar (was empty after removing duplicate title)
- Remove channel logo from modal (didn't fit well)
- Remove custom background color override, inherit from Mantine dark theme for consistency with VOD/Series modals
- Fix wrong channel shown in modal: pass channel directly from renderProgram instead of re-looking up by tvg_id
- Clean up unused imports (getChannelLogoUrl, Image/Group no longer needed in title)
2026-03-12 21:33:58 -05:00
None
42f5e60390 Update changelog.md 2026-03-12 20:32:57 -05:00
None
cc7156a626 Merge branch 'fix/1078-puid-pgid-postgres-conflict' of https://github.com/CodeBormen/Dispatcharr into fix/1078-puid-pgid-postgres-conflict 2026-03-12 20:30:30 -05:00
None
551327650a Update changelog.md to include quoting 2026-03-12 20:28:49 -05:00
Matt Grutza
4cc460fe06
Merge branch 'dev' into fix/1078-puid-pgid-postgres-conflict 2026-03-12 20:27:07 -05:00
None
29525336ab replace migration port and correct variable quoting for guarding
- replaced $_pg_tmp_port with $POSTRGES_PORT in migration logic. Works because "pg_ctl stop -w" is run before entrypoint.sh restarts postgres. Verified that this does not cause a race condition.

- Correcting unquoted environment variables to prevent inappropriate variables from causing execution inconsistencies (still unquoted in comments and prints)
2026-03-12 20:25:54 -05:00
SergeantPanda
a1a2b3332f Declare CONNECT_ROLE and CONNECT_DB as local variables in promote_app_role function 2026-03-12 18:38:04 -05:00
SergeantPanda
2b00bd2630 Bug Fixes:
Some checks are pending
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
- Floating video player resize continuing after the mouse button was released outside the browser window. Because the `mouseup` event is not delivered when the pointer leaves the viewport, the `endResize` handler was never called and the `mousemove` listener remained active indefinitely. Fixed by checking `event.buttons === 0` at the top of `handleResizeMove`; when no button is held the resize session is torn down immediately and all move listeners are removed.
- Floating video player drag continuing after the mouse button was released outside the browser window, for the same reason as the resize bug above. Fixed by detecting `event.buttons === 0` in the `onDrag` handler and dispatching a synthetic `mouseup` event so react-draggable cleanly ends the drag session.
- Floating video player could be dragged off any edge of the screen, making the header (and therefore the drag handle) unreachable. The player is now fully bounded: the left and top edges are clamped to `x ≥ 0` / `y ≥ 0` so the header is always visible and reachable, and the right/bottom edges are clamped so the player never extends beyond the viewport. The player is also re-clamped automatically when the browser window is resized and proportionally scaled down if the saved size is larger than the new viewport.
2026-03-12 17:36:38 -05:00
SergeantPanda
e76d7a297f Bug Fix: Floating video player resize continuing after the mouse button was released outside the browser window. Because the mouseup event is not delivered when the pointer leaves the viewport, the endResize handler was never called and the mousemove listener remained active indefinitely. Fixed by checking event.buttons === 0 at the top of handleResizeMove; when no button is held the resize session is torn down immediately and all move listeners are removed. 2026-03-12 16:30:41 -05:00
None
ada7e03a10 apply dev mode port handling
Applied the same dev mode port handling to getChannelLogoUrl that is used by GetPosterUrl
to allow URL retrieval without path interruption
2026-03-12 16:26:13 -05:00
SergeantPanda
dbe409d769 Enhancement: Floating video player now persists size, position, volume level, and mute state across sessions using a single dispatcharr-player-prefs localStorage key. Size and position are restored on next open (clamped to the current viewport); volume and mute are restored when the player initialises. 2026-03-12 16:10:20 -05:00
None
ae2d111eb2 Remove program.title from modal title bar
Program title was intentionally being shown in the modal title bar and modal body, but when no program artwork was provided via EPG the title components were layered one after the other, making it look like a duplicated title.
2026-03-12 16:10:10 -05:00
None
79dc113a1c remove infer_is_live()
After discussion, decided to keep live badge inference deterministic
2026-03-12 16:01:35 -05:00
dekzter
a72e4c9313
Merge pull request #1089 from Dispatcharr/license
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
license update
2026-03-12 12:33:56 -04:00
SergeantPanda
ba19867a16 Enhance contribution guidelines by adding Contributor License Agreement section and updating pull request template 2026-03-12 11:15:44 -05:00
None
97fa27cf74 Update CHANGELOG.md 2026-03-11 23:43:15 -05:00
None
52ed0fc15a fix: run PostgreSQL as PUID/PGID user to resolve ownership conflicts (#1078)
PostgreSQL now runs as the PUID/PGID user ($POSTGRES_USER) instead of the internal postgres system user (UID 102). This fixes container startup failures when PUID/PGID is set, caused by chown permission errors on restricted filesystems (NFS root_squash, CIFS) and UID collisions with the postgres system user.

Changes:
- Run all PostgreSQL operations (initdb, pg_ctl, psql) as $POSTGRES_USER
- Auto-detect PUID/PGID from existing data owner when not explicitly set
- Validate PUID/PGID (reject zero, non-numeric values) before startup
- Migrate existing data ownership with sentinel-based skip optimization
- Use trust auth for local Unix sockets, md5 for network connections
- Add promote_app_role() and ensure_app_database() as idempotent startup guarantees that handle fresh installs, upgrades, and PUID changes
- Preserve postgres role as superuser for rollback compatibility
- Centralize /data/db ownership in 02-postgres.sh (sentinel-aware)
- Add integration test suite (20 scenarios) covering fresh installs, upgrades, restarts, PUID changes, UID collisions, bind mounts, modular mode, PG major upgrades, and end-to-end web UI verification
2026-03-11 23:36:32 -05:00
dekzter
a66a1d0bbb updated readme 2026-03-11 08:44:34 -04:00