feat: use 'scheme' instead of 'solution'.

pull/3/head
DebuggerX 4 years ago
parent 094d74b746
commit b160adc654

@ -0,0 +1,21 @@
export 'local_schemes_web.dart' if (dart.library.io) 'local_schemes_linux.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
abstract class LocalSchemeEntry {
Scheme scheme;
DateTime lastModifyTime;
String path;
LocalSchemeEntry({
required this.path,
required this.scheme,
required this.lastModifyTime,
});
save();
}
abstract class LocalSchemesInterface<T extends LocalSchemeEntry> {
Future<List<T>> get schemeEntries;
}

@ -2,61 +2,61 @@ import 'dart:io';
import 'package:dde_gesture_manager/builder/provider_annotation.dart'; import 'package:dde_gesture_manager/builder/provider_annotation.dart';
import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/solution.dart'; import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:path/path.dart' show join; import 'package:path/path.dart' show join;
import 'package:path_provider/path_provider.dart'; import 'package:path_provider/path_provider.dart';
import 'local_solutions.dart'; import 'local_schemes.dart';
export 'local_solutions.dart'; export 'local_schemes.dart';
@ProviderModel() @ProviderModel()
class LocalSolutions implements LocalSolutionsInterface<LocalSolutionEntryLinux> { class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryLinux> {
LocalSolutions() { LocalSchemes() {
solutionEntries.then((value) => solutions = value); schemeEntries.then((value) => schemes = value);
} }
@override @override
Future<List<LocalSolutionEntryLinux>> get solutionEntries async { Future<List<LocalSchemeEntryLinux>> get schemeEntries async {
var _supportDirectory = await getApplicationSupportDirectory(); var _supportDirectory = await getApplicationSupportDirectory();
var directory = Directory(join(_supportDirectory.path, 'solutions')); var directory = Directory(join(_supportDirectory.path, 'schemes'));
if (!directory.existsSync()) directory.createSync(); if (!directory.existsSync()) directory.createSync();
directory.path.sout(); directory.path.sout();
return directory return directory
.list() .list()
.map<LocalSolutionEntryLinux?>((f) { .map<LocalSchemeEntryLinux?>((f) {
LocalSolutionEntryLinux? entry; LocalSchemeEntryLinux? entry;
try { try {
var content = File(f.path).readAsStringSync(); var content = File(f.path).readAsStringSync();
entry = LocalSolutionEntryLinux( entry = LocalSchemeEntryLinux(
path: f.path, solution: Solution.parse(content), lastModifyTime: f.statSync().modified); path: f.path, scheme: Scheme.parse(content), lastModifyTime: f.statSync().modified);
} catch (e) { } catch (e) {
e.sout(); e.sout();
} }
return entry; return entry;
}) })
.where((e) => e != null) .where((e) => e != null)
.cast<LocalSolutionEntryLinux>() .cast<LocalSchemeEntryLinux>()
.toList(); .toList();
} }
@ProviderModelProp() @ProviderModelProp()
List<LocalSolutionEntry>? solutions; List<LocalSchemeEntry>? schemes;
} }
class LocalSolutionEntryLinux implements LocalSolutionEntry { class LocalSchemeEntryLinux implements LocalSchemeEntry {
@override @override
String path; String path;
@override @override
Solution solution; Scheme scheme;
@override @override
DateTime lastModifyTime; DateTime lastModifyTime;
LocalSolutionEntryLinux({ LocalSchemeEntryLinux({
required this.path, required this.path,
required this.solution, required this.scheme,
required this.lastModifyTime, required this.lastModifyTime,
}); });

@ -0,0 +1 @@
export 'local_schemes_web.provider.dart' if (dart.library.io) 'local_schemes_linux.provider.dart';

@ -0,0 +1,67 @@
import 'dart:convert';
import 'package:dde_gesture_manager/builder/provider_annotation.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/extensions.dart';
import 'dart:html';
import 'local_schemes.dart';
export 'local_schemes.dart';
@ProviderModel()
class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryWeb> {
LocalSchemes() {
schemeEntries.then((value) => schemes = value);
}
@override
Future<List<LocalSchemeEntryWeb>> get schemeEntries async {
return window.localStorage.keys
.map<LocalSchemeEntryWeb?>((key) {
if (key.startsWith('schemes.')) {
LocalSchemeEntryWeb? entry;
try {
var content = window.localStorage[key] ?? '';
var schemeJson = json.decode(content);
entry = LocalSchemeEntryWeb(
path: key,
scheme: Scheme.parse(schemeJson),
lastModifyTime: DateTime.parse(schemeJson['modified_at']),
);
} catch (e) {
e.sout();
}
return entry;
}
})
.where((e) => e != null)
.cast<LocalSchemeEntryWeb>()
.toList();
}
@ProviderModelProp()
List<LocalSchemeEntry>? schemes;
}
class LocalSchemeEntryWeb implements LocalSchemeEntry {
@override
String path;
@override
Scheme scheme;
@override
DateTime lastModifyTime;
LocalSchemeEntryWeb({
required this.path,
required this.scheme,
required this.lastModifyTime,
});
@override
save() {
// TODO: implement save
throw UnimplementedError();
}
}

@ -1,21 +0,0 @@
export 'local_solutions_web.dart' if (dart.library.io) 'local_solutions_linux.dart';
import 'package:dde_gesture_manager/models/solution.dart';
abstract class LocalSolutionEntry {
Solution solution;
DateTime lastModifyTime;
String path;
LocalSolutionEntry({
required this.path,
required this.solution,
required this.lastModifyTime,
});
save();
}
abstract class LocalSolutionsInterface<T extends LocalSolutionEntry> {
Future<List<T>> get solutionEntries;
}

@ -1 +0,0 @@
export 'local_solutions_web.provider.dart' if (dart.library.io) 'local_solutions_linux.provider.dart';

@ -1,67 +0,0 @@
import 'dart:convert';
import 'package:dde_gesture_manager/builder/provider_annotation.dart';
import 'package:dde_gesture_manager/models/solution.dart';
import 'package:dde_gesture_manager/extensions.dart';
import 'dart:html';
import 'local_solutions.dart';
export 'local_solutions.dart';
@ProviderModel()
class LocalSolutions implements LocalSolutionsInterface<LocalSolutionEntryWeb> {
LocalSolutions() {
solutionEntries.then((value) => solutions = value);
}
@override
Future<List<LocalSolutionEntryWeb>> get solutionEntries async {
return window.localStorage.keys
.map<LocalSolutionEntryWeb?>((key) {
if (key.startsWith('solutions.')) {
LocalSolutionEntryWeb? entry;
try {
var content = window.localStorage[key] ?? '';
var solutionJson = json.decode(content);
entry = LocalSolutionEntryWeb(
path: key,
solution: Solution.parse(solutionJson),
lastModifyTime: DateTime.parse(solutionJson['modified_at']),
);
} catch (e) {
e.sout();
}
return entry;
}
})
.where((e) => e != null)
.cast<LocalSolutionEntryWeb>()
.toList();
}
@ProviderModelProp()
List<LocalSolutionEntry>? solutions;
}
class LocalSolutionEntryWeb implements LocalSolutionEntry {
@override
String path;
@override
Solution solution;
@override
DateTime lastModifyTime;
LocalSolutionEntryWeb({
required this.path,
required this.solution,
required this.lastModifyTime,
});
@override
save() {
// TODO: implement save
throw UnimplementedError();
}
}

@ -4,7 +4,7 @@ import 'package:dde_gesture_manager/builder/provider_annotation.dart';
import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/utils/helper.dart';
@ProviderModel(copyable: true) @ProviderModel(copyable: true)
class Solution { class Scheme {
@ProviderModelProp() @ProviderModelProp()
String? name; String? name;
@ -14,12 +14,12 @@ class Solution {
@ProviderModelProp() @ProviderModelProp()
List<GestureProp>? gestures; List<GestureProp>? gestures;
Solution.parse(solution) { Scheme.parse(scheme) {
if (solution is String) solution = json.decode(solution); if (scheme is String) scheme = json.decode(scheme);
assert(solution is Map); assert(scheme is Map);
name = solution['name']; name = scheme['name'];
description = solution['desc']; description = scheme['desc'];
gestures = (solution['gestures'] as List? ?? []).map<GestureProp>((ele) => GestureProp.parse(ele)).toList(); gestures = (scheme['gestures'] as List? ?? []).map<GestureProp>((ele) => GestureProp.parse(ele)).toList();
} }
} }

@ -1,8 +1,8 @@
import 'package:dde_gesture_manager/constants/constants.dart'; import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart';
import 'package:dde_gesture_manager/models/solution.dart'; import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:dde_gesture_manager/models/solution.provider.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart';
import 'package:dde_gesture_manager/utils/helper.dart'; import 'package:dde_gesture_manager/utils/helper.dart';
import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart';
import 'package:dde_gesture_manager/widgets/dde_data_table.dart'; import 'package:dde_gesture_manager/widgets/dde_data_table.dart';
@ -50,7 +50,7 @@ class GestureEditor extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var layoutProvider = context.watch<ContentLayoutProvider>(); var layoutProvider = context.watch<ContentLayoutProvider>();
var solutionProvider = context.watch<SolutionProvider>(); var schemeProvider = context.watch<SchemeProvider>();
return Flexible( return Flexible(
child: Padding( child: Padding(
padding: const EdgeInsets.all(10), padding: const EdgeInsets.all(10),
@ -140,7 +140,7 @@ class GestureEditor extends StatelessWidget {
DDataColumn(label: Text(LocaleKeys.gesture_editor_command.tr())), DDataColumn(label: Text(LocaleKeys.gesture_editor_command.tr())),
DDataColumn(label: Text(LocaleKeys.gesture_editor_remark.tr())), DDataColumn(label: Text(LocaleKeys.gesture_editor_remark.tr())),
], ],
rows: _buildDataRow(solutionProvider.gestures, context), rows: _buildDataRow(schemeProvider.gestures, context),
), ),
), ),
), ),

@ -1,6 +1,6 @@
import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/local_solutions_provider.dart'; import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
import 'package:dde_gesture_manager/models/solution.provider.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart';
import 'package:dde_gesture_manager/pages/content.dart'; import 'package:dde_gesture_manager/pages/content.dart';
import 'package:dde_gesture_manager/pages/footer.dart'; import 'package:dde_gesture_manager/pages/footer.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
@ -18,7 +18,7 @@ class _HomePageState extends State<HomePage> {
return Scaffold( return Scaffold(
body: MultiProvider( body: MultiProvider(
providers: [ providers: [
ChangeNotifierProvider(create: (context) => SolutionProvider.parse(''' ChangeNotifierProvider(create: (context) => SchemeProvider.parse('''
{ {
"name": "test", "name": "test",
"desc": "some desc", "desc": "some desc",
@ -66,7 +66,7 @@ class _HomePageState extends State<HomePage> {
} }
''')), ''')),
ChangeNotifierProvider(create: (context) => GesturePropProvider.empty()), ChangeNotifierProvider(create: (context) => GesturePropProvider.empty()),
ChangeNotifierProvider(create: (context) => LocalSolutionsProvider(),lazy: false), ChangeNotifierProvider(create: (context) => LocalSchemesProvider(),lazy: false),
], ],
child: Column( child: Column(
mainAxisSize: MainAxisSize.max, mainAxisSize: MainAxisSize.max,

@ -1,8 +1,8 @@
import 'package:dde_gesture_manager/constants/constants.dart'; import 'package:dde_gesture_manager/constants/constants.dart';
import 'package:dde_gesture_manager/extensions.dart'; import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart';
import 'package:dde_gesture_manager/models/local_solutions_provider.dart'; import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
import 'package:dde_gesture_manager/models/solution.provider.dart'; import 'package:dde_gesture_manager/models/scheme.provider.dart';
import 'package:dde_gesture_manager/widgets/dde_button.dart'; import 'package:dde_gesture_manager/widgets/dde_button.dart';
import 'package:flutter/animation.dart'; import 'package:flutter/animation.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
@ -39,7 +39,7 @@ class _LocalManagerState extends State<LocalManager> {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true; var isOpen = context.watch<ContentLayoutProvider>().localManagerOpened == true;
var localSolutions = context.watch<LocalSolutionsProvider>().solutions ?? []; var localschemes = context.watch<LocalSchemesProvider>().schemes ?? [];
return AnimatedContainer( return AnimatedContainer(
duration: mediumDuration, duration: mediumDuration,
curve: Curves.easeInOut, curve: Curves.easeInOut,
@ -91,7 +91,7 @@ class _LocalManagerState extends State<LocalManager> {
controller: _scrollController, controller: _scrollController,
itemBuilder: (context, index) => GestureDetector( itemBuilder: (context, index) => GestureDetector(
onDoubleTap: () { onDoubleTap: () {
context.read<SolutionProvider>().copyFrom(localSolutions[index].solution); context.read<SchemeProvider>().copyFrom(localschemes[index].scheme);
setState(() { setState(() {
_selectedIndex = index; _selectedIndex = index;
}); });
@ -115,7 +115,7 @@ class _LocalManagerState extends State<LocalManager> {
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
Text(localSolutions[index].solution.name ?? ''), Text(localschemes[index].scheme.name ?? ''),
Text('456'), Text('456'),
], ],
), ),
@ -123,7 +123,7 @@ class _LocalManagerState extends State<LocalManager> {
), ),
), ),
), ),
itemCount: localSolutions.length, itemCount: localschemes.length,
), ),
), ),
Container( Container(

@ -1,5 +1,5 @@
import 'package:dde_gesture_manager/models/content_layout.provider.dart'; import 'package:dde_gesture_manager/models/content_layout.provider.dart';
import 'package:dde_gesture_manager/models/solution.dart'; import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:dde_gesture_manager/constants/constants.dart'; import 'package:dde_gesture_manager/constants/constants.dart';

@ -20,13 +20,13 @@
"tip": "Display help documentation" "tip": "Display help documentation"
}, },
"market": { "market": {
"title": "Solution market" "title": "Scheme market"
}, },
"local_manager": { "local_manager": {
"title": "Local solution management" "title": "Local scheme management"
}, },
"gesture_editor": { "gesture_editor": {
"label": "Gesture program editing", "label": "Gesture scheme editing",
"gesture": "gesture", "gesture": "gesture",
"direction": "direction", "direction": "direction",
"fingers": "fingers", "fingers": "fingers",

Loading…
Cancel
Save