Files
MWClash/lib/core/lib.dart
chen08209 3ae248208b Add sqlite store
Optimize android quick action

Optimize backup and restore

Optimize more details
2026-01-27 17:05:12 +08:00

69 lines
1.6 KiB
Dart

import 'dart:async';
import 'package:fl_clash/common/common.dart';
import 'package:fl_clash/controller.dart';
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/models/core.dart';
import 'package:fl_clash/plugins/service.dart';
import 'interface.dart';
class CoreLib extends CoreHandlerInterface {
static CoreLib? _instance;
Completer<bool> _connectedCompleter = Completer();
CoreLib._internal();
@override
Future<String> preload() async {
final res = await service?.init();
if (res?.isEmpty != true) {
return res ?? '';
}
_connectedCompleter.complete(true);
final syncRes = await service?.syncState(appController.sharedState);
return syncRes ?? '';
}
factory CoreLib() {
_instance ??= CoreLib._internal();
return _instance!;
}
@override
destroy() async {
return true;
}
@override
Future<bool> shutdown(_) async {
if (!_connectedCompleter.isCompleted) {
return false;
}
_connectedCompleter = Completer();
return service?.shutdown() ?? true;
}
@override
Future<T?> invoke<T>({
required ActionMethod method,
dynamic data,
Duration? timeout,
}) async {
final id = '${method.name}#${utils.id}';
final result = await service
?.invokeAction(Action(id: id, method: method, data: data))
.withTimeout(onTimeout: () => null);
if (result == null) {
return null;
}
return parasResult<T>(result);
}
@override
Completer get completer => _connectedCompleter;
}
CoreLib? get coreLib => system.isAndroid ? CoreLib() : null;