feat: create and remove local scheme file logic.
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user