Nick Sandstrom
a54bc2c513
Reverted styling/small syntax changes
2026-03-04 08:44:50 -08:00
Nick Sandstrom
8d7752c004
Added NotificationCenter tests
2026-03-02 23:23:21 -08:00
Nick Sandstrom
3e31f98d0f
Extracted NotificationCenterUtils
2026-03-02 23:23:11 -08:00
Nick Sandstrom
d292676b73
Component cleanup and refactoring
2026-03-02 23:23:01 -08:00
Nick Sandstrom
f3304bd976
Updated tests after sync
2026-03-02 23:22:03 -08:00
Nick Sandstrom
08d79fb4db
Merge remote-tracking branch 'upstream/dev' into test/component-cleanup
2026-03-02 23:19:43 -08:00
SergeantPanda
7d95e3ceb4
Security: Updated frontend npm dependencies to resolve 2 high-severity vulnerabilities:
...
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) Has been cancelled
- Updated `minimatch` to ≥10.2.3, resolving **high** ReDoS via matchOne() combinatorial backtracking with multiple non-adjacent GLOBSTAR segments ([GHSA-7r86-cg39-jmmj](https://github.com/advisories/GHSA-7r86-cg39-jmmj ))
- Updated `rollup` to ≥4.58.1, resolving **high** Arbitrary File Write via Path Traversal ([GHSA-mw96-cpmx-2vgc](https://github.com/advisories/GHSA-mw96-cpmx-2vgc ))
2026-03-02 17:36:40 -06:00
SergeantPanda
b098deae76
Got rid of extra api call to query if any channels had no EPG assigned. Moved query to an EXISTS lookup during channel query.
2026-03-02 17:20:55 -06:00
SergeantPanda
565d335403
Bug Fix: The EPG filter dropdown was showing all EPG sources regardless of whether they had any channels assigned, and the "No EPG" option was never displayed. Fixed by annotating EPGSource records with a has_channels flag (via a lightweight EXISTS subquery) so only EPG sources actually in use appear as filter options. "No EPG" now appears only when at least one channel has no EPG assigned, determined via a page_size=1 query against the existing channel filter endpoint.
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-01 16:54:05 -06:00
SergeantPanda
cdef94fde4
Bug Fix: Stale streams in the streams table had no hover color change, unlike channels with no streams assigned. Converted the inline backgroundColor style to a CSS class (stale-stream-row) so the :hover rule can apply correctly. Applied the same fix to the channel-streams sub-table, where the teal expanded-row background caused the semi-transparent red tint to visually mismatch; the sub-table now uses a pre-blended solid color via color-mix() to match the appearance of stale rows in the main streams table.
2026-02-27 16:28:06 -06:00
SergeantPanda
03c4ffb4e5
Bug Fix: Applying any filter that temporarily empties the channel list (e.g. switching directly between two channel groups, or typing a search query that matches nothing) caused the guide to show a blank/empty view with no programs visible. The VariableSizeList unmounts when filteredChannels becomes empty, destroying its DOM node and resetting scrollLeft to 0. On remount the scroll position was never restored because initialScrollComplete was still true. Fixed by saving the user's current scroll position when the channel list empties mid-transition, then restoring it once new channels have loaded. On first load the guide still scrolls to the current time as before.
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-02-27 15:47:09 -06:00
SergeantPanda
8eb24cb945
Bug Fix: The channel store refactor changed to loading only channel IDs instead of full channel objects, leaving Object.keys(channels).length always 0 and incorrectly triggering the onboarding state on any empty filter. Fixed by checking channelIds.length instead.
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-02-26 16:38:09 -06:00
SergeantPanda
94fc91f5e3
Bug fix: Login form disabled after token expiry: The login button was permanently rendered as disabled ("Logging you in...") on page load after a session expired, preventing users from logging back in. A regression in v0.20.0 caused LoginForm to check if (user) to detect an already-authenticated reload, but the Zustand auth store initializes user as a truthy empty object { username: '', email: '', user_level: '' }, so the loading state was set immediately on every mount. Reverted to pre-regression behavior. ( Fixes #1029 )
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-02-26 15:27:35 -06:00
SergeantPanda
216575a411
Merge pull request #1020 from Dispatcharr/enhanced-webhooks
...
enhanced webhooks to support custom headers and payload templates
2026-02-26 13:14:24 -06:00
dekzter
fc3c21e16a
revert settings / system
2026-02-26 14:12:51 -05:00
dekzter
dfe5ec6e94
updated template with example jinja
2026-02-26 14:08:01 -05:00
SergeantPanda
60c165f422
Enhancement: Stats page "Now Playing" EPG lookup updated to use channel_uuids directly (the proxy stats already key active channels by UUID), removing the need for a UUID→integer ID conversion step introduced alongside the lazy channel-fetch refactor. Stream preview sessions (which use a content hash rather than a UUID as their channel ID) are now filtered out before any API call is made, preventing a backend ValidationError on both the current-programs and by-uuids endpoints when a stream preview is active on the Stats page.
2026-02-26 12:00:29 -06:00
dekzter
b9bda67bc2
indicate on reload if login was already complete and data is loading
2026-02-25 12:52:14 -05:00
dekzter
5e93246b95
fixed swapped settings labels
2026-02-25 11:07:46 -05:00
dekzter
4d6351507f
enhanced webhooks to support custom headers and payload templates
2026-02-25 10:59:45 -05:00
Dispatcharr
03c8d55ab9
Fix legacy plugin actions missing events
...
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
Treat action.events as optional ([] by default) and guard UI rendering so Plugin cards no longer crash.
2026-02-25 08:32:40 -06:00
SergeantPanda
26a6753dcc
Enhancement: Streamer accounts attempting to log into the web UI now receive a clear notification explaining they cannot access the UI but their stream URLs still work. Previously the login button would silently stop with no feedback.
2026-02-24 19:48:12 -06:00
Matt Grutza
3ec62a3d52
Merge branch 'dev' into Feature/954-1004-user-account-management
2026-02-24 14:49:31 -06:00
SergeantPanda
9e5fed4496
Revert labels for sidebar back to System >>> Settings
...
Remove unused imports and code.
2026-02-24 11:25:47 -06:00
SergeantPanda
f861b01e8a
Merge pull request #1018 from Dispatcharr/api-keys
...
Api keys
2026-02-24 10:54:47 -06:00
dekzter
5785fef4df
ability to revoke API keys, fixed bug showing another user's api key in the UI
2026-02-24 10:09:34 -05:00
Nick Sandstrom
c432e0b1c5
Merge remote-tracking branch 'upstream/dev' into test/component-cleanup
2026-02-24 01:53:49 -08:00
Nick Sandstrom
fec4caf4d0
Component refactoring and cleanup
2026-02-24 01:02:26 -08:00
Nick Sandstrom
8f11ef417b
Extracted YouTubeTrailerModal component
2026-02-24 00:59:59 -08:00
Nick Sandstrom
b595e845bb
Extracted utils
2026-02-24 00:59:41 -08:00
Nick Sandstrom
a9402207fb
Added tests
2026-02-24 00:58:36 -08:00
None
f453380f5c
Remove user account disable/enable UI (keep backend guards)
...
Removed the frontend UI exposure
while keeping backend guards as defensive measures.
Removed:
- frontend/src/components/forms/User.jsx — Account Enabled switch
- frontend/src/components/tables/UsersTable.jsx — Status column
- apps/accounts/api_views.py — is_active check in TokenRefreshView
- apps/accounts/tests.py — related tests
2026-02-22 20:02:08 -06:00
None
db318e4981
Fix #954 : Superuser detection; Feature #1004 : User account disable/enable
...
Bug #954 : The initialize_superuser endpoint only checked is_superuser=True, missing admin accounts created via the API (user_level=10). This caused users to intermittently see the "Create Super User" page instead of login.
Feature #1004 : Admins can now disable/enable user accounts. Disabled users are blocked from JWT login, token refresh, XC API access, and all
authenticated endpoints. The last active admin cannot be disabled.
Files changed:
Backend:
- apps/accounts/api_views.py — Superuser check uses user_level>=10; token refresh blocks disabled users
- apps/accounts/models.py — CustomUserManager ensures create_superuser() always sets user_level=10
- apps/accounts/serializers.py — Last-admin protection guard; respect is_active on user creation
- apps/accounts/tests.py — new tests covering superuser detection, token
refresh blocking, last-admin protection, disabled user login/access
- apps/backups/api_views.py — Switched from DRF's IsAdminUser (checks is_staff) to app's IsAdmin (checks user_level) on all 8 endpoints
- apps/backups/tests.py — new tests verifying user_level-based admin permission on backup endpoints
- apps/output/views.py — is_active check on xc_get_user(), xc_movie_stream(), xc_series_stream()
- apps/proxy/ts_proxy/views.py — is_active check on stream_xc()
- core/api_views.py — Admin notification filter uses user_level>=10
- core/developer_notifications.py — Admin checks use user_level>=10
Frontend:
- frontend/src/App.jsx — Null-safe superuser existence check
- frontend/src/components/forms/User.jsx — Account Enabled switch with
self-disable prevention and tooltip
- frontend/src/components/tables/UsersTable.jsx — Status column (Active/Disabled badge)
2026-02-22 18:05:02 -06:00
dekzter
64cbe0cc36
swapped naming / icons for settings / system
2026-02-21 19:26:53 -05:00
SergeantPanda
8babb7d111
Chore: Update NPM packages.
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-02-21 16:24:40 -06:00
SergeantPanda
95909d98f9
Security: Update npm dependencies to resolve vulnerabilities.
2026-02-21 16:11:06 -06:00
dekzter
c410b1c1e7
updated wording / icon for integrations
2026-02-21 13:45:33 -05:00
dekzter
6cf808a4df
frontend components for API keys
2026-02-21 13:45:21 -05:00
SergeantPanda
b0cc5dca27
Enhancement: Channel table group filter sort order: The group dropdown in the channel table is now sorted alphabetically.
2026-02-20 13:38:28 -06:00
SergeantPanda
74bf98b405
Bug Fix Filter channel groups in the channel table to include only those with channels in groupOptions
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-02-20 12:26:20 -06:00
SergeantPanda
a7b9c0ffe1
Merge branch 'dev' into optimize-channels-store
2026-02-20 09:42:36 -06:00
SergeantPanda
5dc531e5e4
Refactor: Rename 'Settings' to 'System' and vice versa in Sidebar component for clarity
2026-02-20 09:39:12 -06:00
SergeantPanda
1f932b30b9
Enhancement/BugFix:
...
- The User-Agent field was not correctly loaded from the existing profile when opening the edit modal. (Fixes #650 )
- Replaced the plain command text field with a dropdown listing built-in tools (FFmpeg, Streamlink, VLC, yt-dlp) plus a Custom option that reveals a free-text input. Each built-in now shows its default parameter string as a live example in the Parameters field description, updating as the command selection changes. Added descriptive help text to all fields to improve clarity.
2026-02-19 15:51:08 -06:00
SergeantPanda
8a8df11b72
Fix issue with channelById type error (object vs map) this was breaking scheduling manual DVR recordings.
2026-02-18 15:16:33 -06:00
SergeantPanda
34a24b2e44
Added isLoading: false to fetchChannelIds and fix auth and channels tests.
2026-02-18 14:45:34 -06:00
SergeantPanda
c68d73fbdb
Update DVR to not require group selection, use new channel summary endpoint.
2026-02-18 14:38:47 -06:00
SergeantPanda
8427ae0a2d
tests: Update frontend tests for changes to channel store.
2026-02-18 14:12:03 -06:00
SergeantPanda
edc3fc951e
Optimize now-line updates and scrolling performance in TVChannelGuide
2026-02-18 13:10:24 -06:00
SergeantPanda
3df259e06e
Enhance program visibility in GuideRow with horizontal culling and buffer
2026-02-18 12:59:56 -06:00
SergeantPanda
15b4ec7be9
Slight performance increase for tv guide.
2026-02-18 12:11:21 -06:00