From ec9ea0f66ba74b213f52202d873c7a2c473b22c1 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Mon, 8 Dec 2025 19:48:35 +0100 Subject: [PATCH] feat: Introduce IPTV player screen with web iframe for live, VOD, and series playback, including controls and state management. --- .gitignore | 1 - lib/features/iptv/screens/player_screen.dart | 53 ++++++++++++-------- 2 files changed, 32 insertions(+), 22 deletions(-) diff --git a/.gitignore b/.gitignore index 5507ab1..6ede5ac 100644 --- a/.gitignore +++ b/.gitignore @@ -31,7 +31,6 @@ migrate_working_dir/ /build/ # Web related -lib/generated_plugin_registrant.dart # Symbolication related app.*.symbols diff --git a/lib/features/iptv/screens/player_screen.dart b/lib/features/iptv/screens/player_screen.dart index e7749d9..c0a3f6a 100644 --- a/lib/features/iptv/screens/player_screen.dart +++ b/lib/features/iptv/screens/player_screen.dart @@ -320,22 +320,27 @@ class _PlayerScreenState extends ConsumerState { final iptvUrl = '${widget.playlist.dns}/live/${widget.playlist.username}/${widget.playlist.password}/$currentStreamId.ts'; final encodedUrl = Uri.encodeComponent(iptvUrl); - // Map enum values to string params - final qualityParam = switch (settings.streamQuality) { - StreamQuality.low => 'low', - StreamQuality.medium => 'medium', - StreamQuality.high => 'high', - }; - final bufferParam = switch (settings.bufferSize) { - BufferSize.low => 'low', - BufferSize.medium => 'medium', - BufferSize.high => 'high', - }; - final timeoutParam = switch (settings.connectionTimeout) { - ConnectionTimeout.short => 'short', - ConnectionTimeout.medium => 'medium', - ConnectionTimeout.long => 'long', - }; + // Map enum values to string params using if-else (avoids switch exhaustivity issues) + String qualityParam = 'medium'; + if (settings.streamQuality == StreamQuality.low) { + qualityParam = 'low'; + } else if (settings.streamQuality == StreamQuality.high) { + qualityParam = 'high'; + } + + String bufferParam = 'medium'; + if (settings.bufferSize == BufferSize.low) { + bufferParam = 'low'; + } else if (settings.bufferSize == BufferSize.high) { + bufferParam = 'high'; + } + + String timeoutParam = 'medium'; + if (settings.connectionTimeout == ConnectionTimeout.short) { + timeoutParam = 'short'; + } else if (settings.connectionTimeout == ConnectionTimeout.long) { + timeoutParam = 'long'; + } final modeParam = settings.modeString; // direct, transcode, or auto // Construct the stream URL directly using MPEG-TS format @@ -361,11 +366,17 @@ class _PlayerScreenState extends ConsumerState { : xtreamService.getSeriesStreamUrl(currentStreamId, widget.containerExtension); final encodedUrl = Uri.encodeComponent(vodStreamUrl); - final qualityParam = switch (settings.streamQuality) { - StreamQuality.low => 'low', - StreamQuality.medium => 'medium', - StreamQuality.high => 'high', - }; + + // Read settings for VOD quality + final settings = ref.read(iptvSettingsProvider); + + // Map quality enum to string (using if-else to avoid switch exhaustivity issues) + String qualityParam = 'medium'; + if (settings.streamQuality == StreamQuality.low) { + qualityParam = 'low'; + } else if (settings.streamQuality == StreamQuality.high) { + qualityParam = 'high'; + } // Calculate start time for seeking support // If override provided (seeking), use it. Else check provider resume.