Commit graph

1130 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
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
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
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:
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
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...
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-08 21:55:23 -05:00
SergeantPanda
fa143aac41 tests: More frontend test 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
2026-03-08 21:19:19 -05:00
SergeantPanda
4e66363565 tests: Update frontend tests after sidebar changes. 2026-03-08 21:10:53 -05:00
SergeantPanda
ff2d11a199 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/CodeBormen/943 2026-03-08 18:50:38 -05:00
SergeantPanda
7899901936 Enhancement: Channels page default splitter ratio changed from 50/50 to 60/40 (channels/streams) so all channel action buttons are visible without scrolling on 1080p displays. 2026-03-08 18:48:20 -05:00
SergeantPanda
39865d3732 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/CodeBormen/943 2026-03-08 18:04:11 -05:00
SergeantPanda
70a0b43c8a Cleanup frontend and backend if valid item ids change. 2026-03-08 17:05:26 -05:00
SergeantPanda
76d980dcee Bug Fix: onLogout is not defined, use logout from auth store 2026-03-08 16:36:36 -05:00
SergeantPanda
63234a4a46 Bug Fix: Restore integrations/system groups and fix channels reference after rebase 2026-03-08 16:35:34 -05:00
SergeantPanda
72e4ce0813 tests: Add a check that a user can not self elevate. 2026-03-08 16:30:50 -05:00
SergeantPanda
0070e66dd1 Bug Fix: Fix double merge race condition in auth.jsx 2026-03-08 16:30:49 -05:00
SergeantPanda
1a9d2e2777 Remove double error notifications. 2026-03-08 16:30:47 -05:00
SergeantPanda
a4ad9a9135 Move python test into tests folder. Fix frontend test after merge changes. 2026-03-08 16:30:47 -05:00
SergeantPanda
cde39c0e13 Fixed logic with default orders. 2026-03-08 16:30:42 -05:00
SergeantPanda
678240da6e Move navigation settings under ui settings 2026-03-08 16:29:38 -05:00
Jeff Casimir
8fb88827ae Fix code review findings for navigation ordering PR
P1 (Critical):
- Replace undefined @swagger_auto_schema with @extend_schema
- Add custom_properties validation with size limits
- Add merge semantics in serializer update() to prevent data loss

P2 (Important):
- Add debouncing (800ms) for drag operations in NavOrderForm
- Add error handling with notifications for visibility toggle
- Use store getters in Sidebar instead of direct property access
- Cache hiddenNav before render loop

P3 (Nice-to-have):
- Add canHide: false to settings nav item
- Fix admin check to use >= instead of ==
- Fix ESLint unused variable warnings

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-08 16:28:29 -05:00
Jeff Casimir
ed117661b5 Add ability to hide navigation items
- Add eye icon toggle to show/hide nav items in settings panel
- Hidden items stay in position but are dimmed with eye-slash icon
- Sidebar filters out hidden items
- Settings item cannot be hidden
- Reset to Default also clears hidden items
- Add getHiddenNav and toggleNavVisibility to auth store
- Update tests for visibility toggle feature

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-08 16:28:28 -05:00
Jeff Casimir
adc28551a6 Integrate configurable navigation into Settings and Sidebar
- Add Navigation accordion section to Settings page
- Update Sidebar to use getOrderedNavItems() with user's saved order
- Sidebar updates immediately when order changes
- Add test coverage for Navigation settings section

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-08 16:28:02 -05:00
Jeff Casimir
e2205fb454 Add NavOrderForm component for drag-and-drop nav ordering
- Drag-and-drop reorderable list using dnd-kit
- Auto-saves on drop with optimistic update
- Reset to Default button restores role-based defaults
- Shows only items available to user's role
- Add test coverage for admin and non-admin users

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-08 16:25:51 -05:00
Jeff Casimir
e876d6e926 Add navigation preference methods to auth store
- Add updateMe() API method for PATCH requests to /me/
- Add getNavOrder() to retrieve saved navigation order
- Add setNavOrder() to persist navigation order changes
- Add updateUserPreferences() with optimistic updates and rollback

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-08 16:25:49 -05:00
Jeff Casimir
0e34415493 Add centralized navigation configuration
- Extract nav item definitions into config/navigation.js
- Define NAV_ITEMS with id, label, icon, path, adminOnly for each item
- Add DEFAULT_ADMIN_ORDER and DEFAULT_USER_ORDER arrays
- Create getOrderedNavItems() helper for custom ordering
- Handle missing items by appending to end of saved order
- Add comprehensive test coverage

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-03-08 16:25:47 -05:00
SergeantPanda
61c248665e Reduce Y padding for programs to give more room between rows. 2026-03-06 16:46:37 -06:00
SergeantPanda
cf3f562cab fix: destructure props in M3uSetupSuccess component 2026-03-06 15:47:37 -06:00
SergeantPanda
846ae598fc Tests: Fix errorboundary and floatingvideo tests. 2026-03-06 15:21:23 -06:00
SergeantPanda
9d0b560bc7 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/nick4810/1049 2026-03-06 14:51:44 -06:00
SergeantPanda
d39b077715 Rename fetchChannels to fetchChannelIds in M3URefreshNotification component and tests 2026-03-06 14:51:34 -06:00
SergeantPanda
3134a29f16 feat(guide): improve program badge display for collapsed state (moved badges back to their own line) 2026-03-06 14:16:12 -06:00
SergeantPanda
95bc2eac73 Merge branch 'dev' of https://github.com/Dispatcharr/Dispatcharr into pr/marcinolek/1069 2026-03-06 13:19:35 -06:00
SergeantPanda
758a79a4f6 fix(frontend): remove non-existent autoResetRowSelection option
autoResetRowSelection does not exist in TanStack Table v8 — it was a v7
option. The remaining autoResetPageIndex and autoResetExpanded options
are valid v8 API and retained.
2026-03-06 13:16:49 -06:00
None
a9c90059d6 feat: add status badges (live, new, premiere, finale) to guide cards
Add is_new, is_live, is_premiere, and is_finale fields to the EPG program API and render them as colored badges in the TV guide.

- Compact card: S/E, LIVE, and NEW badges on the title row
- Expanded card: all badges (S/E, LIVE, NEW, PREMIERE, FINALE) on the subtitle row, now moved directly after title for consistency
- PREMIERE/FINALE detected from premiere_text (case-insensitive)
- PREMIERE/FINALE only shown in expanded view to conserve space
- Badge order: S/E → LIVE → NEW → PREMIERE → FINALE
2026-03-06 12:19:00 -06:00