import 'package:graphql/client.dart'; import 'package:selfprivacy/config/get_it_config.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/api_map.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/server_api.graphql.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/disk_volumes.graphql.dart'; import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/services.graphql.dart'; import 'package:selfprivacy/logic/models/hive/server_domain.dart'; import 'package:selfprivacy/logic/models/json/api_token.dart'; import 'package:selfprivacy/logic/models/json/server_disk_volume.dart'; import 'package:selfprivacy/logic/models/json/server_job.dart'; class ServerApi extends ApiMap { ServerApi({ this.hasLogger = false, this.isWithToken = true, this.customToken = '', }) { final ServerDomain? serverDomain = getIt().serverDomain; rootAddress = serverDomain?.domainName ?? ''; } @override bool hasLogger; @override bool isWithToken; @override String customToken; @override String? rootAddress; Future _commonBoolRequest(final Function graphQLMethod) async { QueryResult response; bool result = false; try { response = await graphQLMethod(); if (response.hasException) { print(response.exception.toString()); result = false; } else { result = true; } } catch (e) { print(e); } return result; } Future getApiVersion() async { QueryResult response; String? apiVersion; try { final GraphQLClient client = await getClient(); response = await client.query$GetApiVersion(); if (response.hasException) { print(response.exception.toString()); } apiVersion = response.data!['api']['version']; } catch (e) { print(e); } return apiVersion; } Future> getApiTokens() async { QueryResult response; List tokens = []; try { final GraphQLClient client = await getClient(); response = await client.query$GetApiTokens(); if (response.hasException) { print(response.exception.toString()); } tokens = response.data!['api']['devices'] .map((final e) => ApiToken.fromJson(e)) .toList(); } catch (e) { print(e); } return tokens; } Future> getServerDiskVolumes() async { QueryResult response; List volumes = []; try { final GraphQLClient client = await getClient(); response = await client.query$GetServerDiskVolumes(); if (response.hasException) { print(response.exception.toString()); } volumes = response.data!['storage']['volumes'] .map((final e) => ServerDiskVolume.fromJson(e)) .toList(); } catch (e) { print(e); } return volumes; } Future mountVolume(final String volumeName) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$MountVolume(name: volumeName); final mountVolumeMutation = Options$Mutation$MountVolume(variables: variables); await client.mutate$MountVolume(mountVolumeMutation); } catch (e) { print(e); } } Future unmountVolume(final String volumeName) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$UnmountVolume(name: volumeName); final unmountVolumeMutation = Options$Mutation$UnmountVolume(variables: variables); await client.mutate$UnmountVolume(unmountVolumeMutation); } catch (e) { print(e); } } Future resizeVolume(final String volumeName) async { try { final GraphQLClient client = await getClient(); final variables = Variables$Mutation$ResizeVolume(name: volumeName); final resizeVolumeMutation = Options$Mutation$ResizeVolume(variables: variables); await client.mutate$ResizeVolume(resizeVolumeMutation); } catch (e) { print(e); } } Future> getServerJobs() async { QueryResult response; List jobs = []; try { final GraphQLClient client = await getClient(); response = await client.query$GetApiJobs(); if (response.hasException) { print(response.exception.toString()); } jobs = response.data!['jobs'] .map((final e) => ServerJob.fromJson(e)) .toList(); } catch (e) { print(e); } return jobs; } Future removeApiJob(final String uid) async { try { final GraphQLClient client = await getClient(); //await client.query$GetApiJobsQuery(); } catch (e) { print(e); } } Future reboot() async { try { final GraphQLClient client = await getClient(); return await _commonBoolRequest( () async { await client.mutate$RebootSystem(); }, ); } catch (e) { return false; } } Future pullConfigurationUpdate() async { try { final GraphQLClient client = await getClient(); return await _commonBoolRequest( () async { await client.mutate$PullRepositoryChanges(); }, ); } catch (e) { return false; } } Future upgrade() async { try { final GraphQLClient client = await getClient(); return await _commonBoolRequest( () async { await client.mutate$RunSystemUpgrade(); }, ); } catch (e) { return false; } } Future switchService(final String uid, final bool needTurnOn) async { try { final GraphQLClient client = await getClient(); if (needTurnOn) { final variables = Variables$Mutation$EnableService(serviceId: uid); final mutation = Options$Mutation$EnableService(variables: variables); await client.mutate$EnableService(mutation); } else { final variables = Variables$Mutation$DisableService(serviceId: uid); final mutation = Options$Mutation$DisableService(variables: variables); await client.mutate$DisableService(mutation); } } catch (e) { print(e); } } Future apply() async { try { final GraphQLClient client = await getClient(); await client.mutate$RunSystemRebuild(); } catch (e) { print(e); } } }