feat: scheme apply feature.

This commit is contained in:
2022-01-20 17:42:52 +08:00
parent 40eba0ddd7
commit d2e07cd89d
8 changed files with 135 additions and 5 deletions
@@ -0,0 +1,7 @@
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:flutter/material.dart';
export 'apply_scheme_web.dart' if (dart.library.io) 'apply_scheme_linux.dart';
abstract class SchemeApplyUtilStub {
void apply(BuildContext context, Scheme scheme);
}
+40
View File
@@ -0,0 +1,40 @@
import 'dart:io';
import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/utils/helper.dart';
import 'package:dde_gesture_manager/utils/notificator.dart';
import 'package:flutter/material.dart';
import 'package:flutter_platform_alert/flutter_platform_alert.dart';
import 'package:uuid/uuid.dart';
import 'apply_scheme_interface.dart';
import 'package:xdg_directories/xdg_directories.dart' as xdg;
import 'package:path/path.dart' show join;
class SchemeApplyUtil implements SchemeApplyUtilStub {
void apply(BuildContext context, Scheme scheme) {
var configFilePath = join(xdg.configHome.path, userGestureConfigFilePath);
configFilePath.sout();
var file = File(configFilePath);
if (scheme.id == Uuid.NAMESPACE_NIL) {
if (file.existsSync()) file.deleteSync();
} else {
if (!file.existsSync()) file.createSync(recursive: true);
file.writeAsStringSync(
H.transGesturePropsToConfig(scheme.gestures ?? []),
flush: true,
);
Notificator.showConfirm(
title: LocaleKeys.info_apply_scheme_success.tr(),
description: LocaleKeys.info_apply_scheme_description.tr(),
positiveButtonTitle: LocaleKeys.info_apply_scheme_logout_immediately.tr(),
negativeButtonTitle: LocaleKeys.str_cancel.tr(),
).then((value) {
if (value == CustomButton.positiveButton) {
Process.run(deepinLogoutCommands.first, deepinLogoutCommands.skip(1).toList());
}
});
}
}
}
+39
View File
@@ -0,0 +1,39 @@
import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/utils/helper.dart';
import 'package:dde_gesture_manager/utils/notificator.dart';
import 'package:flutter/material.dart';
import 'package:uuid/uuid.dart';
import 'apply_scheme_interface.dart';
import 'package:flutter/services.dart';
class SchemeApplyUtil implements SchemeApplyUtilStub {
void apply(BuildContext context, Scheme scheme) {
var cmd = scheme.id == Uuid.NAMESPACE_NIL
? [
'rm \$XDG_CONFIG_HOME/${userGestureConfigFilePath}',
]
: [
'cat > \$XDG_CONFIG_HOME/${userGestureConfigFilePath} << EOF',
'${H.transGesturePropsToConfig(scheme.gestures ?? [])}',
'EOF',
];
cmd.add('zenity'
' --title=${LocaleKeys.info_apply_scheme_success.tr()}'
' --question'
' --no-wrap'
' --text=${LocaleKeys.info_apply_scheme_description.tr()}'
' --ok-label=${LocaleKeys.info_apply_scheme_logout_immediately.tr()}'
' --cancel-label=${LocaleKeys.str_cancel.tr()}'
' && ${deepinLogoutCommands.join(' ')}');
Clipboard.setData(ClipboardData(
text: cmd.join('\n'),
));
Notificator.success(
context,
title: LocaleKeys.info_apply_scheme_commands_copied_title.tr(),
description: LocaleKeys.info_apply_scheme_commands_copied_description.tr(),
);
}
}
+19
View File
@@ -1,3 +1,5 @@
import 'dart:convert';
import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/content_layout.provider.dart';
@@ -130,6 +132,23 @@ class H {
static void handleDownloadScheme(BuildContext context, SchemeForDownload value) =>
localManagerKey.currentState?.addLocalScheme(context, value);
static String transGesturePropsToConfig(List<GestureProp> gestures) =>
JsonEncoder.withIndent(' ' * 4).convert(gestures
.map(
(gesture) => {
"Event": {
"Name": gesture.gesture!.name,
"Direction": H.getGestureDirectionName(gesture.direction),
"Fingers": gesture.fingers,
},
"Action": {
"Type": gesture.type!.name,
"Action": gesture.command,
},
},
)
.toList());
}
class PreferredPanelsStatus {