mirror of
https://github.com/immich-app/immich.git
synced 2025-10-17 03:50:35 -04:00
chore: refresh backup stats when entering backup page (#21977)
* chore: refresh backup stats when entering backup page * check for success status * remove logs * remove sync remote when toggle the button * show status immediately after navigating to screen * pr feedback
This commit is contained in:
parent
dcbc266b83
commit
d36c26bf97
@ -12,6 +12,7 @@ import 'package:immich_mobile/presentation/widgets/backup/backup_toggle_button.w
|
|||||||
import 'package:immich_mobile/providers/background_sync.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/backup_album.provider.dart';
|
||||||
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
|
import 'package:immich_mobile/providers/backup/drift_backup.provider.dart';
|
||||||
|
import 'package:immich_mobile/providers/sync_status.provider.dart';
|
||||||
import 'package:immich_mobile/providers/user.provider.dart';
|
import 'package:immich_mobile/providers/user.provider.dart';
|
||||||
import 'package:immich_mobile/routing/router.dart';
|
import 'package:immich_mobile/routing/router.dart';
|
||||||
import 'package:immich_mobile/widgets/backup/backup_info_card.dart';
|
import 'package:immich_mobile/widgets/backup/backup_info_card.dart';
|
||||||
@ -33,7 +34,14 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
|
WidgetsBinding.instance.addPostFrameCallback((_) async {
|
||||||
|
await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
|
||||||
|
await ref.read(backgroundSyncProvider).syncRemote();
|
||||||
|
|
||||||
|
if (mounted) {
|
||||||
|
await ref.read(driftBackupProvider.notifier).getBackupStatus(currentUser.id);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
@ -44,7 +52,6 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
|
|||||||
.toList();
|
.toList();
|
||||||
|
|
||||||
final backupNotifier = ref.read(driftBackupProvider.notifier);
|
final backupNotifier = ref.read(driftBackupProvider.notifier);
|
||||||
final backgroundManager = ref.read(backgroundSyncProvider);
|
|
||||||
|
|
||||||
Future<void> startBackup() async {
|
Future<void> startBackup() async {
|
||||||
final currentUser = Store.tryGet(StoreKey.currentUser);
|
final currentUser = Store.tryGet(StoreKey.currentUser);
|
||||||
@ -52,7 +59,6 @@ class _DriftBackupPageState extends ConsumerState<DriftBackupPage> {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
await backgroundManager.syncRemote();
|
|
||||||
await backupNotifier.getBackupStatus(currentUser.id);
|
await backupNotifier.getBackupStatus(currentUser.id);
|
||||||
await backupNotifier.startBackup(currentUser.id);
|
await backupNotifier.startBackup(currentUser.id);
|
||||||
}
|
}
|
||||||
@ -235,11 +241,13 @@ class _BackupCard extends ConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final backupCount = ref.watch(driftBackupProvider.select((p) => p.backupCount));
|
final backupCount = ref.watch(driftBackupProvider.select((p) => p.backupCount));
|
||||||
|
final syncStatus = ref.watch(syncStatusProvider);
|
||||||
|
|
||||||
return BackupInfoCard(
|
return BackupInfoCard(
|
||||||
title: "backup_controller_page_backup".tr(),
|
title: "backup_controller_page_backup".tr(),
|
||||||
subtitle: "backup_controller_page_backup_sub".tr(),
|
subtitle: "backup_controller_page_backup_sub".tr(),
|
||||||
info: backupCount.toString(),
|
info: backupCount.toString(),
|
||||||
|
isLoading: syncStatus.isRemoteSyncing,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -250,10 +258,13 @@ class _RemainderCard extends ConsumerWidget {
|
|||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
final remainderCount = ref.watch(driftBackupProvider.select((p) => p.remainderCount));
|
final remainderCount = ref.watch(driftBackupProvider.select((p) => p.remainderCount));
|
||||||
|
final syncStatus = ref.watch(syncStatusProvider);
|
||||||
|
|
||||||
return BackupInfoCard(
|
return BackupInfoCard(
|
||||||
title: "backup_controller_page_remainder".tr(),
|
title: "backup_controller_page_remainder".tr(),
|
||||||
subtitle: "backup_controller_page_remainder_sub".tr(),
|
subtitle: "backup_controller_page_remainder_sub".tr(),
|
||||||
info: remainderCount.toString(),
|
info: remainderCount.toString(),
|
||||||
|
isLoading: syncStatus.isRemoteSyncing,
|
||||||
onTap: () => context.pushRoute(const DriftBackupAssetDetailRoute()),
|
onTap: () => context.pushRoute(const DriftBackupAssetDetailRoute()),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -235,8 +235,10 @@ class DriftBackupNotifier extends StateNotifier<DriftBackupState> {
|
|||||||
switch (update.status) {
|
switch (update.status) {
|
||||||
case TaskStatus.complete:
|
case TaskStatus.complete:
|
||||||
if (update.task.group == kBackupGroup) {
|
if (update.task.group == kBackupGroup) {
|
||||||
|
if (update.responseStatusCode == 201) {
|
||||||
state = state.copyWith(backupCount: state.backupCount + 1, remainderCount: state.remainderCount - 1);
|
state = state.copyWith(backupCount: state.backupCount + 1, remainderCount: state.remainderCount - 1);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Remove the completed task from the upload items
|
// Remove the completed task from the upload items
|
||||||
if (state.uploadItems.containsKey(taskId)) {
|
if (state.uploadItems.containsKey(taskId)) {
|
||||||
|
@ -8,8 +8,17 @@ class BackupInfoCard extends StatelessWidget {
|
|||||||
final String title;
|
final String title;
|
||||||
final String subtitle;
|
final String subtitle;
|
||||||
final String info;
|
final String info;
|
||||||
|
|
||||||
final VoidCallback? onTap;
|
final VoidCallback? onTap;
|
||||||
const BackupInfoCard({super.key, required this.title, required this.subtitle, required this.info, this.onTap});
|
final bool isLoading;
|
||||||
|
const BackupInfoCard({
|
||||||
|
super.key,
|
||||||
|
required this.title,
|
||||||
|
required this.subtitle,
|
||||||
|
required this.info,
|
||||||
|
this.onTap,
|
||||||
|
this.isLoading = false,
|
||||||
|
});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
@ -38,8 +47,36 @@ class BackupInfoCard extends StatelessWidget {
|
|||||||
trailing: Column(
|
trailing: Column(
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
Text(info, style: context.textTheme.titleLarge),
|
Stack(
|
||||||
Text("backup_info_card_assets", style: context.textTheme.labelLarge).tr(),
|
children: [
|
||||||
|
Text(
|
||||||
|
info,
|
||||||
|
style: context.textTheme.titleLarge?.copyWith(
|
||||||
|
color: context.colorScheme.onSurface.withAlpha(isLoading ? 50 : 255),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (isLoading)
|
||||||
|
Positioned.fill(
|
||||||
|
child: Align(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: SizedBox(
|
||||||
|
width: 16,
|
||||||
|
height: 16,
|
||||||
|
child: CircularProgressIndicator(
|
||||||
|
strokeWidth: 2,
|
||||||
|
color: context.colorScheme.onSurface.withAlpha(150),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Text(
|
||||||
|
"backup_info_card_assets",
|
||||||
|
style: context.textTheme.labelLarge?.copyWith(
|
||||||
|
color: context.colorScheme.onSurface.withAlpha(isLoading ? 50 : 255),
|
||||||
|
),
|
||||||
|
).tr(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user