selfprivacy.org.app/lib/logic/cubit/forms/setup/initializing/domain_setup_cubit.dart

69 lines
2.0 KiB
Dart
Raw Normal View History

2021-02-15 20:58:29 +02:00
import 'package:cubit_form/cubit_form.dart';
import 'package:selfprivacy/logic/api_maps/generic_result.dart';
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
import 'package:selfprivacy/logic/models/hive/server_domain.dart';
import 'package:selfprivacy/logic/providers/providers_controller.dart';
2021-02-15 20:58:29 +02:00
class DomainSetupCubit extends Cubit<DomainSetupState> {
DomainSetupCubit(this.serverInstallationCubit) : super(Initial());
2021-02-15 20:58:29 +02:00
final ServerInstallationCubit serverInstallationCubit;
2021-02-15 20:58:29 +02:00
Future<void> load() async {
emit(Loading(LoadingTypes.loadingDomain));
final GenericResult<List<String>> result =
await ProvidersController.currentDnsProvider!.domainList();
if (!result.success || result.data.isEmpty) {
2021-02-15 20:58:29 +02:00
emit(Empty());
} else if (result.data.length == 1) {
emit(Loaded(result.data.first));
2021-02-15 20:58:29 +02:00
} else {
emit(MoreThenOne());
}
}
Future<void> saveDomain() async {
assert(state is Loaded, 'wrong state');
2022-06-05 22:36:32 +03:00
final String domainName = (state as Loaded).domain;
2021-02-15 20:58:29 +02:00
emit(Loading(LoadingTypes.saving));
final dnsProvider = ProvidersController.currentDnsProvider!;
final GenericResult<String?> zoneIdResult =
await dnsProvider.getZoneId(domainName);
2021-02-15 20:58:29 +02:00
if (zoneIdResult.success || zoneIdResult.data != null) {
2022-09-09 12:14:37 +03:00
final ServerDomain domain = ServerDomain(
domainName: domainName,
zoneId: zoneIdResult.data!,
provider: dnsProvider.type,
2022-09-09 12:14:37 +03:00
);
2021-02-15 20:58:29 +02:00
2022-09-09 12:14:37 +03:00
serverInstallationCubit.setDomain(domain);
emit(DomainSet());
}
2021-02-15 20:58:29 +02:00
}
}
abstract class DomainSetupState {}
class Initial extends DomainSetupState {}
class Empty extends DomainSetupState {}
class MoreThenOne extends DomainSetupState {}
class Loading extends DomainSetupState {
Loading(this.type);
final LoadingTypes type;
}
enum LoadingTypes { loadingDomain, saving }
class Loaded extends DomainSetupState {
Loaded(this.domain);
2022-06-05 22:36:32 +03:00
final String domain;
2021-02-15 20:58:29 +02:00
}
2022-02-16 09:28:29 +02:00
class DomainSet extends DomainSetupState {}