mirror of
				https://github.com/immich-app/immich.git
				synced 2025-11-03 19:17:11 -05:00 
			
		
		
		
	* wifi toggle * feat: network requirement option for upload * chore: put back holding queue previous config numbers * options * backup option page * pr feedback
		
			
				
	
	
		
			69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
import 'package:auto_route/auto_route.dart';
 | 
						|
import 'package:flutter/material.dart';
 | 
						|
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
						|
import 'package:immich_mobile/domain/models/store.model.dart';
 | 
						|
import 'package:immich_mobile/entities/store.entity.dart';
 | 
						|
import 'package:immich_mobile/extensions/translate_extensions.dart';
 | 
						|
import 'package:immich_mobile/providers/app_settings.provider.dart';
 | 
						|
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
 | 
						|
import 'package:immich_mobile/providers/user.provider.dart';
 | 
						|
import 'package:immich_mobile/services/app_settings.service.dart';
 | 
						|
import 'package:immich_mobile/widgets/settings/backup_settings/drift_backup_settings.dart';
 | 
						|
 | 
						|
@RoutePage()
 | 
						|
class DriftBackupOptionsPage extends ConsumerWidget {
 | 
						|
  const DriftBackupOptionsPage({super.key});
 | 
						|
 | 
						|
  @override
 | 
						|
  Widget build(BuildContext context, WidgetRef ref) {
 | 
						|
    bool hasPopped = false;
 | 
						|
    final previousWifiReqForVideos = Store.tryGet(StoreKey.useWifiForUploadVideos) ?? false;
 | 
						|
    final previousWifiReqForPhotos = Store.tryGet(StoreKey.useWifiForUploadPhotos) ?? false;
 | 
						|
    return PopScope(
 | 
						|
      onPopInvokedWithResult: (didPop, result) async {
 | 
						|
        // There is an issue with Flutter where the pop event
 | 
						|
        // can be triggered multiple times, so we guard it with _hasPopped
 | 
						|
 | 
						|
        final currentWifiReqForVideos = Store.tryGet(StoreKey.useWifiForUploadVideos) ?? false;
 | 
						|
        final currentWifiReqForPhotos = Store.tryGet(StoreKey.useWifiForUploadPhotos) ?? false;
 | 
						|
 | 
						|
        if (currentWifiReqForVideos == previousWifiReqForVideos &&
 | 
						|
            currentWifiReqForPhotos == previousWifiReqForPhotos) {
 | 
						|
          return;
 | 
						|
        }
 | 
						|
 | 
						|
        if (didPop && !hasPopped) {
 | 
						|
          hasPopped = true;
 | 
						|
 | 
						|
          final currentUser = ref.read(currentUserProvider);
 | 
						|
          if (currentUser == null) {
 | 
						|
            return;
 | 
						|
          }
 | 
						|
 | 
						|
          await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
 | 
						|
          final isBackupEnabled = ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableBackup);
 | 
						|
          if (!isBackupEnabled) {
 | 
						|
            return;
 | 
						|
          }
 | 
						|
 | 
						|
          ScaffoldMessenger.of(context).showSnackBar(
 | 
						|
            SnackBar(
 | 
						|
              content: Text("network_requirements_updated".t(context: context)),
 | 
						|
              duration: const Duration(seconds: 4),
 | 
						|
            ),
 | 
						|
          );
 | 
						|
 | 
						|
          final backupNotifier = ref.read(driftBackupProvider.notifier);
 | 
						|
          backupNotifier.cancel().then((_) {
 | 
						|
            backupNotifier.startBackup(currentUser.id);
 | 
						|
          });
 | 
						|
        }
 | 
						|
      },
 | 
						|
      child: Scaffold(
 | 
						|
        appBar: AppBar(title: Text("backup_options".t(context: context))),
 | 
						|
        body: const DriftBackupSettings(),
 | 
						|
      ),
 | 
						|
    );
 | 
						|
  }
 | 
						|
}
 |