diff --git a/lib/main.dart b/lib/main.dart index 6c204f7d..6787aa2e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -342,6 +342,8 @@ class _SetupScreenState extends State { MaterialPageRoute(builder: (context) => MainScreen(client: result.firstClient!)), ); } else { + await context.read().ensureInitialized(); + if (!mounted) return; Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const MainScreen(isOfflineMode: true)), @@ -351,6 +353,8 @@ class _SetupScreenState extends State { appLogger.e('Error during multi-server connection', error: e, stackTrace: stackTrace); if (mounted) { + await context.read().ensureInitialized(); + if (!mounted) return; Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => const MainScreen(isOfflineMode: true)), diff --git a/lib/providers/download_provider.dart b/lib/providers/download_provider.dart index b8b25c7a..fb9d6dce 100644 --- a/lib/providers/download_provider.dart +++ b/lib/providers/download_provider.dart @@ -33,6 +33,7 @@ class DownloadProvider extends ChangeNotifier { final DownloadManagerService _downloadManager; StreamSubscription? _progressSubscription; StreamSubscription? _deletionProgressSubscription; + late final Future _initFuture; // Track download progress by globalKey (serverId:ratingKey) final Map _downloads = {}; @@ -61,9 +62,12 @@ class DownloadProvider extends ChangeNotifier { _deletionProgressSubscription = _downloadManager.deletionProgressStream.listen(_onDeletionProgressUpdate); // Load persisted downloads from database - _loadPersistedDownloads(); + _initFuture = _loadPersistedDownloads(); } + /// Ensures persisted downloads have been loaded from disk. + Future ensureInitialized() => _initFuture; + /// Load all persisted downloads and metadata from the database/cache Future _loadPersistedDownloads() async { try { diff --git a/lib/utils/media_navigation_helper.dart b/lib/utils/media_navigation_helper.dart index 31618a12..200c6caa 100644 --- a/lib/utils/media_navigation_helper.dart +++ b/lib/utils/media_navigation_helper.dart @@ -95,7 +95,7 @@ Future navigateToMediaItem( continue defaultCase; case PlexMediaType.season: - await Navigator.push(context, MaterialPageRoute(builder: (context) => SeasonDetailScreen(season: metadata))); + await Navigator.push(context, MaterialPageRoute(builder: (context) => SeasonDetailScreen(season: metadata, isOffline: isOffline))); onRefresh?.call(metadata.ratingKey); return MediaNavigationResult.navigated;