merge main

This commit is contained in:
shenlong-tanwen
2025-09-17 16:08:34 +05:30
528 changed files with 17365 additions and 6390 deletions
+54 -10
View File
@@ -5,15 +5,19 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/domain/models/album/local_album.model.dart';
import 'package:immich_mobile/domain/models/store.model.dart';
import 'package:immich_mobile/entities/store.entity.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/extensions/theme_extensions.dart';
import 'package:immich_mobile/extensions/translate_extensions.dart';
import 'package:immich_mobile/presentation/widgets/backup/backup_toggle_button.widget.dart';
import 'package:immich_mobile/providers/app_settings.provider.dart';
import 'package:immich_mobile/providers/background_sync.provider.dart';
import 'package:immich_mobile/providers/backup/backup_album.provider.dart';
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
import 'package:immich_mobile/providers/user.provider.dart';
import 'package:immich_mobile/routing/router.dart';
import 'package:immich_mobile/services/app_settings.service.dart';
import 'package:immich_mobile/widgets/backup/backup_info_card.dart';
@RoutePage()
@@ -25,6 +29,8 @@ class DriftBackupPage extends ConsumerStatefulWidget {
}
class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
Timer? _countPoller;
@override
void initState() {
super.initState();
@@ -33,22 +39,40 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
return;
}
if (ref.read(appSettingsServiceProvider).getSetting(AppSettingsEnum.enableBackup)) {
_startCountPolling();
}
ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
}
Future<void> startBackup() async {
final currentUser = ref.read(currentUserProvider);
if (currentUser == null) {
return;
}
void _startCountPolling() {
_countPoller?.cancel();
_countPoller = Timer.periodic(const Duration(seconds: 5), (timer) async {
if (!mounted) {
timer.cancel();
return;
}
await ref.read(backgroundSyncProvider).syncRemote();
await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
await ref.read(driftBackupProvider.notifier).startBackup(currentUser.id);
final currentUser = ref.read(currentUserProvider);
if (currentUser == null) {
timer.cancel();
return;
}
await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
});
}
Future<void> stopBackup() async {
await ref.read(driftBackupProvider.notifier).cancel();
void _stopCountPolling() {
_countPoller?.cancel();
_countPoller = null;
}
@override
void dispose() {
_stopCountPolling();
super.dispose();
}
@override
@@ -58,6 +82,26 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
.where((album) => album.backupSelection == BackupSelection.selected)
.toList();
final backupNotifier = ref.read(driftBackupProvider.notifier);
final backgroundManager = ref.read(backgroundSyncProvider);
Future<void> startBackup() async {
final currentUser = Store.tryGet(StoreKey.currentUser);
if (currentUser == null) {
return;
}
await backgroundManager.syncRemote();
await backupNotifier.getBackupStatus(currentUser.id);
await backupNotifier.startBackup(currentUser.id);
_startCountPolling();
}
Future<void> stopBackup() async {
await backupNotifier.cancel();
_stopCountPolling();
}
return Scaffold(
appBar: AppBar(
elevation: 0,