From 1547b376e0e200e0a7be4e6010e568f4986b86ab Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Thu, 1 Jan 2026 19:04:11 +0100 Subject: [PATCH] feat: Implement web-based video player screen with playback controls and stream type handling. --- lib/features/iptv/screens/player_screen.dart | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/lib/features/iptv/screens/player_screen.dart b/lib/features/iptv/screens/player_screen.dart index bfe4ae9..e4bcf17 100644 --- a/lib/features/iptv/screens/player_screen.dart +++ b/lib/features/iptv/screens/player_screen.dart @@ -61,7 +61,9 @@ class _PlayerScreenState extends ConsumerState { String? _currentStreamUrl; String _statusMessage = 'Loading...'; String? _errorMessage; + String? _errorMessage; bool _isMuted = false; + bool _ignoreStatusUpdates = false; @override void initState() { @@ -209,7 +211,9 @@ class _PlayerScreenState extends ConsumerState { ); } } else if (type == 'playback_status') { - setState(() => _isPlaying = data['status'] == 'playing'); + if (!_ignoreStatusUpdates) { + setState(() => _isPlaying = data['status'] == 'playing'); + } } else if (type == 'user_activity') { _onHover(); } @@ -256,6 +260,12 @@ class _PlayerScreenState extends ConsumerState { // Optimistic update to make UI responsive immediately setState(() => _isPlaying = !_isPlaying); + // Ignore incoming status updates for 2 seconds to prevent fighting + _ignoreStatusUpdates = true; + Future.delayed(const Duration(seconds: 2), () { + if (mounted) _ignoreStatusUpdates = false; + }); + if (_isPlaying) { _sendMessage({'type': 'play'}); } else {