Skip to content

commit fe43518

abduznik edited this page May 23, 2026 · 1 revision

feat: implement automatic library refresh when internet connection is restored

Commit: fe43518f5f96f550d1355e97d07ba330b4d86c0e

Author: abduznik

Date: 2026-04-29

Why: Adds a new feature or capability to the application.

Files Changed

lib/providers/library_provider.dart |  2 ++
 lib/providers/romm_provider.dart    | 25 +++++++++++++++++++++++++
 2 files changed, 27 insertions(+)
  • lib/providers/library_provider.dart
  • lib/providers/romm_provider.dart

Diff

diff --git a/lib/providers/library_provider.dart b/lib/providers/library_provider.dart
index 9f7ae68..d5451fc 100644
--- a/lib/providers/library_provider.dart
+++ b/lib/providers/library_provider.dart
@@ -104,6 +104,7 @@ final activePresetLoaderProvider = FutureProvider<void>((ref) async {});
 
 final platformsProvider = FutureProvider<List<Platform>>((ref) async {
   final service = ref.watch(rommServiceProvider);
+  ref.watch(isOfflineProvider);
   if (service == null) return [];
 
   final cached = await _loadPlatformsCache(ref);
@@ -144,6 +145,7 @@ final platformsProvider = FutureProvider<List<Platform>>((ref) async {
 
 final allGamesProvider = FutureProvider<List<Game>>((ref) async {
   final service = ref.watch(rommServiceProvider);
+  ref.watch(isOfflineProvider);
   final selectedPlatformId = ref.watch(selectedPlatformIdProvider);
   if (service == null) return [];
 
diff --git a/lib/providers/romm_provider.dart b/lib/providers/romm_provider.dart
index 66855fc..8636875 100644
--- a/lib/providers/romm_provider.dart
+++ b/lib/providers/romm_provider.dart
@@ -44,6 +44,7 @@ final emulatorStatusProvider = FutureProvider<Map<String, bool>>((ref) async {
 
 final firmwareServiceProvider = FutureProvider<FirmwareService?>((ref) async {
   final rommService = ref.watch(rommServiceProvider);
+  ref.watch(isOfflineProvider);
   final directoryService = ref.watch(directoryServiceProvider).asData?.value;
   final strategyRegistry = await ref.watch(strategyRegistryProvider.future);
   if (rommService == null || directoryService == null || strategyRegistry == null) return null;
@@ -135,6 +136,7 @@ final strategyRegistryProvider = FutureProvider<StrategyRegistry?>((ref) async {
 // SaveSyncService provider
 final saveSyncServiceProvider = FutureProvider<SaveSyncService?>((ref) async {
   final rommService = ref.watch(rommServiceProvider);
+  ref.watch(isOfflineProvider);
   final directoryService = ref.watch(directoryServiceProvider).asData?.value;
   final strategyRegistry = await ref.watch(strategyRegistryProvider.future);
   final prefs = ref.watch(sharedPreferencesProvider);
@@ -188,6 +190,7 @@ final romMappingServiceProvider = FutureProvider<RomMappingService>((ref) async
 
 final romScannerServiceProvider = Provider<RomScannerService?>((ref) {
   final rommService = ref.watch(rommServiceProvider);
+  ref.watch(isOfflineProvider);
   final mappingServiceAsync = ref.watch(romMappingServiceProvider);
   final directoryServiceAsync = ref.watch(directoryServiceProvider);
   
@@ -200,6 +203,28 @@ final romScannerServiceProvider = Provider<RomScannerService?>((ref) {
   return null;
 });
 
+final isOfflineProvider = StateNotifierProvider<ConnectivityNotifier, bool>((ref) {
+  final service = ref.watch(rommServiceProvider);
+  return ConnectivityNotifier(service);
+});
+
+class ConnectivityNotifier extends StateNotifier<bool> {
+  final RommService? _service;
+  ConnectivityNotifier(this._service) : super(_service?.isOffline.value ?? true) {
+    _service?.isOffline.addListener(_listener);
+  }
+
+  void _listener() {
+    if (mounted) state = _service?.isOffline.value ?? true;
+  }
+
+  @override
+  void dispose() {
+    _service?.isOffline.removeListener(_listener);
+    super.dispose();
+  }
+}
+
 // ---------------------------------------------------------------------------
 // Backup providers
 // ---------------------------------------------------------------------------

Clone this wiki locally