selfprivacy.org.app/lib/logic/cubit/server_detailed_info/server_detailed_info_cubit....

95 lines
2.7 KiB
Dart
Raw Normal View History

import 'dart:async';
2021-03-26 15:38:39 +02:00
import 'package:selfprivacy/config/get_it_config.dart';
import 'package:selfprivacy/logic/cubit/server_connection_dependent/server_connection_dependent_cubit.dart';
import 'package:selfprivacy/logic/models/auto_upgrade_settings.dart';
import 'package:selfprivacy/logic/models/server_metadata.dart';
import 'package:selfprivacy/logic/models/system_settings.dart';
2022-02-08 23:01:08 +02:00
import 'package:selfprivacy/logic/models/timezone_settings.dart';
import 'package:selfprivacy/logic/providers/providers_controller.dart';
2021-03-26 15:38:39 +02:00
part 'server_detailed_info_state.dart';
2022-09-16 11:06:27 +03:00
class ServerDetailsCubit
extends ServerConnectionDependentCubit<ServerDetailsState> {
ServerDetailsCubit() : super(const ServerDetailsInitial()) {
final apiConnectionRepository = getIt<ApiConnectionRepository>();
_apiDataSubscription = apiConnectionRepository.dataStream.listen(
(final ApiData apiData) {
if (apiData.settings.data != null) {
_handleServerSettings(apiData.settings.data!);
}
},
);
}
2021-03-26 15:38:39 +02:00
StreamSubscription? _apiDataSubscription;
void _handleServerSettings(final SystemSettings settings) {
emit(
Loaded(
metadata: state.metadata,
serverTimezone: TimeZoneSettings.fromString(settings.timezone),
autoUpgradeSettings: settings.autoUpgradeSettings,
),
);
}
Future<List<ServerMetadataEntity>> get _metadata async {
List<ServerMetadataEntity> data = [];
final serverProviderApi = ProvidersController.currentServerProvider;
final dnsProviderApi = ProvidersController.currentDnsProvider;
if (serverProviderApi != null && dnsProviderApi != null) {
final serverId = getIt<ApiConfigModel>().serverDetails?.id ?? 0;
final metadataResult = await serverProviderApi.getMetadata(serverId);
metadataResult.data.add(
ServerMetadataEntity(
trId: 'server.dns_provider',
value: dnsProviderApi.type.displayName,
type: MetadataType.other,
),
);
data = metadataResult.data;
}
return data;
}
2021-03-26 15:38:39 +02:00
void check() async {
2022-06-05 22:36:32 +03:00
final bool isReadyToCheck = getIt<ApiConfigModel>().serverDetails != null;
try {
if (isReadyToCheck) {
emit(const ServerDetailsLoading());
final List<ServerMetadataEntity> metadata = await _metadata;
emit(
state.copyWith(
metadata: metadata,
),
);
} else {
emit(const ServerDetailsNotReady());
}
} on StateError {
print('Tried to emit server info state when cubit is closed');
2021-03-26 15:38:39 +02:00
}
}
2022-09-16 11:06:27 +03:00
@override
void clear() {
emit(const ServerDetailsNotReady());
2022-09-16 11:06:27 +03:00
}
@override
void load() async {
check();
}
@override
Future<void> close() {
_apiDataSubscription?.cancel();
return super.close();
}
2021-03-26 15:38:39 +02:00
}