pull/2/head
parent
e819ba46e0
commit
094d74b746
@ -0,0 +1,21 @@
|
|||||||
|
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;
|
||||||
|
}
|
@ -0,0 +1,68 @@
|
|||||||
|
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:path/path.dart' show join;
|
||||||
|
import 'package:path_provider/path_provider.dart';
|
||||||
|
|
||||||
|
import 'local_solutions.dart';
|
||||||
|
|
||||||
|
export 'local_solutions.dart';
|
||||||
|
|
||||||
|
@ProviderModel()
|
||||||
|
class LocalSolutions implements LocalSolutionsInterface<LocalSolutionEntryLinux> {
|
||||||
|
LocalSolutions() {
|
||||||
|
solutionEntries.then((value) => solutions = value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<List<LocalSolutionEntryLinux>> get solutionEntries async {
|
||||||
|
var _supportDirectory = await getApplicationSupportDirectory();
|
||||||
|
var directory = Directory(join(_supportDirectory.path, 'solutions'));
|
||||||
|
if (!directory.existsSync()) directory.createSync();
|
||||||
|
directory.path.sout();
|
||||||
|
return directory
|
||||||
|
.list()
|
||||||
|
.map<LocalSolutionEntryLinux?>((f) {
|
||||||
|
LocalSolutionEntryLinux? entry;
|
||||||
|
try {
|
||||||
|
var content = File(f.path).readAsStringSync();
|
||||||
|
entry = LocalSolutionEntryLinux(
|
||||||
|
path: f.path, solution: Solution.parse(content), lastModifyTime: f.statSync().modified);
|
||||||
|
} catch (e) {
|
||||||
|
e.sout();
|
||||||
|
}
|
||||||
|
return entry;
|
||||||
|
})
|
||||||
|
.where((e) => e != null)
|
||||||
|
.cast<LocalSolutionEntryLinux>()
|
||||||
|
.toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
@ProviderModelProp()
|
||||||
|
List<LocalSolutionEntry>? solutions;
|
||||||
|
}
|
||||||
|
|
||||||
|
class LocalSolutionEntryLinux implements LocalSolutionEntry {
|
||||||
|
@override
|
||||||
|
String path;
|
||||||
|
|
||||||
|
@override
|
||||||
|
Solution solution;
|
||||||
|
|
||||||
|
@override
|
||||||
|
DateTime lastModifyTime;
|
||||||
|
|
||||||
|
LocalSolutionEntryLinux({
|
||||||
|
required this.path,
|
||||||
|
required this.solution,
|
||||||
|
required this.lastModifyTime,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
save() {
|
||||||
|
// TODO: implement save
|
||||||
|
throw UnimplementedError();
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1 @@
|
|||||||
|
export 'local_solutions_web.provider.dart' if (dart.library.io) 'local_solutions_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/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();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue