mirror of
https://git.selfprivacy.org/kherel/selfprivacy.org.app.git
synced 2025-02-02 14:16:58 +00:00
update
This commit is contained in:
parent
d0023e5718
commit
4942f67f37
|
@ -2,7 +2,7 @@ import 'package:get_it/get_it.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/api_config.dart';
|
import 'package:selfprivacy/logic/get_it/api_config.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/console.dart';
|
import 'package:selfprivacy/logic/get_it/console.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/navigation.dart';
|
import 'package:selfprivacy/logic/get_it/navigation.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/ssh_helper.dart';
|
import 'package:selfprivacy/logic/get_it/ssh.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/timer.dart';
|
import 'package:selfprivacy/logic/get_it/timer.dart';
|
||||||
|
|
||||||
export 'package:selfprivacy/logic/get_it/api_config.dart';
|
export 'package:selfprivacy/logic/get_it/api_config.dart';
|
||||||
|
|
|
@ -2,7 +2,9 @@ import 'dart:async';
|
||||||
|
|
||||||
import 'package:bloc/bloc.dart';
|
import 'package:bloc/bloc.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/services/services_cubit.dart';
|
||||||
|
import 'package:selfprivacy/logic/get_it/ssh.dart';
|
||||||
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
import 'package:selfprivacy/logic/models/backblaze_credential.dart';
|
||||||
import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
|
import 'package:selfprivacy/logic/models/cloudflare_domain.dart';
|
||||||
|
|
||||||
|
@ -274,6 +276,7 @@ class AppConfigCubit extends Cubit<AppConfigState> {
|
||||||
|
|
||||||
if (state.hetznerServer != null) {
|
if (state.hetznerServer != null) {
|
||||||
await repository.deleteServer(state.cloudFlareDomain!);
|
await repository.deleteServer(state.cloudFlareDomain!);
|
||||||
|
await getIt<SSHModel>().clear();
|
||||||
}
|
}
|
||||||
await repository.deleteRecords();
|
await repository.deleteRecords();
|
||||||
emit(AppConfigState(
|
emit(AppConfigState(
|
||||||
|
|
|
@ -6,7 +6,6 @@ import 'hetzner_metrics_cubit.dart';
|
||||||
|
|
||||||
class HetznerMetricsRepository {
|
class HetznerMetricsRepository {
|
||||||
Future<HetznerMetricsLoaded> getMetrics(Period period) async {
|
Future<HetznerMetricsLoaded> getMetrics(Period period) async {
|
||||||
print(period);
|
|
||||||
var end = DateTime.now();
|
var end = DateTime.now();
|
||||||
DateTime start;
|
DateTime start;
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:selfprivacy/config/brand_colors.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
|
import 'package:selfprivacy/config/text_themes.dart';
|
||||||
import 'package:selfprivacy/logic/api_maps/server.dart';
|
import 'package:selfprivacy/logic/api_maps/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/get_it/ssh_helper.dart';
|
import 'package:selfprivacy/logic/get_it/ssh.dart';
|
||||||
import 'package:selfprivacy/logic/models/job.dart';
|
import 'package:selfprivacy/logic/models/job.dart';
|
||||||
import 'package:equatable/equatable.dart';
|
import 'package:equatable/equatable.dart';
|
||||||
import 'package:selfprivacy/logic/models/user.dart';
|
import 'package:selfprivacy/logic/models/user.dart';
|
||||||
|
@ -29,10 +31,7 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
newJobsList.addAll((state as JobsStateWithJobs).jobList);
|
||||||
}
|
}
|
||||||
newJobsList.add(job);
|
newJobsList.add(job);
|
||||||
getIt<NavigationService>().showSnackBar(SnackBar(
|
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
||||||
content: Text('jobs.jobAdded'.tr()),
|
|
||||||
duration: const Duration(seconds: 2),
|
|
||||||
));
|
|
||||||
emit(JobsStateWithJobs(newJobsList));
|
emit(JobsStateWithJobs(newJobsList));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,10 +53,7 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
removeJob(removingJob.id);
|
removeJob(removingJob.id);
|
||||||
} else {
|
} else {
|
||||||
newJobsList.add(job);
|
newJobsList.add(job);
|
||||||
getIt<NavigationService>().showSnackBar(SnackBar(
|
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
||||||
content: Text('jobs.jobAdded'.tr()),
|
|
||||||
duration: const Duration(seconds: 2),
|
|
||||||
));
|
|
||||||
emit(JobsStateWithJobs(newJobsList));
|
emit(JobsStateWithJobs(newJobsList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -70,10 +66,7 @@ class JobsCubit extends Cubit<JobsState> {
|
||||||
var isExistInJobList = newJobsList.any((el) => el is CreateSSHKeyJob);
|
var isExistInJobList = newJobsList.any((el) => el is CreateSSHKeyJob);
|
||||||
if (!isExistInJobList) {
|
if (!isExistInJobList) {
|
||||||
newJobsList.add(job);
|
newJobsList.add(job);
|
||||||
getIt<NavigationService>().showSnackBar(SnackBar(
|
getIt<NavigationService>().showSnackBar('jobs.jobAdded'.tr());
|
||||||
content: Text('jobs.jobAdded'.tr()),
|
|
||||||
duration: const Duration(seconds: 2),
|
|
||||||
));
|
|
||||||
emit(JobsStateWithJobs(newJobsList));
|
emit(JobsStateWithJobs(newJobsList));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
|
import 'package:selfprivacy/config/brand_colors.dart';
|
||||||
|
import 'package:selfprivacy/config/text_themes.dart';
|
||||||
|
|
||||||
class NavigationService {
|
class NavigationService {
|
||||||
final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
|
final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
|
||||||
|
@ -17,9 +19,13 @@ class NavigationService {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void showSnackBar(SnackBar snackBar) {
|
void showSnackBar(String text) {
|
||||||
final state = scaffoldMessengerKey.currentState!;
|
final state = scaffoldMessengerKey.currentState!;
|
||||||
|
final snack = SnackBar(
|
||||||
state.showSnackBar(snackBar);
|
backgroundColor: BrandColors.black.withOpacity(0.8),
|
||||||
|
content: Text(text, style: buttonTitleText),
|
||||||
|
duration: const Duration(seconds: 2),
|
||||||
|
);
|
||||||
|
state.showSnackBar(snack);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,14 +24,14 @@ class SSHModel {
|
||||||
await _box.put(BNames.sshPublicKey, savedPubKey);
|
await _box.put(BNames.sshPublicKey, savedPubKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
void init() {
|
void init() async {
|
||||||
savedPrivateKey = _box.get(BNames.sshPrivateKey);
|
savedPrivateKey = _box.get(BNames.sshPrivateKey);
|
||||||
savedPubKey = _box.get(BNames.sshPublicKey);
|
savedPubKey = _box.get(BNames.sshPublicKey);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool get isSSHKeyGenerated => savedPrivateKey != null && savedPubKey != null;
|
bool get isSSHKeyGenerated => savedPrivateKey != null && savedPubKey != null;
|
||||||
|
|
||||||
clear() async {
|
Future<void> clear() async {
|
||||||
savedPrivateKey = null;
|
savedPrivateKey = null;
|
||||||
savedPubKey = null;
|
savedPubKey = null;
|
||||||
await _box.clear();
|
await _box.clear();
|
|
@ -127,7 +127,6 @@ class BrandText extends StatelessWidget {
|
||||||
Text build(BuildContext context) {
|
Text build(BuildContext context) {
|
||||||
TextStyle style;
|
TextStyle style;
|
||||||
var isDark = Theme.of(context).brightness == Brightness.dark;
|
var isDark = Theme.of(context).brightness == Brightness.dark;
|
||||||
|
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case TextType.h1:
|
case TextType.h1:
|
||||||
style = isDark
|
style = isDark
|
||||||
|
|
|
@ -119,7 +119,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
deleteServer(context)
|
// deleteServer(context)
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
|
|
@ -5,8 +5,9 @@ import 'package:selfprivacy/config/brand_colors.dart';
|
||||||
import 'package:selfprivacy/config/brand_theme.dart';
|
import 'package:selfprivacy/config/brand_theme.dart';
|
||||||
import 'package:selfprivacy/config/get_it_config.dart';
|
import 'package:selfprivacy/config/get_it_config.dart';
|
||||||
import 'package:selfprivacy/config/text_themes.dart';
|
import 'package:selfprivacy/config/text_themes.dart';
|
||||||
|
import 'package:selfprivacy/logic/cubit/app_config/app_config_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart';
|
import 'package:selfprivacy/logic/cubit/jobs/jobs_cubit.dart';
|
||||||
import 'package:selfprivacy/logic/get_it/ssh_helper.dart';
|
import 'package:selfprivacy/logic/get_it/ssh.dart';
|
||||||
import 'package:selfprivacy/logic/models/job.dart';
|
import 'package:selfprivacy/logic/models/job.dart';
|
||||||
import 'package:selfprivacy/logic/models/state_types.dart';
|
import 'package:selfprivacy/logic/models/state_types.dart';
|
||||||
import 'package:selfprivacy/ui/components/action_button/action_button.dart';
|
import 'package:selfprivacy/ui/components/action_button/action_button.dart';
|
||||||
|
@ -35,6 +36,7 @@ class MorePage extends StatelessWidget {
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
var jobsCubit = context.watch<JobsCubit>();
|
var jobsCubit = context.watch<JobsCubit>();
|
||||||
|
var isReady = context.watch<AppConfigCubit>().state.isFullyInitilized;
|
||||||
|
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
appBar: PreferredSize(
|
appBar: PreferredSize(
|
||||||
|
@ -84,68 +86,69 @@ class MorePage extends StatelessWidget {
|
||||||
_MoreMenuTapItem(
|
_MoreMenuTapItem(
|
||||||
title: 'more.create_ssh_key'.tr(),
|
title: 'more.create_ssh_key'.tr(),
|
||||||
iconData: Ionicons.key_outline,
|
iconData: Ionicons.key_outline,
|
||||||
onTap: () {
|
onTap: isReady
|
||||||
if (getIt<SSHModel>().isSSHKeyGenerated) {
|
? () {
|
||||||
showDialog<void>(
|
if (getIt<SSHModel>().isSSHKeyGenerated) {
|
||||||
context: context,
|
showDialog<void>(
|
||||||
builder: (BuildContext context) {
|
context: context,
|
||||||
return _SSHExitsDetails(
|
builder: (BuildContext context) {
|
||||||
onShareTap: () {
|
return _SSHExitsDetails(
|
||||||
Share.share(getIt<SSHModel>().savedPrivateKey!);
|
onShareTap: () {
|
||||||
},
|
Share.share(
|
||||||
onDeleteTap: () {
|
getIt<SSHModel>().savedPrivateKey!);
|
||||||
showDialog(
|
},
|
||||||
context: context,
|
onDeleteTap: () {
|
||||||
builder: (_) {
|
showDialog(
|
||||||
return BrandAlert(
|
context: context,
|
||||||
title: 'modals.3'.tr(),
|
builder: (_) {
|
||||||
contentText: 'more.delete_ssh_text'.tr(),
|
return BrandAlert(
|
||||||
acitons: [
|
title: 'modals.3'.tr(),
|
||||||
ActionButton(
|
contentText:
|
||||||
text: 'more.yes_delete'.tr(),
|
'more.delete_ssh_text'.tr(),
|
||||||
isRed: true,
|
acitons: [
|
||||||
onPressed: () {
|
ActionButton(
|
||||||
getIt<SSHModel>().clear();
|
text: 'more.yes_delete'.tr(),
|
||||||
Navigator.of(context).pop();
|
isRed: true,
|
||||||
}),
|
onPressed: () {
|
||||||
ActionButton(
|
getIt<SSHModel>().clear();
|
||||||
text: 'basis.cancel'.tr(),
|
Navigator.of(context).pop();
|
||||||
),
|
}),
|
||||||
],
|
ActionButton(
|
||||||
);
|
text: 'basis.cancel'.tr(),
|
||||||
},
|
),
|
||||||
);
|
],
|
||||||
},
|
);
|
||||||
onCopyTap: () {
|
},
|
||||||
Clipboard.setData(ClipboardData(
|
);
|
||||||
text: getIt<SSHModel>().savedPrivateKey!));
|
},
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
onCopyTap: () {
|
||||||
SnackBar(
|
Clipboard.setData(ClipboardData(
|
||||||
content: Text('more.copied_ssh'.tr()),
|
text: getIt<SSHModel>()
|
||||||
duration: const Duration(seconds: 2),
|
.savedPrivateKey!));
|
||||||
),
|
getIt<NavigationService>()
|
||||||
);
|
.showSnackBar('more.copied_ssh'.tr());
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
showDialog<void>(
|
showDialog<void>(
|
||||||
context: context,
|
context: context,
|
||||||
builder: (BuildContext context) {
|
builder: (BuildContext context) {
|
||||||
return _MoreDetails(
|
return _MoreDetails(
|
||||||
title: 'more.create_ssh_key'.tr(),
|
title: 'more.create_ssh_key'.tr(),
|
||||||
icon: Ionicons.key_outline,
|
icon: Ionicons.key_outline,
|
||||||
onTap: () {
|
onTap: () {
|
||||||
jobsCubit
|
jobsCubit.createShhJobIfNotExist(
|
||||||
.createShhJobIfNotExist(CreateSSHKeyJob());
|
CreateSSHKeyJob());
|
||||||
},
|
},
|
||||||
text: 'more.generate_key_text'.tr(),
|
text: 'more.generate_key_text'.tr(),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
|
: null,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
@ -319,6 +322,7 @@ class _NavItem extends StatelessWidget {
|
||||||
child: _MoreMenuItem(
|
child: _MoreMenuItem(
|
||||||
iconData: iconData,
|
iconData: iconData,
|
||||||
title: title,
|
title: title,
|
||||||
|
isActive: true,
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -333,15 +337,14 @@ class _MoreMenuTapItem extends StatelessWidget {
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final IconData iconData;
|
final IconData iconData;
|
||||||
final Function onTap;
|
final VoidCallback? onTap;
|
||||||
final String title;
|
final String title;
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return GestureDetector(
|
return GestureDetector(
|
||||||
onTap: () {
|
onTap: onTap,
|
||||||
onTap();
|
|
||||||
},
|
|
||||||
child: _MoreMenuItem(
|
child: _MoreMenuItem(
|
||||||
|
isActive: onTap != null,
|
||||||
iconData: iconData,
|
iconData: iconData,
|
||||||
title: title,
|
title: title,
|
||||||
),
|
),
|
||||||
|
@ -354,10 +357,12 @@ class _MoreMenuItem extends StatelessWidget {
|
||||||
Key? key,
|
Key? key,
|
||||||
required this.iconData,
|
required this.iconData,
|
||||||
required this.title,
|
required this.title,
|
||||||
|
required this.isActive,
|
||||||
}) : super(key: key);
|
}) : super(key: key);
|
||||||
|
|
||||||
final IconData iconData;
|
final IconData iconData;
|
||||||
final String title;
|
final String title;
|
||||||
|
final bool isActive;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
@ -373,13 +378,19 @@ class _MoreMenuItem extends StatelessWidget {
|
||||||
),
|
),
|
||||||
child: Row(
|
child: Row(
|
||||||
children: [
|
children: [
|
||||||
BrandText.body1(title),
|
BrandText.body1(
|
||||||
|
title,
|
||||||
|
style: TextStyle(
|
||||||
|
color: isActive ? null : Colors.grey,
|
||||||
|
),
|
||||||
|
),
|
||||||
Spacer(),
|
Spacer(),
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 56,
|
width: 56,
|
||||||
child: Icon(
|
child: Icon(
|
||||||
iconData,
|
iconData,
|
||||||
size: 20,
|
size: 20,
|
||||||
|
color: isActive ? null : Colors.grey,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
|
Loading…
Reference in a new issue