mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-04 03:39:37 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			60 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/services/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<IOSBackgroundSettings?> {
 | 
						|
  final BackgroundService _service;
 | 
						|
  IOSBackgroundSettingsNotifier(this._service) : super(null);
 | 
						|
 | 
						|
  IOSBackgroundSettings? get settings => state;
 | 
						|
 | 
						|
  Future<IOSBackgroundSettings> 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<
 | 
						|
    IOSBackgroundSettingsNotifier, IOSBackgroundSettings?>(
 | 
						|
  (ref) => IOSBackgroundSettingsNotifier(ref.watch(backgroundServiceProvider)),
 | 
						|
);
 |