diff --git a/lib/logic/api_maps/graphql_maps/schema/schema.graphql b/lib/logic/api_maps/graphql_maps/schema/schema.graphql index d53da52e..643dca4f 100644 --- a/lib/logic/api_maps/graphql_maps/schema/schema.graphql +++ b/lib/logic/api_maps/graphql_maps/schema/schema.graphql @@ -254,6 +254,7 @@ type Service { isMovable: Boolean! isRequired: Boolean! isEnabled: Boolean! + canBeBackedUp: Boolean! status: ServiceStatusEnum! url: String dnsRecords: [DnsRecord!] diff --git a/lib/logic/api_maps/graphql_maps/schema/services.graphql b/lib/logic/api_maps/graphql_maps/schema/services.graphql index 9299ff7b..c27b568c 100644 --- a/lib/logic/api_maps/graphql_maps/schema/services.graphql +++ b/lib/logic/api_maps/graphql_maps/schema/services.graphql @@ -16,6 +16,7 @@ query AllServices { isEnabled isMovable isRequired + canBeBackedUp status storageUsage { title diff --git a/lib/logic/cubit/backups/backups_cubit.dart b/lib/logic/cubit/backups/backups_cubit.dart index 4a1c980b..61dcc576 100644 --- a/lib/logic/cubit/backups/backups_cubit.dart +++ b/lib/logic/cubit/backups/backups_cubit.dart @@ -101,7 +101,8 @@ class BackupsCubit extends ServerInstallationDependendCubit { } await updateBackups(); getIt().showSnackBar( - 'Backups repository is now initializing. It may take a while.'); + 'Backups repository is now initializing. It may take a while.', + ); emit(state.copyWith(preventActions: false)); } diff --git a/lib/logic/cubit/services/services_state.dart b/lib/logic/cubit/services/services_state.dart index 2d99880a..d6247bc1 100644 --- a/lib/logic/cubit/services/services_state.dart +++ b/lib/logic/cubit/services/services_state.dart @@ -12,6 +12,10 @@ class ServicesState extends ServerInstallationDependendState { final List services; final List lockedServices; + List get servicesThatCanBeBackedUp => services.where( + (final service) => service.canBeBackedUp, + ).toList(); + bool isServiceLocked(final String serviceId) => lockedServices.contains(serviceId); diff --git a/lib/logic/models/service.dart b/lib/logic/models/service.dart index 19cd39ea..086d527d 100644 --- a/lib/logic/models/service.dart +++ b/lib/logic/models/service.dart @@ -6,7 +6,7 @@ import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/services.graphql. import 'package:selfprivacy/logic/models/disk_size.dart'; import 'package:selfprivacy/logic/models/json/dns_records.dart'; -import '../api_maps/graphql_maps/schema/server_settings.graphql.dart'; +import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart'; class Service { Service.fromGraphQL(final Query$AllServices$services$allServices service) @@ -17,6 +17,7 @@ class Service { isEnabled: service.isEnabled, isRequired: service.isRequired, isMovable: service.isMovable, + canBeBackedUp: service.canBeBackedUp, status: ServiceStatus.fromGraphQL(service.status), storageUsage: ServiceStorageUsage( used: DiskSize(byte: int.parse(service.storageUsage.usedSpace)), @@ -42,6 +43,7 @@ class Service { required this.isEnabled, required this.isRequired, required this.isMovable, + required this.canBeBackedUp, required this.status, required this.storageUsage, required this.svgIcon, @@ -75,6 +77,7 @@ class Service { isEnabled: false, isRequired: false, isMovable: false, + canBeBackedUp: false, status: ServiceStatus.off, storageUsage: ServiceStorageUsage( used: const DiskSize(byte: 0), @@ -91,6 +94,7 @@ class Service { final bool isEnabled; final bool isRequired; final bool isMovable; + final bool canBeBackedUp; final ServiceStatus status; final ServiceStorageUsage storageUsage; final String svgIcon; diff --git a/lib/ui/pages/backup_details/backup_details.dart b/lib/ui/pages/backup_details/backup_details.dart index 2dac9a0b..b3fa2348 100644 --- a/lib/ui/pages/backup_details/backup_details.dart +++ b/lib/ui/pages/backup_details/backup_details.dart @@ -42,7 +42,7 @@ class _BackupDetailsPageState extends State final List backups = context.watch().state.backups; final bool refreshing = context.watch().state.refreshing; final List services = - context.watch().state.services; + context.watch().state.servicesThatCanBeBackedUp; return BrandHeroScreen( heroIcon: BrandIcons.save, @@ -73,7 +73,7 @@ class _BackupDetailsPageState extends State maxChildSize: 0.9, minChildSize: 0.4, initialChildSize: 0.6, - builder: (context, scrollController) => + builder: (final context, final scrollController) => CreateBackupsModal( services: services, scrollController: scrollController, @@ -202,9 +202,9 @@ class _BackupDetailsPageState extends State class CreateBackupsModal extends StatefulWidget { const CreateBackupsModal({ - super.key, required this.services, required this.scrollController, + super.key, }); final List services; @@ -226,13 +226,17 @@ class _CreateBackupsModalState extends State { .read() .state .backupJobList - .where((final ServerJob job) => - job.status == JobStatusEnum.running || - job.status == JobStatusEnum.created) + .where( + (final ServerJob job) => + job.status == JobStatusEnum.running || + job.status == JobStatusEnum.created, + ) .map((final ServerJob job) => job.typeId.split('.')[1]) .toList(); - selectedServices.addAll(widget.services - .where((final Service service) => !busyServices.contains(service.id))); + selectedServices.addAll( + widget.services + .where((final Service service) => !busyServices.contains(service.id)), + ); } @override @@ -241,9 +245,11 @@ class _CreateBackupsModalState extends State { .watch() .state .backupJobList - .where((final ServerJob job) => - job.status == JobStatusEnum.running || - job.status == JobStatusEnum.created) + .where( + (final ServerJob job) => + job.status == JobStatusEnum.running || + job.status == JobStatusEnum.created, + ) .map((final ServerJob job) => job.typeId.split('.')[1]) .toList(); @@ -253,7 +259,7 @@ class _CreateBackupsModalState extends State { children: [ const SizedBox(height: 16), Text( - 'backup.create_new_select_headline'.tr(), + 'backup.create_new_select_heading'.tr(), style: Theme.of(context).textTheme.headlineSmall, textAlign: TextAlign.center, ), @@ -265,8 +271,11 @@ class _CreateBackupsModalState extends State { if (value ?? true) { setState(() { selectedServices.clear(); - selectedServices.addAll(widget.services.where( - (final service) => !busyServices.contains(service.id))); + selectedServices.addAll( + widget.services.where( + (final service) => !busyServices.contains(service.id), + ), + ); }); } else { selectedServices.clear(); @@ -337,7 +346,7 @@ class _CreateBackupsModalState extends State { Navigator.of(context).pop(); }, child: Text( - 'backup.create'.tr(), + 'backup.start'.tr(), ), ), ],