mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-19 13:08:05 +02:00
feat: Introduce IPTV player screen with web iframe for live, VOD, and series playback, including controls and state management.
This commit is contained in:
1 parent
7d5c72f7f7
commit
e6c9dbf050
2 files changed
+32
-22
No files matched your search
@@ -31,7 +31,6 @@ migrate_working_dir/
|
|||||||
/build/
|
/build/
|
||||||
|
|
||||||
# Web related
|
# Web related
|
||||||
lib/generated_plugin_registrant.dart
|
|
||||||
|
|
||||||
# Symbolication related
|
# Symbolication related
|
||||||
app.*.symbols
|
app.*.symbols
|
||||||
|
|||||||
@@ -320,22 +320,27 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
final iptvUrl = '${widget.playlist.dns}/live/${widget.playlist.username}/${widget.playlist.password}/$currentStreamId.ts';
|
final iptvUrl = '${widget.playlist.dns}/live/${widget.playlist.username}/${widget.playlist.password}/$currentStreamId.ts';
|
||||||
final encodedUrl = Uri.encodeComponent(iptvUrl);
|
final encodedUrl = Uri.encodeComponent(iptvUrl);
|
||||||
|
|
||||||
// Map enum values to string params
|
// Map enum values to string params using if-else (avoids switch exhaustivity issues)
|
||||||
final qualityParam = switch (settings.streamQuality) {
|
String qualityParam = 'medium';
|
||||||
StreamQuality.low => 'low',
|
if (settings.streamQuality == StreamQuality.low) {
|
||||||
StreamQuality.medium => 'medium',
|
qualityParam = 'low';
|
||||||
StreamQuality.high => 'high',
|
} else if (settings.streamQuality == StreamQuality.high) {
|
||||||
};
|
qualityParam = 'high';
|
||||||
final bufferParam = switch (settings.bufferSize) {
|
}
|
||||||
BufferSize.low => 'low',
|
|
||||||
BufferSize.medium => 'medium',
|
String bufferParam = 'medium';
|
||||||
BufferSize.high => 'high',
|
if (settings.bufferSize == BufferSize.low) {
|
||||||
};
|
bufferParam = 'low';
|
||||||
final timeoutParam = switch (settings.connectionTimeout) {
|
} else if (settings.bufferSize == BufferSize.high) {
|
||||||
ConnectionTimeout.short => 'short',
|
bufferParam = 'high';
|
||||||
ConnectionTimeout.medium => 'medium',
|
}
|
||||||
ConnectionTimeout.long => 'long',
|
|
||||||
};
|
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
|
final modeParam = settings.modeString; // direct, transcode, or auto
|
||||||
|
|
||||||
// Construct the stream URL directly using MPEG-TS format
|
// Construct the stream URL directly using MPEG-TS format
|
||||||
@@ -361,11 +366,17 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
: xtreamService.getSeriesStreamUrl(currentStreamId, widget.containerExtension);
|
: xtreamService.getSeriesStreamUrl(currentStreamId, widget.containerExtension);
|
||||||
|
|
||||||
final encodedUrl = Uri.encodeComponent(vodStreamUrl);
|
final encodedUrl = Uri.encodeComponent(vodStreamUrl);
|
||||||
final qualityParam = switch (settings.streamQuality) {
|
|
||||||
StreamQuality.low => 'low',
|
// Read settings for VOD quality
|
||||||
StreamQuality.medium => 'medium',
|
final settings = ref.read(iptvSettingsProvider);
|
||||||
StreamQuality.high => 'high',
|
|
||||||
};
|
// 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
|
// Calculate start time for seeking support
|
||||||
// If override provided (seeking), use it. Else check provider resume.
|
// If override provided (seeking), use it. Else check provider resume.
|
||||||
|
|||||||
Reference in new issue
Block a user