diff --git a/lib/features/iptv/providers/xtream_provider.dart b/lib/features/iptv/providers/xtream_provider.dart index b07ec9a..db73f02 100644 --- a/lib/features/iptv/providers/xtream_provider.dart +++ b/lib/features/iptv/providers/xtream_provider.dart @@ -57,14 +57,35 @@ final selectedPlaylistProvider = StateProvider((ref) { return null; }); +/// Écrit l'IPTV courante là où `AuthedHttp` la relit pour poser l'en-tête +/// `X-Playlist-Id`. +void persistSelectedPlaylist(PlaylistConfig? playlist) { + if (playlist != null) { + html.window.localStorage['selected_playlist'] = + jsonEncode(playlist.toJson()); + } else { + html.window.localStorage.remove('selected_playlist'); + } +} + +/// Choisit l'IPTV courante et la persiste dans le même temps. +/// +/// Écrire par le seul `playlistPersistenceProvider` ne suffit pas : son +/// `ref.listen` n'existe qu'une fois `activeXtreamServiceProvider` lu, c'est +/// à dire une fois le tableau de bord construit. Le tout premier choix d'une +/// session partait donc sans être écrit, `AuthedHttp` n'envoyait aucun +/// en-tête, et le serveur repliait sur la playlist la plus récente — les deux +/// IPTV retombaient alors sur la même, d'où une seule règle Auto NBA pour +/// les deux. +void selectPlaylist(WidgetRef ref, PlaylistConfig playlist) { + persistSelectedPlaylist(playlist); + ref.read(selectedPlaylistProvider.notifier).state = playlist; +} + // Listener to save selected playlist final playlistPersistenceProvider = Provider((ref) { ref.listen(selectedPlaylistProvider, (previous, next) { - if (next != null) { - html.window.localStorage['selected_playlist'] = jsonEncode(next.toJson()); - } else { - html.window.localStorage.remove('selected_playlist'); - } + persistSelectedPlaylist(next); }); }); diff --git a/lib/features/iptv/screens/playlist_selection_screen.dart b/lib/features/iptv/screens/playlist_selection_screen.dart index e2cf84a..623a1d7 100644 --- a/lib/features/iptv/screens/playlist_selection_screen.dart +++ b/lib/features/iptv/screens/playlist_selection_screen.dart @@ -163,9 +163,7 @@ class PlaylistSelectionScreen extends ConsumerWidget { child: _PlaylistCard( playlist: playlist, onTap: () { - ref - .read(selectedPlaylistProvider.notifier) - .state = playlist; + selectPlaylist(ref, playlist); context.go('/dashboard'); }, ), diff --git a/lib/mobile/features/iptv/screens/mobile_playlist_selection_screen.dart b/lib/mobile/features/iptv/screens/mobile_playlist_selection_screen.dart index 19f02de..7d8356d 100644 --- a/lib/mobile/features/iptv/screens/mobile_playlist_selection_screen.dart +++ b/lib/mobile/features/iptv/screens/mobile_playlist_selection_screen.dart @@ -108,9 +108,9 @@ class MobilePlaylistSelectionScreen extends ConsumerWidget { return _MobilePlaylistCard( playlist: playlist, onTap: () { - // Update provider which will be persisted - ref.read(selectedPlaylistProvider.notifier).state = - playlist; + // Choix + persistance dans le même geste : l'en-tête + // X-Playlist-Id doit partir dès la première requête. + selectPlaylist(ref, playlist); // Navigate without extra (it will be picked up from provider) context.go('/dashboard'); },