Commit Graph
106 Commits
Author SHA1 Message Date
MichaelandClaude Fable 5 60d3f42901 feat: security hardening, streaming overhaul, design polish, tests
Security:
- Replace unsalted SHA-256 password hashing with bcrypt (lazy rehash on login)
- Add authenticated /api/xtream-api gateway: Xtream credentials are injected
  server-side and never sent to the frontend; /api/playlists no longer
  returns passwords
- Redact credentials from all logs (login body, proxy/FFmpeg/scheduler URLs)
- Add auth to recordings, EPG, season-passes and streaming routes
  (HttpOnly session cookie for hls.js; loopback bypass for local FFmpeg)
- Lock player postMessage to same-origin in both directions
- Vendor and pin hls.js 1.6.7 / mpegts.js 1.7.3 (drop CDN @latest)
- Fix rate limiter (client IP was never resolved), add login rate limit,
  restrict CORS, add CSP Report-Only, block private-IP SSRF targets,
  fix path traversal in recording log retrieval, chmod 777 -> 770
- Remove dead HiveService (seeded admin/admin into IndexedDB with SHA-256)
- Fix authMiddleware not populating 'user' context (getPlaylist ignored the
  logged-in user; admin purge always returned 403)

Streaming:
- New FfmpegSessionManager: process registry, idle reaper (4 min live /
  15 min VOD), orphan cleanup at startup, clean SIGTERM shutdown,
  fast-fail with stderr instead of 30 s timeout
- Quality selection (source/high/medium/low) for live and VOD; source mode
  streams with -c:v copy (zero transcoding); selector wired into the player
- Concurrent recordings (MAX_CONCURRENT_RECORDINGS, default 2); conflicts
  retry on the next tick instead of silently failing
- Lower live latency (HLS window 20 -> 10 segments, liveSync 10 -> 3)
- Fix recording log lookup (.mp4 vs .mkv mismatch)

Design:
- Replace hardcoded colors with AppColors tokens (12 files)
- web/theme.css syncs HTML players with the Flutter palette
- DPAD/keyboard navigation (arrow-key focus, player shortcuts)
- Tooltips on player icon buttons, Semantics on content cards
- Remove 7 dead widgets broken since the Stitch merge

Quality:
- bin/test/: 21 unit tests (bcrypt, redaction, traversal, SSRF, recording
  conflicts) plus a quality-selector widget test
- GitHub Actions CI (analyze + test + build web)
- Archive stale status docs into docs/archive/

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 10:07:18 +02:00
MichaelandClaude Opus 4.7 b985f11704 fix: resolve all compile errors from Stitch theme merge
- Add missing AppTheme animation constants (durationSm/Md/Lg/Xl, curveSmooth)
  to satisfy remote widget references.
- Replace deprecated GlassContainer(opacity:) with .glass()/.floating()/.base()
  in login_screen, live_tv_tab, mobile_live_tv_tab, player_screen,
  dashboard_screen.
- Fix const-eval errors by removing const from BorderSide/Text/BoxDecoration
  using AppColors.focusColor and AppColors.border (runtime getters).
- Fix subtitle_service.dart: padEnd → padRight (Dart String API).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-28 07:37:37 +02:00
MichaelandClaude Opus 4.7 2ba16caf55 Merge remote-tracking branch 'origin/main' into main
Resolved conflicts by keeping remote functional features (RecordingScheduler,
FFmpeg HLS transcoding, mobile player, channel cards) and restoring local
Stitch theme foundation (app_colors, app_theme, glass_container, mobile_theme).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-27 22:17:52 +02:00
MichaelandClaude Opus 4.7 f7eaa724e2 feat(theme): complete redesign to Cyber-Cinematic Glass (Stitch)
Replace the legacy Apple TV-style purple/cyan theme with the full
Google Stitch Cyber-Cinematic Glass design system across the
entire app (desktop + mobile).

- New Material 3 dark ColorScheme: background #121317, primary
  #adc6ff, primaryContainer #4b8eff, surface containers, etc.
- Typography: Space Grotesk (headlines) + Inter (body/labels)
- 3-level glassmorphism via GlassContainer: base, glass, floating
- Primary gradient: #007AFF → #00C6FF with blue glow effects
- Removed old compatibility aliases (focusColor, border, textPrimary,
  textSecondary); all code now uses semantic Stitch tokens
- Systematically replaced all Colors.white/black/red/grey and
  GoogleFonts.roboto/outfit with Stitch equivalents
- All 36 lib/ files updated, zero compilation errors

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-04-27 22:06:29 +02:00
Michael d82f9f6846 feat: add RecordingsTab widget and EPG guide view for IPTV playback management 2026-04-01 21:21:26 +02:00
Michael e4301077b0 feat: implement HLS live streaming and VOD transcoding handler with FFmpeg and NVIDIA GPU support 2026-04-01 21:14:33 +02:00
Michael 5e7e86e4d8 feat: add RecordingsTab widget with EPG guide and channel navigation for IPTV playlists 2026-04-01 20:58:42 +02:00
MichaelandClaude Haiku 4.5 6efdadd6fd fix: simplify RecordingsTab to fix null check operator error
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-04-01 20:45:48 +02:00
Michael 0049a7c596 feat: add RecordingsTab widget and local settings configuration file 2026-04-01 20:41:27 +02:00
Michael 1e6d3741d1 feat: implement RecordingsTab and EPG guide view for IPTV feature 2026-04-01 20:37:02 +02:00
Michael 2a5eb08807 feat: add RecordingsTab widget and EPG guide view for IPTV playback 2026-04-01 20:31:52 +02:00
Michael cd859d643c feat: add RecordingsTab widget with integrated EPG guide functionality 2026-04-01 20:26:49 +02:00
Michael 6a4a642611 feat: implement IPTV player screen with iframe-based stream support and recordings tab widget 2026-04-01 20:19:40 +02:00
Michael fa6ae90d8d feat: add mobile-optimized IPTV player with HLS and MpegTS support 2026-03-29 10:19:36 +02:00
GitHub CopilotandClaude Haiku 4.5 96ea8e2ad2 refactor(ui): improve Apple TV aesthetics with premium gradients and glows
- Enhance category card gradient with teal accent (AppColors.primary)
- Add premium ambient glows to dashboard (teal + blue)
- Replace flat black background with subtle gradient for depth
- Increase glow intensity and size for better visual impact
- Apple TV inspired premium dark theme with accent lighting

Changes:
- live_tv_tab.dart: category gradient now uses AppColors.primary
- dashboard_screen.dart: add dual-glow background with premium styling

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-03-26 12:00:49 +01:00
GitHub Copilot 5b16029038 refactor(channel_card): simplify ChannelCard structure and enhance hover effects 2026-03-26 11:15:30 +01:00
GitHub Copilot 2ca0c8bf1a feat: Enhance Apple TV UI components with modern design elements
- Updated ChannelCard widget to include live indicator, favorite button, and EPG information with smooth animations and skeleton loading for images.
- Introduced MobileTheme for touch-optimized layouts, adapting Apple TV design principles for mobile screens.
- Added TvChannelGrid for responsive channel layouts with flexible column counts and smooth animations.
- Created TvModernCard for displaying content with interactive hover states, progress indicators, and context menu support.
- Implemented TvTopNavBar and TvSideNav for improved navigation with glassmorphism effects and user-friendly interactions.
- Developed TvFloatingMenu for context-aware actions with smooth reveal animations.
2026-03-26 11:09:40 +01:00
GitHub Copilot 2c4572191d feat(recording): implement simplified recording system with API endpoints and UI integration 2026-03-26 11:00:40 +01:00
GitHub Copilot 91eb1ce5a0 Add download and subtitle services, enhance UI with continue watching and quality selector widgets
- Implemented DownloadService for managing download tasks, including start, pause, resume, and cancel functionalities.
- Created SubtitleService for handling subtitle tracks, parsing SRT and WebVTT formats, and downloading subtitles.
- Added ContinueWatchingWidget to display user's watch history with progress indicators.
- Developed QualitySelectorWidget for selecting video quality during playback, including auto quality adjustment.
- Introduced TrendingWidget and RecentlyAddedWidget to showcase trending and recently added content.
2026-03-26 10:34:18 +01:00
Michael 13647a35da feat: Implement TV recording management with API endpoints, a data model, and a scheduling service that uses FFmpeg to record streams. 2026-03-09 16:46:45 +01:00
Michael 33c6385d7e feat: introduce mobile player screen and lite player view with channel zapping functionality 2026-03-09 14:52:41 +01:00
Michael 4d1e08148b feat: implement mobile live TV tab with channel browsing, search, and a dedicated player screen supporting channel zapping. 2026-03-09 14:32:41 +01:00
Michael 12b799a7fd feat: introduce LitePlayerView for video playback with custom zapping controls and mobile fullscreen support. 2026-03-09 14:18:51 +01:00
Michael 3232a3a226 feat: introduce EPG API with caching and TV & Recordings UI with EPG Guide, Recordings, and Season Passes tabs. 2026-03-09 10:47:30 +01:00
Michael fa88746db6 feat: introduce IPTV data models and initial Live TV UI, including EPG overlay. 2026-03-09 10:12:55 +01:00
Michael 37945b513e fix(epg): use /api/epg/ backend for full guide (48h), fix _ProgrammeCard for Map format, remove stale EpgEntry code 2026-03-09 09:07:04 +01:00
Michael 1e1687e160 fix(epg): complete rewrite of recordings_tab (XtreamService direct), fix epg_api action (get_epg), add keepAlive 2026-03-09 08:54:45 +01:00
Michael 104159e8da fix(epg): pass playlist as parameter to RecordingsTab/_EpgGuideView — was null from selectedPlaylistProvider 2026-03-09 08:44:44 +01:00
Michael 1c38b62516 fix: remove literal newline in Dart string causing build_runner syntax error 2026-03-09 08:40:22 +01:00
Michael 3e0088ecf8 fix(epg): load filtered channels from playlist provider instead of manual channel ID input 2026-03-09 08:36:41 +01:00
Michael 50a6998c09 feat: add EPG TV guide, season passes (auto-recording) and unified recordings/EPG tab with 3 sub-tabs 2026-03-09 08:21:48 +01:00
Michael 4c2e3ce600 feat: add stop recording button and POST /api/recordings/stop/<id> endpoint to kill FFmpeg process 2026-03-08 23:53:32 +01:00
Michael 9107eadc73 fix(recordings): send start_time and end_time in UTC to avoid +1h timezone offset with Docker server 2026-03-08 23:19:20 +01:00
Michael 60bb10fe4d fix(recordings): correct stream_url to use real live stream, resolve to absolute URL for FFmpeg, use copy mode, speed up scheduler to 10s 2026-03-08 22:43:42 +01:00
Michael 989303db77 fix(ui): gracefully handle json parse error when showLogs receives 404 text string 2026-03-08 21:36:21 +01:00
Michael 9d670c0625 fix(ui): handle 404 router errors gracefully instead of crashing on json parse 2026-03-08 21:30:55 +01:00
Michael 238cb8f407 feat(recording): add immediate record button to recording modal 2026-03-08 21:28:47 +01:00
Michael 548e4cd664 fix(recording): rename log api route to avoid shelf_router Not Found param collisions 2026-03-08 20:43:50 +01:00
Michael 966311f560 feat(recording): add ffmpeg logs writing and viewing in UI 2026-03-08 19:26:54 +01:00
Michael abbac75926 feat(ui): add recordings tab to dashboard to list scheduled and active recordings 2026-03-08 19:24:03 +01:00
Michael 2cba30db4d feat(ui): add date picker and force 24h format in recording modal 2026-03-08 17:34:16 +01:00
Michael b3618805a6 fix(ui): use relative url for api recording requests in flutter web 2026-03-08 16:58:07 +01:00
Michael 219d6c816f fix(ui): remove invalid backgroundColor from showDialog 2026-03-08 16:52:59 +01:00
Michael 04b8b317c3 fix(ui): resolve bracket syntax error in live tv tab 2026-03-08 10:02:51 +01:00
Michael 2180572b92 feat: implement live tv recording system 2026-03-08 08:40:55 +01:00
Michael 71630d75e8 feat: Install FFmpeg with NVIDIA NVENC/NVDEC support via apt-get instead of a static build. 2026-01-03 10:26:17 +01:00
Michael f6d5ae7764 UI fixes: remove center play button from Native player, align EPG/controls in Live TV, match background colors 2026-01-02 08:59:52 +01:00
Michael 478107f0a4 feat: Add streaming handlers for live and VOD content using FFmpeg. 2026-01-01 20:05:40 +01:00
Michael be51118dc2 feat: add LiveTVTab for browsing live channels with search and favorites, and PlayerScreen for channel playback. 2026-01-01 18:17:35 +01:00
Michael a1a8810ddc feat: introduce streaming handlers for live TV proxy and VOD HLS transcoding using FFmpeg. 2026-01-01 18:12:45 +01:00