Commit graph

3942 commits

Author SHA1 Message Date
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
b141b6214d Merge branch 'main' of https://github.com/Dispatcharr/Dispatcharr into dev
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-23 20:12:07 -05:00
SergeantPanda
d86f56a5aa fix: Update Docker Hub image tags to conditionally format based on event type
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
2026-03-23 20:11:40 -05:00
SergeantPanda
516c2e478c Conditionally render Connection Security panel based on deployment mode 2026-03-23 19:55:43 -05:00
SergeantPanda
9da6f7794c fix: ensure PGID defaults to PUID when setting ownership for PostgreSQL SSL key (matching entrypoint.celery behavior. 2026-03-23 18:26:52 -05:00
SergeantPanda
cf56707e69 Merge branch 'main' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-03-23 18:03:08 -05:00
SergeantPanda
cf5f81af0f Bug Fix: Fix CI Pipline attempting login to Docker Hub for PR's. 2026-03-23 18:02:39 -05:00
SergeantPanda
3831d72d13 changelog: Update changelog for dvr recording pr. 2026-03-23 17:54:27 -05:00
SergeantPanda
7d93dd21a1
Merge pull request #1139 from CodeBormen:fix/duplicate-recordings-epg-refresh
fix(dvr): prevent duplicate recordings after EPG refresh
2026-03-23 17:50:00 -05:00
SergeantPanda
034f0623bf fix(tasks): handle AttributeError in series rule evaluation lock acquisition and release 2026-03-23 17:48:35 -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
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-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
816f864e85 Merge branch 'main' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-03-21 13:19:11 -05:00
SergeantPanda
3e12be3ac0
Update Open Collective username in FUNDING.yml
Some checks failed
Build and Push Multi-Arch Docker Image / build-and-push (push) Has been cancelled
2026-03-21 13:15:46 -05:00
SergeantPanda
a8b217e2fb docs: Slight reorganization of the readme. Fix link on Open Collective. 2026-03-21 13:06:10 -05:00
dekzter
b5c13a00ce added support section
Some checks are pending
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
2026-03-20 20:32:08 -04:00
None
36a8e92d94 fix(dvr): prevent duplicate recordings after EPG refresh
- Replace ProgramData.id-based dedup with stable (tvg_id, start_time, end_time) key from Recording.custom_properties.program. ProgramData IDs change on every EPG refresh; the old dedup always passed after refresh, creating duplicates.

- Fix secondary timeslot guard to compare original program times (stored in custom_properties) instead of offset-adjusted Recording times. With DVR pre/post offsets configured, the old guard never matched.

- Add acquire_task_lock/release_task_lock to serialize concurrent evaluate_series_rules calls. Multiple EPG source refreshes firing evaluate_series_rules.delay() simultaneously raced to create duplicate recordings.
2026-03-20 11:48:06 -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.
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-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
firestaerter3
5ad4824c4b fix(vod-proxy): eliminate profile_connections counter stuck-at-nonzero races
Three race conditions in multi_worker_connection_manager could leave
the Redis profile_connections:<id> counter permanently elevated with no
active streams, causing all VOD requests to 503 "All profiles at capacity".

Bug 1 — decrement_active_streams() return value was ignored
All three generator exit paths (normal, GeneratorExit, Exception) called
decrement_active_streams() and unconditionally set decremented = True
regardless of whether the lock was acquired. On lock contention the decrement
was silently skipped, active_streams remained > 0, the subsequent
has_active_streams() check returned True, and _decrement_profile_connections()
was never called. The counter was then stuck until manual DEL.

Fix: add decrement_active_streams_and_check() which performs the decrement and
the "are there remaining streams?" check atomically under a single lock,
eliminating the race window. All three exit paths and the finally block now
use this method and propagate its success/remaining return values.

Bug 2 — non-atomic GET-then-DECR in _decrement_profile_connections()
The previous implementation read the counter with GET then conditionally
called DECR. Two concurrent decrements could both pass the > 0 guard and
both fire, driving the counter to -1. A subsequent _check_and_reserve_profile_slot()
INCR would then produce 0 which passes the <= max_streams check, allowing
an extra stream to bypass the limit on the next request.

Fix: replace GET-then-DECR with a direct DECR (matching the INCR-first
pattern already used by _check_and_reserve_profile_slot) and clamp the
result to 0 if it goes negative.

Bug 3 — has_active_streams() read state without holding the lock
The separate has_active_streams() call after decrement_active_streams()
released its lock left a window where another concurrent stream could
increment active_streams back to 1, causing the profile decrement to be
skipped. This is resolved as a consequence of Bug 1's fix: the new
decrement_active_streams_and_check() method reads active_streams while
the lock is still held, eliminating the window entirely.

Adds tests covering all three scenarios in
apps/proxy/vod_proxy/tests/test_profile_connections.py.

Fixes #1121.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-19 23:23:36 +01:00
dekzter
99a328ca17 fixed bug when filtering after category was selected 2026-03-19 12:45:01 -04:00
SergeantPanda
161150f0f8 changelog: Update changelog for 0.21.1
Some checks failed
Base Image Build / prepare (push) Has been cancelled
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
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
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-17 21:41:44 -05:00
GitHub Actions
ac1de7bb5d Release v0.21.1 2026-03-18 01:06:57 +00:00
SergeantPanda
9d27b5b4e6
Merge pull request #1114 from Dispatcharr/dev
Dispatcharr - v0.21.1
2026-03-17 20:05:35 -05:00
SergeantPanda
5a159c505e
Merge pull request #1115 from CodeBormen/fix/graceful-chown-external-mounts
Fix/graceful chown + external mounts
2026-03-17 19:42:50 -05:00
None
7e22172070 fix: remove PUID auto-detect
The auto-detect read PUID/PGID from /data/db ownership (UID 102 in pre-PUID images), causing all upgrading users to run as UID 102 instead of the expected UID 1000. This broke host-side access (SSH, WinSCP), made existing DATA_DIR files unwritable, and failed comskip on recordings created before the change.
2026-03-17 19:32:07 -05:00
SergeantPanda
8d20c76d54 changelog: Update changelog for backups fix. 2026-03-17 18:52:31 -05:00
SergeantPanda
1ded6dde4c Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into dev 2026-03-17 18:41:34 -05:00
SergeantPanda
cbaedec905 Update GitHub Actions to use latest versions of checkout, Docker Buildx, and login actions 2026-03-17 18:41:27 -05:00
None
9e720f4fc7 fix: handle chown failures gracefully on external mounts
DATA_DIRS chown failures (NFS, SMB/CIFS, FUSE) crashed the container under set -e. The old image never chowned these directories, so users with external mounts had a working setup that broke on upgrade with zero config changes.

- Collect mkdir and chown failures per-directory instead of crashing
- Emit a single consolidated warning listing all affected directories with current ownership and remediation steps
- Container continues to start; Django reports at runtime if it cannot write to a specific directory
- Local volumes are unaffected: chown still runs and succeeds silently
2026-03-17 18:27:19 -05:00
SergeantPanda
d776e3c6dc
Merge pull request #1113 from CodeBormen/fix/missing-data-backups-ownership
fix: add /data/backups to init script DATA_DIRS
2026-03-17 17:56:49 -05:00
None
19d3f4258f Add /data/backups to DATA_DIRS
Corrects issue with user ownership migration on previous installations with /data/backups in-use
2026-03-17 17:46:13 -05:00
SergeantPanda
08b2e92920 Update GitHub Actions to use latest versions of checkout, Docker Buildx, and login actions
Some checks are pending
Base Image Build / prepare (push) Waiting to run
Base Image Build / docker (amd64, ubuntu-24.04) (push) Blocked by required conditions
Base Image Build / docker (arm64, ubuntu-24.04-arm) (push) Blocked by required conditions
Base Image Build / create-manifest (push) Blocked by required conditions
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-17 16:44:20 -05:00
GitHub Actions
50d90ab0ee Release v0.21.0
Some checks are pending
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
Frontend Tests / test (push) Waiting to run
2026-03-17 21:25:50 +00:00
SergeantPanda
cfdfc32736
Merge pull request #1112 from Dispatcharr/dev
Dispatcharr - v0.21.0
2026-03-17 16:25:14 -05:00
SergeantPanda
c0340c9250 changelog: Added missed issue for recent pr. 2026-03-17 14:39:18 -05:00
SergeantPanda
9654d3e293 changelog: Update changelog for highest channel number pr. 2026-03-17 14:32:59 -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
0fbeb16970 changelog: Added thanks for recent PR, removed security change that never hit main branch, moved security to the top to match previous versions of changelog. 2026-03-17 11:08:25 -05:00
SergeantPanda
ab7eb5b5d8
Merge pull request #1111 from CodeBormen/fix/1059-series-rules-corrupted-data
Fix/1059 series rules corrupted data
2026-03-17 10:54:40 -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
None
b7eb299aac Update changelog 2026-03-16 18:50:24 -05:00
SergeantPanda
07863a181e refactor: streamline channel numbering logic; consolidate loading states and variable names 2026-03-16 18:05:33 -05:00
SergeantPanda
d9dea82f40 docs: Add pronounciation to readme.
Some checks are pending
Build and Push Multi-Arch Docker Image / build-and-push (push) Waiting to run
2026-03-16 17:00:34 -05:00