mirror of
https://github.com/R0m1k3/xtremobile.git
synced 2026-10-22 06:38:16 +02:00
feat(live): refresh the channel list on demand and on resume
Live categories and channels were fetched once per app session and kept in memory until the process died, so a TV box left running never picked up provider changes. - Live tab: pull-to-refresh plus a remote-friendly refresh button, and an automatic refetch when the app returns to the foreground after 4 hours. - Settings: the "refresh cache" entry was a no-op delay; it now forces a reload of live channels, movies, series and EPG. - The Xtream service keeps the last non-empty live lists and serves them when a refetch fails, so a refresh on a not-yet-connected network does not blank the screen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
9ce707a702
commit
60c7f4cece
6 files changed
+396
-241
No files matched your search
@@ -98,6 +98,14 @@ class XtreamServiceMobile {
|
||||
/// changing any call site.
|
||||
final Map<String, model.Channel> _channelIndex = {};
|
||||
|
||||
/// Last non-empty live lists, keyed by category id ('' = all channels).
|
||||
///
|
||||
/// The fetchers swallow errors and return `[]`, so a refresh attempted while
|
||||
/// the network is down (typically right after a TV wakes from standby) would
|
||||
/// otherwise replace a good list with an empty screen.
|
||||
final Map<String, List<model.Channel>> _lastLiveChannels = {};
|
||||
List<model.Category>? _lastLiveCategories;
|
||||
|
||||
late final XmltvService _xmltv = XmltvService(cacheDir);
|
||||
|
||||
/// User-provided XMLTV URL (empty = not configured).
|
||||
@@ -200,7 +208,18 @@ class XtreamServiceMobile {
|
||||
|
||||
/// Get live channels for a category (with batch EPG support)
|
||||
/// If categoryId is empty, fetches ALL channels from all categories
|
||||
///
|
||||
/// Falls back to the last good list for this category when the fetch fails.
|
||||
Future<List<model.Channel>> getLiveChannels(String categoryId) async {
|
||||
final channels = await _fetchLiveChannels(categoryId);
|
||||
if (channels.isNotEmpty) {
|
||||
_lastLiveChannels[categoryId] = channels;
|
||||
return channels;
|
||||
}
|
||||
return _lastLiveChannels[categoryId] ?? channels;
|
||||
}
|
||||
|
||||
Future<List<model.Channel>> _fetchLiveChannels(String categoryId) async {
|
||||
try {
|
||||
final queryParams = {
|
||||
'username': _username,
|
||||
@@ -463,7 +482,18 @@ class XtreamServiceMobile {
|
||||
}
|
||||
|
||||
/// Get live TV categories
|
||||
///
|
||||
/// Falls back to the last good list when the fetch fails.
|
||||
Future<List<model.Category>> getLiveCategories() async {
|
||||
final categories = await _fetchLiveCategories();
|
||||
if (categories.isNotEmpty) {
|
||||
_lastLiveCategories = categories;
|
||||
return categories;
|
||||
}
|
||||
return _lastLiveCategories ?? categories;
|
||||
}
|
||||
|
||||
Future<List<model.Category>> _fetchLiveCategories() async {
|
||||
try {
|
||||
if (kDebugMode) print('🔍 Loading live TV categories with 8s timeout...');
|
||||
|
||||
|
||||
Reference in new issue
Block a user