feat: move native communication to FFI (#1457)

This commit is contained in:
Levi authored and GitHub committed 2026-09-05 20:18:42 +08:00
1 parent 177c225f16
commit 39cd9034cd
86 files changed
+4558 -886

No files matched your search

@@ -1,20 +1,9 @@
import '../../database/database.dart';
import '../../util/util.dart';
class AppInitializer {
static Future<void>? _storageInitialization;
static Future<void>? _databaseInitialization;
static Future<void> ensureStorageInitialized() {
return _storageInitialization ??= Util.initStorageDir();
}
static Future<void> ensureDatabaseInitialized() {
return _databaseInitialization ??= _initializeDatabase();
}
static Future<void> _initializeDatabase() async {
await ensureStorageInitialized();
await Database.instance.init();
}
}
@@ -1,6 +1,8 @@
import 'dart:async';
import '../common/api_server_state.dart';
import '../common/start_config.dart';
import '../common/task_event.dart';
import '../libgopeed_boot.dart';
@@ -13,4 +15,40 @@ class LibgopeedBootBrowser implements LibgopeedBoot {
@override
Future<void> stop() async {}
@override
Future<ApiServerOperationResult> getApiServerState() async => _unsupportedApiServerResult;
@override
Future<ApiServerOperationResult> startApiServer() async => _unsupportedApiServerResult;
@override
Future<ApiServerOperationResult> stopApiServer() async => _unsupportedApiServerResult;
@override
Future<ApiServerOperationResult> restartApiServer() async => _unsupportedApiServerResult;
@override
Future<String> invoke(String method, String path, {String query = '', String body = ''}) {
throw UnsupportedError('Native Gopeed invoke is unavailable on web');
}
@override
Stream<TaskEvent> get taskEvents => const Stream.empty();
@override
Future<void> subscribeTaskEvents(Set<TaskEventType> events) async {}
}
const _unsupportedApiServerResult = ApiServerOperationResult(
state: ApiServerState(
enabled: false,
running: false,
network: '',
address: '',
runningPort: 0,
pendingApply: false,
lastError: '',
),
error: '',
);
@@ -6,7 +6,9 @@ import '../../util/util.dart';
import '../common/libgopeed_channel.dart';
import '../common/libgopeed_ffi.dart';
import '../common/libgopeed_interface.dart';
import '../common/api_server_state.dart';
import '../common/start_config.dart';
import '../common/task_event.dart';
import '../ffi/libgopeed_bind.dart';
import '../libgopeed_boot.dart';
@@ -43,6 +45,32 @@ class LibgopeedBootNative implements LibgopeedBoot {
@override
Future<void> stop() async {
await _libgopeed.subscribeTaskEvents({});
await _libgopeed.stop();
}
@override
Future<ApiServerOperationResult> getApiServerState() => _libgopeed.getApiServerState();
@override
Future<ApiServerOperationResult> startApiServer() => _libgopeed.startApiServer();
@override
Future<ApiServerOperationResult> stopApiServer() => _libgopeed.stopApiServer();
@override
Future<ApiServerOperationResult> restartApiServer() => _libgopeed.restartApiServer();
@override
Future<String> invoke(String method, String path, {String query = '', String body = ''}) {
return _libgopeed.invoke(method, path, query: query, body: body);
}
@override
Stream<TaskEvent> get taskEvents => _libgopeed.taskEvents;
@override
Future<void> subscribeTaskEvents(Set<TaskEventType> events) {
return _libgopeed.subscribeTaskEvents(events);
}
}