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
+11 -1
View File
@@ -19,6 +19,16 @@ const double defaultBorderRadius = 8;
const double defaultButtonHeight = 36;
const userGestureConfigFilePath = 'deepin/dde-daemon/gesture.json';
const deepinLogoutCommands = [
'dbus-send',
'--type=method_call',
'--dest=com.deepin.SessionManager',
'/com/deepin/SessionManager',
'com.deepin.SessionManager.RequestLogout'
];
const List<String> builtInCommands = [
'ShowWorkspace',
'Handle4Or5FingersSwipeUp',
@@ -45,4 +55,4 @@ enum UploadRespStatus {
done,
name_occupied,
error,
}
}
+5 -4
View File
@@ -8,6 +8,7 @@ import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/models/scheme.provider.dart';
import 'package:dde_gesture_manager/models/settings.provider.dart';
import 'package:dde_gesture_manager/utils/apply_scheme_interface.dart';
import 'package:dde_gesture_manager/widgets/dde_button.dart';
import 'package:dde_gesture_manager_api/models.dart' show SchemeForDownload;
import 'package:flutter/cupertino.dart';
@@ -257,10 +258,10 @@ class LocalManagerState extends State<LocalManager> {
DButton.apply(
enabled: true,
onTap: () {
var appliedId =
localSchemes.firstWhere((ele) => ele.path == _selectedItemPath).scheme.id!;
appliedId.sout();
context.read<ConfigsProvider>().setProps(appliedSchemeId: appliedId);
var appliedScheme =
localSchemes.firstWhere((ele) => ele.path == _selectedItemPath).scheme;
context.read<ConfigsProvider>().setProps(appliedSchemeId: appliedScheme.id);
SchemeApplyUtil().apply(context, appliedScheme);
},
),
]
@@ -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 {