feat: create and remove local scheme file logic.

This commit is contained in:
2021-12-02 19:11:43 +08:00
parent 7977116d75
commit 6dfec40c3f
5 changed files with 73 additions and 15 deletions
+4
View File
@@ -27,4 +27,8 @@ abstract class LocalSchemeEntry implements Comparable {
abstract class LocalSchemesInterface<T extends LocalSchemeEntry> {
Future<List<T>> get schemeEntries;
Future<LocalSchemeEntry> create();
void remove(String path);
}
+16
View File
@@ -6,6 +6,7 @@ import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:path/path.dart' show join;
import 'package:path_provider/path_provider.dart';
import 'package:uuid/uuid.dart';
import 'local_schemes.dart';
import 'local_schemes_provider.dart';
@@ -43,6 +44,21 @@ class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryLinux> {
@ProviderModelProp()
List<LocalSchemeEntry>? schemes;
@override
Future<LocalSchemeEntry> create() async {
var _supportDirectory = await getApplicationSupportDirectory();
return LocalSchemeEntryLinux(
path: join(_supportDirectory.path, 'schemes', '${Uuid().v1()}.json'),
scheme: Scheme.create(),
lastModifyTime: DateTime.now(),
);
}
@override
void remove(String path) {
File(path).delete();
}
}
class LocalSchemeEntryLinux implements LocalSchemeEntry {
+16 -2
View File
@@ -5,6 +5,7 @@ import 'package:dde_gesture_manager/builder/provider_annotation.dart';
import 'package:dde_gesture_manager/extensions.dart';
import 'package:dde_gesture_manager/models/local_schemes_provider.dart';
import 'package:dde_gesture_manager/models/scheme.dart';
import 'package:uuid/uuid.dart';
import 'local_schemes.dart';
@@ -43,6 +44,18 @@ class LocalSchemes implements LocalSchemesInterface<LocalSchemeEntryWeb> {
@ProviderModelProp()
List<LocalSchemeEntry>? schemes;
@override
Future<LocalSchemeEntry> create() => Future.value(
LocalSchemeEntryWeb(
path: Uuid().v1(),
scheme: Scheme.create(),
lastModifyTime: DateTime.now(),
),
);
@override
remove(String path) => window.localStorage.remove(path);
}
class LocalSchemeEntryWeb implements LocalSchemeEntry {
@@ -70,8 +83,9 @@ class LocalSchemeEntryWeb implements LocalSchemeEntry {
@override
save(LocalSchemesProvider provider) {
// TODO: implement save
throw UnimplementedError();
window.localStorage[path] = JsonEncoder.withIndent(' ' * 4).convert(scheme);
provider.schemes!.firstWhere((ele) => ele.scheme.id == scheme.id).lastModifyTime = DateTime.now();
provider.setProps(schemes: [...provider.schemes!]..sort());
}
@override
+3
View File
@@ -148,6 +148,9 @@ class Scheme {
Scheme.create({this.name, this.description, this.gestures}) {
this.id = Uuid().v1();
this.gestures = [];
this.readOnly = false;
this.name = 'new xxx';
}
SchemeTree buildSchemeTree() {