fix: await download provider init before offline navigation

This commit is contained in:
edde746
2026-01-29 05:43:48 +01:00
parent 4962fd3220
commit 4225618df7
3 changed files with 10 additions and 2 deletions
+4
View File
@@ -342,6 +342,8 @@ class _SetupScreenState extends State<SetupScreen> {
MaterialPageRoute(builder: (context) => MainScreen(client: result.firstClient!)),
);
} else {
await context.read<DownloadProvider>().ensureInitialized();
if (!mounted) return;
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const MainScreen(isOfflineMode: true)),
@@ -351,6 +353,8 @@ class _SetupScreenState extends State<SetupScreen> {
appLogger.e('Error during multi-server connection', error: e, stackTrace: stackTrace);
if (mounted) {
await context.read<DownloadProvider>().ensureInitialized();
if (!mounted) return;
Navigator.pushReplacement(
context,
MaterialPageRoute(builder: (context) => const MainScreen(isOfflineMode: true)),
+5 -1
View File
@@ -33,6 +33,7 @@ class DownloadProvider extends ChangeNotifier {
final DownloadManagerService _downloadManager;
StreamSubscription<DownloadProgress>? _progressSubscription;
StreamSubscription<DeletionProgress>? _deletionProgressSubscription;
late final Future<void> _initFuture;
// Track download progress by globalKey (serverId:ratingKey)
final Map<String, DownloadProgress> _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<void> ensureInitialized() => _initFuture;
/// Load all persisted downloads and metadata from the database/cache
Future<void> _loadPersistedDownloads() async {
try {
+1 -1
View File
@@ -95,7 +95,7 @@ Future<MediaNavigationResult> 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;