master
Kherel 2021-09-15 16:37:22 +02:00
parent d0023e5718
commit 4942f67f37
9 changed files with 101 additions and 90 deletions

View File

@ -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';

View File

@ -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(

View File

@ -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;

View File

@ -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));
} }
} }

View File

@ -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);
} }
} }

View File

@ -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();

View File

@ -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

View File

@ -119,7 +119,7 @@ class _AppSettingsPageState extends State<AppSettingsPage> {
], ],
), ),
), ),
deleteServer(context) // deleteServer(context)
], ],
), ),
); );

View File

@ -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,
), ),
), ),
], ],