mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2024-11-16 13:43:17 +00:00
116 lines
2.9 KiB
Dart
116 lines
2.9 KiB
Dart
part of 'services_bloc.dart';
|
|
|
|
sealed class ServicesState extends Equatable {
|
|
ServicesState({final List<ServiceLock> lockedServices = const []})
|
|
: _lockedServices =
|
|
lockedServices.where((final lock) => lock.isLocked).toList();
|
|
final List<ServiceLock> _lockedServices;
|
|
List<Service> get services;
|
|
List<String> get lockedServices => _lockedServices
|
|
.where((final lock) => lock.isLocked)
|
|
.map((final lock) => lock.serviceId)
|
|
.toList();
|
|
|
|
List<Service> get servicesThatCanBeBackedUp => services
|
|
.where(
|
|
(final service) => service.canBeBackedUp,
|
|
)
|
|
.toList();
|
|
|
|
bool isServiceLocked(final String serviceId) =>
|
|
lockedServices.contains(serviceId);
|
|
|
|
Service? getServiceById(final String id) {
|
|
final service = services.firstWhere(
|
|
(final service) => service.id == id,
|
|
orElse: () => Service.empty,
|
|
);
|
|
if (service.id == 'empty') {
|
|
return null;
|
|
}
|
|
return service;
|
|
}
|
|
|
|
ServicesState copyWith({
|
|
final List<Service>? services,
|
|
final List<ServiceLock>? lockedServices,
|
|
});
|
|
}
|
|
|
|
class ServiceLock extends Equatable {
|
|
ServiceLock({
|
|
required this.serviceId,
|
|
required this.lockDuration,
|
|
}) : lockTime = DateTime.now();
|
|
|
|
final String serviceId;
|
|
final Duration lockDuration;
|
|
final DateTime lockTime;
|
|
|
|
bool get isLocked => DateTime.now().isBefore(lockTime.add(lockDuration));
|
|
|
|
@override
|
|
List<Object?> get props => [serviceId, lockDuration, lockTime];
|
|
}
|
|
|
|
class ServicesInitial extends ServicesState {
|
|
@override
|
|
List<Object> get props => [];
|
|
|
|
@override
|
|
List<Service> get services => [];
|
|
|
|
@override
|
|
ServicesState copyWith({
|
|
final List<Service>? services,
|
|
final List<ServiceLock>? lockedServices,
|
|
}) =>
|
|
ServicesInitial();
|
|
}
|
|
|
|
class ServicesLoaded extends ServicesState {
|
|
ServicesLoaded({
|
|
required final List<Service> services,
|
|
required super.lockedServices,
|
|
}) : _servicesHachCode = Object.hashAll([...services]);
|
|
|
|
final int _servicesHachCode;
|
|
|
|
final apiConnectionRepository = getIt<ApiConnectionRepository>();
|
|
|
|
List<Service> get _services =>
|
|
apiConnectionRepository.apiData.services.data ?? [];
|
|
|
|
@override
|
|
List<Service> get services => _services;
|
|
|
|
@override
|
|
List<Object?> get props => [_servicesHachCode, _lockedServices];
|
|
|
|
@override
|
|
ServicesLoaded copyWith({
|
|
final List<Service>? services,
|
|
final List<ServiceLock>? lockedServices,
|
|
}) =>
|
|
ServicesLoaded(
|
|
services: services ?? this.services,
|
|
lockedServices: lockedServices ?? _lockedServices,
|
|
);
|
|
}
|
|
|
|
class ServicesReloading extends ServicesLoaded {
|
|
ServicesReloading({
|
|
required super.services,
|
|
required super.lockedServices,
|
|
});
|
|
|
|
ServicesReloading.fromState(final ServicesLoaded state)
|
|
: super(
|
|
services: state.services,
|
|
lockedServices: state._lockedServices,
|
|
);
|
|
|
|
@override
|
|
List<Object?> get props => [services, lockedServices];
|
|
}
|