mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2024-09-29 23:07:51 +00:00
Last changes on storage pages and job backend logic
This commit is contained in:
parent
d2c3d28b0f
commit
7bbdaf2ebe
|
@ -256,6 +256,15 @@
|
||||||
"bottom_sheet": {
|
"bottom_sheet": {
|
||||||
"1": "Openconnect VPN Server. Engine for secure and scalable VPN infrastructure"
|
"1": "Openconnect VPN Server. Engine for secure and scalable VPN infrastructure"
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"page": {
|
||||||
|
"up_and_running": "Up and running",
|
||||||
|
"resource_usage": "Resource usage",
|
||||||
|
"disk_used": "{} of disk space used",
|
||||||
|
"users": "Users",
|
||||||
|
"controlled_by": "Controlled by {}",
|
||||||
|
"apps": "Apps",
|
||||||
|
"settings": "Settings and maintenance"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"users": {
|
"users": {
|
||||||
|
@ -395,8 +404,10 @@
|
||||||
},
|
},
|
||||||
"modals": {
|
"modals": {
|
||||||
"_comment": "messages in modals",
|
"_comment": "messages in modals",
|
||||||
"1": "Server with such name, already exist",
|
"1": "Server with such name, already exist.",
|
||||||
|
"1_1": "Unexpected error during placement from the provider side.",
|
||||||
"2": "Destroy server and create a new one?",
|
"2": "Destroy server and create a new one?",
|
||||||
|
"2_2": "Try again?",
|
||||||
"3": "Are you sure?",
|
"3": "Are you sure?",
|
||||||
"4": "Purge all authentication keys?",
|
"4": "Purge all authentication keys?",
|
||||||
"5": "Yes, purge all my tokens",
|
"5": "Yes, purge all my tokens",
|
||||||
|
|
|
@ -375,8 +375,10 @@
|
||||||
},
|
},
|
||||||
"modals": {
|
"modals": {
|
||||||
"_comment": "messages in modals",
|
"_comment": "messages in modals",
|
||||||
"1": "Сервер с таким именем уже существует",
|
"1": "Сервер с таким именем уже существует.",
|
||||||
|
"1.1": "Непредвиденная ошибка при создании со стороны провайдера.",
|
||||||
"2": "Уничтожить сервер и создать новый?",
|
"2": "Уничтожить сервер и создать новый?",
|
||||||
|
"2.2": "Попробовать ещё раз?",
|
||||||
"3": "Подтвердите",
|
"3": "Подтвердите",
|
||||||
"4": "Сбросить все ключи?",
|
"4": "Сбросить все ключи?",
|
||||||
"5": "Да, сбросить",
|
"5": "Да, сбросить",
|
||||||
|
|
|
@ -10,6 +10,7 @@ import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
|
||||||
|
import 'package:selfprivacy/logic/cubit/volumes/volumes_cubit.dart';
|
||||||
|
|
||||||
class BlocAndProviderConfig extends StatelessWidget {
|
class BlocAndProviderConfig extends StatelessWidget {
|
||||||
const BlocAndProviderConfig({final super.key, this.child});
|
const BlocAndProviderConfig({final super.key, this.child});
|
||||||
|
@ -26,6 +27,7 @@ class BlocAndProviderConfig extends StatelessWidget {
|
||||||
final dnsRecordsCubit = DnsRecordsCubit(serverInstallationCubit);
|
final dnsRecordsCubit = DnsRecordsCubit(serverInstallationCubit);
|
||||||
final recoveryKeyCubit = RecoveryKeyCubit(serverInstallationCubit);
|
final recoveryKeyCubit = RecoveryKeyCubit(serverInstallationCubit);
|
||||||
final apiDevicesCubit = ApiDevicesCubit(serverInstallationCubit);
|
final apiDevicesCubit = ApiDevicesCubit(serverInstallationCubit);
|
||||||
|
final apiVolumesCubit = ApiVolumesCubit(serverInstallationCubit);
|
||||||
return MultiProvider(
|
return MultiProvider(
|
||||||
providers: [
|
providers: [
|
||||||
BlocProvider(
|
BlocProvider(
|
||||||
|
@ -60,6 +62,9 @@ class BlocAndProviderConfig extends StatelessWidget {
|
||||||
BlocProvider(
|
BlocProvider(
|
||||||
create: (final _) => apiDevicesCubit..load(),
|
create: (final _) => apiDevicesCubit..load(),
|
||||||
),
|
),
|
||||||
|
BlocProvider(
|
||||||
|
create: (final _) => apiVolumesCubit..load(),
|
||||||
|
),
|
||||||
BlocProvider(
|
BlocProvider(
|
||||||
create: (final _) =>
|
create: (final _) =>
|
||||||
JobsCubit(usersCubit: usersCubit, servicesCubit: servicesCubit),
|
JobsCubit(usersCubit: usersCubit, servicesCubit: servicesCubit),
|
||||||
|
|
|
@ -7,11 +7,12 @@ abstract class ApiMap {
|
||||||
'https://api.$rootAddress/graphql',
|
'https://api.$rootAddress/graphql',
|
||||||
);
|
);
|
||||||
|
|
||||||
|
final String token = _getApiToken();
|
||||||
|
|
||||||
final Link graphQLLink = isWithToken
|
final Link graphQLLink = isWithToken
|
||||||
? AuthLink(
|
? AuthLink(
|
||||||
getToken: () async => customToken == ''
|
getToken: () async =>
|
||||||
? getIt<ApiConfigModel>().serverDetails!.apiToken
|
customToken == '' ? 'Bearer $token' : customToken,
|
||||||
: customToken,
|
|
||||||
).concat(httpLink)
|
).concat(httpLink)
|
||||||
: httpLink;
|
: httpLink;
|
||||||
|
|
||||||
|
@ -21,6 +22,32 @@ abstract class ApiMap {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<GraphQLClient> getSubscriptionClient() async {
|
||||||
|
final String token = _getApiToken();
|
||||||
|
|
||||||
|
final WebSocketLink webSocketLink = WebSocketLink(
|
||||||
|
'ws://api.$rootAddress/graphql',
|
||||||
|
config: SocketClientConfig(
|
||||||
|
autoReconnect: true,
|
||||||
|
headers: token.isEmpty ? null : {'Authorization': 'Bearer $token'},
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
return GraphQLClient(
|
||||||
|
cache: GraphQLCache(),
|
||||||
|
link: webSocketLink,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
String _getApiToken() {
|
||||||
|
String token = '';
|
||||||
|
final serverDetails = getIt<ApiConfigModel>().serverDetails;
|
||||||
|
if (serverDetails != null) {
|
||||||
|
token = getIt<ApiConfigModel>().serverDetails!.apiToken;
|
||||||
|
}
|
||||||
|
return token;
|
||||||
|
}
|
||||||
|
|
||||||
abstract final String? rootAddress;
|
abstract final String? rootAddress;
|
||||||
abstract final bool hasLogger;
|
abstract final bool hasLogger;
|
||||||
abstract final bool isWithToken;
|
abstract final bool isWithToken;
|
||||||
|
|
|
@ -1,4 +1,10 @@
|
||||||
query GetServerDiskVolumesQuery {
|
fragment basicMutationReturnFields on MutationReturnInterface{
|
||||||
|
code
|
||||||
|
message
|
||||||
|
success
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetServerDiskVolumes {
|
||||||
storage {
|
storage {
|
||||||
volumes {
|
volumes {
|
||||||
freeSpace
|
freeSpace
|
||||||
|
@ -8,31 +14,56 @@ query GetServerDiskVolumesQuery {
|
||||||
serial
|
serial
|
||||||
totalSpace
|
totalSpace
|
||||||
type
|
type
|
||||||
|
usages {
|
||||||
|
title
|
||||||
|
usedSpace
|
||||||
|
__typename
|
||||||
|
... on ServiceStorageUsage {
|
||||||
|
service {
|
||||||
|
id
|
||||||
|
isMovable
|
||||||
|
displayName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
usedSpace
|
usedSpace
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutation MountVolumeMutation($name: String!) {
|
mutation MountVolume($name: String!) {
|
||||||
mountVolume(name: $name) {
|
mountVolume(name: $name) {
|
||||||
code
|
...basicMutationReturnFields
|
||||||
message
|
|
||||||
success
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutation ResizeVolumeMutation($name: String!) {
|
mutation ResizeVolume($name: String!) {
|
||||||
resizeVolume(name: $name) {
|
resizeVolume(name: $name) {
|
||||||
code
|
...basicMutationReturnFields
|
||||||
message
|
|
||||||
success
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mutation UnmountVolumeMutation($name: String!) {
|
mutation UnmountVolume($name: String!) {
|
||||||
unmountVolume(name: $name) {
|
unmountVolume(name: $name) {
|
||||||
code
|
...basicMutationReturnFields
|
||||||
message
|
}
|
||||||
success
|
}
|
||||||
|
|
||||||
|
mutation MigrateToBinds($input: MigrateToBindsInput!) {
|
||||||
|
migrateToBinds(input: $input) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
job {
|
||||||
|
createdAt
|
||||||
|
description
|
||||||
|
error
|
||||||
|
finishedAt
|
||||||
|
name
|
||||||
|
progress
|
||||||
|
result
|
||||||
|
status
|
||||||
|
statusText
|
||||||
|
uid
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -6,57 +6,78 @@ part of 'disk_volumes.graphql.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
Query$GetServerDiskVolumesQuery _$Query$GetServerDiskVolumesQueryFromJson(
|
Fragment$basicMutationReturnFields _$Fragment$basicMutationReturnFieldsFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetServerDiskVolumesQuery(
|
Fragment$basicMutationReturnFields(
|
||||||
storage: Query$GetServerDiskVolumesQuery$storage.fromJson(
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Fragment$basicMutationReturnFieldsToJson(
|
||||||
|
Fragment$basicMutationReturnFields instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetServerDiskVolumes _$Query$GetServerDiskVolumesFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetServerDiskVolumes(
|
||||||
|
storage: Query$GetServerDiskVolumes$storage.fromJson(
|
||||||
json['storage'] as Map<String, dynamic>),
|
json['storage'] as Map<String, dynamic>),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetServerDiskVolumesQueryToJson(
|
Map<String, dynamic> _$Query$GetServerDiskVolumesToJson(
|
||||||
Query$GetServerDiskVolumesQuery instance) =>
|
Query$GetServerDiskVolumes instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'storage': instance.storage.toJson(),
|
'storage': instance.storage.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Query$GetServerDiskVolumesQuery$storage
|
Query$GetServerDiskVolumes$storage _$Query$GetServerDiskVolumes$storageFromJson(
|
||||||
_$Query$GetServerDiskVolumesQuery$storageFromJson(
|
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetServerDiskVolumesQuery$storage(
|
Query$GetServerDiskVolumes$storage(
|
||||||
volumes: (json['volumes'] as List<dynamic>)
|
volumes: (json['volumes'] as List<dynamic>)
|
||||||
.map((e) =>
|
.map((e) => Query$GetServerDiskVolumes$storage$volumes.fromJson(
|
||||||
Query$GetServerDiskVolumesQuery$storage$volumes.fromJson(
|
|
||||||
e as Map<String, dynamic>))
|
e as Map<String, dynamic>))
|
||||||
.toList(),
|
.toList(),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetServerDiskVolumesQuery$storageToJson(
|
Map<String, dynamic> _$Query$GetServerDiskVolumes$storageToJson(
|
||||||
Query$GetServerDiskVolumesQuery$storage instance) =>
|
Query$GetServerDiskVolumes$storage instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'volumes': instance.volumes.map((e) => e.toJson()).toList(),
|
'volumes': instance.volumes.map((e) => e.toJson()).toList(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Query$GetServerDiskVolumesQuery$storage$volumes
|
Query$GetServerDiskVolumes$storage$volumes
|
||||||
_$Query$GetServerDiskVolumesQuery$storage$volumesFromJson(
|
_$Query$GetServerDiskVolumes$storage$volumesFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetServerDiskVolumesQuery$storage$volumes(
|
Query$GetServerDiskVolumes$storage$volumes(
|
||||||
freeSpace: json['freeSpace'] as String,
|
freeSpace: json['freeSpace'] as String,
|
||||||
model: json['model'] as String,
|
model: json['model'] as String?,
|
||||||
name: json['name'] as String,
|
name: json['name'] as String,
|
||||||
root: json['root'] as bool,
|
root: json['root'] as bool,
|
||||||
serial: json['serial'] as String,
|
serial: json['serial'] as String?,
|
||||||
totalSpace: json['totalSpace'] as String,
|
totalSpace: json['totalSpace'] as String,
|
||||||
type: json['type'] as String,
|
type: json['type'] as String,
|
||||||
|
usages: (json['usages'] as List<dynamic>)
|
||||||
|
.map((e) =>
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages.fromJson(
|
||||||
|
e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
usedSpace: json['usedSpace'] as String,
|
usedSpace: json['usedSpace'] as String,
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetServerDiskVolumesQuery$storage$volumesToJson(
|
Map<String, dynamic> _$Query$GetServerDiskVolumes$storage$volumesToJson(
|
||||||
Query$GetServerDiskVolumesQuery$storage$volumes instance) =>
|
Query$GetServerDiskVolumes$storage$volumes instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'freeSpace': instance.freeSpace,
|
'freeSpace': instance.freeSpace,
|
||||||
'model': instance.model,
|
'model': instance.model,
|
||||||
|
@ -65,50 +86,111 @@ Map<String, dynamic> _$Query$GetServerDiskVolumesQuery$storage$volumesToJson(
|
||||||
'serial': instance.serial,
|
'serial': instance.serial,
|
||||||
'totalSpace': instance.totalSpace,
|
'totalSpace': instance.totalSpace,
|
||||||
'type': instance.type,
|
'type': instance.type,
|
||||||
|
'usages': instance.usages.map((e) => e.toJson()).toList(),
|
||||||
'usedSpace': instance.usedSpace,
|
'usedSpace': instance.usedSpace,
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Variables$Mutation$MountVolumeMutation
|
Query$GetServerDiskVolumes$storage$volumes$usages
|
||||||
_$Variables$Mutation$MountVolumeMutationFromJson(
|
_$Query$GetServerDiskVolumes$storage$volumes$usagesFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Variables$Mutation$MountVolumeMutation(
|
Query$GetServerDiskVolumes$storage$volumes$usages(
|
||||||
|
title: json['title'] as String,
|
||||||
|
usedSpace: json['usedSpace'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetServerDiskVolumes$storage$volumes$usagesToJson(
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'title': instance.title,
|
||||||
|
'usedSpace': instance.usedSpace,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage
|
||||||
|
_$Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsageFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage(
|
||||||
|
title: json['title'] as String,
|
||||||
|
usedSpace: json['usedSpace'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
service: json['service'] == null
|
||||||
|
? null
|
||||||
|
: Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage$service
|
||||||
|
.fromJson(json['service'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsageToJson(
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage
|
||||||
|
instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'title': instance.title,
|
||||||
|
'usedSpace': instance.usedSpace,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'service': instance.service?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage$service
|
||||||
|
_$Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage$serviceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage$service(
|
||||||
|
id: json['id'] as String,
|
||||||
|
isMovable: json['isMovable'] as bool,
|
||||||
|
displayName: json['displayName'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage$serviceToJson(
|
||||||
|
Query$GetServerDiskVolumes$storage$volumes$usages$$ServiceStorageUsage$service
|
||||||
|
instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'id': instance.id,
|
||||||
|
'isMovable': instance.isMovable,
|
||||||
|
'displayName': instance.displayName,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$MountVolume _$Variables$Mutation$MountVolumeFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$MountVolume(
|
||||||
name: json['name'] as String,
|
name: json['name'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Variables$Mutation$MountVolumeMutationToJson(
|
Map<String, dynamic> _$Variables$Mutation$MountVolumeToJson(
|
||||||
Variables$Mutation$MountVolumeMutation instance) =>
|
Variables$Mutation$MountVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'name': instance.name,
|
'name': instance.name,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutation$MountVolumeMutation _$Mutation$MountVolumeMutationFromJson(
|
Mutation$MountVolume _$Mutation$MountVolumeFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Mutation$MountVolumeMutation(
|
Mutation$MountVolume(
|
||||||
mountVolume: Mutation$MountVolumeMutation$mountVolume.fromJson(
|
mountVolume: Mutation$MountVolume$mountVolume.fromJson(
|
||||||
json['mountVolume'] as Map<String, dynamic>),
|
json['mountVolume'] as Map<String, dynamic>),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Mutation$MountVolumeMutationToJson(
|
Map<String, dynamic> _$Mutation$MountVolumeToJson(
|
||||||
Mutation$MountVolumeMutation instance) =>
|
Mutation$MountVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'mountVolume': instance.mountVolume.toJson(),
|
'mountVolume': instance.mountVolume.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutation$MountVolumeMutation$mountVolume
|
Mutation$MountVolume$mountVolume _$Mutation$MountVolume$mountVolumeFromJson(
|
||||||
_$Mutation$MountVolumeMutation$mountVolumeFromJson(
|
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Mutation$MountVolumeMutation$mountVolume(
|
Mutation$MountVolume$mountVolume(
|
||||||
code: json['code'] as int,
|
code: json['code'] as int,
|
||||||
message: json['message'] as String,
|
message: json['message'] as String,
|
||||||
success: json['success'] as bool,
|
success: json['success'] as bool,
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Mutation$MountVolumeMutation$mountVolumeToJson(
|
Map<String, dynamic> _$Mutation$MountVolume$mountVolumeToJson(
|
||||||
Mutation$MountVolumeMutation$mountVolume instance) =>
|
Mutation$MountVolume$mountVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'code': instance.code,
|
'code': instance.code,
|
||||||
'message': instance.message,
|
'message': instance.message,
|
||||||
|
@ -116,46 +198,44 @@ Map<String, dynamic> _$Mutation$MountVolumeMutation$mountVolumeToJson(
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Variables$Mutation$ResizeVolumeMutation
|
Variables$Mutation$ResizeVolume _$Variables$Mutation$ResizeVolumeFromJson(
|
||||||
_$Variables$Mutation$ResizeVolumeMutationFromJson(
|
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Variables$Mutation$ResizeVolumeMutation(
|
Variables$Mutation$ResizeVolume(
|
||||||
name: json['name'] as String,
|
name: json['name'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Variables$Mutation$ResizeVolumeMutationToJson(
|
Map<String, dynamic> _$Variables$Mutation$ResizeVolumeToJson(
|
||||||
Variables$Mutation$ResizeVolumeMutation instance) =>
|
Variables$Mutation$ResizeVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'name': instance.name,
|
'name': instance.name,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutation$ResizeVolumeMutation _$Mutation$ResizeVolumeMutationFromJson(
|
Mutation$ResizeVolume _$Mutation$ResizeVolumeFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Mutation$ResizeVolumeMutation(
|
Mutation$ResizeVolume(
|
||||||
resizeVolume: Mutation$ResizeVolumeMutation$resizeVolume.fromJson(
|
resizeVolume: Mutation$ResizeVolume$resizeVolume.fromJson(
|
||||||
json['resizeVolume'] as Map<String, dynamic>),
|
json['resizeVolume'] as Map<String, dynamic>),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Mutation$ResizeVolumeMutationToJson(
|
Map<String, dynamic> _$Mutation$ResizeVolumeToJson(
|
||||||
Mutation$ResizeVolumeMutation instance) =>
|
Mutation$ResizeVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'resizeVolume': instance.resizeVolume.toJson(),
|
'resizeVolume': instance.resizeVolume.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutation$ResizeVolumeMutation$resizeVolume
|
Mutation$ResizeVolume$resizeVolume _$Mutation$ResizeVolume$resizeVolumeFromJson(
|
||||||
_$Mutation$ResizeVolumeMutation$resizeVolumeFromJson(
|
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Mutation$ResizeVolumeMutation$resizeVolume(
|
Mutation$ResizeVolume$resizeVolume(
|
||||||
code: json['code'] as int,
|
code: json['code'] as int,
|
||||||
message: json['message'] as String,
|
message: json['message'] as String,
|
||||||
success: json['success'] as bool,
|
success: json['success'] as bool,
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Mutation$ResizeVolumeMutation$resizeVolumeToJson(
|
Map<String, dynamic> _$Mutation$ResizeVolume$resizeVolumeToJson(
|
||||||
Mutation$ResizeVolumeMutation$resizeVolume instance) =>
|
Mutation$ResizeVolume$resizeVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'code': instance.code,
|
'code': instance.code,
|
||||||
'message': instance.message,
|
'message': instance.message,
|
||||||
|
@ -163,49 +243,134 @@ Map<String, dynamic> _$Mutation$ResizeVolumeMutation$resizeVolumeToJson(
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Variables$Mutation$UnmountVolumeMutation
|
Variables$Mutation$UnmountVolume _$Variables$Mutation$UnmountVolumeFromJson(
|
||||||
_$Variables$Mutation$UnmountVolumeMutationFromJson(
|
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Variables$Mutation$UnmountVolumeMutation(
|
Variables$Mutation$UnmountVolume(
|
||||||
name: json['name'] as String,
|
name: json['name'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Variables$Mutation$UnmountVolumeMutationToJson(
|
Map<String, dynamic> _$Variables$Mutation$UnmountVolumeToJson(
|
||||||
Variables$Mutation$UnmountVolumeMutation instance) =>
|
Variables$Mutation$UnmountVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'name': instance.name,
|
'name': instance.name,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutation$UnmountVolumeMutation _$Mutation$UnmountVolumeMutationFromJson(
|
Mutation$UnmountVolume _$Mutation$UnmountVolumeFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Mutation$UnmountVolumeMutation(
|
Mutation$UnmountVolume(
|
||||||
unmountVolume: Mutation$UnmountVolumeMutation$unmountVolume.fromJson(
|
unmountVolume: Mutation$UnmountVolume$unmountVolume.fromJson(
|
||||||
json['unmountVolume'] as Map<String, dynamic>),
|
json['unmountVolume'] as Map<String, dynamic>),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Mutation$UnmountVolumeMutationToJson(
|
Map<String, dynamic> _$Mutation$UnmountVolumeToJson(
|
||||||
Mutation$UnmountVolumeMutation instance) =>
|
Mutation$UnmountVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'unmountVolume': instance.unmountVolume.toJson(),
|
'unmountVolume': instance.unmountVolume.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Mutation$UnmountVolumeMutation$unmountVolume
|
Mutation$UnmountVolume$unmountVolume
|
||||||
_$Mutation$UnmountVolumeMutation$unmountVolumeFromJson(
|
_$Mutation$UnmountVolume$unmountVolumeFromJson(Map<String, dynamic> json) =>
|
||||||
Map<String, dynamic> json) =>
|
Mutation$UnmountVolume$unmountVolume(
|
||||||
Mutation$UnmountVolumeMutation$unmountVolume(
|
|
||||||
code: json['code'] as int,
|
code: json['code'] as int,
|
||||||
message: json['message'] as String,
|
message: json['message'] as String,
|
||||||
success: json['success'] as bool,
|
success: json['success'] as bool,
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Mutation$UnmountVolumeMutation$unmountVolumeToJson(
|
Map<String, dynamic> _$Mutation$UnmountVolume$unmountVolumeToJson(
|
||||||
Mutation$UnmountVolumeMutation$unmountVolume instance) =>
|
Mutation$UnmountVolume$unmountVolume instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'code': instance.code,
|
'code': instance.code,
|
||||||
'message': instance.message,
|
'message': instance.message,
|
||||||
'success': instance.success,
|
'success': instance.success,
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$MigrateToBinds _$Variables$Mutation$MigrateToBindsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$MigrateToBinds(
|
||||||
|
input: Input$MigrateToBindsInput.fromJson(
|
||||||
|
json['input'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$MigrateToBindsToJson(
|
||||||
|
Variables$Mutation$MigrateToBinds instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'input': instance.input.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$MigrateToBinds _$Mutation$MigrateToBindsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$MigrateToBinds(
|
||||||
|
migrateToBinds: Mutation$MigrateToBinds$migrateToBinds.fromJson(
|
||||||
|
json['migrateToBinds'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$MigrateToBindsToJson(
|
||||||
|
Mutation$MigrateToBinds instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'migrateToBinds': instance.migrateToBinds.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$MigrateToBinds$migrateToBinds
|
||||||
|
_$Mutation$MigrateToBinds$migrateToBindsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$MigrateToBinds$migrateToBinds(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
job: json['job'] == null
|
||||||
|
? null
|
||||||
|
: Mutation$MigrateToBinds$migrateToBinds$job.fromJson(
|
||||||
|
json['job'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$MigrateToBinds$migrateToBindsToJson(
|
||||||
|
Mutation$MigrateToBinds$migrateToBinds instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'job': instance.job?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$MigrateToBinds$migrateToBinds$job
|
||||||
|
_$Mutation$MigrateToBinds$migrateToBinds$jobFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$MigrateToBinds$migrateToBinds$job(
|
||||||
|
createdAt: dateTimeFromJson(json['createdAt']),
|
||||||
|
description: json['description'] as String,
|
||||||
|
error: json['error'] as String?,
|
||||||
|
finishedAt: _nullable$dateTimeFromJson(json['finishedAt']),
|
||||||
|
name: json['name'] as String,
|
||||||
|
progress: json['progress'] as int?,
|
||||||
|
result: json['result'] as String?,
|
||||||
|
status: json['status'] as String,
|
||||||
|
statusText: json['statusText'] as String?,
|
||||||
|
uid: json['uid'] as String,
|
||||||
|
updatedAt: dateTimeFromJson(json['updatedAt']),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$MigrateToBinds$migrateToBinds$jobToJson(
|
||||||
|
Mutation$MigrateToBinds$migrateToBinds$job instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'createdAt': dateTimeToJson(instance.createdAt),
|
||||||
|
'description': instance.description,
|
||||||
|
'error': instance.error,
|
||||||
|
'finishedAt': _nullable$dateTimeToJson(instance.finishedAt),
|
||||||
|
'name': instance.name,
|
||||||
|
'progress': instance.progress,
|
||||||
|
'result': instance.result,
|
||||||
|
'status': instance.status,
|
||||||
|
'statusText': instance.statusText,
|
||||||
|
'uid': instance.uid,
|
||||||
|
'updatedAt': dateTimeToJson(instance.updatedAt),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
|
@ -1,63 +1,76 @@
|
||||||
scalar DateTime
|
|
||||||
|
|
||||||
type Alert {
|
type Alert {
|
||||||
severity: Severity!
|
|
||||||
title: String!
|
|
||||||
message: String!
|
message: String!
|
||||||
|
severity: Severity!
|
||||||
timestamp: DateTime
|
timestamp: DateTime
|
||||||
}
|
title: String!
|
||||||
|
|
||||||
type StorageVolume {
|
|
||||||
freeSpace: String!
|
|
||||||
model: String!
|
|
||||||
name: String!
|
|
||||||
root: Boolean!
|
|
||||||
serial: String!
|
|
||||||
totalSpace: String!
|
|
||||||
type: String!
|
|
||||||
usedSpace: String!
|
|
||||||
}
|
|
||||||
|
|
||||||
type Storage {
|
|
||||||
volumes: [StorageVolume!]!
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Api {
|
type Api {
|
||||||
version: String!
|
|
||||||
devices: [ApiDevice!]!
|
devices: [ApiDevice!]!
|
||||||
recoveryKey: ApiRecoveryKeyStatus!
|
recoveryKey: ApiRecoveryKeyStatus!
|
||||||
|
version: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiDevice {
|
type ApiDevice {
|
||||||
name: String!
|
|
||||||
creationDate: DateTime!
|
creationDate: DateTime!
|
||||||
isCaller: Boolean!
|
isCaller: Boolean!
|
||||||
|
name: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type ApiJob {
|
||||||
|
createdAt: DateTime!
|
||||||
|
description: String!
|
||||||
|
error: String
|
||||||
|
finishedAt: DateTime
|
||||||
|
name: String!
|
||||||
|
progress: Int
|
||||||
|
result: String
|
||||||
|
status: String!
|
||||||
|
statusText: String
|
||||||
|
uid: String!
|
||||||
|
updatedAt: DateTime!
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiKeyMutationReturn implements MutationReturnInterface {
|
type ApiKeyMutationReturn implements MutationReturnInterface {
|
||||||
success: Boolean!
|
|
||||||
message: String!
|
|
||||||
code: Int!
|
code: Int!
|
||||||
key: String
|
key: String
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type ApiRecoveryKeyStatus {
|
type ApiRecoveryKeyStatus {
|
||||||
exists: Boolean!
|
|
||||||
valid: Boolean!
|
|
||||||
creationDate: DateTime
|
creationDate: DateTime
|
||||||
|
exists: Boolean!
|
||||||
expirationDate: DateTime
|
expirationDate: DateTime
|
||||||
usesLeft: Int
|
usesLeft: Int
|
||||||
|
valid: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type AutoUpgradeOptions {
|
type AutoUpgradeOptions {
|
||||||
enable: Boolean!
|
|
||||||
allowReboot: Boolean!
|
allowReboot: Boolean!
|
||||||
|
enable: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type DeviceApiTokenMutationReturn implements MutationReturnInterface {
|
input AutoUpgradeSettingsInput {
|
||||||
success: Boolean!
|
enableAutoUpgrade: Boolean = null
|
||||||
message: String!
|
allowReboot: Boolean = null
|
||||||
|
}
|
||||||
|
|
||||||
|
type AutoUpgradeSettingsMutationReturn implements MutationReturnInterface {
|
||||||
|
allowReboot: Boolean!
|
||||||
code: Int!
|
code: Int!
|
||||||
|
enableAutoUpgrade: Boolean!
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
"""Date with time (isoformat)"""
|
||||||
|
scalar DateTime
|
||||||
|
|
||||||
|
type DeviceApiTokenMutationReturn implements MutationReturnInterface {
|
||||||
|
code: Int!
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
token: String
|
token: String
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,59 +79,163 @@ enum DnsProvider {
|
||||||
}
|
}
|
||||||
|
|
||||||
type DnsRecord {
|
type DnsRecord {
|
||||||
recordType: String!
|
|
||||||
name: String!
|
|
||||||
content: String!
|
content: String!
|
||||||
ttl: Int!
|
name: String!
|
||||||
priority: Int
|
priority: Int
|
||||||
|
recordType: String!
|
||||||
|
ttl: Int!
|
||||||
|
}
|
||||||
|
|
||||||
|
type GenericJobButationReturn implements MutationReturnInterface {
|
||||||
|
code: Int!
|
||||||
|
job: ApiJob
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type GenericMutationReturn implements MutationReturnInterface {
|
type GenericMutationReturn implements MutationReturnInterface {
|
||||||
success: Boolean!
|
|
||||||
message: String!
|
|
||||||
code: Int!
|
code: Int!
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Job {
|
||||||
|
getJob(jobId: String!): ApiJob
|
||||||
|
getJobs: [ApiJob!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
input MigrateToBindsInput {
|
||||||
|
emailBlockDevice: String!
|
||||||
|
bitwardenBlockDevice: String!
|
||||||
|
giteaBlockDevice: String!
|
||||||
|
nextcloudBlockDevice: String!
|
||||||
|
pleromaBlockDevice: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
input MoveServiceInput {
|
||||||
|
serviceId: String!
|
||||||
|
location: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
type Mutation {
|
type Mutation {
|
||||||
getNewRecoveryApiKey(limits: RecoveryKeyLimitsInput!): ApiKeyMutationReturn!
|
addSshKey(sshInput: SshMutationInput!): UserMutationReturn!
|
||||||
useRecoveryApiKey(input: UseRecoveryKeyInput!): DeviceApiTokenMutationReturn!
|
|
||||||
refreshDeviceApiToken: DeviceApiTokenMutationReturn!
|
|
||||||
deleteDeviceApiToken(device: String!): GenericMutationReturn!
|
|
||||||
getNewDeviceApiKey: ApiKeyMutationReturn!
|
|
||||||
invalidateNewDeviceApiKey: GenericMutationReturn!
|
|
||||||
authorizeWithNewDeviceApiKey(input: UseNewDeviceKeyInput!): DeviceApiTokenMutationReturn!
|
authorizeWithNewDeviceApiKey(input: UseNewDeviceKeyInput!): DeviceApiTokenMutationReturn!
|
||||||
resizeVolume(name: String!): GenericMutationReturn!
|
changeAutoUpgradeSettings(settings: AutoUpgradeSettingsInput!): AutoUpgradeSettingsMutationReturn!
|
||||||
unmountVolume(name: String!): GenericMutationReturn!
|
changeTimezone(timezone: String!): TimezoneMutationReturn!
|
||||||
|
createUser(user: UserMutationInput!): UserMutationReturn!
|
||||||
|
deleteDeviceApiToken(device: String!): GenericMutationReturn!
|
||||||
|
deleteUser(username: String!): GenericMutationReturn!
|
||||||
|
disableService(serviceId: String!): ServiceMutationReturn!
|
||||||
|
enableService(serviceId: String!): ServiceMutationReturn!
|
||||||
|
getNewDeviceApiKey: ApiKeyMutationReturn!
|
||||||
|
getNewRecoveryApiKey(limits: RecoveryKeyLimitsInput = null): ApiKeyMutationReturn!
|
||||||
|
invalidateNewDeviceApiKey: GenericMutationReturn!
|
||||||
|
migrateToBinds(input: MigrateToBindsInput!): GenericJobButationReturn!
|
||||||
mountVolume(name: String!): GenericMutationReturn!
|
mountVolume(name: String!): GenericMutationReturn!
|
||||||
|
moveService(input: MoveServiceInput!): ServiceJobMutationReturn!
|
||||||
|
pullRepositoryChanges: GenericMutationReturn!
|
||||||
|
rebootSystem: GenericMutationReturn!
|
||||||
|
refreshDeviceApiToken: DeviceApiTokenMutationReturn!
|
||||||
|
removeJob(jobId: String!): GenericMutationReturn!
|
||||||
|
removeSshKey(sshInput: SshMutationInput!): UserMutationReturn!
|
||||||
|
resizeVolume(name: String!): GenericMutationReturn!
|
||||||
|
restartService(serviceId: String!): ServiceMutationReturn!
|
||||||
|
runSystemRebuild: GenericMutationReturn!
|
||||||
|
runSystemRollback: GenericMutationReturn!
|
||||||
|
runSystemUpgrade: GenericMutationReturn!
|
||||||
|
startService(serviceId: String!): ServiceMutationReturn!
|
||||||
|
stopService(serviceId: String!): ServiceMutationReturn!
|
||||||
|
testMutation: GenericMutationReturn!
|
||||||
|
unmountVolume(name: String!): GenericMutationReturn!
|
||||||
|
updateUser(user: UserMutationInput!): UserMutationReturn!
|
||||||
|
useRecoveryApiKey(input: UseRecoveryKeyInput!): DeviceApiTokenMutationReturn!
|
||||||
}
|
}
|
||||||
|
|
||||||
interface MutationReturnInterface {
|
interface MutationReturnInterface {
|
||||||
success: Boolean!
|
|
||||||
message: String!
|
|
||||||
code: Int!
|
code: Int!
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type Query {
|
type Query {
|
||||||
system: System!
|
|
||||||
storage: Storage!
|
|
||||||
api: Api!
|
api: Api!
|
||||||
|
jobs: Job!
|
||||||
|
services: Services!
|
||||||
|
storage: Storage!
|
||||||
|
system: System!
|
||||||
|
users: Users!
|
||||||
}
|
}
|
||||||
|
|
||||||
input RecoveryKeyLimitsInput {
|
input RecoveryKeyLimitsInput {
|
||||||
expirationDate: DateTime
|
expirationDate: DateTime = null
|
||||||
uses: Int
|
uses: Int = null
|
||||||
}
|
}
|
||||||
|
|
||||||
enum ServerProvider {
|
enum ServerProvider {
|
||||||
HETZNER
|
HETZNER
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Service {
|
||||||
|
description: String!
|
||||||
|
displayName: String!
|
||||||
|
dnsRecords: [DnsRecord!]
|
||||||
|
id: String!
|
||||||
|
isEnabled: Boolean!
|
||||||
|
isMovable: Boolean!
|
||||||
|
isRequired: Boolean!
|
||||||
|
status: ServiceStatusEnum!
|
||||||
|
storageUsage: ServiceStorageUsage!
|
||||||
|
svgIcon: String!
|
||||||
|
url: String
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServiceJobMutationReturn implements MutationReturnInterface {
|
||||||
|
code: Int!
|
||||||
|
job: ApiJob
|
||||||
|
message: String!
|
||||||
|
service: Service
|
||||||
|
success: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServiceMutationReturn implements MutationReturnInterface {
|
||||||
|
code: Int!
|
||||||
|
message: String!
|
||||||
|
service: Service
|
||||||
|
success: Boolean!
|
||||||
|
}
|
||||||
|
|
||||||
|
enum ServiceStatusEnum {
|
||||||
|
ACTIVATING
|
||||||
|
ACTIVE
|
||||||
|
DEACTIVATING
|
||||||
|
FAILED
|
||||||
|
INACTIVE
|
||||||
|
OFF
|
||||||
|
RELOADING
|
||||||
|
}
|
||||||
|
|
||||||
|
type ServiceStorageUsage implements StorageUsageInterface {
|
||||||
|
service: Service
|
||||||
|
title: String!
|
||||||
|
usedSpace: String!
|
||||||
|
volume: StorageVolume
|
||||||
|
}
|
||||||
|
|
||||||
|
type Services {
|
||||||
|
allServices: [Service!]!
|
||||||
|
}
|
||||||
|
|
||||||
enum Severity {
|
enum Severity {
|
||||||
INFO
|
|
||||||
WARNING
|
|
||||||
ERROR
|
|
||||||
CRITICAL
|
CRITICAL
|
||||||
|
ERROR
|
||||||
|
INFO
|
||||||
SUCCESS
|
SUCCESS
|
||||||
|
WARNING
|
||||||
|
}
|
||||||
|
|
||||||
|
input SshMutationInput {
|
||||||
|
username: String!
|
||||||
|
sshKey: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
type SshSettings {
|
type SshSettings {
|
||||||
|
@ -127,13 +244,40 @@ type SshSettings {
|
||||||
rootSshKeys: [String!]!
|
rootSshKeys: [String!]!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Storage {
|
||||||
|
volumes: [StorageVolume!]!
|
||||||
|
}
|
||||||
|
|
||||||
|
interface StorageUsageInterface {
|
||||||
|
title: String!
|
||||||
|
usedSpace: String!
|
||||||
|
volume: StorageVolume
|
||||||
|
}
|
||||||
|
|
||||||
|
type StorageVolume {
|
||||||
|
freeSpace: String!
|
||||||
|
model: String
|
||||||
|
name: String!
|
||||||
|
root: Boolean!
|
||||||
|
serial: String
|
||||||
|
totalSpace: String!
|
||||||
|
type: String!
|
||||||
|
usages: [StorageUsageInterface!]!
|
||||||
|
usedSpace: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type Subscription {
|
||||||
|
count(target: Int! = 100): Int!
|
||||||
|
}
|
||||||
|
|
||||||
type System {
|
type System {
|
||||||
status: Alert!
|
busy: Boolean!
|
||||||
domain: SystemDomainInfo!
|
domainInfo: SystemDomainInfo!
|
||||||
settings: SystemSettings!
|
|
||||||
info: SystemInfo!
|
info: SystemInfo!
|
||||||
provider: SystemProviderInfo!
|
provider: SystemProviderInfo!
|
||||||
busy: Boolean!
|
settings: SystemSettings!
|
||||||
|
status: Alert!
|
||||||
|
workingDirectory: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
type SystemDomainInfo {
|
type SystemDomainInfo {
|
||||||
|
@ -144,13 +288,14 @@ type SystemDomainInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
type SystemInfo {
|
type SystemInfo {
|
||||||
systemVersion: String!
|
|
||||||
pythonVersion: String!
|
pythonVersion: String!
|
||||||
|
systemVersion: String!
|
||||||
|
usingBinds: Boolean!
|
||||||
}
|
}
|
||||||
|
|
||||||
type SystemProviderInfo {
|
type SystemProviderInfo {
|
||||||
provider: ServerProvider!
|
|
||||||
id: String!
|
id: String!
|
||||||
|
provider: ServerProvider!
|
||||||
}
|
}
|
||||||
|
|
||||||
type SystemSettings {
|
type SystemSettings {
|
||||||
|
@ -159,6 +304,13 @@ type SystemSettings {
|
||||||
timezone: String!
|
timezone: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type TimezoneMutationReturn implements MutationReturnInterface {
|
||||||
|
code: Int!
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
|
timezone: String
|
||||||
|
}
|
||||||
|
|
||||||
input UseNewDeviceKeyInput {
|
input UseNewDeviceKeyInput {
|
||||||
key: String!
|
key: String!
|
||||||
deviceName: String!
|
deviceName: String!
|
||||||
|
@ -168,3 +320,32 @@ input UseRecoveryKeyInput {
|
||||||
key: String!
|
key: String!
|
||||||
deviceName: String!
|
deviceName: String!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type User {
|
||||||
|
sshKeys: [String!]!
|
||||||
|
userType: UserType!
|
||||||
|
username: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
input UserMutationInput {
|
||||||
|
username: String!
|
||||||
|
password: String!
|
||||||
|
}
|
||||||
|
|
||||||
|
type UserMutationReturn implements MutationReturnInterface {
|
||||||
|
code: Int!
|
||||||
|
message: String!
|
||||||
|
success: Boolean!
|
||||||
|
user: User
|
||||||
|
}
|
||||||
|
|
||||||
|
enum UserType {
|
||||||
|
NORMAL
|
||||||
|
PRIMARY
|
||||||
|
ROOT
|
||||||
|
}
|
||||||
|
|
||||||
|
type Users {
|
||||||
|
allUsers: [User!]!
|
||||||
|
getUser(username: String!): User
|
||||||
|
}
|
|
@ -2,6 +2,174 @@ import 'package:json_annotation/json_annotation.dart';
|
||||||
import 'package:selfprivacy/utils/scalars.dart';
|
import 'package:selfprivacy/utils/scalars.dart';
|
||||||
part 'schema.graphql.g.dart';
|
part 'schema.graphql.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
class Input$AutoUpgradeSettingsInput {
|
||||||
|
Input$AutoUpgradeSettingsInput({this.enableAutoUpgrade, this.allowReboot});
|
||||||
|
|
||||||
|
@override
|
||||||
|
factory Input$AutoUpgradeSettingsInput.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$Input$AutoUpgradeSettingsInputFromJson(json);
|
||||||
|
|
||||||
|
final bool? enableAutoUpgrade;
|
||||||
|
|
||||||
|
final bool? allowReboot;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$Input$AutoUpgradeSettingsInputToJson(this);
|
||||||
|
int get hashCode {
|
||||||
|
final l$enableAutoUpgrade = enableAutoUpgrade;
|
||||||
|
final l$allowReboot = allowReboot;
|
||||||
|
return Object.hashAll([l$enableAutoUpgrade, l$allowReboot]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (identical(this, other)) return true;
|
||||||
|
if (!(other is Input$AutoUpgradeSettingsInput) ||
|
||||||
|
runtimeType != other.runtimeType) return false;
|
||||||
|
final l$enableAutoUpgrade = enableAutoUpgrade;
|
||||||
|
final lOther$enableAutoUpgrade = other.enableAutoUpgrade;
|
||||||
|
if (l$enableAutoUpgrade != lOther$enableAutoUpgrade) return false;
|
||||||
|
final l$allowReboot = allowReboot;
|
||||||
|
final lOther$allowReboot = other.allowReboot;
|
||||||
|
if (l$allowReboot != lOther$allowReboot) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Input$AutoUpgradeSettingsInput copyWith(
|
||||||
|
{bool? Function()? enableAutoUpgrade,
|
||||||
|
bool? Function()? allowReboot}) =>
|
||||||
|
Input$AutoUpgradeSettingsInput(
|
||||||
|
enableAutoUpgrade: enableAutoUpgrade == null
|
||||||
|
? this.enableAutoUpgrade
|
||||||
|
: enableAutoUpgrade(),
|
||||||
|
allowReboot: allowReboot == null ? this.allowReboot : allowReboot());
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
class Input$MigrateToBindsInput {
|
||||||
|
Input$MigrateToBindsInput(
|
||||||
|
{required this.emailBlockDevice,
|
||||||
|
required this.bitwardenBlockDevice,
|
||||||
|
required this.giteaBlockDevice,
|
||||||
|
required this.nextcloudBlockDevice,
|
||||||
|
required this.pleromaBlockDevice});
|
||||||
|
|
||||||
|
@override
|
||||||
|
factory Input$MigrateToBindsInput.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$Input$MigrateToBindsInputFromJson(json);
|
||||||
|
|
||||||
|
final String emailBlockDevice;
|
||||||
|
|
||||||
|
final String bitwardenBlockDevice;
|
||||||
|
|
||||||
|
final String giteaBlockDevice;
|
||||||
|
|
||||||
|
final String nextcloudBlockDevice;
|
||||||
|
|
||||||
|
final String pleromaBlockDevice;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$Input$MigrateToBindsInputToJson(this);
|
||||||
|
int get hashCode {
|
||||||
|
final l$emailBlockDevice = emailBlockDevice;
|
||||||
|
final l$bitwardenBlockDevice = bitwardenBlockDevice;
|
||||||
|
final l$giteaBlockDevice = giteaBlockDevice;
|
||||||
|
final l$nextcloudBlockDevice = nextcloudBlockDevice;
|
||||||
|
final l$pleromaBlockDevice = pleromaBlockDevice;
|
||||||
|
return Object.hashAll([
|
||||||
|
l$emailBlockDevice,
|
||||||
|
l$bitwardenBlockDevice,
|
||||||
|
l$giteaBlockDevice,
|
||||||
|
l$nextcloudBlockDevice,
|
||||||
|
l$pleromaBlockDevice
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (identical(this, other)) return true;
|
||||||
|
if (!(other is Input$MigrateToBindsInput) ||
|
||||||
|
runtimeType != other.runtimeType) return false;
|
||||||
|
final l$emailBlockDevice = emailBlockDevice;
|
||||||
|
final lOther$emailBlockDevice = other.emailBlockDevice;
|
||||||
|
if (l$emailBlockDevice != lOther$emailBlockDevice) return false;
|
||||||
|
final l$bitwardenBlockDevice = bitwardenBlockDevice;
|
||||||
|
final lOther$bitwardenBlockDevice = other.bitwardenBlockDevice;
|
||||||
|
if (l$bitwardenBlockDevice != lOther$bitwardenBlockDevice) return false;
|
||||||
|
final l$giteaBlockDevice = giteaBlockDevice;
|
||||||
|
final lOther$giteaBlockDevice = other.giteaBlockDevice;
|
||||||
|
if (l$giteaBlockDevice != lOther$giteaBlockDevice) return false;
|
||||||
|
final l$nextcloudBlockDevice = nextcloudBlockDevice;
|
||||||
|
final lOther$nextcloudBlockDevice = other.nextcloudBlockDevice;
|
||||||
|
if (l$nextcloudBlockDevice != lOther$nextcloudBlockDevice) return false;
|
||||||
|
final l$pleromaBlockDevice = pleromaBlockDevice;
|
||||||
|
final lOther$pleromaBlockDevice = other.pleromaBlockDevice;
|
||||||
|
if (l$pleromaBlockDevice != lOther$pleromaBlockDevice) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Input$MigrateToBindsInput copyWith(
|
||||||
|
{String? emailBlockDevice,
|
||||||
|
String? bitwardenBlockDevice,
|
||||||
|
String? giteaBlockDevice,
|
||||||
|
String? nextcloudBlockDevice,
|
||||||
|
String? pleromaBlockDevice}) =>
|
||||||
|
Input$MigrateToBindsInput(
|
||||||
|
emailBlockDevice: emailBlockDevice == null
|
||||||
|
? this.emailBlockDevice
|
||||||
|
: emailBlockDevice,
|
||||||
|
bitwardenBlockDevice: bitwardenBlockDevice == null
|
||||||
|
? this.bitwardenBlockDevice
|
||||||
|
: bitwardenBlockDevice,
|
||||||
|
giteaBlockDevice: giteaBlockDevice == null
|
||||||
|
? this.giteaBlockDevice
|
||||||
|
: giteaBlockDevice,
|
||||||
|
nextcloudBlockDevice: nextcloudBlockDevice == null
|
||||||
|
? this.nextcloudBlockDevice
|
||||||
|
: nextcloudBlockDevice,
|
||||||
|
pleromaBlockDevice: pleromaBlockDevice == null
|
||||||
|
? this.pleromaBlockDevice
|
||||||
|
: pleromaBlockDevice);
|
||||||
|
}
|
||||||
|
|
||||||
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
class Input$MoveServiceInput {
|
||||||
|
Input$MoveServiceInput({required this.serviceId, required this.location});
|
||||||
|
|
||||||
|
@override
|
||||||
|
factory Input$MoveServiceInput.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$Input$MoveServiceInputFromJson(json);
|
||||||
|
|
||||||
|
final String serviceId;
|
||||||
|
|
||||||
|
final String location;
|
||||||
|
|
||||||
|
Map<String, dynamic> toJson() => _$Input$MoveServiceInputToJson(this);
|
||||||
|
int get hashCode {
|
||||||
|
final l$serviceId = serviceId;
|
||||||
|
final l$location = location;
|
||||||
|
return Object.hashAll([l$serviceId, l$location]);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (identical(this, other)) return true;
|
||||||
|
if (!(other is Input$MoveServiceInput) || runtimeType != other.runtimeType)
|
||||||
|
return false;
|
||||||
|
final l$serviceId = serviceId;
|
||||||
|
final lOther$serviceId = other.serviceId;
|
||||||
|
if (l$serviceId != lOther$serviceId) return false;
|
||||||
|
final l$location = location;
|
||||||
|
final lOther$location = other.location;
|
||||||
|
if (l$location != lOther$location) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Input$MoveServiceInput copyWith({String? serviceId, String? location}) =>
|
||||||
|
Input$MoveServiceInput(
|
||||||
|
serviceId: serviceId == null ? this.serviceId : serviceId,
|
||||||
|
location: location == null ? this.location : location);
|
||||||
|
}
|
||||||
|
|
||||||
@JsonSerializable(explicitToJson: true)
|
@JsonSerializable(explicitToJson: true)
|
||||||
class Input$RecoveryKeyLimitsInput {
|
class Input$RecoveryKeyLimitsInput {
|
||||||
Input$RecoveryKeyLimitsInput({this.expirationDate, this.uses});
|
Input$RecoveryKeyLimitsInput({this.expirationDate, this.uses});
|
||||||
|
@ -37,47 +205,51 @@ class Input$RecoveryKeyLimitsInput {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyWith$Input$RecoveryKeyLimitsInput<Input$RecoveryKeyLimitsInput>
|
Input$RecoveryKeyLimitsInput copyWith(
|
||||||
get copyWith => CopyWith$Input$RecoveryKeyLimitsInput(this, (i) => i);
|
{DateTime? Function()? expirationDate, int? Function()? uses}) =>
|
||||||
|
Input$RecoveryKeyLimitsInput(
|
||||||
|
expirationDate:
|
||||||
|
expirationDate == null ? this.expirationDate : expirationDate(),
|
||||||
|
uses: uses == null ? this.uses : uses());
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class CopyWith$Input$RecoveryKeyLimitsInput<TRes> {
|
@JsonSerializable(explicitToJson: true)
|
||||||
factory CopyWith$Input$RecoveryKeyLimitsInput(
|
class Input$SshMutationInput {
|
||||||
Input$RecoveryKeyLimitsInput instance,
|
Input$SshMutationInput({required this.username, required this.sshKey});
|
||||||
TRes Function(Input$RecoveryKeyLimitsInput) then) =
|
|
||||||
_CopyWithImpl$Input$RecoveryKeyLimitsInput;
|
|
||||||
|
|
||||||
factory CopyWith$Input$RecoveryKeyLimitsInput.stub(TRes res) =
|
@override
|
||||||
_CopyWithStubImpl$Input$RecoveryKeyLimitsInput;
|
factory Input$SshMutationInput.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$Input$SshMutationInputFromJson(json);
|
||||||
|
|
||||||
TRes call({DateTime? expirationDate, int? uses});
|
final String username;
|
||||||
}
|
|
||||||
|
|
||||||
class _CopyWithImpl$Input$RecoveryKeyLimitsInput<TRes>
|
final String sshKey;
|
||||||
implements CopyWith$Input$RecoveryKeyLimitsInput<TRes> {
|
|
||||||
_CopyWithImpl$Input$RecoveryKeyLimitsInput(this._instance, this._then);
|
|
||||||
|
|
||||||
final Input$RecoveryKeyLimitsInput _instance;
|
Map<String, dynamic> toJson() => _$Input$SshMutationInputToJson(this);
|
||||||
|
int get hashCode {
|
||||||
|
final l$username = username;
|
||||||
|
final l$sshKey = sshKey;
|
||||||
|
return Object.hashAll([l$username, l$sshKey]);
|
||||||
|
}
|
||||||
|
|
||||||
final TRes Function(Input$RecoveryKeyLimitsInput) _then;
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (identical(this, other)) return true;
|
||||||
|
if (!(other is Input$SshMutationInput) || runtimeType != other.runtimeType)
|
||||||
|
return false;
|
||||||
|
final l$username = username;
|
||||||
|
final lOther$username = other.username;
|
||||||
|
if (l$username != lOther$username) return false;
|
||||||
|
final l$sshKey = sshKey;
|
||||||
|
final lOther$sshKey = other.sshKey;
|
||||||
|
if (l$sshKey != lOther$sshKey) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static const _undefined = {};
|
Input$SshMutationInput copyWith({String? username, String? sshKey}) =>
|
||||||
|
Input$SshMutationInput(
|
||||||
TRes call({Object? expirationDate = _undefined, Object? uses = _undefined}) =>
|
username: username == null ? this.username : username,
|
||||||
_then(Input$RecoveryKeyLimitsInput(
|
sshKey: sshKey == null ? this.sshKey : sshKey);
|
||||||
expirationDate: expirationDate == _undefined
|
|
||||||
? _instance.expirationDate
|
|
||||||
: (expirationDate as DateTime?),
|
|
||||||
uses: uses == _undefined ? _instance.uses : (uses as int?)));
|
|
||||||
}
|
|
||||||
|
|
||||||
class _CopyWithStubImpl$Input$RecoveryKeyLimitsInput<TRes>
|
|
||||||
implements CopyWith$Input$RecoveryKeyLimitsInput<TRes> {
|
|
||||||
_CopyWithStubImpl$Input$RecoveryKeyLimitsInput(this._res);
|
|
||||||
|
|
||||||
TRes _res;
|
|
||||||
|
|
||||||
call({DateTime? expirationDate, int? uses}) => _res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonSerializable(explicitToJson: true)
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@ -113,49 +285,10 @@ class Input$UseNewDeviceKeyInput {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyWith$Input$UseNewDeviceKeyInput<Input$UseNewDeviceKeyInput>
|
Input$UseNewDeviceKeyInput copyWith({String? key, String? deviceName}) =>
|
||||||
get copyWith => CopyWith$Input$UseNewDeviceKeyInput(this, (i) => i);
|
Input$UseNewDeviceKeyInput(
|
||||||
}
|
key: key == null ? this.key : key,
|
||||||
|
deviceName: deviceName == null ? this.deviceName : deviceName);
|
||||||
abstract class CopyWith$Input$UseNewDeviceKeyInput<TRes> {
|
|
||||||
factory CopyWith$Input$UseNewDeviceKeyInput(
|
|
||||||
Input$UseNewDeviceKeyInput instance,
|
|
||||||
TRes Function(Input$UseNewDeviceKeyInput) then) =
|
|
||||||
_CopyWithImpl$Input$UseNewDeviceKeyInput;
|
|
||||||
|
|
||||||
factory CopyWith$Input$UseNewDeviceKeyInput.stub(TRes res) =
|
|
||||||
_CopyWithStubImpl$Input$UseNewDeviceKeyInput;
|
|
||||||
|
|
||||||
TRes call({String? key, String? deviceName});
|
|
||||||
}
|
|
||||||
|
|
||||||
class _CopyWithImpl$Input$UseNewDeviceKeyInput<TRes>
|
|
||||||
implements CopyWith$Input$UseNewDeviceKeyInput<TRes> {
|
|
||||||
_CopyWithImpl$Input$UseNewDeviceKeyInput(this._instance, this._then);
|
|
||||||
|
|
||||||
final Input$UseNewDeviceKeyInput _instance;
|
|
||||||
|
|
||||||
final TRes Function(Input$UseNewDeviceKeyInput) _then;
|
|
||||||
|
|
||||||
static const _undefined = {};
|
|
||||||
|
|
||||||
TRes call({Object? key = _undefined, Object? deviceName = _undefined}) =>
|
|
||||||
_then(Input$UseNewDeviceKeyInput(
|
|
||||||
key: key == _undefined || key == null
|
|
||||||
? _instance.key
|
|
||||||
: (key as String),
|
|
||||||
deviceName: deviceName == _undefined || deviceName == null
|
|
||||||
? _instance.deviceName
|
|
||||||
: (deviceName as String)));
|
|
||||||
}
|
|
||||||
|
|
||||||
class _CopyWithStubImpl$Input$UseNewDeviceKeyInput<TRes>
|
|
||||||
implements CopyWith$Input$UseNewDeviceKeyInput<TRes> {
|
|
||||||
_CopyWithStubImpl$Input$UseNewDeviceKeyInput(this._res);
|
|
||||||
|
|
||||||
TRes _res;
|
|
||||||
|
|
||||||
call({String? key, String? deviceName}) => _res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@JsonSerializable(explicitToJson: true)
|
@JsonSerializable(explicitToJson: true)
|
||||||
|
@ -191,48 +324,49 @@ class Input$UseRecoveryKeyInput {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
CopyWith$Input$UseRecoveryKeyInput<Input$UseRecoveryKeyInput> get copyWith =>
|
Input$UseRecoveryKeyInput copyWith({String? key, String? deviceName}) =>
|
||||||
CopyWith$Input$UseRecoveryKeyInput(this, (i) => i);
|
Input$UseRecoveryKeyInput(
|
||||||
|
key: key == null ? this.key : key,
|
||||||
|
deviceName: deviceName == null ? this.deviceName : deviceName);
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract class CopyWith$Input$UseRecoveryKeyInput<TRes> {
|
@JsonSerializable(explicitToJson: true)
|
||||||
factory CopyWith$Input$UseRecoveryKeyInput(Input$UseRecoveryKeyInput instance,
|
class Input$UserMutationInput {
|
||||||
TRes Function(Input$UseRecoveryKeyInput) then) =
|
Input$UserMutationInput({required this.username, required this.password});
|
||||||
_CopyWithImpl$Input$UseRecoveryKeyInput;
|
|
||||||
|
|
||||||
factory CopyWith$Input$UseRecoveryKeyInput.stub(TRes res) =
|
@override
|
||||||
_CopyWithStubImpl$Input$UseRecoveryKeyInput;
|
factory Input$UserMutationInput.fromJson(Map<String, dynamic> json) =>
|
||||||
|
_$Input$UserMutationInputFromJson(json);
|
||||||
|
|
||||||
TRes call({String? key, String? deviceName});
|
final String username;
|
||||||
}
|
|
||||||
|
|
||||||
class _CopyWithImpl$Input$UseRecoveryKeyInput<TRes>
|
final String password;
|
||||||
implements CopyWith$Input$UseRecoveryKeyInput<TRes> {
|
|
||||||
_CopyWithImpl$Input$UseRecoveryKeyInput(this._instance, this._then);
|
|
||||||
|
|
||||||
final Input$UseRecoveryKeyInput _instance;
|
Map<String, dynamic> toJson() => _$Input$UserMutationInputToJson(this);
|
||||||
|
int get hashCode {
|
||||||
|
final l$username = username;
|
||||||
|
final l$password = password;
|
||||||
|
return Object.hashAll([l$username, l$password]);
|
||||||
|
}
|
||||||
|
|
||||||
final TRes Function(Input$UseRecoveryKeyInput) _then;
|
@override
|
||||||
|
bool operator ==(Object other) {
|
||||||
|
if (identical(this, other)) return true;
|
||||||
|
if (!(other is Input$UserMutationInput) || runtimeType != other.runtimeType)
|
||||||
|
return false;
|
||||||
|
final l$username = username;
|
||||||
|
final lOther$username = other.username;
|
||||||
|
if (l$username != lOther$username) return false;
|
||||||
|
final l$password = password;
|
||||||
|
final lOther$password = other.password;
|
||||||
|
if (l$password != lOther$password) return false;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
static const _undefined = {};
|
Input$UserMutationInput copyWith({String? username, String? password}) =>
|
||||||
|
Input$UserMutationInput(
|
||||||
TRes call({Object? key = _undefined, Object? deviceName = _undefined}) =>
|
username: username == null ? this.username : username,
|
||||||
_then(Input$UseRecoveryKeyInput(
|
password: password == null ? this.password : password);
|
||||||
key: key == _undefined || key == null
|
|
||||||
? _instance.key
|
|
||||||
: (key as String),
|
|
||||||
deviceName: deviceName == _undefined || deviceName == null
|
|
||||||
? _instance.deviceName
|
|
||||||
: (deviceName as String)));
|
|
||||||
}
|
|
||||||
|
|
||||||
class _CopyWithStubImpl$Input$UseRecoveryKeyInput<TRes>
|
|
||||||
implements CopyWith$Input$UseRecoveryKeyInput<TRes> {
|
|
||||||
_CopyWithStubImpl$Input$UseRecoveryKeyInput(this._res);
|
|
||||||
|
|
||||||
TRes _res;
|
|
||||||
|
|
||||||
call({String? key, String? deviceName}) => _res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Enum$DnsProvider {
|
enum Enum$DnsProvider {
|
||||||
|
@ -247,26 +381,61 @@ enum Enum$ServerProvider {
|
||||||
$unknown
|
$unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum Enum$ServiceStatusEnum {
|
||||||
|
@JsonValue('ACTIVATING')
|
||||||
|
ACTIVATING,
|
||||||
|
@JsonValue('ACTIVE')
|
||||||
|
ACTIVE,
|
||||||
|
@JsonValue('DEACTIVATING')
|
||||||
|
DEACTIVATING,
|
||||||
|
@JsonValue('FAILED')
|
||||||
|
FAILED,
|
||||||
|
@JsonValue('INACTIVE')
|
||||||
|
INACTIVE,
|
||||||
|
@JsonValue('OFF')
|
||||||
|
OFF,
|
||||||
|
@JsonValue('RELOADING')
|
||||||
|
RELOADING,
|
||||||
|
$unknown
|
||||||
|
}
|
||||||
|
|
||||||
enum Enum$Severity {
|
enum Enum$Severity {
|
||||||
@JsonValue('INFO')
|
|
||||||
INFO,
|
|
||||||
@JsonValue('WARNING')
|
|
||||||
WARNING,
|
|
||||||
@JsonValue('ERROR')
|
|
||||||
ERROR,
|
|
||||||
@JsonValue('CRITICAL')
|
@JsonValue('CRITICAL')
|
||||||
CRITICAL,
|
CRITICAL,
|
||||||
|
@JsonValue('ERROR')
|
||||||
|
ERROR,
|
||||||
|
@JsonValue('INFO')
|
||||||
|
INFO,
|
||||||
@JsonValue('SUCCESS')
|
@JsonValue('SUCCESS')
|
||||||
SUCCESS,
|
SUCCESS,
|
||||||
|
@JsonValue('WARNING')
|
||||||
|
WARNING,
|
||||||
|
$unknown
|
||||||
|
}
|
||||||
|
|
||||||
|
enum Enum$UserType {
|
||||||
|
@JsonValue('NORMAL')
|
||||||
|
NORMAL,
|
||||||
|
@JsonValue('PRIMARY')
|
||||||
|
PRIMARY,
|
||||||
|
@JsonValue('ROOT')
|
||||||
|
ROOT,
|
||||||
$unknown
|
$unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
const possibleTypesMap = {
|
const possibleTypesMap = {
|
||||||
'MutationReturnInterface': {
|
'MutationReturnInterface': {
|
||||||
'ApiKeyMutationReturn',
|
'ApiKeyMutationReturn',
|
||||||
|
'AutoUpgradeSettingsMutationReturn',
|
||||||
'DeviceApiTokenMutationReturn',
|
'DeviceApiTokenMutationReturn',
|
||||||
'GenericMutationReturn'
|
'GenericJobButationReturn',
|
||||||
}
|
'GenericMutationReturn',
|
||||||
|
'ServiceJobMutationReturn',
|
||||||
|
'ServiceMutationReturn',
|
||||||
|
'TimezoneMutationReturn',
|
||||||
|
'UserMutationReturn'
|
||||||
|
},
|
||||||
|
'StorageUsageInterface': {'ServiceStorageUsage'}
|
||||||
};
|
};
|
||||||
DateTime? _nullable$dateTimeFromJson(dynamic data) =>
|
DateTime? _nullable$dateTimeFromJson(dynamic data) =>
|
||||||
data == null ? null : dateTimeFromJson(data);
|
data == null ? null : dateTimeFromJson(data);
|
||||||
|
|
|
@ -6,6 +6,54 @@ part of 'schema.graphql.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
|
Input$AutoUpgradeSettingsInput _$Input$AutoUpgradeSettingsInputFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Input$AutoUpgradeSettingsInput(
|
||||||
|
enableAutoUpgrade: json['enableAutoUpgrade'] as bool?,
|
||||||
|
allowReboot: json['allowReboot'] as bool?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Input$AutoUpgradeSettingsInputToJson(
|
||||||
|
Input$AutoUpgradeSettingsInput instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'enableAutoUpgrade': instance.enableAutoUpgrade,
|
||||||
|
'allowReboot': instance.allowReboot,
|
||||||
|
};
|
||||||
|
|
||||||
|
Input$MigrateToBindsInput _$Input$MigrateToBindsInputFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Input$MigrateToBindsInput(
|
||||||
|
emailBlockDevice: json['emailBlockDevice'] as String,
|
||||||
|
bitwardenBlockDevice: json['bitwardenBlockDevice'] as String,
|
||||||
|
giteaBlockDevice: json['giteaBlockDevice'] as String,
|
||||||
|
nextcloudBlockDevice: json['nextcloudBlockDevice'] as String,
|
||||||
|
pleromaBlockDevice: json['pleromaBlockDevice'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Input$MigrateToBindsInputToJson(
|
||||||
|
Input$MigrateToBindsInput instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'emailBlockDevice': instance.emailBlockDevice,
|
||||||
|
'bitwardenBlockDevice': instance.bitwardenBlockDevice,
|
||||||
|
'giteaBlockDevice': instance.giteaBlockDevice,
|
||||||
|
'nextcloudBlockDevice': instance.nextcloudBlockDevice,
|
||||||
|
'pleromaBlockDevice': instance.pleromaBlockDevice,
|
||||||
|
};
|
||||||
|
|
||||||
|
Input$MoveServiceInput _$Input$MoveServiceInputFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Input$MoveServiceInput(
|
||||||
|
serviceId: json['serviceId'] as String,
|
||||||
|
location: json['location'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Input$MoveServiceInputToJson(
|
||||||
|
Input$MoveServiceInput instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'serviceId': instance.serviceId,
|
||||||
|
'location': instance.location,
|
||||||
|
};
|
||||||
|
|
||||||
Input$RecoveryKeyLimitsInput _$Input$RecoveryKeyLimitsInputFromJson(
|
Input$RecoveryKeyLimitsInput _$Input$RecoveryKeyLimitsInputFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Input$RecoveryKeyLimitsInput(
|
Input$RecoveryKeyLimitsInput(
|
||||||
|
@ -20,6 +68,20 @@ Map<String, dynamic> _$Input$RecoveryKeyLimitsInputToJson(
|
||||||
'uses': instance.uses,
|
'uses': instance.uses,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Input$SshMutationInput _$Input$SshMutationInputFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Input$SshMutationInput(
|
||||||
|
username: json['username'] as String,
|
||||||
|
sshKey: json['sshKey'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Input$SshMutationInputToJson(
|
||||||
|
Input$SshMutationInput instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'username': instance.username,
|
||||||
|
'sshKey': instance.sshKey,
|
||||||
|
};
|
||||||
|
|
||||||
Input$UseNewDeviceKeyInput _$Input$UseNewDeviceKeyInputFromJson(
|
Input$UseNewDeviceKeyInput _$Input$UseNewDeviceKeyInputFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Input$UseNewDeviceKeyInput(
|
Input$UseNewDeviceKeyInput(
|
||||||
|
@ -47,3 +109,17 @@ Map<String, dynamic> _$Input$UseRecoveryKeyInputToJson(
|
||||||
'key': instance.key,
|
'key': instance.key,
|
||||||
'deviceName': instance.deviceName,
|
'deviceName': instance.deviceName,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Input$UserMutationInput _$Input$UserMutationInputFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Input$UserMutationInput(
|
||||||
|
username: json['username'] as String,
|
||||||
|
password: json['password'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Input$UserMutationInputToJson(
|
||||||
|
Input$UserMutationInput instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'username': instance.username,
|
||||||
|
'password': instance.password,
|
||||||
|
};
|
||||||
|
|
|
@ -3,9 +3,11 @@ 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/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/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/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/hive/server_domain.dart';
|
||||||
import 'package:selfprivacy/logic/models/json/api_token.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_disk_volume.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/json/server_job.dart';
|
||||||
|
|
||||||
class ServerApi extends ApiMap {
|
class ServerApi extends ApiMap {
|
||||||
ServerApi({
|
ServerApi({
|
||||||
|
@ -25,13 +27,35 @@ class ServerApi extends ApiMap {
|
||||||
@override
|
@override
|
||||||
String? rootAddress;
|
String? rootAddress;
|
||||||
|
|
||||||
|
Future<bool> _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<String?> getApiVersion() async {
|
Future<String?> getApiVersion() async {
|
||||||
QueryResult response;
|
QueryResult response;
|
||||||
String? apiVersion;
|
String? apiVersion;
|
||||||
|
|
||||||
final GraphQLClient client = await getClient();
|
|
||||||
try {
|
try {
|
||||||
response = await client.query$GetApiVersionQuery();
|
final GraphQLClient client = await getClient();
|
||||||
|
response = await client.query$GetApiVersion();
|
||||||
|
if (response.hasException) {
|
||||||
|
print(response.exception.toString());
|
||||||
|
}
|
||||||
apiVersion = response.data!['api']['version'];
|
apiVersion = response.data!['api']['version'];
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
|
@ -45,7 +69,10 @@ class ServerApi extends ApiMap {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final GraphQLClient client = await getClient();
|
final GraphQLClient client = await getClient();
|
||||||
response = await client.query$GetApiTokensQuery();
|
response = await client.query$GetApiTokens();
|
||||||
|
if (response.hasException) {
|
||||||
|
print(response.exception.toString());
|
||||||
|
}
|
||||||
tokens = response.data!['api']['devices']
|
tokens = response.data!['api']['devices']
|
||||||
.map<ApiToken>((final e) => ApiToken.fromJson(e))
|
.map<ApiToken>((final e) => ApiToken.fromJson(e))
|
||||||
.toList();
|
.toList();
|
||||||
|
@ -62,7 +89,10 @@ class ServerApi extends ApiMap {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
final GraphQLClient client = await getClient();
|
final GraphQLClient client = await getClient();
|
||||||
response = await client.query$GetServerDiskVolumesQuery();
|
response = await client.query$GetServerDiskVolumes();
|
||||||
|
if (response.hasException) {
|
||||||
|
print(response.exception.toString());
|
||||||
|
}
|
||||||
volumes = response.data!['storage']['volumes']
|
volumes = response.data!['storage']['volumes']
|
||||||
.map<ServerDiskVolume>((final e) => ServerDiskVolume.fromJson(e))
|
.map<ServerDiskVolume>((final e) => ServerDiskVolume.fromJson(e))
|
||||||
.toList();
|
.toList();
|
||||||
|
@ -76,11 +106,10 @@ class ServerApi extends ApiMap {
|
||||||
Future<void> mountVolume(final String volumeName) async {
|
Future<void> mountVolume(final String volumeName) async {
|
||||||
try {
|
try {
|
||||||
final GraphQLClient client = await getClient();
|
final GraphQLClient client = await getClient();
|
||||||
final variables =
|
final variables = Variables$Mutation$MountVolume(name: volumeName);
|
||||||
Variables$Mutation$MountVolumeMutation(name: volumeName);
|
|
||||||
final mountVolumeMutation =
|
final mountVolumeMutation =
|
||||||
Options$Mutation$MountVolumeMutation(variables: variables);
|
Options$Mutation$MountVolume(variables: variables);
|
||||||
await client.mutate$MountVolumeMutation(mountVolumeMutation);
|
await client.mutate$MountVolume(mountVolumeMutation);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
}
|
}
|
||||||
|
@ -89,11 +118,10 @@ class ServerApi extends ApiMap {
|
||||||
Future<void> unmountVolume(final String volumeName) async {
|
Future<void> unmountVolume(final String volumeName) async {
|
||||||
try {
|
try {
|
||||||
final GraphQLClient client = await getClient();
|
final GraphQLClient client = await getClient();
|
||||||
final variables =
|
final variables = Variables$Mutation$UnmountVolume(name: volumeName);
|
||||||
Variables$Mutation$UnmountVolumeMutation(name: volumeName);
|
|
||||||
final unmountVolumeMutation =
|
final unmountVolumeMutation =
|
||||||
Options$Mutation$UnmountVolumeMutation(variables: variables);
|
Options$Mutation$UnmountVolume(variables: variables);
|
||||||
await client.mutate$UnmountVolumeMutation(unmountVolumeMutation);
|
await client.mutate$UnmountVolume(unmountVolumeMutation);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
}
|
}
|
||||||
|
@ -102,11 +130,104 @@ class ServerApi extends ApiMap {
|
||||||
Future<void> resizeVolume(final String volumeName) async {
|
Future<void> resizeVolume(final String volumeName) async {
|
||||||
try {
|
try {
|
||||||
final GraphQLClient client = await getClient();
|
final GraphQLClient client = await getClient();
|
||||||
final variables =
|
final variables = Variables$Mutation$ResizeVolume(name: volumeName);
|
||||||
Variables$Mutation$ResizeVolumeMutation(name: volumeName);
|
|
||||||
final resizeVolumeMutation =
|
final resizeVolumeMutation =
|
||||||
Options$Mutation$ResizeVolumeMutation(variables: variables);
|
Options$Mutation$ResizeVolume(variables: variables);
|
||||||
await client.mutate$ResizeVolumeMutation(resizeVolumeMutation);
|
await client.mutate$ResizeVolume(resizeVolumeMutation);
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<ServerJob>> getServerJobs() async {
|
||||||
|
QueryResult response;
|
||||||
|
List<ServerJob> jobs = [];
|
||||||
|
|
||||||
|
try {
|
||||||
|
final GraphQLClient client = await getClient();
|
||||||
|
response = await client.query$GetApiJobs();
|
||||||
|
if (response.hasException) {
|
||||||
|
print(response.exception.toString());
|
||||||
|
}
|
||||||
|
jobs = response.data!['jobs']
|
||||||
|
.map<ServerJob>((final e) => ServerJob.fromJson(e))
|
||||||
|
.toList();
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
return jobs;
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> removeApiJob(final String uid) async {
|
||||||
|
try {
|
||||||
|
final GraphQLClient client = await getClient();
|
||||||
|
//await client.query$GetApiJobsQuery();
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> reboot() async {
|
||||||
|
try {
|
||||||
|
final GraphQLClient client = await getClient();
|
||||||
|
return await _commonBoolRequest(
|
||||||
|
() async {
|
||||||
|
await client.mutate$RebootSystem();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> pullConfigurationUpdate() async {
|
||||||
|
try {
|
||||||
|
final GraphQLClient client = await getClient();
|
||||||
|
return await _commonBoolRequest(
|
||||||
|
() async {
|
||||||
|
await client.mutate$PullRepositoryChanges();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<bool> upgrade() async {
|
||||||
|
try {
|
||||||
|
final GraphQLClient client = await getClient();
|
||||||
|
return await _commonBoolRequest(
|
||||||
|
() async {
|
||||||
|
await client.mutate$RunSystemUpgrade();
|
||||||
|
},
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> 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<void> apply() async {
|
||||||
|
try {
|
||||||
|
final GraphQLClient client = await getClient();
|
||||||
|
await client.mutate$RunSystemRebuild();
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,70 @@
|
||||||
query GetApiTokensQuery {
|
fragment basicMutationReturnFields on MutationReturnInterface{
|
||||||
|
code
|
||||||
|
message
|
||||||
|
success
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetApiVersion {
|
||||||
|
api {
|
||||||
|
version
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetApiJobs {
|
||||||
|
jobs {
|
||||||
|
getJobs {
|
||||||
|
createdAt
|
||||||
|
description
|
||||||
|
error
|
||||||
|
finishedAt
|
||||||
|
name
|
||||||
|
progress
|
||||||
|
result
|
||||||
|
status
|
||||||
|
statusText
|
||||||
|
uid
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RemoveJob($jobId: String!) {
|
||||||
|
removeJob(jobId: $jobId) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RunSystemRebuild {
|
||||||
|
runSystemRebuild {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RunSystemRollback {
|
||||||
|
runSystemRollback {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RunSystemUpgrade {
|
||||||
|
runSystemUpgrade {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation PullRepositoryChanges {
|
||||||
|
pullRepositoryChanges {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RebootSystem {
|
||||||
|
rebootSystem {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetApiTokens {
|
||||||
api {
|
api {
|
||||||
devices {
|
devices {
|
||||||
creationDate
|
creationDate
|
||||||
|
@ -8,8 +74,61 @@ query GetApiTokensQuery {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
query GetApiVersionQuery {
|
query RecoveryKey {
|
||||||
api {
|
api {
|
||||||
version
|
recoveryKey {
|
||||||
|
creationDate
|
||||||
|
exists
|
||||||
|
expirationDate
|
||||||
|
usesLeft
|
||||||
|
valid
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation GetNewRecoveryApiKey($limits: RecoveryKeyLimitsInput) {
|
||||||
|
getNewRecoveryApiKey(limits: $limits) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation UseRecoveryApiKey($input: UseRecoveryKeyInput!) {
|
||||||
|
useRecoveryApiKey(input: $input) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RefreshDeviceApiToken {
|
||||||
|
refreshDeviceApiToken {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
token
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation DeleteDeviceApiToken($device: String!) {
|
||||||
|
deleteDeviceApiToken(device: $device) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation GetNewDeviceApiKey {
|
||||||
|
getNewDeviceApiKey {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
key
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation InvalidateNewDeviceApiKey {
|
||||||
|
invalidateNewDeviceApiKey {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation AuthorizeWithNewDeviceApiKey($input: UseNewDeviceKeyInput!) {
|
||||||
|
authorizeWithNewDeviceApiKey(input: $input) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
token
|
||||||
}
|
}
|
||||||
}
|
}
|
File diff suppressed because it is too large
Load diff
|
@ -6,49 +6,370 @@ part of 'server_api.graphql.dart';
|
||||||
// JsonSerializableGenerator
|
// JsonSerializableGenerator
|
||||||
// **************************************************************************
|
// **************************************************************************
|
||||||
|
|
||||||
Query$GetApiTokensQuery _$Query$GetApiTokensQueryFromJson(
|
Fragment$basicMutationReturnFields _$Fragment$basicMutationReturnFieldsFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetApiTokensQuery(
|
Fragment$basicMutationReturnFields(
|
||||||
api: Query$GetApiTokensQuery$api.fromJson(
|
code: json['code'] as int,
|
||||||
json['api'] as Map<String, dynamic>),
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetApiTokensQueryToJson(
|
Map<String, dynamic> _$Fragment$basicMutationReturnFieldsToJson(
|
||||||
Query$GetApiTokensQuery instance) =>
|
Fragment$basicMutationReturnFields instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetApiVersion _$Query$GetApiVersionFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$GetApiVersion(
|
||||||
|
api:
|
||||||
|
Query$GetApiVersion$api.fromJson(json['api'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetApiVersionToJson(
|
||||||
|
Query$GetApiVersion instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'api': instance.api.toJson(),
|
'api': instance.api.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Query$GetApiTokensQuery$api _$Query$GetApiTokensQuery$apiFromJson(
|
Query$GetApiVersion$api _$Query$GetApiVersion$apiFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetApiTokensQuery$api(
|
Query$GetApiVersion$api(
|
||||||
|
version: json['version'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetApiVersion$apiToJson(
|
||||||
|
Query$GetApiVersion$api instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'version': instance.version,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetApiJobs _$Query$GetApiJobsFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$GetApiJobs(
|
||||||
|
jobs:
|
||||||
|
Query$GetApiJobs$jobs.fromJson(json['jobs'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetApiJobsToJson(Query$GetApiJobs instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'jobs': instance.jobs.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetApiJobs$jobs _$Query$GetApiJobs$jobsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetApiJobs$jobs(
|
||||||
|
getJobs: (json['getJobs'] as List<dynamic>)
|
||||||
|
.map((e) =>
|
||||||
|
Query$GetApiJobs$jobs$getJobs.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetApiJobs$jobsToJson(
|
||||||
|
Query$GetApiJobs$jobs instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'getJobs': instance.getJobs.map((e) => e.toJson()).toList(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetApiJobs$jobs$getJobs _$Query$GetApiJobs$jobs$getJobsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetApiJobs$jobs$getJobs(
|
||||||
|
createdAt: dateTimeFromJson(json['createdAt']),
|
||||||
|
description: json['description'] as String,
|
||||||
|
error: json['error'] as String?,
|
||||||
|
finishedAt: _nullable$dateTimeFromJson(json['finishedAt']),
|
||||||
|
name: json['name'] as String,
|
||||||
|
progress: json['progress'] as int?,
|
||||||
|
result: json['result'] as String?,
|
||||||
|
status: json['status'] as String,
|
||||||
|
statusText: json['statusText'] as String?,
|
||||||
|
uid: json['uid'] as String,
|
||||||
|
updatedAt: dateTimeFromJson(json['updatedAt']),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetApiJobs$jobs$getJobsToJson(
|
||||||
|
Query$GetApiJobs$jobs$getJobs instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'createdAt': dateTimeToJson(instance.createdAt),
|
||||||
|
'description': instance.description,
|
||||||
|
'error': instance.error,
|
||||||
|
'finishedAt': _nullable$dateTimeToJson(instance.finishedAt),
|
||||||
|
'name': instance.name,
|
||||||
|
'progress': instance.progress,
|
||||||
|
'result': instance.result,
|
||||||
|
'status': instance.status,
|
||||||
|
'statusText': instance.statusText,
|
||||||
|
'uid': instance.uid,
|
||||||
|
'updatedAt': dateTimeToJson(instance.updatedAt),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$RemoveJob _$Variables$Mutation$RemoveJobFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$RemoveJob(
|
||||||
|
jobId: json['jobId'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$RemoveJobToJson(
|
||||||
|
Variables$Mutation$RemoveJob instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'jobId': instance.jobId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RemoveJob _$Mutation$RemoveJobFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$RemoveJob(
|
||||||
|
removeJob: Mutation$RemoveJob$removeJob.fromJson(
|
||||||
|
json['removeJob'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RemoveJobToJson(Mutation$RemoveJob instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'removeJob': instance.removeJob.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RemoveJob$removeJob _$Mutation$RemoveJob$removeJobFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RemoveJob$removeJob(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RemoveJob$removeJobToJson(
|
||||||
|
Mutation$RemoveJob$removeJob instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RunSystemRebuild _$Mutation$RunSystemRebuildFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RunSystemRebuild(
|
||||||
|
runSystemRebuild: Mutation$RunSystemRebuild$runSystemRebuild.fromJson(
|
||||||
|
json['runSystemRebuild'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RunSystemRebuildToJson(
|
||||||
|
Mutation$RunSystemRebuild instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'runSystemRebuild': instance.runSystemRebuild.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RunSystemRebuild$runSystemRebuild
|
||||||
|
_$Mutation$RunSystemRebuild$runSystemRebuildFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RunSystemRebuild$runSystemRebuild(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RunSystemRebuild$runSystemRebuildToJson(
|
||||||
|
Mutation$RunSystemRebuild$runSystemRebuild instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RunSystemRollback _$Mutation$RunSystemRollbackFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RunSystemRollback(
|
||||||
|
runSystemRollback: Mutation$RunSystemRollback$runSystemRollback.fromJson(
|
||||||
|
json['runSystemRollback'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RunSystemRollbackToJson(
|
||||||
|
Mutation$RunSystemRollback instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'runSystemRollback': instance.runSystemRollback.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RunSystemRollback$runSystemRollback
|
||||||
|
_$Mutation$RunSystemRollback$runSystemRollbackFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RunSystemRollback$runSystemRollback(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RunSystemRollback$runSystemRollbackToJson(
|
||||||
|
Mutation$RunSystemRollback$runSystemRollback instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RunSystemUpgrade _$Mutation$RunSystemUpgradeFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RunSystemUpgrade(
|
||||||
|
runSystemUpgrade: Mutation$RunSystemUpgrade$runSystemUpgrade.fromJson(
|
||||||
|
json['runSystemUpgrade'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RunSystemUpgradeToJson(
|
||||||
|
Mutation$RunSystemUpgrade instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'runSystemUpgrade': instance.runSystemUpgrade.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RunSystemUpgrade$runSystemUpgrade
|
||||||
|
_$Mutation$RunSystemUpgrade$runSystemUpgradeFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RunSystemUpgrade$runSystemUpgrade(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RunSystemUpgrade$runSystemUpgradeToJson(
|
||||||
|
Mutation$RunSystemUpgrade$runSystemUpgrade instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$PullRepositoryChanges _$Mutation$PullRepositoryChangesFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$PullRepositoryChanges(
|
||||||
|
pullRepositoryChanges:
|
||||||
|
Mutation$PullRepositoryChanges$pullRepositoryChanges.fromJson(
|
||||||
|
json['pullRepositoryChanges'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$PullRepositoryChangesToJson(
|
||||||
|
Mutation$PullRepositoryChanges instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'pullRepositoryChanges': instance.pullRepositoryChanges.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$PullRepositoryChanges$pullRepositoryChanges
|
||||||
|
_$Mutation$PullRepositoryChanges$pullRepositoryChangesFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$PullRepositoryChanges$pullRepositoryChanges(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Mutation$PullRepositoryChanges$pullRepositoryChangesToJson(
|
||||||
|
Mutation$PullRepositoryChanges$pullRepositoryChanges instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RebootSystem _$Mutation$RebootSystemFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RebootSystem(
|
||||||
|
rebootSystem: Mutation$RebootSystem$rebootSystem.fromJson(
|
||||||
|
json['rebootSystem'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RebootSystemToJson(
|
||||||
|
Mutation$RebootSystem instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'rebootSystem': instance.rebootSystem.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RebootSystem$rebootSystem _$Mutation$RebootSystem$rebootSystemFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RebootSystem$rebootSystem(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RebootSystem$rebootSystemToJson(
|
||||||
|
Mutation$RebootSystem$rebootSystem instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetApiTokens _$Query$GetApiTokensFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$GetApiTokens(
|
||||||
|
api: Query$GetApiTokens$api.fromJson(json['api'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetApiTokensToJson(Query$GetApiTokens instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'api': instance.api.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetApiTokens$api _$Query$GetApiTokens$apiFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetApiTokens$api(
|
||||||
devices: (json['devices'] as List<dynamic>)
|
devices: (json['devices'] as List<dynamic>)
|
||||||
.map((e) => Query$GetApiTokensQuery$api$devices.fromJson(
|
.map((e) => Query$GetApiTokens$api$devices.fromJson(
|
||||||
e as Map<String, dynamic>))
|
e as Map<String, dynamic>))
|
||||||
.toList(),
|
.toList(),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetApiTokensQuery$apiToJson(
|
Map<String, dynamic> _$Query$GetApiTokens$apiToJson(
|
||||||
Query$GetApiTokensQuery$api instance) =>
|
Query$GetApiTokens$api instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'devices': instance.devices.map((e) => e.toJson()).toList(),
|
'devices': instance.devices.map((e) => e.toJson()).toList(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Query$GetApiTokensQuery$api$devices
|
Query$GetApiTokens$api$devices _$Query$GetApiTokens$api$devicesFromJson(
|
||||||
_$Query$GetApiTokensQuery$api$devicesFromJson(Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetApiTokensQuery$api$devices(
|
Query$GetApiTokens$api$devices(
|
||||||
creationDate: dateTimeFromJson(json['creationDate']),
|
creationDate: dateTimeFromJson(json['creationDate']),
|
||||||
isCaller: json['isCaller'] as bool,
|
isCaller: json['isCaller'] as bool,
|
||||||
name: json['name'] as String,
|
name: json['name'] as String,
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetApiTokensQuery$api$devicesToJson(
|
Map<String, dynamic> _$Query$GetApiTokens$api$devicesToJson(
|
||||||
Query$GetApiTokensQuery$api$devices instance) =>
|
Query$GetApiTokens$api$devices instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'creationDate': dateTimeToJson(instance.creationDate),
|
'creationDate': dateTimeToJson(instance.creationDate),
|
||||||
'isCaller': instance.isCaller,
|
'isCaller': instance.isCaller,
|
||||||
|
@ -56,31 +377,369 @@ Map<String, dynamic> _$Query$GetApiTokensQuery$api$devicesToJson(
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Query$GetApiVersionQuery _$Query$GetApiVersionQueryFromJson(
|
Query$RecoveryKey _$Query$RecoveryKeyFromJson(Map<String, dynamic> json) =>
|
||||||
Map<String, dynamic> json) =>
|
Query$RecoveryKey(
|
||||||
Query$GetApiVersionQuery(
|
api: Query$RecoveryKey$api.fromJson(json['api'] as Map<String, dynamic>),
|
||||||
api: Query$GetApiVersionQuery$api.fromJson(
|
|
||||||
json['api'] as Map<String, dynamic>),
|
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetApiVersionQueryToJson(
|
Map<String, dynamic> _$Query$RecoveryKeyToJson(Query$RecoveryKey instance) =>
|
||||||
Query$GetApiVersionQuery instance) =>
|
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'api': instance.api.toJson(),
|
'api': instance.api.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
Query$GetApiVersionQuery$api _$Query$GetApiVersionQuery$apiFromJson(
|
Query$RecoveryKey$api _$Query$RecoveryKey$apiFromJson(
|
||||||
Map<String, dynamic> json) =>
|
Map<String, dynamic> json) =>
|
||||||
Query$GetApiVersionQuery$api(
|
Query$RecoveryKey$api(
|
||||||
version: json['version'] as String,
|
recoveryKey: Query$RecoveryKey$api$recoveryKey.fromJson(
|
||||||
|
json['recoveryKey'] as Map<String, dynamic>),
|
||||||
$__typename: json['__typename'] as String,
|
$__typename: json['__typename'] as String,
|
||||||
);
|
);
|
||||||
|
|
||||||
Map<String, dynamic> _$Query$GetApiVersionQuery$apiToJson(
|
Map<String, dynamic> _$Query$RecoveryKey$apiToJson(
|
||||||
Query$GetApiVersionQuery$api instance) =>
|
Query$RecoveryKey$api instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'version': instance.version,
|
'recoveryKey': instance.recoveryKey.toJson(),
|
||||||
'__typename': instance.$__typename,
|
'__typename': instance.$__typename,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Query$RecoveryKey$api$recoveryKey _$Query$RecoveryKey$api$recoveryKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$RecoveryKey$api$recoveryKey(
|
||||||
|
creationDate: _nullable$dateTimeFromJson(json['creationDate']),
|
||||||
|
exists: json['exists'] as bool,
|
||||||
|
expirationDate: _nullable$dateTimeFromJson(json['expirationDate']),
|
||||||
|
usesLeft: json['usesLeft'] as int?,
|
||||||
|
valid: json['valid'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$RecoveryKey$api$recoveryKeyToJson(
|
||||||
|
Query$RecoveryKey$api$recoveryKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'creationDate': _nullable$dateTimeToJson(instance.creationDate),
|
||||||
|
'exists': instance.exists,
|
||||||
|
'expirationDate': _nullable$dateTimeToJson(instance.expirationDate),
|
||||||
|
'usesLeft': instance.usesLeft,
|
||||||
|
'valid': instance.valid,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$GetNewRecoveryApiKey
|
||||||
|
_$Variables$Mutation$GetNewRecoveryApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$GetNewRecoveryApiKey(
|
||||||
|
limits: json['limits'] == null
|
||||||
|
? null
|
||||||
|
: Input$RecoveryKeyLimitsInput.fromJson(
|
||||||
|
json['limits'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$GetNewRecoveryApiKeyToJson(
|
||||||
|
Variables$Mutation$GetNewRecoveryApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'limits': instance.limits?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$GetNewRecoveryApiKey _$Mutation$GetNewRecoveryApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$GetNewRecoveryApiKey(
|
||||||
|
getNewRecoveryApiKey:
|
||||||
|
Mutation$GetNewRecoveryApiKey$getNewRecoveryApiKey.fromJson(
|
||||||
|
json['getNewRecoveryApiKey'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$GetNewRecoveryApiKeyToJson(
|
||||||
|
Mutation$GetNewRecoveryApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'getNewRecoveryApiKey': instance.getNewRecoveryApiKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$GetNewRecoveryApiKey$getNewRecoveryApiKey
|
||||||
|
_$Mutation$GetNewRecoveryApiKey$getNewRecoveryApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$GetNewRecoveryApiKey$getNewRecoveryApiKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
key: json['key'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$GetNewRecoveryApiKey$getNewRecoveryApiKeyToJson(
|
||||||
|
Mutation$GetNewRecoveryApiKey$getNewRecoveryApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'key': instance.key,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$UseRecoveryApiKey
|
||||||
|
_$Variables$Mutation$UseRecoveryApiKeyFromJson(Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$UseRecoveryApiKey(
|
||||||
|
input: Input$UseRecoveryKeyInput.fromJson(
|
||||||
|
json['input'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$UseRecoveryApiKeyToJson(
|
||||||
|
Variables$Mutation$UseRecoveryApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'input': instance.input.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$UseRecoveryApiKey _$Mutation$UseRecoveryApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$UseRecoveryApiKey(
|
||||||
|
useRecoveryApiKey: Mutation$UseRecoveryApiKey$useRecoveryApiKey.fromJson(
|
||||||
|
json['useRecoveryApiKey'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$UseRecoveryApiKeyToJson(
|
||||||
|
Mutation$UseRecoveryApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'useRecoveryApiKey': instance.useRecoveryApiKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$UseRecoveryApiKey$useRecoveryApiKey
|
||||||
|
_$Mutation$UseRecoveryApiKey$useRecoveryApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$UseRecoveryApiKey$useRecoveryApiKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
token: json['token'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$UseRecoveryApiKey$useRecoveryApiKeyToJson(
|
||||||
|
Mutation$UseRecoveryApiKey$useRecoveryApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'token': instance.token,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RefreshDeviceApiToken _$Mutation$RefreshDeviceApiTokenFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RefreshDeviceApiToken(
|
||||||
|
refreshDeviceApiToken:
|
||||||
|
Mutation$RefreshDeviceApiToken$refreshDeviceApiToken.fromJson(
|
||||||
|
json['refreshDeviceApiToken'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RefreshDeviceApiTokenToJson(
|
||||||
|
Mutation$RefreshDeviceApiToken instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'refreshDeviceApiToken': instance.refreshDeviceApiToken.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RefreshDeviceApiToken$refreshDeviceApiToken
|
||||||
|
_$Mutation$RefreshDeviceApiToken$refreshDeviceApiTokenFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RefreshDeviceApiToken$refreshDeviceApiToken(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
token: json['token'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Mutation$RefreshDeviceApiToken$refreshDeviceApiTokenToJson(
|
||||||
|
Mutation$RefreshDeviceApiToken$refreshDeviceApiToken instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'token': instance.token,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$DeleteDeviceApiToken
|
||||||
|
_$Variables$Mutation$DeleteDeviceApiTokenFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$DeleteDeviceApiToken(
|
||||||
|
device: json['device'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$DeleteDeviceApiTokenToJson(
|
||||||
|
Variables$Mutation$DeleteDeviceApiToken instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'device': instance.device,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$DeleteDeviceApiToken _$Mutation$DeleteDeviceApiTokenFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$DeleteDeviceApiToken(
|
||||||
|
deleteDeviceApiToken:
|
||||||
|
Mutation$DeleteDeviceApiToken$deleteDeviceApiToken.fromJson(
|
||||||
|
json['deleteDeviceApiToken'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$DeleteDeviceApiTokenToJson(
|
||||||
|
Mutation$DeleteDeviceApiToken instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'deleteDeviceApiToken': instance.deleteDeviceApiToken.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$DeleteDeviceApiToken$deleteDeviceApiToken
|
||||||
|
_$Mutation$DeleteDeviceApiToken$deleteDeviceApiTokenFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$DeleteDeviceApiToken$deleteDeviceApiToken(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$DeleteDeviceApiToken$deleteDeviceApiTokenToJson(
|
||||||
|
Mutation$DeleteDeviceApiToken$deleteDeviceApiToken instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$GetNewDeviceApiKey _$Mutation$GetNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$GetNewDeviceApiKey(
|
||||||
|
getNewDeviceApiKey:
|
||||||
|
Mutation$GetNewDeviceApiKey$getNewDeviceApiKey.fromJson(
|
||||||
|
json['getNewDeviceApiKey'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$GetNewDeviceApiKeyToJson(
|
||||||
|
Mutation$GetNewDeviceApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'getNewDeviceApiKey': instance.getNewDeviceApiKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$GetNewDeviceApiKey$getNewDeviceApiKey
|
||||||
|
_$Mutation$GetNewDeviceApiKey$getNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$GetNewDeviceApiKey$getNewDeviceApiKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
key: json['key'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$GetNewDeviceApiKey$getNewDeviceApiKeyToJson(
|
||||||
|
Mutation$GetNewDeviceApiKey$getNewDeviceApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'key': instance.key,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$InvalidateNewDeviceApiKey _$Mutation$InvalidateNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$InvalidateNewDeviceApiKey(
|
||||||
|
invalidateNewDeviceApiKey:
|
||||||
|
Mutation$InvalidateNewDeviceApiKey$invalidateNewDeviceApiKey.fromJson(
|
||||||
|
json['invalidateNewDeviceApiKey'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$InvalidateNewDeviceApiKeyToJson(
|
||||||
|
Mutation$InvalidateNewDeviceApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'invalidateNewDeviceApiKey': instance.invalidateNewDeviceApiKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$InvalidateNewDeviceApiKey$invalidateNewDeviceApiKey
|
||||||
|
_$Mutation$InvalidateNewDeviceApiKey$invalidateNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$InvalidateNewDeviceApiKey$invalidateNewDeviceApiKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Mutation$InvalidateNewDeviceApiKey$invalidateNewDeviceApiKeyToJson(
|
||||||
|
Mutation$InvalidateNewDeviceApiKey$invalidateNewDeviceApiKey
|
||||||
|
instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$AuthorizeWithNewDeviceApiKey
|
||||||
|
_$Variables$Mutation$AuthorizeWithNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$AuthorizeWithNewDeviceApiKey(
|
||||||
|
input: Input$UseNewDeviceKeyInput.fromJson(
|
||||||
|
json['input'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$AuthorizeWithNewDeviceApiKeyToJson(
|
||||||
|
Variables$Mutation$AuthorizeWithNewDeviceApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'input': instance.input.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey
|
||||||
|
_$Mutation$AuthorizeWithNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey(
|
||||||
|
authorizeWithNewDeviceApiKey:
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey$authorizeWithNewDeviceApiKey
|
||||||
|
.fromJson(json['authorizeWithNewDeviceApiKey']
|
||||||
|
as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$AuthorizeWithNewDeviceApiKeyToJson(
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'authorizeWithNewDeviceApiKey':
|
||||||
|
instance.authorizeWithNewDeviceApiKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey$authorizeWithNewDeviceApiKey
|
||||||
|
_$Mutation$AuthorizeWithNewDeviceApiKey$authorizeWithNewDeviceApiKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey$authorizeWithNewDeviceApiKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
token: json['token'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Mutation$AuthorizeWithNewDeviceApiKey$authorizeWithNewDeviceApiKeyToJson(
|
||||||
|
Mutation$AuthorizeWithNewDeviceApiKey$authorizeWithNewDeviceApiKey
|
||||||
|
instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'token': instance.token,
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
fragment basicMutationReturnFields on MutationReturnInterface{
|
||||||
|
code
|
||||||
|
message
|
||||||
|
success
|
||||||
|
}
|
||||||
|
|
||||||
|
query SystemSettings {
|
||||||
|
system {
|
||||||
|
settings {
|
||||||
|
autoUpgrade {
|
||||||
|
allowReboot
|
||||||
|
enable
|
||||||
|
}
|
||||||
|
ssh {
|
||||||
|
enable
|
||||||
|
passwordAuthentication
|
||||||
|
rootSshKeys
|
||||||
|
}
|
||||||
|
timezone
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query DomainInfo {
|
||||||
|
system {
|
||||||
|
domainInfo {
|
||||||
|
domain
|
||||||
|
hostname
|
||||||
|
provider
|
||||||
|
requiredDnsRecords {
|
||||||
|
content
|
||||||
|
name
|
||||||
|
priority
|
||||||
|
recordType
|
||||||
|
ttl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation ChangeTimezone($timezone: String!) {
|
||||||
|
changeTimezone(timezone: $timezone) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
timezone
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation ChangeAutoUpgradeSettings($settings: AutoUpgradeSettingsInput!) {
|
||||||
|
changeAutoUpgradeSettings(settings: $settings) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
allowReboot
|
||||||
|
enableAutoUpgrade
|
||||||
|
}
|
||||||
|
}
|
1707
lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart
Normal file
1707
lib/logic/api_maps/graphql_maps/schema/server_settings.graphql.dart
Normal file
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,300 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'server_settings.graphql.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
Fragment$basicMutationReturnFields _$Fragment$basicMutationReturnFieldsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Fragment$basicMutationReturnFields(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Fragment$basicMutationReturnFieldsToJson(
|
||||||
|
Fragment$basicMutationReturnFields instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$SystemSettings _$Query$SystemSettingsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$SystemSettings(
|
||||||
|
system: Query$SystemSettings$system.fromJson(
|
||||||
|
json['system'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$SystemSettingsToJson(
|
||||||
|
Query$SystemSettings instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'system': instance.system.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$SystemSettings$system _$Query$SystemSettings$systemFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$SystemSettings$system(
|
||||||
|
settings: Query$SystemSettings$system$settings.fromJson(
|
||||||
|
json['settings'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$SystemSettings$systemToJson(
|
||||||
|
Query$SystemSettings$system instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'settings': instance.settings.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$SystemSettings$system$settings
|
||||||
|
_$Query$SystemSettings$system$settingsFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$SystemSettings$system$settings(
|
||||||
|
autoUpgrade:
|
||||||
|
Query$SystemSettings$system$settings$autoUpgrade.fromJson(
|
||||||
|
json['autoUpgrade'] as Map<String, dynamic>),
|
||||||
|
ssh: Query$SystemSettings$system$settings$ssh.fromJson(
|
||||||
|
json['ssh'] as Map<String, dynamic>),
|
||||||
|
timezone: json['timezone'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$SystemSettings$system$settingsToJson(
|
||||||
|
Query$SystemSettings$system$settings instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'autoUpgrade': instance.autoUpgrade.toJson(),
|
||||||
|
'ssh': instance.ssh.toJson(),
|
||||||
|
'timezone': instance.timezone,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$SystemSettings$system$settings$autoUpgrade
|
||||||
|
_$Query$SystemSettings$system$settings$autoUpgradeFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$SystemSettings$system$settings$autoUpgrade(
|
||||||
|
allowReboot: json['allowReboot'] as bool,
|
||||||
|
enable: json['enable'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$SystemSettings$system$settings$autoUpgradeToJson(
|
||||||
|
Query$SystemSettings$system$settings$autoUpgrade instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'allowReboot': instance.allowReboot,
|
||||||
|
'enable': instance.enable,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$SystemSettings$system$settings$ssh
|
||||||
|
_$Query$SystemSettings$system$settings$sshFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$SystemSettings$system$settings$ssh(
|
||||||
|
enable: json['enable'] as bool,
|
||||||
|
passwordAuthentication: json['passwordAuthentication'] as bool,
|
||||||
|
rootSshKeys: (json['rootSshKeys'] as List<dynamic>)
|
||||||
|
.map((e) => e as String)
|
||||||
|
.toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$SystemSettings$system$settings$sshToJson(
|
||||||
|
Query$SystemSettings$system$settings$ssh instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'enable': instance.enable,
|
||||||
|
'passwordAuthentication': instance.passwordAuthentication,
|
||||||
|
'rootSshKeys': instance.rootSshKeys,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$DomainInfo _$Query$DomainInfoFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$DomainInfo(
|
||||||
|
system: Query$DomainInfo$system.fromJson(
|
||||||
|
json['system'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$DomainInfoToJson(Query$DomainInfo instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'system': instance.system.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$DomainInfo$system _$Query$DomainInfo$systemFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$DomainInfo$system(
|
||||||
|
domainInfo: Query$DomainInfo$system$domainInfo.fromJson(
|
||||||
|
json['domainInfo'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$DomainInfo$systemToJson(
|
||||||
|
Query$DomainInfo$system instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'domainInfo': instance.domainInfo.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$DomainInfo$system$domainInfo _$Query$DomainInfo$system$domainInfoFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$DomainInfo$system$domainInfo(
|
||||||
|
domain: json['domain'] as String,
|
||||||
|
hostname: json['hostname'] as String,
|
||||||
|
provider: $enumDecode(_$Enum$DnsProviderEnumMap, json['provider'],
|
||||||
|
unknownValue: Enum$DnsProvider.$unknown),
|
||||||
|
requiredDnsRecords: (json['requiredDnsRecords'] as List<dynamic>)
|
||||||
|
.map((e) =>
|
||||||
|
Query$DomainInfo$system$domainInfo$requiredDnsRecords.fromJson(
|
||||||
|
e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$DomainInfo$system$domainInfoToJson(
|
||||||
|
Query$DomainInfo$system$domainInfo instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'domain': instance.domain,
|
||||||
|
'hostname': instance.hostname,
|
||||||
|
'provider': _$Enum$DnsProviderEnumMap[instance.provider],
|
||||||
|
'requiredDnsRecords':
|
||||||
|
instance.requiredDnsRecords.map((e) => e.toJson()).toList(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
const _$Enum$DnsProviderEnumMap = {
|
||||||
|
Enum$DnsProvider.CLOUDFLARE: 'CLOUDFLARE',
|
||||||
|
Enum$DnsProvider.$unknown: r'$unknown',
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$DomainInfo$system$domainInfo$requiredDnsRecords
|
||||||
|
_$Query$DomainInfo$system$domainInfo$requiredDnsRecordsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$DomainInfo$system$domainInfo$requiredDnsRecords(
|
||||||
|
content: json['content'] as String,
|
||||||
|
name: json['name'] as String,
|
||||||
|
priority: json['priority'] as int?,
|
||||||
|
recordType: json['recordType'] as String,
|
||||||
|
ttl: json['ttl'] as int,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Query$DomainInfo$system$domainInfo$requiredDnsRecordsToJson(
|
||||||
|
Query$DomainInfo$system$domainInfo$requiredDnsRecords instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'content': instance.content,
|
||||||
|
'name': instance.name,
|
||||||
|
'priority': instance.priority,
|
||||||
|
'recordType': instance.recordType,
|
||||||
|
'ttl': instance.ttl,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$ChangeTimezone _$Variables$Mutation$ChangeTimezoneFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$ChangeTimezone(
|
||||||
|
timezone: json['timezone'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$ChangeTimezoneToJson(
|
||||||
|
Variables$Mutation$ChangeTimezone instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'timezone': instance.timezone,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$ChangeTimezone _$Mutation$ChangeTimezoneFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$ChangeTimezone(
|
||||||
|
changeTimezone: Mutation$ChangeTimezone$changeTimezone.fromJson(
|
||||||
|
json['changeTimezone'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$ChangeTimezoneToJson(
|
||||||
|
Mutation$ChangeTimezone instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'changeTimezone': instance.changeTimezone.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$ChangeTimezone$changeTimezone
|
||||||
|
_$Mutation$ChangeTimezone$changeTimezoneFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$ChangeTimezone$changeTimezone(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
timezone: json['timezone'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$ChangeTimezone$changeTimezoneToJson(
|
||||||
|
Mutation$ChangeTimezone$changeTimezone instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'timezone': instance.timezone,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$ChangeAutoUpgradeSettings
|
||||||
|
_$Variables$Mutation$ChangeAutoUpgradeSettingsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$ChangeAutoUpgradeSettings(
|
||||||
|
settings: Input$AutoUpgradeSettingsInput.fromJson(
|
||||||
|
json['settings'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$ChangeAutoUpgradeSettingsToJson(
|
||||||
|
Variables$Mutation$ChangeAutoUpgradeSettings instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'settings': instance.settings.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$ChangeAutoUpgradeSettings _$Mutation$ChangeAutoUpgradeSettingsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$ChangeAutoUpgradeSettings(
|
||||||
|
changeAutoUpgradeSettings:
|
||||||
|
Mutation$ChangeAutoUpgradeSettings$changeAutoUpgradeSettings.fromJson(
|
||||||
|
json['changeAutoUpgradeSettings'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$ChangeAutoUpgradeSettingsToJson(
|
||||||
|
Mutation$ChangeAutoUpgradeSettings instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'changeAutoUpgradeSettings': instance.changeAutoUpgradeSettings.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$ChangeAutoUpgradeSettings$changeAutoUpgradeSettings
|
||||||
|
_$Mutation$ChangeAutoUpgradeSettings$changeAutoUpgradeSettingsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$ChangeAutoUpgradeSettings$changeAutoUpgradeSettings(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
allowReboot: json['allowReboot'] as bool,
|
||||||
|
enableAutoUpgrade: json['enableAutoUpgrade'] as bool,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Mutation$ChangeAutoUpgradeSettings$changeAutoUpgradeSettingsToJson(
|
||||||
|
Mutation$ChangeAutoUpgradeSettings$changeAutoUpgradeSettings
|
||||||
|
instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'allowReboot': instance.allowReboot,
|
||||||
|
'enableAutoUpgrade': instance.enableAutoUpgrade,
|
||||||
|
};
|
84
lib/logic/api_maps/graphql_maps/schema/services.graphql
Normal file
84
lib/logic/api_maps/graphql_maps/schema/services.graphql
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
fragment basicMutationReturnFields on MutationReturnInterface{
|
||||||
|
code
|
||||||
|
message
|
||||||
|
success
|
||||||
|
}
|
||||||
|
|
||||||
|
query AllServices {
|
||||||
|
services {
|
||||||
|
allServices {
|
||||||
|
description
|
||||||
|
displayName
|
||||||
|
dnsRecords {
|
||||||
|
content
|
||||||
|
name
|
||||||
|
priority
|
||||||
|
recordType
|
||||||
|
ttl
|
||||||
|
}
|
||||||
|
id
|
||||||
|
isEnabled
|
||||||
|
isMovable
|
||||||
|
isRequired
|
||||||
|
status
|
||||||
|
storageUsage {
|
||||||
|
title
|
||||||
|
usedSpace
|
||||||
|
volume {
|
||||||
|
name
|
||||||
|
}
|
||||||
|
}
|
||||||
|
svgIcon
|
||||||
|
url
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation EnableService($serviceId: String!) {
|
||||||
|
enableService(serviceId: $serviceId) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation DisableService($serviceId: String!) {
|
||||||
|
disableService(serviceId: $serviceId) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation StopService($serviceId: String!) {
|
||||||
|
stopService(serviceId: $serviceId) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation StartService($serviceId: String!) {
|
||||||
|
startService(serviceId: $serviceId) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RestartService($serviceId: String!) {
|
||||||
|
restartService(serviceId: $serviceId) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation MoveService($input: MoveServiceInput!) {
|
||||||
|
moveService(input: $input) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
job {
|
||||||
|
createdAt
|
||||||
|
description
|
||||||
|
error
|
||||||
|
finishedAt
|
||||||
|
name
|
||||||
|
progress
|
||||||
|
result
|
||||||
|
status
|
||||||
|
statusText
|
||||||
|
uid
|
||||||
|
updatedAt
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2771
lib/logic/api_maps/graphql_maps/schema/services.graphql.dart
Normal file
2771
lib/logic/api_maps/graphql_maps/schema/services.graphql.dart
Normal file
File diff suppressed because it is too large
Load diff
482
lib/logic/api_maps/graphql_maps/schema/services.graphql.g.dart
Normal file
482
lib/logic/api_maps/graphql_maps/schema/services.graphql.g.dart
Normal file
|
@ -0,0 +1,482 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'services.graphql.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
Fragment$basicMutationReturnFields _$Fragment$basicMutationReturnFieldsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Fragment$basicMutationReturnFields(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Fragment$basicMutationReturnFieldsToJson(
|
||||||
|
Fragment$basicMutationReturnFields instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllServices _$Query$AllServicesFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$AllServices(
|
||||||
|
services: Query$AllServices$services.fromJson(
|
||||||
|
json['services'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllServicesToJson(Query$AllServices instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'services': instance.services.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllServices$services _$Query$AllServices$servicesFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllServices$services(
|
||||||
|
allServices: (json['allServices'] as List<dynamic>)
|
||||||
|
.map((e) => Query$AllServices$services$allServices.fromJson(
|
||||||
|
e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllServices$servicesToJson(
|
||||||
|
Query$AllServices$services instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'allServices': instance.allServices.map((e) => e.toJson()).toList(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllServices$services$allServices
|
||||||
|
_$Query$AllServices$services$allServicesFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllServices$services$allServices(
|
||||||
|
description: json['description'] as String,
|
||||||
|
displayName: json['displayName'] as String,
|
||||||
|
dnsRecords: (json['dnsRecords'] as List<dynamic>?)
|
||||||
|
?.map((e) =>
|
||||||
|
Query$AllServices$services$allServices$dnsRecords.fromJson(
|
||||||
|
e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
id: json['id'] as String,
|
||||||
|
isEnabled: json['isEnabled'] as bool,
|
||||||
|
isMovable: json['isMovable'] as bool,
|
||||||
|
isRequired: json['isRequired'] as bool,
|
||||||
|
status: $enumDecode(_$Enum$ServiceStatusEnumEnumMap, json['status'],
|
||||||
|
unknownValue: Enum$ServiceStatusEnum.$unknown),
|
||||||
|
storageUsage:
|
||||||
|
Query$AllServices$services$allServices$storageUsage.fromJson(
|
||||||
|
json['storageUsage'] as Map<String, dynamic>),
|
||||||
|
svgIcon: json['svgIcon'] as String,
|
||||||
|
url: json['url'] as String?,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllServices$services$allServicesToJson(
|
||||||
|
Query$AllServices$services$allServices instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'description': instance.description,
|
||||||
|
'displayName': instance.displayName,
|
||||||
|
'dnsRecords': instance.dnsRecords?.map((e) => e.toJson()).toList(),
|
||||||
|
'id': instance.id,
|
||||||
|
'isEnabled': instance.isEnabled,
|
||||||
|
'isMovable': instance.isMovable,
|
||||||
|
'isRequired': instance.isRequired,
|
||||||
|
'status': _$Enum$ServiceStatusEnumEnumMap[instance.status],
|
||||||
|
'storageUsage': instance.storageUsage.toJson(),
|
||||||
|
'svgIcon': instance.svgIcon,
|
||||||
|
'url': instance.url,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
const _$Enum$ServiceStatusEnumEnumMap = {
|
||||||
|
Enum$ServiceStatusEnum.ACTIVATING: 'ACTIVATING',
|
||||||
|
Enum$ServiceStatusEnum.ACTIVE: 'ACTIVE',
|
||||||
|
Enum$ServiceStatusEnum.DEACTIVATING: 'DEACTIVATING',
|
||||||
|
Enum$ServiceStatusEnum.FAILED: 'FAILED',
|
||||||
|
Enum$ServiceStatusEnum.INACTIVE: 'INACTIVE',
|
||||||
|
Enum$ServiceStatusEnum.OFF: 'OFF',
|
||||||
|
Enum$ServiceStatusEnum.RELOADING: 'RELOADING',
|
||||||
|
Enum$ServiceStatusEnum.$unknown: r'$unknown',
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllServices$services$allServices$dnsRecords
|
||||||
|
_$Query$AllServices$services$allServices$dnsRecordsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllServices$services$allServices$dnsRecords(
|
||||||
|
content: json['content'] as String,
|
||||||
|
name: json['name'] as String,
|
||||||
|
priority: json['priority'] as int?,
|
||||||
|
recordType: json['recordType'] as String,
|
||||||
|
ttl: json['ttl'] as int,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllServices$services$allServices$dnsRecordsToJson(
|
||||||
|
Query$AllServices$services$allServices$dnsRecords instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'content': instance.content,
|
||||||
|
'name': instance.name,
|
||||||
|
'priority': instance.priority,
|
||||||
|
'recordType': instance.recordType,
|
||||||
|
'ttl': instance.ttl,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllServices$services$allServices$storageUsage
|
||||||
|
_$Query$AllServices$services$allServices$storageUsageFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllServices$services$allServices$storageUsage(
|
||||||
|
title: json['title'] as String,
|
||||||
|
usedSpace: json['usedSpace'] as String,
|
||||||
|
volume: json['volume'] == null
|
||||||
|
? null
|
||||||
|
: Query$AllServices$services$allServices$storageUsage$volume
|
||||||
|
.fromJson(json['volume'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic>
|
||||||
|
_$Query$AllServices$services$allServices$storageUsageToJson(
|
||||||
|
Query$AllServices$services$allServices$storageUsage instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'title': instance.title,
|
||||||
|
'usedSpace': instance.usedSpace,
|
||||||
|
'volume': instance.volume?.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllServices$services$allServices$storageUsage$volume
|
||||||
|
_$Query$AllServices$services$allServices$storageUsage$volumeFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllServices$services$allServices$storageUsage$volume(
|
||||||
|
name: json['name'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String,
|
||||||
|
dynamic> _$Query$AllServices$services$allServices$storageUsage$volumeToJson(
|
||||||
|
Query$AllServices$services$allServices$storageUsage$volume instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'name': instance.name,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$EnableService _$Variables$Mutation$EnableServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$EnableService(
|
||||||
|
serviceId: json['serviceId'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$EnableServiceToJson(
|
||||||
|
Variables$Mutation$EnableService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'serviceId': instance.serviceId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$EnableService _$Mutation$EnableServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$EnableService(
|
||||||
|
enableService: Mutation$EnableService$enableService.fromJson(
|
||||||
|
json['enableService'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$EnableServiceToJson(
|
||||||
|
Mutation$EnableService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'enableService': instance.enableService.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$EnableService$enableService
|
||||||
|
_$Mutation$EnableService$enableServiceFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$EnableService$enableService(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$EnableService$enableServiceToJson(
|
||||||
|
Mutation$EnableService$enableService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$DisableService _$Variables$Mutation$DisableServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$DisableService(
|
||||||
|
serviceId: json['serviceId'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$DisableServiceToJson(
|
||||||
|
Variables$Mutation$DisableService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'serviceId': instance.serviceId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$DisableService _$Mutation$DisableServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$DisableService(
|
||||||
|
disableService: Mutation$DisableService$disableService.fromJson(
|
||||||
|
json['disableService'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$DisableServiceToJson(
|
||||||
|
Mutation$DisableService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'disableService': instance.disableService.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$DisableService$disableService
|
||||||
|
_$Mutation$DisableService$disableServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$DisableService$disableService(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$DisableService$disableServiceToJson(
|
||||||
|
Mutation$DisableService$disableService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$StopService _$Variables$Mutation$StopServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$StopService(
|
||||||
|
serviceId: json['serviceId'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$StopServiceToJson(
|
||||||
|
Variables$Mutation$StopService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'serviceId': instance.serviceId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$StopService _$Mutation$StopServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$StopService(
|
||||||
|
stopService: Mutation$StopService$stopService.fromJson(
|
||||||
|
json['stopService'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$StopServiceToJson(
|
||||||
|
Mutation$StopService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'stopService': instance.stopService.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$StopService$stopService _$Mutation$StopService$stopServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$StopService$stopService(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$StopService$stopServiceToJson(
|
||||||
|
Mutation$StopService$stopService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$StartService _$Variables$Mutation$StartServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$StartService(
|
||||||
|
serviceId: json['serviceId'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$StartServiceToJson(
|
||||||
|
Variables$Mutation$StartService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'serviceId': instance.serviceId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$StartService _$Mutation$StartServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$StartService(
|
||||||
|
startService: Mutation$StartService$startService.fromJson(
|
||||||
|
json['startService'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$StartServiceToJson(
|
||||||
|
Mutation$StartService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'startService': instance.startService.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$StartService$startService _$Mutation$StartService$startServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$StartService$startService(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$StartService$startServiceToJson(
|
||||||
|
Mutation$StartService$startService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$RestartService _$Variables$Mutation$RestartServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$RestartService(
|
||||||
|
serviceId: json['serviceId'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$RestartServiceToJson(
|
||||||
|
Variables$Mutation$RestartService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'serviceId': instance.serviceId,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RestartService _$Mutation$RestartServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RestartService(
|
||||||
|
restartService: Mutation$RestartService$restartService.fromJson(
|
||||||
|
json['restartService'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RestartServiceToJson(
|
||||||
|
Mutation$RestartService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'restartService': instance.restartService.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RestartService$restartService
|
||||||
|
_$Mutation$RestartService$restartServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RestartService$restartService(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RestartService$restartServiceToJson(
|
||||||
|
Mutation$RestartService$restartService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$MoveService _$Variables$Mutation$MoveServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$MoveService(
|
||||||
|
input: Input$MoveServiceInput.fromJson(
|
||||||
|
json['input'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$MoveServiceToJson(
|
||||||
|
Variables$Mutation$MoveService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'input': instance.input.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$MoveService _$Mutation$MoveServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$MoveService(
|
||||||
|
moveService: Mutation$MoveService$moveService.fromJson(
|
||||||
|
json['moveService'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$MoveServiceToJson(
|
||||||
|
Mutation$MoveService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'moveService': instance.moveService.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$MoveService$moveService _$Mutation$MoveService$moveServiceFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$MoveService$moveService(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
job: json['job'] == null
|
||||||
|
? null
|
||||||
|
: Mutation$MoveService$moveService$job.fromJson(
|
||||||
|
json['job'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$MoveService$moveServiceToJson(
|
||||||
|
Mutation$MoveService$moveService instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'job': instance.job?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$MoveService$moveService$job
|
||||||
|
_$Mutation$MoveService$moveService$jobFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$MoveService$moveService$job(
|
||||||
|
createdAt: dateTimeFromJson(json['createdAt']),
|
||||||
|
description: json['description'] as String,
|
||||||
|
error: json['error'] as String?,
|
||||||
|
finishedAt: _nullable$dateTimeFromJson(json['finishedAt']),
|
||||||
|
name: json['name'] as String,
|
||||||
|
progress: json['progress'] as int?,
|
||||||
|
result: json['result'] as String?,
|
||||||
|
status: json['status'] as String,
|
||||||
|
statusText: json['statusText'] as String?,
|
||||||
|
uid: json['uid'] as String,
|
||||||
|
updatedAt: dateTimeFromJson(json['updatedAt']),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$MoveService$moveService$jobToJson(
|
||||||
|
Mutation$MoveService$moveService$job instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'createdAt': dateTimeToJson(instance.createdAt),
|
||||||
|
'description': instance.description,
|
||||||
|
'error': instance.error,
|
||||||
|
'finishedAt': _nullable$dateTimeToJson(instance.finishedAt),
|
||||||
|
'name': instance.name,
|
||||||
|
'progress': instance.progress,
|
||||||
|
'result': instance.result,
|
||||||
|
'status': instance.status,
|
||||||
|
'statusText': instance.statusText,
|
||||||
|
'uid': instance.uid,
|
||||||
|
'updatedAt': dateTimeToJson(instance.updatedAt),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
76
lib/logic/api_maps/graphql_maps/schema/users.graphql
Normal file
76
lib/logic/api_maps/graphql_maps/schema/users.graphql
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
fragment basicMutationReturnFields on MutationReturnInterface{
|
||||||
|
code
|
||||||
|
message
|
||||||
|
success
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
mutation CreateUser($user: UserMutationInput!) {
|
||||||
|
createUser(user: $user) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
user {
|
||||||
|
username
|
||||||
|
userType
|
||||||
|
sshKeys
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query AllUsers {
|
||||||
|
users {
|
||||||
|
allUsers {
|
||||||
|
userType
|
||||||
|
username
|
||||||
|
sshKeys
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation AddSshKey($sshInput: SshMutationInput!) {
|
||||||
|
addSshKey(sshInput: $sshInput) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
user {
|
||||||
|
sshKeys
|
||||||
|
userType
|
||||||
|
username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
query GetUser($username: String!) {
|
||||||
|
users {
|
||||||
|
getUser(username: $username) {
|
||||||
|
sshKeys
|
||||||
|
userType
|
||||||
|
username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation RemoveSshKey($sshInput: SshMutationInput!) {
|
||||||
|
removeSshKey(sshInput: $sshInput) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
user {
|
||||||
|
sshKeys
|
||||||
|
userType
|
||||||
|
username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation DeleteUser($username: String!) {
|
||||||
|
deleteUser(username: $username) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
mutation UpdateUser($user: UserMutationInput!) {
|
||||||
|
updateUser(user: $user) {
|
||||||
|
...basicMutationReturnFields
|
||||||
|
user {
|
||||||
|
sshKeys
|
||||||
|
userType
|
||||||
|
username
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
2642
lib/logic/api_maps/graphql_maps/schema/users.graphql.dart
Normal file
2642
lib/logic/api_maps/graphql_maps/schema/users.graphql.dart
Normal file
File diff suppressed because it is too large
Load diff
471
lib/logic/api_maps/graphql_maps/schema/users.graphql.g.dart
Normal file
471
lib/logic/api_maps/graphql_maps/schema/users.graphql.g.dart
Normal file
|
@ -0,0 +1,471 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'users.graphql.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
Fragment$basicMutationReturnFields _$Fragment$basicMutationReturnFieldsFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Fragment$basicMutationReturnFields(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Fragment$basicMutationReturnFieldsToJson(
|
||||||
|
Fragment$basicMutationReturnFields instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$CreateUser _$Variables$Mutation$CreateUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$CreateUser(
|
||||||
|
user: Input$UserMutationInput.fromJson(
|
||||||
|
json['user'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$CreateUserToJson(
|
||||||
|
Variables$Mutation$CreateUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'user': instance.user.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$CreateUser _$Mutation$CreateUserFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$CreateUser(
|
||||||
|
createUser: Mutation$CreateUser$createUser.fromJson(
|
||||||
|
json['createUser'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$CreateUserToJson(
|
||||||
|
Mutation$CreateUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'createUser': instance.createUser.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$CreateUser$createUser _$Mutation$CreateUser$createUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$CreateUser$createUser(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
user: json['user'] == null
|
||||||
|
? null
|
||||||
|
: Mutation$CreateUser$createUser$user.fromJson(
|
||||||
|
json['user'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$CreateUser$createUserToJson(
|
||||||
|
Mutation$CreateUser$createUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'user': instance.user?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$CreateUser$createUser$user
|
||||||
|
_$Mutation$CreateUser$createUser$userFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$CreateUser$createUser$user(
|
||||||
|
username: json['username'] as String,
|
||||||
|
userType: $enumDecode(_$Enum$UserTypeEnumMap, json['userType'],
|
||||||
|
unknownValue: Enum$UserType.$unknown),
|
||||||
|
sshKeys: (json['sshKeys'] as List<dynamic>)
|
||||||
|
.map((e) => e as String)
|
||||||
|
.toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$CreateUser$createUser$userToJson(
|
||||||
|
Mutation$CreateUser$createUser$user instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'username': instance.username,
|
||||||
|
'userType': _$Enum$UserTypeEnumMap[instance.userType],
|
||||||
|
'sshKeys': instance.sshKeys,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
const _$Enum$UserTypeEnumMap = {
|
||||||
|
Enum$UserType.NORMAL: 'NORMAL',
|
||||||
|
Enum$UserType.PRIMARY: 'PRIMARY',
|
||||||
|
Enum$UserType.ROOT: 'ROOT',
|
||||||
|
Enum$UserType.$unknown: r'$unknown',
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllUsers _$Query$AllUsersFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$AllUsers(
|
||||||
|
users:
|
||||||
|
Query$AllUsers$users.fromJson(json['users'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllUsersToJson(Query$AllUsers instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'users': instance.users.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllUsers$users _$Query$AllUsers$usersFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllUsers$users(
|
||||||
|
allUsers: (json['allUsers'] as List<dynamic>)
|
||||||
|
.map((e) =>
|
||||||
|
Query$AllUsers$users$allUsers.fromJson(e as Map<String, dynamic>))
|
||||||
|
.toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllUsers$usersToJson(
|
||||||
|
Query$AllUsers$users instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'allUsers': instance.allUsers.map((e) => e.toJson()).toList(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$AllUsers$users$allUsers _$Query$AllUsers$users$allUsersFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$AllUsers$users$allUsers(
|
||||||
|
userType: $enumDecode(_$Enum$UserTypeEnumMap, json['userType'],
|
||||||
|
unknownValue: Enum$UserType.$unknown),
|
||||||
|
username: json['username'] as String,
|
||||||
|
sshKeys:
|
||||||
|
(json['sshKeys'] as List<dynamic>).map((e) => e as String).toList(),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$AllUsers$users$allUsersToJson(
|
||||||
|
Query$AllUsers$users$allUsers instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'userType': _$Enum$UserTypeEnumMap[instance.userType],
|
||||||
|
'username': instance.username,
|
||||||
|
'sshKeys': instance.sshKeys,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$AddSshKey _$Variables$Mutation$AddSshKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$AddSshKey(
|
||||||
|
sshInput: Input$SshMutationInput.fromJson(
|
||||||
|
json['sshInput'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$AddSshKeyToJson(
|
||||||
|
Variables$Mutation$AddSshKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sshInput': instance.sshInput.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$AddSshKey _$Mutation$AddSshKeyFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$AddSshKey(
|
||||||
|
addSshKey: Mutation$AddSshKey$addSshKey.fromJson(
|
||||||
|
json['addSshKey'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$AddSshKeyToJson(Mutation$AddSshKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'addSshKey': instance.addSshKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$AddSshKey$addSshKey _$Mutation$AddSshKey$addSshKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$AddSshKey$addSshKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
user: json['user'] == null
|
||||||
|
? null
|
||||||
|
: Mutation$AddSshKey$addSshKey$user.fromJson(
|
||||||
|
json['user'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$AddSshKey$addSshKeyToJson(
|
||||||
|
Mutation$AddSshKey$addSshKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'user': instance.user?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$AddSshKey$addSshKey$user _$Mutation$AddSshKey$addSshKey$userFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$AddSshKey$addSshKey$user(
|
||||||
|
sshKeys:
|
||||||
|
(json['sshKeys'] as List<dynamic>).map((e) => e as String).toList(),
|
||||||
|
userType: $enumDecode(_$Enum$UserTypeEnumMap, json['userType'],
|
||||||
|
unknownValue: Enum$UserType.$unknown),
|
||||||
|
username: json['username'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$AddSshKey$addSshKey$userToJson(
|
||||||
|
Mutation$AddSshKey$addSshKey$user instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sshKeys': instance.sshKeys,
|
||||||
|
'userType': _$Enum$UserTypeEnumMap[instance.userType],
|
||||||
|
'username': instance.username,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Query$GetUser _$Variables$Query$GetUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Query$GetUser(
|
||||||
|
username: json['username'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Query$GetUserToJson(
|
||||||
|
Variables$Query$GetUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'username': instance.username,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetUser _$Query$GetUserFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$GetUser(
|
||||||
|
users:
|
||||||
|
Query$GetUser$users.fromJson(json['users'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetUserToJson(Query$GetUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'users': instance.users.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetUser$users _$Query$GetUser$usersFromJson(Map<String, dynamic> json) =>
|
||||||
|
Query$GetUser$users(
|
||||||
|
getUser: json['getUser'] == null
|
||||||
|
? null
|
||||||
|
: Query$GetUser$users$getUser.fromJson(
|
||||||
|
json['getUser'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetUser$usersToJson(
|
||||||
|
Query$GetUser$users instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'getUser': instance.getUser?.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Query$GetUser$users$getUser _$Query$GetUser$users$getUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Query$GetUser$users$getUser(
|
||||||
|
sshKeys:
|
||||||
|
(json['sshKeys'] as List<dynamic>).map((e) => e as String).toList(),
|
||||||
|
userType: $enumDecode(_$Enum$UserTypeEnumMap, json['userType'],
|
||||||
|
unknownValue: Enum$UserType.$unknown),
|
||||||
|
username: json['username'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Query$GetUser$users$getUserToJson(
|
||||||
|
Query$GetUser$users$getUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sshKeys': instance.sshKeys,
|
||||||
|
'userType': _$Enum$UserTypeEnumMap[instance.userType],
|
||||||
|
'username': instance.username,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$RemoveSshKey _$Variables$Mutation$RemoveSshKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$RemoveSshKey(
|
||||||
|
sshInput: Input$SshMutationInput.fromJson(
|
||||||
|
json['sshInput'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$RemoveSshKeyToJson(
|
||||||
|
Variables$Mutation$RemoveSshKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sshInput': instance.sshInput.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RemoveSshKey _$Mutation$RemoveSshKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RemoveSshKey(
|
||||||
|
removeSshKey: Mutation$RemoveSshKey$removeSshKey.fromJson(
|
||||||
|
json['removeSshKey'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RemoveSshKeyToJson(
|
||||||
|
Mutation$RemoveSshKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'removeSshKey': instance.removeSshKey.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RemoveSshKey$removeSshKey _$Mutation$RemoveSshKey$removeSshKeyFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RemoveSshKey$removeSshKey(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
user: json['user'] == null
|
||||||
|
? null
|
||||||
|
: Mutation$RemoveSshKey$removeSshKey$user.fromJson(
|
||||||
|
json['user'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RemoveSshKey$removeSshKeyToJson(
|
||||||
|
Mutation$RemoveSshKey$removeSshKey instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'user': instance.user?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$RemoveSshKey$removeSshKey$user
|
||||||
|
_$Mutation$RemoveSshKey$removeSshKey$userFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$RemoveSshKey$removeSshKey$user(
|
||||||
|
sshKeys: (json['sshKeys'] as List<dynamic>)
|
||||||
|
.map((e) => e as String)
|
||||||
|
.toList(),
|
||||||
|
userType: $enumDecode(_$Enum$UserTypeEnumMap, json['userType'],
|
||||||
|
unknownValue: Enum$UserType.$unknown),
|
||||||
|
username: json['username'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$RemoveSshKey$removeSshKey$userToJson(
|
||||||
|
Mutation$RemoveSshKey$removeSshKey$user instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sshKeys': instance.sshKeys,
|
||||||
|
'userType': _$Enum$UserTypeEnumMap[instance.userType],
|
||||||
|
'username': instance.username,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$DeleteUser _$Variables$Mutation$DeleteUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$DeleteUser(
|
||||||
|
username: json['username'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$DeleteUserToJson(
|
||||||
|
Variables$Mutation$DeleteUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'username': instance.username,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$DeleteUser _$Mutation$DeleteUserFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$DeleteUser(
|
||||||
|
deleteUser: Mutation$DeleteUser$deleteUser.fromJson(
|
||||||
|
json['deleteUser'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$DeleteUserToJson(
|
||||||
|
Mutation$DeleteUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'deleteUser': instance.deleteUser.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$DeleteUser$deleteUser _$Mutation$DeleteUser$deleteUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$DeleteUser$deleteUser(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$DeleteUser$deleteUserToJson(
|
||||||
|
Mutation$DeleteUser$deleteUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Variables$Mutation$UpdateUser _$Variables$Mutation$UpdateUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Variables$Mutation$UpdateUser(
|
||||||
|
user: Input$UserMutationInput.fromJson(
|
||||||
|
json['user'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Variables$Mutation$UpdateUserToJson(
|
||||||
|
Variables$Mutation$UpdateUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'user': instance.user.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$UpdateUser _$Mutation$UpdateUserFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$UpdateUser(
|
||||||
|
updateUser: Mutation$UpdateUser$updateUser.fromJson(
|
||||||
|
json['updateUser'] as Map<String, dynamic>),
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$UpdateUserToJson(
|
||||||
|
Mutation$UpdateUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'updateUser': instance.updateUser.toJson(),
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$UpdateUser$updateUser _$Mutation$UpdateUser$updateUserFromJson(
|
||||||
|
Map<String, dynamic> json) =>
|
||||||
|
Mutation$UpdateUser$updateUser(
|
||||||
|
code: json['code'] as int,
|
||||||
|
message: json['message'] as String,
|
||||||
|
success: json['success'] as bool,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
user: json['user'] == null
|
||||||
|
? null
|
||||||
|
: Mutation$UpdateUser$updateUser$user.fromJson(
|
||||||
|
json['user'] as Map<String, dynamic>),
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$UpdateUser$updateUserToJson(
|
||||||
|
Mutation$UpdateUser$updateUser instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'code': instance.code,
|
||||||
|
'message': instance.message,
|
||||||
|
'success': instance.success,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
'user': instance.user?.toJson(),
|
||||||
|
};
|
||||||
|
|
||||||
|
Mutation$UpdateUser$updateUser$user
|
||||||
|
_$Mutation$UpdateUser$updateUser$userFromJson(Map<String, dynamic> json) =>
|
||||||
|
Mutation$UpdateUser$updateUser$user(
|
||||||
|
sshKeys: (json['sshKeys'] as List<dynamic>)
|
||||||
|
.map((e) => e as String)
|
||||||
|
.toList(),
|
||||||
|
userType: $enumDecode(_$Enum$UserTypeEnumMap, json['userType'],
|
||||||
|
unknownValue: Enum$UserType.$unknown),
|
||||||
|
username: json['username'] as String,
|
||||||
|
$__typename: json['__typename'] as String,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$Mutation$UpdateUser$updateUser$userToJson(
|
||||||
|
Mutation$UpdateUser$updateUser$user instance) =>
|
||||||
|
<String, dynamic>{
|
||||||
|
'sshKeys': instance.sshKeys,
|
||||||
|
'userType': _$Enum$UserTypeEnumMap[instance.userType],
|
||||||
|
'username': instance.username,
|
||||||
|
'__typename': instance.$__typename,
|
||||||
|
};
|
|
@ -105,8 +105,8 @@ class ServerApi extends ApiMap {
|
||||||
try {
|
try {
|
||||||
response = await client.get('/services/status');
|
response = await client.get('/services/status');
|
||||||
res = response.statusCode == HttpStatus.ok;
|
res = response.statusCode == HttpStatus.ok;
|
||||||
} on DioError catch (e) {
|
} catch (e) {
|
||||||
print(e.message);
|
print(e);
|
||||||
} finally {
|
} finally {
|
||||||
close(client);
|
close(client);
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,11 +81,11 @@ class HetznerApi extends ServerProviderApi with VolumeProviderApi {
|
||||||
final Response dbGetResponse;
|
final Response dbGetResponse;
|
||||||
final Dio client = await getClient();
|
final Dio client = await getClient();
|
||||||
try {
|
try {
|
||||||
dbGetResponse = await client.post('/pricing');
|
dbGetResponse = await client.get('/pricing');
|
||||||
|
|
||||||
final volume = dbGetResponse.data['pricing']['volume'];
|
final volume = dbGetResponse.data['pricing']['volume'];
|
||||||
final volumePrice = volume['price_per_gb_month']['gross'];
|
final volumePrice = volume['price_per_gb_month']['gross'];
|
||||||
price = volumePrice as double;
|
price = double.parse(volumePrice);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print(e);
|
print(e);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
|
import 'dart:async';
|
||||||
|
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/logic/api_maps/rest_maps/server.dart';
|
import 'package:selfprivacy/logic/api_maps/graphql_maps/schema/server.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/users/users_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/job.dart';
|
import 'package:selfprivacy/logic/models/job.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/json/server_job.dart';
|
||||||
|
|
||||||
export 'package:provider/provider.dart';
|
export 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
@ -15,20 +18,21 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
JobsCubit({
|
JobsCubit({
|
||||||
required this.usersCubit,
|
required this.usersCubit,
|
||||||
required this.servicesCubit,
|
required this.servicesCubit,
|
||||||
}) : super(JobsStateEmpty());
|
}) : super(const JobsStateEmpty([]));
|
||||||
|
|
||||||
final ServerApi api = ServerApi();
|
final ServerApi api = ServerApi();
|
||||||
final UsersCubit usersCubit;
|
final UsersCubit usersCubit;
|
||||||
final ServicesCubit servicesCubit;
|
final ServicesCubit servicesCubit;
|
||||||
|
|
||||||
void addJob(final Job job) {
|
void addJob(final ClientJob job) {
|
||||||
final List<Job> newJobsList = <Job>[];
|
final List<ClientJob> newJobsList = [];
|
||||||
if (state is JobsStateWithJobs) {
|
if (state is JobsStateWithJobs) {
|
||||||
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
final JobsStateWithJobs jobsState = state as JobsStateWithJobs;
|
||||||
|
newJobsList.addAll(jobsState.clientJobList);
|
||||||
}
|
}
|
||||||
newJobsList.add(job);
|
newJobsList.add(job);
|
||||||
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
||||||
emit(JobsStateWithJobs(newJobsList));
|
emit(JobsStateWithJobs(newJobsList, state.serverJobList));
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeJob(final String id) {
|
void removeJob(final String id) {
|
||||||
|
@ -37,51 +41,51 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void createOrRemoveServiceToggleJob(final ToggleJob job) {
|
void createOrRemoveServiceToggleJob(final ToggleJob job) {
|
||||||
final List<Job> newJobsList = <Job>[];
|
final List<ClientJob> newJobsList = <ClientJob>[];
|
||||||
if (state is JobsStateWithJobs) {
|
if (state is JobsStateWithJobs) {
|
||||||
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
newJobsList.addAll((state as JobsStateWithJobs).clientJobList);
|
||||||
}
|
}
|
||||||
final bool needToRemoveJob = newJobsList
|
final bool needToRemoveJob = newJobsList
|
||||||
.any((final el) => el is ServiceToggleJob && el.type == job.type);
|
.any((final el) => el is ServiceToggleJob && el.type == job.type);
|
||||||
if (needToRemoveJob) {
|
if (needToRemoveJob) {
|
||||||
final Job removingJob = newJobsList.firstWhere(
|
final ClientJob removingJob = newJobsList.firstWhere(
|
||||||
(final el) => el is ServiceToggleJob && el.type == job.type,
|
(final el) => el is ServiceToggleJob && el.type == job.type,
|
||||||
);
|
);
|
||||||
removeJob(removingJob.id);
|
removeJob(removingJob.id);
|
||||||
} else {
|
} else {
|
||||||
newJobsList.add(job);
|
newJobsList.add(job);
|
||||||
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
||||||
emit(JobsStateWithJobs(newJobsList));
|
emit(JobsStateWithJobs(newJobsList, state.serverJobList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void createShhJobIfNotExist(final CreateSSHKeyJob job) {
|
void createShhJobIfNotExist(final CreateSSHKeyJob job) {
|
||||||
final List<Job> newJobsList = <Job>[];
|
final List<ClientJob> newJobsList = <ClientJob>[];
|
||||||
if (state is JobsStateWithJobs) {
|
if (state is JobsStateWithJobs) {
|
||||||
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
newJobsList.addAll((state as JobsStateWithJobs).clientJobList);
|
||||||
}
|
}
|
||||||
final bool isExistInJobList =
|
final bool isExistInJobList =
|
||||||
newJobsList.any((final el) => el is CreateSSHKeyJob);
|
newJobsList.any((final el) => el is CreateSSHKeyJob);
|
||||||
if (!isExistInJobList) {
|
if (!isExistInJobList) {
|
||||||
newJobsList.add(job);
|
newJobsList.add(job);
|
||||||
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
||||||
emit(JobsStateWithJobs(newJobsList));
|
emit(JobsStateWithJobs(newJobsList, state.serverJobList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> rebootServer() async {
|
Future<void> rebootServer() async {
|
||||||
emit(JobsStateLoading());
|
emit(JobsStateLoading(state.serverJobList));
|
||||||
final bool isSuccessful = await api.reboot();
|
final bool isSuccessful = await api.reboot();
|
||||||
if (isSuccessful) {
|
if (isSuccessful) {
|
||||||
getIt<NavigationService>().showSnackBar('jobs.rebootSuccess'.tr());
|
getIt<NavigationService>().showSnackBar('jobs.rebootSuccess'.tr());
|
||||||
} else {
|
} else {
|
||||||
getIt<NavigationService>().showSnackBar('jobs.rebootFailed'.tr());
|
getIt<NavigationService>().showSnackBar('jobs.rebootFailed'.tr());
|
||||||
}
|
}
|
||||||
emit(JobsStateEmpty());
|
emit(JobsStateEmpty(state.serverJobList));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> upgradeServer() async {
|
Future<void> upgradeServer() async {
|
||||||
emit(JobsStateLoading());
|
emit(JobsStateLoading(state.serverJobList));
|
||||||
final bool isPullSuccessful = await api.pullConfigurationUpdate();
|
final bool isPullSuccessful = await api.pullConfigurationUpdate();
|
||||||
final bool isSuccessful = await api.upgrade();
|
final bool isSuccessful = await api.upgrade();
|
||||||
if (isSuccessful) {
|
if (isSuccessful) {
|
||||||
|
@ -93,15 +97,15 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
} else {
|
} else {
|
||||||
getIt<NavigationService>().showSnackBar('jobs.upgradeFailed'.tr());
|
getIt<NavigationService>().showSnackBar('jobs.upgradeFailed'.tr());
|
||||||
}
|
}
|
||||||
emit(JobsStateEmpty());
|
emit(JobsStateEmpty(state.serverJobList));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> applyAll() async {
|
Future<void> applyAll() async {
|
||||||
if (state is JobsStateWithJobs) {
|
if (state is JobsStateWithJobs) {
|
||||||
final List<Job> jobs = (state as JobsStateWithJobs).jobList;
|
final List<ClientJob> jobs = (state as JobsStateWithJobs).clientJobList;
|
||||||
emit(JobsStateLoading());
|
emit(JobsStateLoading(state.serverJobList));
|
||||||
bool hasServiceJobs = false;
|
bool hasServiceJobs = false;
|
||||||
for (final Job job in jobs) {
|
for (final ClientJob job in jobs) {
|
||||||
if (job is CreateUserJob) {
|
if (job is CreateUserJob) {
|
||||||
await usersCubit.createUser(job.user);
|
await usersCubit.createUser(job.user);
|
||||||
}
|
}
|
||||||
|
@ -122,11 +126,45 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
|
|
||||||
await api.pullConfigurationUpdate();
|
await api.pullConfigurationUpdate();
|
||||||
await api.apply();
|
await api.apply();
|
||||||
|
|
||||||
if (hasServiceJobs) {
|
if (hasServiceJobs) {
|
||||||
await servicesCubit.load();
|
await servicesCubit.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
emit(JobsStateEmpty());
|
emit(JobsStateEmpty(state.serverJobList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> resetRequestsTimer() async {
|
||||||
|
const duration = Duration(seconds: 1);
|
||||||
|
Timer.periodic(
|
||||||
|
duration,
|
||||||
|
(final timer) async {
|
||||||
|
if (timer.tick >= 10) {
|
||||||
|
final List<ServerJob> serverJobs = await api.getServerJobs();
|
||||||
|
final List<ServerJob> newServerJobs = [];
|
||||||
|
for (final ServerJob job in serverJobs) {
|
||||||
|
if (job.status == 'FINISHED') {
|
||||||
|
await api.removeApiJob(job.uid);
|
||||||
|
} else {
|
||||||
|
newServerJobs.add(job);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state is JobsStateWithJobs) {
|
||||||
|
emit(
|
||||||
|
JobsStateWithJobs(
|
||||||
|
(state as JobsStateWithJobs).clientJobList,
|
||||||
|
newServerJobs,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
emit(
|
||||||
|
JobsStateEmpty(newServerJobs),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,28 +1,34 @@
|
||||||
part of 'jobs_cubit.dart';
|
part of 'jobs_cubit.dart';
|
||||||
|
|
||||||
abstract class JobsState extends Equatable {
|
abstract class JobsState extends Equatable {
|
||||||
|
const JobsState(this.serverJobList);
|
||||||
|
final List<ServerJob> serverJobList;
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => [];
|
List<Object?> get props => [serverJobList];
|
||||||
}
|
}
|
||||||
|
|
||||||
class JobsStateLoading extends JobsState {}
|
class JobsStateLoading extends JobsState {
|
||||||
|
const JobsStateLoading(super.serverJobList);
|
||||||
|
}
|
||||||
|
|
||||||
class JobsStateEmpty extends JobsState {}
|
class JobsStateEmpty extends JobsState {
|
||||||
|
const JobsStateEmpty(super.serverJobList);
|
||||||
|
}
|
||||||
|
|
||||||
class JobsStateWithJobs extends JobsState {
|
class JobsStateWithJobs extends JobsState {
|
||||||
JobsStateWithJobs(this.jobList);
|
const JobsStateWithJobs(this.clientJobList, super.serverJobList);
|
||||||
final List<Job> jobList;
|
final List<ClientJob> clientJobList;
|
||||||
|
|
||||||
JobsState removeById(final String id) {
|
JobsState removeById(final String id) {
|
||||||
final List<Job> newJobsList =
|
final List<ClientJob> newJobsList =
|
||||||
jobList.where((final element) => element.id != id).toList();
|
clientJobList.where((final element) => element.id != id).toList();
|
||||||
|
|
||||||
if (newJobsList.isEmpty) {
|
if (newJobsList.isEmpty) {
|
||||||
return JobsStateEmpty();
|
return JobsStateEmpty(serverJobList);
|
||||||
}
|
}
|
||||||
return JobsStateWithJobs(newJobsList);
|
return JobsStateWithJobs(newJobsList, serverJobList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
List<Object?> get props => jobList;
|
List<Object?> get props => [...super.props, clientJobList];
|
||||||
}
|
}
|
||||||
|
|
|
@ -292,6 +292,43 @@ class ServerInstallationRepository {
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
} else if (e.response!.data['error']['code'] == 'resource_unavailable') {
|
||||||
|
final NavigationService nav = getIt.get<NavigationService>();
|
||||||
|
nav.showPopUpDialog(
|
||||||
|
BrandAlert(
|
||||||
|
title: 'modals.1_1'.tr(),
|
||||||
|
contentText: 'modals.2_2'.tr(),
|
||||||
|
actions: [
|
||||||
|
ActionButton(
|
||||||
|
text: 'modals.7'.tr(),
|
||||||
|
isRed: true,
|
||||||
|
onPressed: () async {
|
||||||
|
ServerHostingDetails? serverDetails;
|
||||||
|
try {
|
||||||
|
serverDetails = await api.createServer(
|
||||||
|
dnsApiToken: cloudFlareKey,
|
||||||
|
rootUser: rootUser,
|
||||||
|
domainName: domainName,
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (serverDetails == null) {
|
||||||
|
print('Server is not initialized!');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await saveServerDetails(serverDetails);
|
||||||
|
onSuccess(serverDetails);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
ActionButton(
|
||||||
|
text: 'basis.cancel'.tr(),
|
||||||
|
onPressed: onCancel,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,12 +12,16 @@ part 'volumes_state.dart';
|
||||||
class ApiVolumesCubit
|
class ApiVolumesCubit
|
||||||
extends ServerInstallationDependendCubit<ApiVolumesState> {
|
extends ServerInstallationDependendCubit<ApiVolumesState> {
|
||||||
ApiVolumesCubit(final ServerInstallationCubit serverInstallationCubit)
|
ApiVolumesCubit(final ServerInstallationCubit serverInstallationCubit)
|
||||||
: super(serverInstallationCubit, const ApiVolumesState.initial());
|
: super(serverInstallationCubit, const ApiVolumesState.initial()) {
|
||||||
|
final serverDetails = getIt<ApiConfigModel>().serverDetails;
|
||||||
final VolumeProviderApiFactory providerApi =
|
providerApi = serverDetails == null
|
||||||
VolumeApiFactoryCreator.createVolumeProviderApiFactory(
|
? null
|
||||||
|
: VolumeApiFactoryCreator.createVolumeProviderApiFactory(
|
||||||
getIt<ApiConfigModel>().serverDetails!.provider,
|
getIt<ApiConfigModel>().serverDetails!.provider,
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
VolumeProviderApiFactory? providerApi;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<void> load() async {
|
Future<void> load() async {
|
||||||
|
@ -26,8 +30,16 @@ class ApiVolumesCubit
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<List<ServerVolume>> getVolumes() async {
|
||||||
|
if (providerApi == null) {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return providerApi!.getVolumeProvider().getVolumes();
|
||||||
|
}
|
||||||
|
|
||||||
Future<double?> getPricePerGb() async =>
|
Future<double?> getPricePerGb() async =>
|
||||||
providerApi.getVolumeProvider().getPricePerGb();
|
providerApi!.getVolumeProvider().getPricePerGb();
|
||||||
|
|
||||||
Future<void> refresh() async {
|
Future<void> refresh() async {
|
||||||
emit(const ApiVolumesState([], LoadingStatus.refreshing));
|
emit(const ApiVolumesState([], LoadingStatus.refreshing));
|
||||||
|
@ -35,8 +47,7 @@ class ApiVolumesCubit
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> _refetch() async {
|
Future<void> _refetch() async {
|
||||||
final List<ServerVolume> volumes =
|
final List<ServerVolume> volumes = await getVolumes();
|
||||||
await providerApi.getVolumeProvider().getVolumes();
|
|
||||||
if (volumes.isNotEmpty) {
|
if (volumes.isNotEmpty) {
|
||||||
emit(ApiVolumesState(volumes, LoadingStatus.success));
|
emit(ApiVolumesState(volumes, LoadingStatus.success));
|
||||||
} else {
|
} else {
|
||||||
|
@ -46,12 +57,12 @@ class ApiVolumesCubit
|
||||||
|
|
||||||
Future<void> attachVolume(final ServerVolume volume) async {
|
Future<void> attachVolume(final ServerVolume volume) async {
|
||||||
final ServerHostingDetails server = getIt<ApiConfigModel>().serverDetails!;
|
final ServerHostingDetails server = getIt<ApiConfigModel>().serverDetails!;
|
||||||
await providerApi.getVolumeProvider().attachVolume(volume.id, server.id);
|
await providerApi!.getVolumeProvider().attachVolume(volume.id, server.id);
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> detachVolume(final ServerVolume volume) async {
|
Future<void> detachVolume(final ServerVolume volume) async {
|
||||||
await providerApi.getVolumeProvider().detachVolume(volume.id);
|
await providerApi!.getVolumeProvider().detachVolume(volume.id);
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +71,7 @@ class ApiVolumesCubit
|
||||||
final int newSizeGb,
|
final int newSizeGb,
|
||||||
) async {
|
) async {
|
||||||
final ServerVolume? providerVolume = await fetchProdiverVolume(volume);
|
final ServerVolume? providerVolume = await fetchProdiverVolume(volume);
|
||||||
final bool resized = await providerApi.getVolumeProvider().resizeVolume(
|
final bool resized = await providerApi!.getVolumeProvider().resizeVolume(
|
||||||
providerVolume!.id,
|
providerVolume!.id,
|
||||||
newSizeGb,
|
newSizeGb,
|
||||||
);
|
);
|
||||||
|
@ -76,7 +87,7 @@ class ApiVolumesCubit
|
||||||
|
|
||||||
Future<void> createVolume() async {
|
Future<void> createVolume() async {
|
||||||
final ServerVolume? volume =
|
final ServerVolume? volume =
|
||||||
await providerApi.getVolumeProvider().createVolume();
|
await providerApi!.getVolumeProvider().createVolume();
|
||||||
await attachVolume(volume!);
|
await attachVolume(volume!);
|
||||||
|
|
||||||
await Future.delayed(const Duration(seconds: 10));
|
await Future.delayed(const Duration(seconds: 10));
|
||||||
|
@ -88,7 +99,7 @@ class ApiVolumesCubit
|
||||||
|
|
||||||
Future<void> deleteVolume(final ServerDiskVolume volume) async {
|
Future<void> deleteVolume(final ServerDiskVolume volume) async {
|
||||||
final ServerVolume? providerVolume = await fetchProdiverVolume(volume);
|
final ServerVolume? providerVolume = await fetchProdiverVolume(volume);
|
||||||
await providerApi.getVolumeProvider().deleteVolume(providerVolume!.id);
|
await providerApi!.getVolumeProvider().deleteVolume(providerVolume!.id);
|
||||||
refresh();
|
refresh();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -102,7 +113,7 @@ class ApiVolumesCubit
|
||||||
) async {
|
) async {
|
||||||
ServerVolume? fetchedVolume;
|
ServerVolume? fetchedVolume;
|
||||||
final List<ServerVolume> volumes =
|
final List<ServerVolume> volumes =
|
||||||
await providerApi.getVolumeProvider().getVolumes();
|
await providerApi!.getVolumeProvider().getVolumes();
|
||||||
|
|
||||||
for (final ServerVolume providerVolume in volumes) {
|
for (final ServerVolume providerVolume in volumes) {
|
||||||
if (providerVolume.linuxDevice == null) {
|
if (providerVolume.linuxDevice == null) {
|
||||||
|
|
9
lib/logic/models/disk_size.dart
Normal file
9
lib/logic/models/disk_size.dart
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
class DiskSize {
|
||||||
|
DiskSize({final this.byte = 0});
|
||||||
|
|
||||||
|
double asKb() => byte / 1000.0;
|
||||||
|
double asMb() => byte / 1000000.0;
|
||||||
|
double asGb() => byte / 1000000000.0;
|
||||||
|
|
||||||
|
int byte;
|
||||||
|
}
|
|
@ -7,8 +7,8 @@ import 'package:selfprivacy/utils/password_generator.dart';
|
||||||
import 'package:selfprivacy/logic/models/hive/user.dart';
|
import 'package:selfprivacy/logic/models/hive/user.dart';
|
||||||
|
|
||||||
@immutable
|
@immutable
|
||||||
class Job extends Equatable {
|
class ClientJob extends Equatable {
|
||||||
Job({
|
ClientJob({
|
||||||
required this.title,
|
required this.title,
|
||||||
final String? id,
|
final String? id,
|
||||||
}) : id = id ?? StringGenerators.simpleId();
|
}) : id = id ?? StringGenerators.simpleId();
|
||||||
|
@ -20,7 +20,7 @@ class Job extends Equatable {
|
||||||
List<Object> get props => [id, title];
|
List<Object> get props => [id, title];
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreateUserJob extends Job {
|
class CreateUserJob extends ClientJob {
|
||||||
CreateUserJob({
|
CreateUserJob({
|
||||||
required this.user,
|
required this.user,
|
||||||
}) : super(title: '${"jobs.createUser".tr()} ${user.login}');
|
}) : super(title: '${"jobs.createUser".tr()} ${user.login}');
|
||||||
|
@ -31,7 +31,7 @@ class CreateUserJob extends Job {
|
||||||
List<Object> get props => [id, title, user];
|
List<Object> get props => [id, title, user];
|
||||||
}
|
}
|
||||||
|
|
||||||
class DeleteUserJob extends Job {
|
class DeleteUserJob extends ClientJob {
|
||||||
DeleteUserJob({
|
DeleteUserJob({
|
||||||
required this.user,
|
required this.user,
|
||||||
}) : super(title: '${"jobs.deleteUser".tr()} ${user.login}');
|
}) : super(title: '${"jobs.deleteUser".tr()} ${user.login}');
|
||||||
|
@ -42,7 +42,7 @@ class DeleteUserJob extends Job {
|
||||||
List<Object> get props => [id, title, user];
|
List<Object> get props => [id, title, user];
|
||||||
}
|
}
|
||||||
|
|
||||||
class ToggleJob extends Job {
|
class ToggleJob extends ClientJob {
|
||||||
ToggleJob({
|
ToggleJob({
|
||||||
required this.type,
|
required this.type,
|
||||||
required final super.title,
|
required final super.title,
|
||||||
|
@ -66,7 +66,7 @@ class ServiceToggleJob extends ToggleJob {
|
||||||
final bool needToTurnOn;
|
final bool needToTurnOn;
|
||||||
}
|
}
|
||||||
|
|
||||||
class CreateSSHKeyJob extends Job {
|
class CreateSSHKeyJob extends ClientJob {
|
||||||
CreateSSHKeyJob({
|
CreateSSHKeyJob({
|
||||||
required this.user,
|
required this.user,
|
||||||
required this.publicKey,
|
required this.publicKey,
|
||||||
|
@ -79,7 +79,7 @@ class CreateSSHKeyJob extends Job {
|
||||||
List<Object> get props => [id, title, user, publicKey];
|
List<Object> get props => [id, title, user, publicKey];
|
||||||
}
|
}
|
||||||
|
|
||||||
class DeleteSSHKeyJob extends Job {
|
class DeleteSSHKeyJob extends ClientJob {
|
||||||
DeleteSSHKeyJob({
|
DeleteSSHKeyJob({
|
||||||
required this.user,
|
required this.user,
|
||||||
required this.publicKey,
|
required this.publicKey,
|
||||||
|
|
|
@ -24,7 +24,7 @@ BackupStatus _$BackupStatusFromJson(Map<String, dynamic> json) => BackupStatus(
|
||||||
|
|
||||||
Map<String, dynamic> _$BackupStatusToJson(BackupStatus instance) =>
|
Map<String, dynamic> _$BackupStatusToJson(BackupStatus instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'status': _$BackupStatusEnumEnumMap[instance.status]!,
|
'status': _$BackupStatusEnumEnumMap[instance.status],
|
||||||
'progress': instance.progress,
|
'progress': instance.progress,
|
||||||
'error_message': instance.errorMessage,
|
'error_message': instance.errorMessage,
|
||||||
};
|
};
|
||||||
|
|
|
@ -23,7 +23,7 @@ Map<String, dynamic> _$HetznerServerInfoToJson(HetznerServerInfo instance) =>
|
||||||
<String, dynamic>{
|
<String, dynamic>{
|
||||||
'id': instance.id,
|
'id': instance.id,
|
||||||
'name': instance.name,
|
'name': instance.name,
|
||||||
'status': _$ServerStatusEnumMap[instance.status]!,
|
'status': _$ServerStatusEnumMap[instance.status],
|
||||||
'created': instance.created.toIso8601String(),
|
'created': instance.created.toIso8601String(),
|
||||||
'volumes': instance.volumes,
|
'volumes': instance.volumes,
|
||||||
'server_type': instance.serverType,
|
'server_type': instance.serverType,
|
||||||
|
|
39
lib/logic/models/json/server_job.dart
Normal file
39
lib/logic/models/json/server_job.dart
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
import 'package:json_annotation/json_annotation.dart';
|
||||||
|
|
||||||
|
part 'server_job.g.dart';
|
||||||
|
|
||||||
|
@JsonSerializable()
|
||||||
|
class ServerJob {
|
||||||
|
factory ServerJob.fromJson(final Map<String, dynamic> json) =>
|
||||||
|
_$ServerJobFromJson(json);
|
||||||
|
ServerJob({
|
||||||
|
required this.name,
|
||||||
|
required this.description,
|
||||||
|
required this.status,
|
||||||
|
required this.uid,
|
||||||
|
required this.updatedAt,
|
||||||
|
required this.createdAt,
|
||||||
|
final this.error,
|
||||||
|
final this.progress,
|
||||||
|
final this.result,
|
||||||
|
final this.statusText,
|
||||||
|
final this.finishedAt,
|
||||||
|
});
|
||||||
|
|
||||||
|
final String name;
|
||||||
|
final String description;
|
||||||
|
final String status;
|
||||||
|
final String uid;
|
||||||
|
@JsonKey(name: 'updated_at')
|
||||||
|
final String updatedAt;
|
||||||
|
@JsonKey(name: 'created_at')
|
||||||
|
final DateTime createdAt;
|
||||||
|
|
||||||
|
final String? error;
|
||||||
|
final int? progress;
|
||||||
|
final String? result;
|
||||||
|
@JsonKey(name: 'status_text')
|
||||||
|
final String? statusText;
|
||||||
|
@JsonKey(name: 'finished_at')
|
||||||
|
final String? finishedAt;
|
||||||
|
}
|
35
lib/logic/models/json/server_job.g.dart
Normal file
35
lib/logic/models/json/server_job.g.dart
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
// GENERATED CODE - DO NOT MODIFY BY HAND
|
||||||
|
|
||||||
|
part of 'server_job.dart';
|
||||||
|
|
||||||
|
// **************************************************************************
|
||||||
|
// JsonSerializableGenerator
|
||||||
|
// **************************************************************************
|
||||||
|
|
||||||
|
ServerJob _$ServerJobFromJson(Map<String, dynamic> json) => ServerJob(
|
||||||
|
name: json['name'] as String,
|
||||||
|
description: json['description'] as String,
|
||||||
|
status: json['status'] as String,
|
||||||
|
uid: json['uid'] as String,
|
||||||
|
updatedAt: json['updated_at'] as String,
|
||||||
|
createdAt: DateTime.parse(json['created_at'] as String),
|
||||||
|
error: json['error'] as String?,
|
||||||
|
progress: json['progress'] as int?,
|
||||||
|
result: json['result'] as String?,
|
||||||
|
statusText: json['status_text'] as String?,
|
||||||
|
finishedAt: json['finished_at'] as String?,
|
||||||
|
);
|
||||||
|
|
||||||
|
Map<String, dynamic> _$ServerJobToJson(ServerJob instance) => <String, dynamic>{
|
||||||
|
'name': instance.name,
|
||||||
|
'description': instance.description,
|
||||||
|
'status': instance.status,
|
||||||
|
'uid': instance.uid,
|
||||||
|
'updated_at': instance.updatedAt,
|
||||||
|
'created_at': instance.createdAt.toIso8601String(),
|
||||||
|
'error': instance.error,
|
||||||
|
'progress': instance.progress,
|
||||||
|
'result': instance.result,
|
||||||
|
'status_text': instance.statusText,
|
||||||
|
'finished_at': instance.finishedAt,
|
||||||
|
};
|
34
lib/ui/components/brand_button/outlined_button.dart
Normal file
34
lib/ui/components/brand_button/outlined_button.dart
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class BrandOutlinedButton extends StatelessWidget {
|
||||||
|
const BrandOutlinedButton({
|
||||||
|
final super.key,
|
||||||
|
this.onPressed,
|
||||||
|
this.title,
|
||||||
|
this.child,
|
||||||
|
this.disabled = false,
|
||||||
|
});
|
||||||
|
|
||||||
|
final VoidCallback? onPressed;
|
||||||
|
final String? title;
|
||||||
|
final Widget? child;
|
||||||
|
final bool disabled;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(final BuildContext context) => ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(
|
||||||
|
minHeight: 40,
|
||||||
|
minWidth: double.infinity,
|
||||||
|
),
|
||||||
|
child: OutlinedButton(
|
||||||
|
onPressed: onPressed,
|
||||||
|
child: child ??
|
||||||
|
Text(
|
||||||
|
title ?? '',
|
||||||
|
style: Theme.of(context).textTheme.button?.copyWith(
|
||||||
|
color: Theme.of(context).colorScheme.primary,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
|
@ -67,7 +67,7 @@ class JobsContent extends StatelessWidget {
|
||||||
];
|
];
|
||||||
} else if (state is JobsStateWithJobs) {
|
} else if (state is JobsStateWithJobs) {
|
||||||
widgets = [
|
widgets = [
|
||||||
...state.jobList
|
...state.clientJobList
|
||||||
.map(
|
.map(
|
||||||
(final j) => Row(
|
(final j) => Row(
|
||||||
children: [
|
children: [
|
||||||
|
|
|
@ -83,10 +83,14 @@ class _ProgressBarState extends State<ProgressBar> {
|
||||||
height: 5,
|
height: 5,
|
||||||
decoration: BoxDecoration(
|
decoration: BoxDecoration(
|
||||||
borderRadius: BorderRadius.circular(5),
|
borderRadius: BorderRadius.circular(5),
|
||||||
gradient: const LinearGradient(
|
color: Theme.of(context).colorScheme.surfaceVariant,
|
||||||
|
gradient: LinearGradient(
|
||||||
begin: Alignment.topLeft,
|
begin: Alignment.topLeft,
|
||||||
end: Alignment.bottomRight,
|
end: Alignment.bottomRight,
|
||||||
colors: BrandColors.stableGradientColors,
|
colors: [
|
||||||
|
Theme.of(context).colorScheme.primary,
|
||||||
|
Theme.of(context).colorScheme.secondary
|
||||||
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
duration: const Duration(
|
duration: const Duration(
|
||||||
|
@ -122,14 +126,6 @@ class _ProgressBarState extends State<ProgressBar> {
|
||||||
text: TextSpan(
|
text: TextSpan(
|
||||||
style: progressTextStyleLight,
|
style: progressTextStyleLight,
|
||||||
children: [
|
children: [
|
||||||
if (checked)
|
|
||||||
const WidgetSpan(
|
|
||||||
child: Padding(
|
|
||||||
padding: EdgeInsets.only(bottom: 2, right: 2),
|
|
||||||
child: Icon(BrandIcons.check, size: 11),
|
|
||||||
),
|
|
||||||
)
|
|
||||||
else
|
|
||||||
TextSpan(text: '${index + 1}.', style: style),
|
TextSpan(text: '${index + 1}.', style: style),
|
||||||
TextSpan(text: step, style: style)
|
TextSpan(text: step, style: style)
|
||||||
],
|
],
|
||||||
|
|
|
@ -5,6 +5,9 @@ import 'package:selfprivacy/logic/cubit/backups/backups_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/dns_records/dns_records_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/dns_records/dns_records_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
|
||||||
|
import 'package:selfprivacy/logic/cubit/volumes/volumes_cubit.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
||||||
import 'package:selfprivacy/logic/models/json/server_disk_volume.dart';
|
import 'package:selfprivacy/logic/models/json/server_disk_volume.dart';
|
||||||
import 'package:selfprivacy/logic/models/provider.dart';
|
import 'package:selfprivacy/logic/models/provider.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
|
import 'package:selfprivacy/ui/components/brand_bottom_sheet/brand_bottom_sheet.dart';
|
||||||
|
@ -18,6 +21,7 @@ import 'package:selfprivacy/ui/pages/backup_details/backup_details.dart';
|
||||||
import 'package:selfprivacy/ui/pages/dns_details/dns_details.dart';
|
import 'package:selfprivacy/ui/pages/dns_details/dns_details.dart';
|
||||||
import 'package:selfprivacy/ui/pages/providers/storage_card.dart';
|
import 'package:selfprivacy/ui/pages/providers/storage_card.dart';
|
||||||
import 'package:selfprivacy/ui/pages/server_details/server_details_screen.dart';
|
import 'package:selfprivacy/ui/pages/server_details/server_details_screen.dart';
|
||||||
|
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
||||||
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
||||||
|
|
||||||
GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
|
||||||
|
@ -73,15 +77,21 @@ class _ProvidersPageState extends State<ProvidersPage> {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.only(bottom: 30),
|
padding: const EdgeInsets.only(bottom: 30),
|
||||||
child: FutureBuilder(
|
child: FutureBuilder(
|
||||||
future:
|
future: Future.wait([
|
||||||
context.read<ServerInstallationCubit>().getServerDiskVolumes(),
|
context.read<ServerInstallationCubit>().getServerDiskVolumes(),
|
||||||
|
context.read<ApiVolumesCubit>().getVolumes(),
|
||||||
|
]),
|
||||||
builder: (
|
builder: (
|
||||||
final BuildContext context,
|
final BuildContext context,
|
||||||
final AsyncSnapshot<Object?> snapshot,
|
final AsyncSnapshot<List<dynamic>> snapshot,
|
||||||
) =>
|
) =>
|
||||||
StorageCard(
|
StorageCard(
|
||||||
volumes:
|
diskStatus: snapshot.hasData
|
||||||
snapshot.hasData ? snapshot.data as List<ServerDiskVolume> : [],
|
? toDiskStatus(
|
||||||
|
snapshot.data![0] as List<ServerDiskVolume>,
|
||||||
|
snapshot.data![1] as List<ServerVolume>,
|
||||||
|
)
|
||||||
|
: DiskStatus(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
@ -105,6 +115,60 @@ class _ProvidersPageState extends State<ProvidersPage> {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DiskStatus toDiskStatus(
|
||||||
|
final List<ServerDiskVolume> serverVolumes,
|
||||||
|
final List<ServerVolume> providerVolumes,
|
||||||
|
) {
|
||||||
|
final DiskStatus diskStatus = DiskStatus();
|
||||||
|
diskStatus.isDiskOkay = true;
|
||||||
|
|
||||||
|
if (providerVolumes.isEmpty || serverVolumes.isEmpty) {
|
||||||
|
diskStatus.isDiskOkay = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
diskStatus.diskVolumes = serverVolumes.map((
|
||||||
|
final ServerDiskVolume volume,
|
||||||
|
) {
|
||||||
|
final DiskVolume diskVolume = DiskVolume();
|
||||||
|
diskVolume.sizeUsed = DiskSize(
|
||||||
|
byte: volume.usedSpace == 'None' ? 0 : int.parse(volume.usedSpace),
|
||||||
|
);
|
||||||
|
diskVolume.sizeTotal = DiskSize(
|
||||||
|
byte: volume.totalSpace == 'None' ? 0 : int.parse(volume.totalSpace),
|
||||||
|
);
|
||||||
|
diskVolume.serverDiskVolume = volume;
|
||||||
|
|
||||||
|
for (final ServerVolume providerVolume in providerVolumes) {
|
||||||
|
if (providerVolume.linuxDevice == null ||
|
||||||
|
volume.model == null ||
|
||||||
|
volume.serial == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
final String deviceId = providerVolume.linuxDevice!.split('/').last;
|
||||||
|
if (deviceId.contains(volume.model!) &&
|
||||||
|
deviceId.contains(volume.serial!)) {
|
||||||
|
diskVolume.providerVolume = providerVolume;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
diskVolume.name = volume.name;
|
||||||
|
diskVolume.root = volume.root;
|
||||||
|
diskVolume.percentage =
|
||||||
|
volume.usedSpace != 'None' && volume.totalSpace != 'None'
|
||||||
|
? 1.0 / diskVolume.sizeTotal.byte * diskVolume.sizeUsed.byte
|
||||||
|
: 0.0;
|
||||||
|
if (diskVolume.percentage >= 0.8 ||
|
||||||
|
diskVolume.sizeTotal.asGb() - diskVolume.sizeUsed.asGb() <= 2.0) {
|
||||||
|
diskStatus.isDiskOkay = false;
|
||||||
|
}
|
||||||
|
return diskVolume;
|
||||||
|
}).toList();
|
||||||
|
|
||||||
|
return diskStatus;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _Card extends StatelessWidget {
|
class _Card extends StatelessWidget {
|
||||||
|
@ -137,8 +201,9 @@ class _Card extends StatelessWidget {
|
||||||
break;
|
break;
|
||||||
case ProviderType.domain:
|
case ProviderType.domain:
|
||||||
title = 'providers.domain.screen_title'.tr();
|
title = 'providers.domain.screen_title'.tr();
|
||||||
message =
|
message = appConfig.isDomainSelected
|
||||||
appConfig.isDomainFilled ? appConfig.serverDomain!.domainName : '';
|
? appConfig.serverDomain!.domainName
|
||||||
|
: '';
|
||||||
stableText = 'providers.domain.status'.tr();
|
stableText = 'providers.domain.status'.tr();
|
||||||
|
|
||||||
onTap = () => Navigator.of(context).push(
|
onTap = () => Navigator.of(context).push(
|
||||||
|
@ -168,12 +233,17 @@ class _Card extends StatelessWidget {
|
||||||
status: provider.state,
|
status: provider.state,
|
||||||
child: Icon(provider.icon, size: 30, color: Colors.white),
|
child: Icon(provider.icon, size: 30, color: Colors.white),
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 16),
|
||||||
BrandText.h2(title),
|
Text(
|
||||||
const SizedBox(height: 10),
|
title,
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
),
|
||||||
if (message != null) ...[
|
if (message != null) ...[
|
||||||
BrandText.body2(message),
|
Text(
|
||||||
const SizedBox(height: 10),
|
message,
|
||||||
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
],
|
],
|
||||||
if (provider.state == StateType.stable) BrandText.body2(stableText),
|
if (provider.state == StateType.stable) BrandText.body2(stableText),
|
||||||
],
|
],
|
||||||
|
|
|
@ -1,67 +1,47 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/providers/providers_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/models/json/server_disk_volume.dart';
|
|
||||||
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_linear_indicator/brand_linear_indicator.dart';
|
|
||||||
import 'package:selfprivacy/ui/components/icon_status_mask/icon_status_mask.dart';
|
import 'package:selfprivacy/ui/components/icon_status_mask/icon_status_mask.dart';
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/server_storage.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/server_storage.dart';
|
||||||
|
import 'package:selfprivacy/ui/pages/server_storage/server_storage_list_item.dart';
|
||||||
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
||||||
|
|
||||||
class StorageCard extends StatelessWidget {
|
class StorageCard extends StatelessWidget {
|
||||||
const StorageCard({required this.volumes, final super.key});
|
const StorageCard({
|
||||||
|
required final this.diskStatus,
|
||||||
|
final super.key,
|
||||||
|
});
|
||||||
|
|
||||||
final List<ServerDiskVolume> volumes;
|
final DiskStatus diskStatus;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(final BuildContext context) {
|
Widget build(final BuildContext context) {
|
||||||
final DiskStatus diskStatus = toDiskStatus(volumes);
|
|
||||||
|
|
||||||
final List<Widget> sections = [];
|
final List<Widget> sections = [];
|
||||||
for (final DiskVolume volume in diskStatus.diskVolumes) {
|
for (final DiskVolume volume in diskStatus.diskVolumes) {
|
||||||
sections.add(
|
sections.add(
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
);
|
);
|
||||||
sections.add(
|
sections.add(
|
||||||
Text(
|
ServerStorageListItem(
|
||||||
'providers.storage.disk_usage'.tr(
|
volume: volume,
|
||||||
args: [
|
dense: true,
|
||||||
volume.gbUsed.toString(),
|
showIcon: false,
|
||||||
],
|
|
||||||
),
|
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
BrandLinearIndicator(
|
|
||||||
value: volume.percentage,
|
|
||||||
color: volume.root
|
|
||||||
? Theme.of(context).colorScheme.primary
|
|
||||||
: Theme.of(context).colorScheme.secondary,
|
|
||||||
backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
|
|
||||||
height: 14.0,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
const SizedBox(height: 4),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
Text(
|
|
||||||
'providers.storage.disk_total'.tr(
|
|
||||||
args: [
|
|
||||||
volume.gbTotal.toString(),
|
|
||||||
volume.name,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
StateType state = context.watch<ServerInstallationCubit>().state
|
||||||
|
is ServerInstallationFinished
|
||||||
|
? StateType.stable
|
||||||
|
: StateType.uninitialized;
|
||||||
|
|
||||||
|
if (state == StateType.stable && !diskStatus.isDiskOkay) {
|
||||||
|
state = StateType.error;
|
||||||
|
}
|
||||||
|
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () => Navigator.of(context).push(
|
onTap: () => Navigator.of(context).push(
|
||||||
materialRoute(
|
materialRoute(
|
||||||
|
@ -77,16 +57,17 @@ class StorageCard extends StatelessWidget {
|
||||||
Row(
|
Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||||
children: [
|
children: [
|
||||||
const IconStatusMask(
|
IconStatusMask(
|
||||||
status: StateType.stable,
|
status: state,
|
||||||
child: Icon(
|
child: const Icon(
|
||||||
Icons.storage_outlined,
|
Icons.storage_outlined,
|
||||||
size: 30,
|
size: 30,
|
||||||
color: Colors.white,
|
color: Colors.white,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
if (state != StateType.uninitialized)
|
||||||
IconStatusMask(
|
IconStatusMask(
|
||||||
status: StateType.stable,
|
status: state,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
diskStatus.isDiskOkay
|
diskStatus.isDiskOkay
|
||||||
? Icons.check_circle_outline
|
? Icons.check_circle_outline
|
||||||
|
@ -102,6 +83,7 @@ class StorageCard extends StatelessWidget {
|
||||||
'providers.storage.card_title'.tr(),
|
'providers.storage.card_title'.tr(),
|
||||||
style: Theme.of(context).textTheme.titleLarge,
|
style: Theme.of(context).textTheme.titleLarge,
|
||||||
),
|
),
|
||||||
|
if (state != StateType.uninitialized)
|
||||||
Text(
|
Text(
|
||||||
diskStatus.isDiskOkay
|
diskStatus.isDiskOkay
|
||||||
? 'providers.storage.status_ok'.tr()
|
? 'providers.storage.status_ok'.tr()
|
||||||
|
@ -115,34 +97,4 @@ class StorageCard extends StatelessWidget {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
DiskStatus toDiskStatus(final List<ServerDiskVolume> status) {
|
|
||||||
final DiskStatus diskStatus = DiskStatus();
|
|
||||||
diskStatus.isDiskOkay = true;
|
|
||||||
|
|
||||||
diskStatus.diskVolumes = status.map((
|
|
||||||
final ServerDiskVolume volume,
|
|
||||||
) {
|
|
||||||
final DiskVolume diskVolume = DiskVolume();
|
|
||||||
diskVolume.gbUsed = volume.usedSpace == 'None'
|
|
||||||
? 0
|
|
||||||
: int.parse(volume.usedSpace) ~/ 1000000000;
|
|
||||||
diskVolume.gbTotal = volume.totalSpace == 'None'
|
|
||||||
? 0
|
|
||||||
: int.parse(volume.totalSpace) ~/ 1000000000;
|
|
||||||
diskVolume.name = volume.name;
|
|
||||||
diskVolume.root = volume.root;
|
|
||||||
diskVolume.percentage =
|
|
||||||
volume.usedSpace != 'None' && volume.totalSpace != 'None'
|
|
||||||
? 1.0 / int.parse(volume.totalSpace) * int.parse(volume.usedSpace)
|
|
||||||
: 0.0;
|
|
||||||
if (diskVolume.percentage >= 0.8 ||
|
|
||||||
diskVolume.gbTotal - diskVolume.gbUsed <= 2) {
|
|
||||||
diskStatus.isDiskOkay = false;
|
|
||||||
}
|
|
||||||
return diskVolume;
|
|
||||||
}).toList();
|
|
||||||
|
|
||||||
return diskStatus;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,134 +1,46 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
|
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_button/filled_button.dart';
|
|
||||||
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_linear_indicator/brand_linear_indicator.dart';
|
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/extending_volume.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/server_storage_list_item.dart';
|
||||||
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
|
||||||
|
|
||||||
class ServerStoragePage extends StatefulWidget {
|
class DataMigrationPage extends StatefulWidget {
|
||||||
const ServerStoragePage({required this.diskStatus, final super.key});
|
const DataMigrationPage({
|
||||||
|
required this.diskVolumeToResize,
|
||||||
|
required this.diskStatus,
|
||||||
|
required this.resizeTarget,
|
||||||
|
final super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final DiskVolume diskVolumeToResize;
|
||||||
final DiskStatus diskStatus;
|
final DiskStatus diskStatus;
|
||||||
|
final DiskSize resizeTarget;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<ServerStoragePage> createState() => _ServerStoragePageState();
|
State<DataMigrationPage> createState() => _DataMigrationPageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ServerStoragePageState extends State<ServerStoragePage> {
|
class _DataMigrationPageState extends State<DataMigrationPage> {
|
||||||
List<bool> _expandedSections = [];
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(final BuildContext context) {
|
Widget build(final BuildContext context) {
|
||||||
final bool isReady = context.watch<ServerInstallationCubit>().state
|
int a = 0;
|
||||||
is ServerInstallationFinished;
|
|
||||||
|
|
||||||
if (!isReady) {
|
|
||||||
return BrandHeroScreen(
|
return BrandHeroScreen(
|
||||||
hasBackButton: true,
|
hasBackButton: true,
|
||||||
heroTitle: 'providers.storage.card_title'.tr(),
|
heroTitle: 'providers.storage.data_migration_title'.tr(),
|
||||||
children: const [],
|
children: [
|
||||||
);
|
...widget.diskStatus.diskVolumes
|
||||||
}
|
.map(
|
||||||
|
(final volume) => Column(
|
||||||
/// The first section is expanded, the rest are hidden by default.
|
children: [
|
||||||
/// ( true, false, false, etc... )
|
ServerStorageListItem(
|
||||||
_expandedSections = [
|
volume: volume,
|
||||||
true,
|
|
||||||
...List<bool>.filled(
|
|
||||||
widget.diskStatus.diskVolumes.length - 1,
|
|
||||||
false,
|
|
||||||
),
|
),
|
||||||
];
|
|
||||||
|
|
||||||
int sectionId = 0;
|
|
||||||
final List<Widget> sections = [];
|
|
||||||
for (final DiskVolume volume in widget.diskStatus.diskVolumes) {
|
|
||||||
sections.add(
|
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
Expanded(
|
|
||||||
child: Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
const Icon(
|
|
||||||
Icons.storage_outlined,
|
|
||||||
size: 24,
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
'providers.storage.disk_usage'.tr(
|
|
||||||
args: [
|
|
||||||
volume.gbUsed.toString(),
|
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
)
|
||||||
),
|
.toList(),
|
||||||
Expanded(
|
|
||||||
child: BrandLinearIndicator(
|
|
||||||
value: volume.percentage,
|
|
||||||
color: volume.root
|
|
||||||
? Theme.of(context).colorScheme.primary
|
|
||||||
: Theme.of(context).colorScheme.secondary,
|
|
||||||
backgroundColor:
|
|
||||||
Theme.of(context).colorScheme.surfaceVariant,
|
|
||||||
height: 14.0,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
'providers.storage.disk_total'.tr(
|
|
||||||
args: [
|
|
||||||
volume.gbTotal.toString(),
|
|
||||||
volume.name,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
AnimatedCrossFade(
|
|
||||||
duration: const Duration(milliseconds: 200),
|
|
||||||
crossFadeState: _expandedSections[sectionId]
|
|
||||||
? CrossFadeState.showFirst
|
|
||||||
: CrossFadeState.showSecond,
|
|
||||||
firstChild: FilledButton(
|
|
||||||
title: 'providers.extend_volume_button.title'.tr(),
|
|
||||||
onPressed: () => Navigator.of(context).push(
|
|
||||||
materialRoute(
|
|
||||||
ExtendingVolumePage(
|
|
||||||
diskVolume: volume,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
secondChild: Container(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
++sectionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
return BrandHeroScreen(
|
|
||||||
hasBackButton: true,
|
|
||||||
heroTitle: 'providers.storage.card_title'.tr(),
|
|
||||||
children: [
|
|
||||||
...sections,
|
|
||||||
const SizedBox(height: 8),
|
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,8 +1,15 @@
|
||||||
|
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/hive/server_details.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/json/server_disk_volume.dart';
|
||||||
|
|
||||||
class DiskVolume {
|
class DiskVolume {
|
||||||
int gbUsed = 0;
|
DiskSize sizeUsed = DiskSize();
|
||||||
int gbTotal = 0;
|
DiskSize sizeTotal = DiskSize();
|
||||||
String name = '';
|
String name = '';
|
||||||
bool root = false;
|
bool root = false;
|
||||||
|
bool isResizable = true;
|
||||||
|
ServerDiskVolume? serverDiskVolume;
|
||||||
|
ServerVolume? providerVolume;
|
||||||
|
|
||||||
/// from 0.0 to 1.0
|
/// from 0.0 to 1.0
|
||||||
double percentage = 0.0;
|
double percentage = 0.0;
|
||||||
|
|
|
@ -1,55 +1,40 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/app_config_dependent/authentication_dependend_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/volumes/volumes_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/volumes/volumes_cubit.dart';
|
||||||
|
import 'package:selfprivacy/logic/models/disk_size.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_button/filled_button.dart';
|
import 'package:selfprivacy/ui/components/brand_button/filled_button.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
||||||
|
|
||||||
class ExtendingVolumePage extends StatefulWidget {
|
class ExtendingVolumePage extends StatefulWidget {
|
||||||
const ExtendingVolumePage({required this.diskVolume, final super.key});
|
const ExtendingVolumePage({
|
||||||
|
required this.diskVolumeToResize,
|
||||||
|
required this.diskStatus,
|
||||||
|
final super.key,
|
||||||
|
});
|
||||||
|
|
||||||
final DiskVolume diskVolume;
|
final DiskVolume diskVolumeToResize;
|
||||||
|
final DiskStatus diskStatus;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<ExtendingVolumePage> createState() => _ExtendingVolumePageState();
|
State<ExtendingVolumePage> createState() => _ExtendingVolumePageState();
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
||||||
bool _isSizeError = false;
|
bool _isError = false;
|
||||||
bool _isPriceError = false;
|
|
||||||
|
|
||||||
double _currentSliderGbValue = 20.0;
|
double _currentSliderGbValue = -1;
|
||||||
double _euroPerGb = 1.0;
|
double _euroPerGb = 1.0;
|
||||||
|
|
||||||
final double maxGb = 500.0;
|
final DiskSize maxSize = DiskSize(byte: 500000000000);
|
||||||
double minGb = 0.0;
|
DiskSize minSize = DiskSize();
|
||||||
|
|
||||||
final TextEditingController _sizeController = TextEditingController();
|
final TextEditingController _sizeController = TextEditingController();
|
||||||
late final TextEditingController _priceController;
|
final TextEditingController _priceController = TextEditingController();
|
||||||
|
|
||||||
void _updateByPrice() {
|
|
||||||
final double price = double.parse(_priceController.text);
|
|
||||||
_currentSliderGbValue = price / _euroPerGb;
|
|
||||||
_sizeController.text = _currentSliderGbValue.round.toString();
|
|
||||||
|
|
||||||
/// Now we need to convert size back to price to round
|
|
||||||
/// it properly and display it in text field as well,
|
|
||||||
/// because size in GB can ONLY(!) be discrete.
|
|
||||||
_updateBySize();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _updateBySize() {
|
|
||||||
final double size = double.parse(_sizeController.text);
|
|
||||||
_priceController.text = (size * _euroPerGb).toString();
|
|
||||||
_updateErrorStatuses();
|
|
||||||
}
|
|
||||||
|
|
||||||
void _updateErrorStatuses() {
|
void _updateErrorStatuses() {
|
||||||
final bool error = minGb > _currentSliderGbValue;
|
_isError = minSize.asGb() > _currentSliderGbValue;
|
||||||
_isSizeError = error;
|
|
||||||
_isPriceError = error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
@ -59,15 +44,26 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
||||||
final BuildContext context,
|
final BuildContext context,
|
||||||
final AsyncSnapshot<void> snapshot,
|
final AsyncSnapshot<void> snapshot,
|
||||||
) {
|
) {
|
||||||
|
if (!snapshot.hasData) {
|
||||||
|
return BrandHeroScreen(
|
||||||
|
hasBackButton: true,
|
||||||
|
heroTitle: 'providers.storage.extending_volume_title'.tr(),
|
||||||
|
heroSubtitle:
|
||||||
|
'providers.storage.extending_volume_description'.tr(),
|
||||||
|
children: const [
|
||||||
|
SizedBox(height: 16),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
_euroPerGb = snapshot.data as double;
|
_euroPerGb = snapshot.data as double;
|
||||||
_sizeController.text = _currentSliderGbValue.toString();
|
_sizeController.text = _currentSliderGbValue.truncate().toString();
|
||||||
_priceController.text =
|
_priceController.text =
|
||||||
(_euroPerGb * double.parse(_sizeController.text)).toString();
|
(_euroPerGb * double.parse(_sizeController.text))
|
||||||
_sizeController.addListener(_updateBySize);
|
.toStringAsPrecision(2);
|
||||||
_priceController.addListener(_updateByPrice);
|
minSize = widget.diskVolumeToResize.sizeTotal;
|
||||||
minGb = widget.diskVolume.gbTotal + 1 < maxGb
|
if (_currentSliderGbValue < 0) {
|
||||||
? widget.diskVolume.gbTotal + 1
|
_currentSliderGbValue = minSize.asGb();
|
||||||
: maxGb;
|
}
|
||||||
|
|
||||||
return BrandHeroScreen(
|
return BrandHeroScreen(
|
||||||
hasBackButton: true,
|
hasBackButton: true,
|
||||||
|
@ -76,47 +72,48 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
||||||
children: [
|
children: [
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
Row(
|
Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
children: [
|
children: [
|
||||||
TextField(
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 130),
|
||||||
|
child: TextField(
|
||||||
|
readOnly: true,
|
||||||
|
textAlign: TextAlign.start,
|
||||||
textInputAction: TextInputAction.next,
|
textInputAction: TextInputAction.next,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
controller: _sizeController,
|
controller: _sizeController,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
border: const OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
errorText: _isSizeError ? ' ' : null,
|
errorText: _isError ? ' ' : null,
|
||||||
labelText: 'providers.storage.size'.tr(),
|
labelText: 'providers.storage.size'.tr(),
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
|
||||||
inputFormatters: <TextInputFormatter>[
|
|
||||||
FilteringTextInputFormatter.digitsOnly,
|
|
||||||
], // Only numbers can be entered
|
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
),
|
||||||
TextField(
|
const SizedBox(width: 16),
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 130),
|
||||||
|
child: TextField(
|
||||||
|
readOnly: true,
|
||||||
|
textAlign: TextAlign.start,
|
||||||
textInputAction: TextInputAction.next,
|
textInputAction: TextInputAction.next,
|
||||||
enabled: true,
|
enabled: true,
|
||||||
controller: _priceController,
|
controller: _priceController,
|
||||||
decoration: InputDecoration(
|
decoration: InputDecoration(
|
||||||
border: const OutlineInputBorder(),
|
border: const OutlineInputBorder(),
|
||||||
errorText: _isPriceError ? ' ' : null,
|
errorText: _isError ? ' ' : null,
|
||||||
labelText: 'providers.storage.euro'.tr(),
|
labelText: 'providers.storage.euro'.tr(),
|
||||||
),
|
),
|
||||||
keyboardType: TextInputType.number,
|
),
|
||||||
inputFormatters: <TextInputFormatter>[
|
|
||||||
FilteringTextInputFormatter.digitsOnly,
|
|
||||||
], // Only numbers can be entered
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
Slider(
|
Slider(
|
||||||
min: minGb,
|
min: minSize.asGb(),
|
||||||
value: widget.diskVolume.gbTotal + 5 < maxGb
|
value: _currentSliderGbValue,
|
||||||
? widget.diskVolume.gbTotal + 5
|
max: maxSize.asGb(),
|
||||||
: maxGb,
|
|
||||||
max: maxGb,
|
|
||||||
divisions: 1,
|
|
||||||
label: _currentSliderGbValue.round().toString(),
|
|
||||||
onChanged: (final double value) {
|
onChanged: (final double value) {
|
||||||
setState(() {
|
setState(() {
|
||||||
_currentSliderGbValue = value;
|
_currentSliderGbValue = value;
|
||||||
|
@ -126,15 +123,22 @@ class _ExtendingVolumePageState extends State<ExtendingVolumePage> {
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
FilledButton(
|
FilledButton(
|
||||||
title: 'providers.extend_volume_button.title'.tr(),
|
title: 'providers.storage.extend_volume_button.title'.tr(),
|
||||||
onPressed: null,
|
onPressed: null,
|
||||||
|
disabled: _isError,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
const Divider(
|
const Divider(
|
||||||
height: 1.0,
|
height: 1.0,
|
||||||
),
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
const Icon(Icons.info_outlined, size: 24),
|
const Align(
|
||||||
|
alignment: Alignment.centerLeft,
|
||||||
|
child: Icon(
|
||||||
|
Icons.info_outlined,
|
||||||
|
size: 24,
|
||||||
|
),
|
||||||
|
),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
Text('providers.storage.extending_volume_price_info'.tr()),
|
Text('providers.storage.extending_volume_price_info'.tr()),
|
||||||
const SizedBox(height: 16),
|
const SizedBox(height: 16),
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
import 'package:easy_localization/easy_localization.dart';
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/server_installation/server_installation_cubit.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_button/filled_button.dart';
|
import 'package:selfprivacy/ui/components/brand_button/outlined_button.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
||||||
import 'package:selfprivacy/ui/components/brand_linear_indicator/brand_linear_indicator.dart';
|
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
||||||
import 'package:selfprivacy/ui/pages/server_storage/extending_volume.dart';
|
import 'package:selfprivacy/ui/pages/server_storage/extending_volume.dart';
|
||||||
|
import 'package:selfprivacy/ui/pages/server_storage/server_storage_list_item.dart';
|
||||||
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
import 'package:selfprivacy/utils/route_transitions/basic.dart';
|
||||||
|
|
||||||
class ServerStoragePage extends StatefulWidget {
|
class ServerStoragePage extends StatefulWidget {
|
||||||
|
@ -18,8 +18,6 @@ class ServerStoragePage extends StatefulWidget {
|
||||||
}
|
}
|
||||||
|
|
||||||
class _ServerStoragePageState extends State<ServerStoragePage> {
|
class _ServerStoragePageState extends State<ServerStoragePage> {
|
||||||
List<bool> _expandedSections = [];
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(final BuildContext context) {
|
Widget build(final BuildContext context) {
|
||||||
final bool isReady = context.watch<ServerInstallationCubit>().state
|
final bool isReady = context.watch<ServerInstallationCubit>().state
|
||||||
|
@ -33,103 +31,62 @@ class _ServerStoragePageState extends State<ServerStoragePage> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// The first section is expanded, the rest are hidden by default.
|
|
||||||
/// ( true, false, false, etc... )
|
|
||||||
_expandedSections = [
|
|
||||||
true,
|
|
||||||
...List<bool>.filled(
|
|
||||||
widget.diskStatus.diskVolumes.length - 1,
|
|
||||||
false,
|
|
||||||
),
|
|
||||||
];
|
|
||||||
|
|
||||||
int sectionId = 0;
|
|
||||||
final List<Widget> sections = [];
|
|
||||||
for (final DiskVolume volume in widget.diskStatus.diskVolumes) {
|
|
||||||
sections.add(
|
|
||||||
const SizedBox(height: 16),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
Expanded(
|
|
||||||
child: Row(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
const Icon(
|
|
||||||
Icons.storage_outlined,
|
|
||||||
size: 24,
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
crossAxisAlignment: CrossAxisAlignment.stretch,
|
|
||||||
children: [
|
|
||||||
Text(
|
|
||||||
'providers.storage.disk_usage'.tr(
|
|
||||||
args: [
|
|
||||||
volume.gbUsed.toString(),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
style: Theme.of(context).textTheme.titleMedium,
|
|
||||||
),
|
|
||||||
Expanded(
|
|
||||||
child: BrandLinearIndicator(
|
|
||||||
value: volume.percentage,
|
|
||||||
color: volume.root
|
|
||||||
? Theme.of(context).colorScheme.primary
|
|
||||||
: Theme.of(context).colorScheme.secondary,
|
|
||||||
backgroundColor:
|
|
||||||
Theme.of(context).colorScheme.surfaceVariant,
|
|
||||||
height: 14.0,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
Text(
|
|
||||||
'providers.storage.disk_total'.tr(
|
|
||||||
args: [
|
|
||||||
volume.gbTotal.toString(),
|
|
||||||
volume.name,
|
|
||||||
],
|
|
||||||
),
|
|
||||||
style: Theme.of(context).textTheme.bodySmall,
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
sections.add(
|
|
||||||
AnimatedCrossFade(
|
|
||||||
duration: const Duration(milliseconds: 200),
|
|
||||||
crossFadeState: _expandedSections[sectionId]
|
|
||||||
? CrossFadeState.showFirst
|
|
||||||
: CrossFadeState.showSecond,
|
|
||||||
firstChild: FilledButton(
|
|
||||||
title: 'providers.extend_volume_button.title'.tr(),
|
|
||||||
onPressed: () => Navigator.of(context).push(
|
|
||||||
materialRoute(
|
|
||||||
ExtendingVolumePage(
|
|
||||||
diskVolume: volume,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
secondChild: Container(),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
++sectionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
return BrandHeroScreen(
|
return BrandHeroScreen(
|
||||||
hasBackButton: true,
|
hasBackButton: true,
|
||||||
heroTitle: 'providers.storage.card_title'.tr(),
|
heroTitle: 'providers.storage.card_title'.tr(),
|
||||||
children: [
|
children: [
|
||||||
...sections,
|
// ...sections,
|
||||||
|
...widget.diskStatus.diskVolumes
|
||||||
|
.map(
|
||||||
|
(final volume) => Column(
|
||||||
|
children: [
|
||||||
|
ServerStorageSection(
|
||||||
|
volume: volume,
|
||||||
|
diskStatus: widget.diskStatus,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
const Divider(),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.toList(),
|
||||||
const SizedBox(height: 8),
|
const SizedBox(height: 8),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ServerStorageSection extends StatelessWidget {
|
||||||
|
const ServerStorageSection({
|
||||||
|
required this.volume,
|
||||||
|
required this.diskStatus,
|
||||||
|
final super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final DiskVolume volume;
|
||||||
|
final DiskStatus diskStatus;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(final BuildContext context) => Column(
|
||||||
|
children: [
|
||||||
|
ServerStorageListItem(
|
||||||
|
volume: volume,
|
||||||
|
),
|
||||||
|
if (volume.isResizable) ...[
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
BrandOutlinedButton(
|
||||||
|
title: 'providers.storage.extend_volume_button.title'.tr(),
|
||||||
|
onPressed: () => Navigator.of(context).push(
|
||||||
|
materialRoute(
|
||||||
|
ExtendingVolumePage(
|
||||||
|
diskVolumeToResize: volume,
|
||||||
|
diskStatus: diskStatus,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
74
lib/ui/pages/server_storage/server_storage_list_item.dart
Normal file
74
lib/ui/pages/server_storage/server_storage_list_item.dart
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:selfprivacy/ui/components/brand_linear_indicator/brand_linear_indicator.dart';
|
||||||
|
import 'package:selfprivacy/ui/pages/server_storage/disk_status.dart';
|
||||||
|
|
||||||
|
class ServerStorageListItem extends StatelessWidget {
|
||||||
|
const ServerStorageListItem({
|
||||||
|
required this.volume,
|
||||||
|
final this.showIcon = true,
|
||||||
|
final this.dense = false,
|
||||||
|
final super.key,
|
||||||
|
});
|
||||||
|
|
||||||
|
final DiskVolume volume;
|
||||||
|
final bool showIcon;
|
||||||
|
final bool dense;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(final BuildContext context) {
|
||||||
|
final TextStyle? titleStyle = dense
|
||||||
|
? Theme.of(context).textTheme.titleMedium
|
||||||
|
: Theme.of(context).textTheme.titleLarge;
|
||||||
|
|
||||||
|
final TextStyle? subtitleStyle = dense
|
||||||
|
? Theme.of(context).textTheme.bodySmall
|
||||||
|
: Theme.of(context).textTheme.bodyMedium;
|
||||||
|
|
||||||
|
return Row(
|
||||||
|
children: [
|
||||||
|
if (showIcon)
|
||||||
|
const Icon(
|
||||||
|
Icons.storage_outlined,
|
||||||
|
size: 24,
|
||||||
|
color: Colors.white,
|
||||||
|
),
|
||||||
|
if (showIcon) const SizedBox(width: 16),
|
||||||
|
Expanded(
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Text(
|
||||||
|
'providers.storage.disk_usage'.tr(
|
||||||
|
args: [
|
||||||
|
volume.sizeUsed.asGb().toStringAsPrecision(3),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
style: titleStyle,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 4),
|
||||||
|
BrandLinearIndicator(
|
||||||
|
value: volume.percentage,
|
||||||
|
color: volume.root
|
||||||
|
? Theme.of(context).colorScheme.primary
|
||||||
|
: Theme.of(context).colorScheme.secondary,
|
||||||
|
backgroundColor: Theme.of(context).colorScheme.surfaceVariant,
|
||||||
|
height: 14.0,
|
||||||
|
),
|
||||||
|
const SizedBox(height: 4),
|
||||||
|
Text(
|
||||||
|
'providers.storage.disk_total'.tr(
|
||||||
|
args: [
|
||||||
|
volume.sizeTotal.asGb().toStringAsPrecision(3),
|
||||||
|
volume.name,
|
||||||
|
],
|
||||||
|
),
|
||||||
|
style: subtitleStyle,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
87
lib/ui/pages/services/service_page.dart
Normal file
87
lib/ui/pages/services/service_page.dart
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:selfprivacy/ui/components/brand_button/filled_button.dart';
|
||||||
|
import 'package:selfprivacy/ui/components/brand_cards/brand_cards.dart';
|
||||||
|
import 'package:selfprivacy/ui/components/brand_hero_screen/brand_hero_screen.dart';
|
||||||
|
|
||||||
|
class ServicePage extends StatefulWidget {
|
||||||
|
const ServicePage({final super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
State<ServicePage> createState() => _ServicePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _ServicePageState extends State<ServicePage> {
|
||||||
|
@override
|
||||||
|
Widget build(final BuildContext context) {
|
||||||
|
int a;
|
||||||
|
return BrandHeroScreen(
|
||||||
|
hasBackButton: true,
|
||||||
|
children: [
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
Container(
|
||||||
|
alignment: Alignment.center,
|
||||||
|
child: const Icon(
|
||||||
|
Icons.question_mark_outlined,
|
||||||
|
size: 48,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
Text(
|
||||||
|
'My Incredible Service',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: Theme.of(context).textTheme.headlineMedium!.copyWith(
|
||||||
|
color: Theme.of(context).colorScheme.onBackground,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
BrandCards.outlined(
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 24),
|
||||||
|
child: const Icon(
|
||||||
|
Icons.check_box_outlined,
|
||||||
|
size: 24,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 16),
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 130),
|
||||||
|
child: const Text(''),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
const Divider(),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: null,
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
mainAxisSize: MainAxisSize.max,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 24),
|
||||||
|
child: const Icon(
|
||||||
|
Icons.language_outlined,
|
||||||
|
size: 24,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 16),
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: 130),
|
||||||
|
child: const Text('Your Cool Domain'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 16),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
|
@ -106,7 +106,7 @@ class _Card extends StatelessWidget {
|
||||||
final switchableService = switchableServices.contains(serviceType);
|
final switchableService = switchableServices.contains(serviceType);
|
||||||
final hasSwitchJob = switchableService &&
|
final hasSwitchJob = switchableService &&
|
||||||
jobState is JobsStateWithJobs &&
|
jobState is JobsStateWithJobs &&
|
||||||
jobState.jobList.any(
|
jobState.clientJobList.any(
|
||||||
(final el) => el is ServiceToggleJob && el.type == serviceType,
|
(final el) => el is ServiceToggleJob && el.type == serviceType,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -150,7 +150,7 @@ class _Card extends StatelessWidget {
|
||||||
builder: (final context) {
|
builder: (final context) {
|
||||||
late bool isActive;
|
late bool isActive;
|
||||||
if (hasSwitchJob) {
|
if (hasSwitchJob) {
|
||||||
isActive = (jobState.jobList.firstWhere(
|
isActive = (jobState.clientJobList.firstWhere(
|
||||||
(final el) =>
|
(final el) =>
|
||||||
el is ServiceToggleJob && el.type == serviceType,
|
el is ServiceToggleJob && el.type == serviceType,
|
||||||
) as ServiceToggleJob)
|
) as ServiceToggleJob)
|
||||||
|
|
|
@ -72,7 +72,7 @@ class InitializingPage extends StatelessWidget {
|
||||||
'Domain',
|
'Domain',
|
||||||
'User',
|
'User',
|
||||||
'Server',
|
'Server',
|
||||||
'✅ Check',
|
'Check',
|
||||||
],
|
],
|
||||||
activeIndex: cubit.state.porgressBar,
|
activeIndex: cubit.state.porgressBar,
|
||||||
),
|
),
|
||||||
|
|
|
@ -11,7 +11,7 @@ class _NewSshKey extends StatelessWidget {
|
||||||
final jobCubit = context.read<JobsCubit>();
|
final jobCubit = context.read<JobsCubit>();
|
||||||
final jobState = jobCubit.state;
|
final jobState = jobCubit.state;
|
||||||
if (jobState is JobsStateWithJobs) {
|
if (jobState is JobsStateWithJobs) {
|
||||||
final jobs = jobState.jobList;
|
final jobs = jobState.clientJobList;
|
||||||
for (final job in jobs) {
|
for (final job in jobs) {
|
||||||
if (job is CreateSSHKeyJob && job.user.login == user.login) {
|
if (job is CreateSSHKeyJob && job.user.login == user.login) {
|
||||||
user.sshKeys.add(job.publicKey);
|
user.sshKeys.add(job.publicKey);
|
||||||
|
|
|
@ -18,7 +18,7 @@ class NewUser extends StatelessWidget {
|
||||||
final users = <User>[];
|
final users = <User>[];
|
||||||
users.addAll(context.read<UsersCubit>().state.users);
|
users.addAll(context.read<UsersCubit>().state.users);
|
||||||
if (jobState is JobsStateWithJobs) {
|
if (jobState is JobsStateWithJobs) {
|
||||||
final jobs = jobState.jobList;
|
final jobs = jobState.clientJobList;
|
||||||
for (final job in jobs) {
|
for (final job in jobs) {
|
||||||
if (job is CreateUserJob) {
|
if (job is CreateUserJob) {
|
||||||
users.add(job.user);
|
users.add(job.user);
|
||||||
|
|
Loading…
Reference in a new issue