dekzter
90a600b48f
merged in dev
2026-03-26 12:17:43 -04:00
dekzter
a19be96ced
fleshed out user limits and termination logic
2026-03-25 17:33:26 -04:00
SergeantPanda
cee94282f9
Merge pull request #1128 from CodeBormen/dev
...
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
feat: add TLS connection support for Redis and PostgreSQL (#950 )
2026-03-24 18:56:57 -05:00
SergeantPanda
6d694c8475
Bug Fix: Sort max stream column by total of streams from all profiles.
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-24 13:41:46 -05:00
SergeantPanda
58f40ff276
Bug Fix: Fixed stale references to old guideutils location. Also change dockerfile to get clear error messages during failure.
2026-03-24 13:19:48 -05:00
SergeantPanda
ec876716c5
tests: Fix tests that use guide utils.
2026-03-24 13:08:45 -05:00
SergeantPanda
1246f75c6b
Enhancement: Toggling an M3U profile's active state now immediately updates the playlist store (including the playlists array), so the **Max Streams** total in the M3U table reflects the change without a page reload.
...
- M3U account form: **Max Streams** field changed from a plain text input to a number input with increment/decrement controls, consistent with other integer fields.
- M3U account form: removed unused `useMantineTheme` import and `theme` variable.
2026-03-24 13:03:19 -05:00
SergeantPanda
0ac8b21964
Enhancement: M3U table **Max Streams** column now reflects the combined limit across all active profiles. When a playlist has multiple active profiles, the column displays their summed total (or ∞ if any profile is unlimited) and a hover tooltip lists each profile's individual limit by name. ( Closes #816 )
2026-03-24 12:53:08 -05:00
SergeantPanda
99fe8c96a2
refactor: Move utility functions from pages/guideUtils.js to utils/guideUtils.js and update imports
2026-03-24 12:39:09 -05:00
SergeantPanda
516c2e478c
Conditionally render Connection Security panel based on deployment mode
2026-03-23 19:55:43 -05:00
None
b30a24e2fb
feat: add TLS connection support for Redis and PostgreSQL ( #950 )
...
- Add 10 env vars for Redis/PostgreSQL TLS (REDIS_SSL, REDIS_SSL_VERIFY, REDIS_SSL_CA_CERT, REDIS_SSL_CERT, REDIS_SSL_KEY, POSTGRES_SSL, POSTGRES_SSL_MODE, POSTGRES_SSL_CA_CERT, POSTGRES_SSL_CERT, POSTGRES_SSL_KEY)
- Propagate SSL params to all Redis connection points: RedisClient, stream view, PubSub, client manager, Celery broker/result backend, Django Channels, and pre-Django startup scripts
- Add Celery SSL config via URL query string params (required by Kombu's internal URL parsing)
- Add PostgreSQL sslmode and certificate options to DATABASES config
- Add startup validation: cert file existence, URL scheme conflict detection, TLS status logging
- Add TLS error hints to Redis connection failure messages
- Add Connection Security panel in System Settings (modular mode only) showing encryption, verification, and mTLS status
- Add PG client key permission fix in web and celery entrypoints for Docker Desktop compatibility (0777 to 0600)
- Add TLS env var passthrough in entrypoint for su - login shells
- Document TLS env vars in modular docker-compose.yml
- Change env_mode from dev/prod to actual DISPATCHARR_ENV value for modular mode detection
2026-03-21 17:24:09 -05:00
SergeantPanda
61d713fcda
test: update validation for empty CIDR range to allow defaults on submit
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-21 15:14:58 -05:00
SergeantPanda
7cd4abb694
Enhancement: Network Access settings: leaving a field blank no longer shows a validation error. The default CIDR range for that field is saved automatically and a "Defaults Restored" warning is displayed listing which fields were reset. ( Closes #726 )
2026-03-21 14:07:30 -05:00
SergeantPanda
874f5fce6a
Refactor: Removed unused imports from M3UGroupFilter, LiveGroupFilter, and VODCategoryFilter (Yup, M3UProfiles, several unused Mantine components, dead OptionWithTooltip component, duplicate lucide-react imports, and Divider in VODCategoryFilter). No behaviour changes.
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-20 11:37:51 -05:00
SergeantPanda
ba0036445c
Enhancement: Status filter for M3U group and VOD category filter modals: A new **All / Enabled / Disabled** segmented control is now shown alongside the text search input in the Live, VOD - Movies, and VOD - Series tabs of the M3U Group Filter modal. The status filter works in combination with the text search and also scopes the "Select Visible" / "Deselect Visible" buttons so they only act on the currently visible subset. ( Closes #312 )
2026-03-20 10:23:52 -05:00
SergeantPanda
406267965a
Merge pull request #1047 from JCBird1012/auto-assign-next-available
...
fix: single stream channel modal; remove unused ChannelNumberingModal; add "Next Highest Channel" numbering mode
2026-03-17 13:05:14 -05:00
SergeantPanda
6b373c41cf
refactor: remove unused getNextHighestChannelNumber method and related variable
2026-03-17 09:57:53 -05:00
SergeantPanda
149ef17424
Update label for auto-assigning channel numbers after highest
2026-03-17 09:51:49 -05:00
SergeantPanda
b4281c83bb
Switch to backend logic instead of frontend. Use '-1' as 'highest' so not break the api.
2026-03-17 09:27:18 -05:00
Matt Grutza
b75fcf26de
Merge branch 'dev' into fix/1059-series-rules-corrupted-data
2026-03-16 18:51:25 -05:00
SergeantPanda
07863a181e
refactor: streamline channel numbering logic; consolidate loading states and variable names
2026-03-16 18:05:33 -05:00
None
8624436367
fix(frontend): validate series_rules as array in settings parse/save
...
- Add Array.isArray() guard in parseSettings for series_rules, matching the existing EPG ignore list pattern
- Include series_rules in arrayFields list in getChangedSettings to prevent stringification during settings round-trip
- Add 5 tests covering valid, corrupted, and missing series_rules data
2026-03-16 16:52:22 -05:00
Jonathan Caicedo
d19c53b145
fix: single stream channel modal; remove unused ChannelNumberingModal, add 'after highest' channel numbering mode
2026-03-15 19:40:14 -04: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
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
09d5f6bb9f
Update expiration date handling in M3U components to ensure UTC format
2026-03-15 16:00:23 -05:00
SergeantPanda
b22f9e8e07
Enhancement: Account expiration tracking and notifications for M3U profiles
2026-03-14 18:38:59 -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.
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
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
115e0de55b
Remove shadow filter from logo.
2026-03-13 16:13:28 -05:00
dekzter
f69a462253
merged in dev
2026-03-13 08:22:44 -04: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
SergeantPanda
2b00bd2630
Bug Fixes:
...
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
516ec43c75
fix GuideRow test
...
- Add Tooltip to GuideRow test mock, remove EXPANDED_PROGRAM_HEIGHT references
2026-03-10 11:37:14 -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
None
b490ac4675
revert padding change
...
Sticking with the 3-row layout, additional padding unnecessary
2026-03-10 11:03:45 -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
Nick Sandstrom
5add51c337
Minor refactors for readability
2026-03-09 14:13:30 -07:00
Nick Sandstrom
aeb6997541
Added tests for cards/ components
2026-03-09 14:12:59 -07:00
SergeantPanda
f75a3134fa
tests: More failed test fixes...
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-08 21:55:23 -05:00
SergeantPanda
fa143aac41
tests: More frontend test fixes.
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-08 21:19:19 -05:00