Commit graph

2987 commits

Author SHA1 Message Date
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
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
dekzter
6e0ac20bec license update 2026-03-11 08:29:40 -04:00
None
516ec43c75 fix GuideRow test
- Add Tooltip to GuideRow test mock, remove EXPANDED_PROGRAM_HEIGHT references
2026-03-10 11:37:14 -05:00
None
c2ead35519 Move test_wait_for_redis.py call
Moved inline so mock data is not overwritten
2026-03-10 11:17:41 -05:00
None
49825f3733 Merge remote-tracking branch 'origin/dev' into feat/1065-Add-Subtitle-and-Season-Episode-to-Guide 2026-03-10 11:17:00 -05:00
SergeantPanda
0bc4c40400 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into dev
Some checks failed
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
2026-03-10 11:12:53 -05:00
SergeantPanda
d89ee4c214 Merge branch 'main' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-03-10 11:12:46 -05:00
SergeantPanda
f678c4e663 Add pull request template for improved contribution guidelines
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
2026-03-10 11:08:03 -05:00
None
b490ac4675 revert padding change
Sticking with the 3-row layout, additional padding unnecessary
2026-03-10 11:03:45 -05:00
SergeantPanda
0516f4c857 Add contributing guidelines to the repository 2026-03-10 10:59:07 -05:00
None
9e47b176ba Merge commit '61c24866' into feat/1065-Add-Subtitle-and-Season-Episode-to-Guide 2026-03-10 10:56:39 -05:00
None
b72a9a870e feat(guide): redesign guide with detail modal, progress bars, and season/episode display
Replace expanded inline cards with a ProgramDetailModal for viewing full program
details. Add real-time progress bars to currently-airing programs using direct DOM manipulation. Extract and display season/episode info from EPG data with a 3-tier fallback (custom_properties → onscreen_episode → description text).

Backend:
- Add ProgramDetailSerializer for rich EPG data (categories, credits, ratings, images, external IDs) served on the detail endpoint
- Add infer_is_live() for status badges (live, new, premiere, finale)
- Add shared S/E extraction utilities in apps/epg/utils.py
- Optimize querysets with select_related("epg")

Frontend:
- ProgramDetailModal with conditional field rendering and image fallback chain
- Progress bars via scaleX transform updated every second
- Parallel data fetching with Promise.all for channels + programs
- Browser tab visibility recovery for progress bars
- Now-line with triangle marker and sub-millisecond precision
- Card layout: title, season/episode + subtitle, time + badges
- Shared formatSeasonEpisode() and external URL helpers
2026-03-10 10:53:19 -05:00
SergeantPanda
d473b9325d
Merge pull request #1082 from nick4810:tests/frontend-unit-tests
Tests/frontend unit tests
2026-03-10 09:00:54 -05:00
Nick Sandstrom
5add51c337 Minor refactors for readability 2026-03-09 14:13:30 -07:00