import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/modules/backup/background_service/background.service.dart'; class IOSBackgroundSettings { final bool appRefreshEnabled; final int numberOfBackgroundTasksQueued; final DateTime? timeOfLastFetch; final DateTime? timeOfLastProcessing; IOSBackgroundSettings({ required this.appRefreshEnabled, required this.numberOfBackgroundTasksQueued, this.timeOfLastFetch, this.timeOfLastProcessing, }); } class IOSBackgroundSettingsNotifier extends StateNotifier { final BackgroundService _service; IOSBackgroundSettingsNotifier(this._service) : super(null); IOSBackgroundSettings? get settings => state; Future refresh() async { final lastFetchTime = await _service.getIOSBackupLastRun(IosBackgroundTask.fetch); final lastProcessingTime = await _service.getIOSBackupLastRun(IosBackgroundTask.processing); int numberOfProcesses = await _service.getIOSBackupNumberOfProcesses(); final appRefreshEnabled = await _service.getIOSBackgroundAppRefreshEnabled(); // If this is enabled and there are no background processes, // the user just enabled app refresh in Settings. // But we don't have any background services running, since it was disabled // before. if (await _service.isBackgroundBackupEnabled() && numberOfProcesses == 0) { // We need to restart the background service await _service.enableService(); numberOfProcesses = await _service.getIOSBackupNumberOfProcesses(); } final settings = IOSBackgroundSettings( appRefreshEnabled: appRefreshEnabled, numberOfBackgroundTasksQueued: numberOfProcesses, timeOfLastFetch: lastFetchTime, timeOfLastProcessing: lastProcessingTime, ); state = settings; return settings; } } final iOSBackgroundSettingsProvider = StateNotifierProvider( (ref) => IOSBackgroundSettingsNotifier(ref.watch(backgroundServiceProvider)), );