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

This commit is contained in:
2021-10-09 13:37:08 +08:00
parent 094d74b746
commit b160adc654
13 changed files with 132 additions and 132 deletions
+21
View File
@@ -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/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_provider/path_provider.dart';
import 'local_solutions.dart';
import 'local_schemes.dart';
export 'local_solutions.dart';
export 'local_schemes.dart';
@ProviderModel()
class LocalSolutions implements LocalSolutionsInterface<LocalSolutionEntryLinux> {
LocalSolutions() {
solutionEntries.then((value) => solutions = value);
class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryLinux> {
LocalSchemes() {
schemeEntries.then((value) => schemes = value);
}
@override
Future<List<LocalSolutionEntryLinux>> get solutionEntries async {
Future<List<LocalSchemeEntryLinux>> get schemeEntries async {
var _supportDirectory = await getApplicationSupportDirectory();
var directory = Directory(join(_supportDirectory.path, 'solutions'));
var directory = Directory(join(_supportDirectory.path, 'schemes'));
if (!directory.existsSync()) directory.createSync();
directory.path.sout();
return directory
.list()
.map<LocalSolutionEntryLinux?>((f) {
LocalSolutionEntryLinux? entry;
.map<LocalSchemeEntryLinux?>((f) {
LocalSchemeEntryLinux? entry;
try {
var content = File(f.path).readAsStringSync();
entry = LocalSolutionEntryLinux(
path: f.path, solution: Solution.parse(content), lastModifyTime: f.statSync().modified);
entry = LocalSchemeEntryLinux(
path: f.path, scheme: Scheme.parse(content), lastModifyTime: f.statSync().modified);
} catch (e) {
e.sout();
}
return entry;
})
.where((e) => e != null)
.cast<LocalSolutionEntryLinux>()
.cast<LocalSchemeEntryLinux>()
.toList();
}
@ProviderModelProp()
List<LocalSolutionEntry>? solutions;
List<LocalSchemeEntry>? schemes;
}
class LocalSolutionEntryLinux implements LocalSolutionEntry {
class LocalSchemeEntryLinux implements LocalSchemeEntry {
@override
String path;
@override
Solution solution;
Scheme scheme;
@override
DateTime lastModifyTime;
LocalSolutionEntryLinux({
LocalSchemeEntryLinux({
required this.path,
required this.solution,
required this.scheme,
required this.lastModifyTime,
});
@@ -0,0 +1 @@
export 'local_schemes_web.provider.dart' if (dart.library.io) 'local_schemes_linux.provider.dart';
+67
View File
@@ -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();
}
}
-21
View File
@@ -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';
-67
View File
@@ -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';
@ProviderModel(copyable: true)
class Solution {
class Scheme {
@ProviderModelProp()
String? name;
@@ -14,12 +14,12 @@ class Solution {
@ProviderModelProp()
List<GestureProp>? gestures;
Solution.parse(solution) {
if (solution is String) solution = json.decode(solution);
assert(solution is Map);
name = solution['name'];
description = solution['desc'];
gestures = (solution['gestures'] as List? ?? []).map<GestureProp>((ele) => GestureProp.parse(ele)).toList();
Scheme.parse(scheme) {
if (scheme is String) scheme = json.decode(scheme);
assert(scheme is Map);
name = scheme['name'];
description = scheme['desc'];
gestures = (scheme['gestures'] as List? ?? []).map<GestureProp>((ele) => GestureProp.parse(ele)).toList();
}
}