Add config options

This commit is contained in:
problematicconsumer
2023-09-01 15:00:41 +03:30
parent 1231fb363d
commit 2841c4b6ea
37 changed files with 806 additions and 627 deletions

View File

@@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:convert';
import 'dart:ffi';
import 'dart:io';
import 'dart:isolate';
@@ -6,6 +7,7 @@ import 'dart:isolate';
import 'package:combine/combine.dart';
import 'package:ffi/ffi.dart';
import 'package:fpdart/fpdart.dart';
import 'package:hiddify/domain/singbox/config_options.dart';
import 'package:hiddify/gen/singbox_generated_bindings.dart';
import 'package:hiddify/services/singbox/singbox_service.dart';
import 'package:hiddify/utils/utils.dart';
@@ -77,10 +79,29 @@ class FFISingboxService with InfraLogger implements SingboxService {
}
@override
TaskEither<String, Unit> create(String configPath) {
TaskEither<String, Unit> changeConfigOptions(ConfigOptions options) {
return TaskEither(
() => CombineWorker().execute(
() {
final json = jsonEncode(options.toJson());
final err = _box
.changeConfigOptions(json.toNativeUtf8().cast())
.cast<Utf8>()
.toDartString();
if (err.isNotEmpty) {
return left(err);
}
return right(unit);
},
),
);
}
@override
TaskEither<String, Unit> create(String configPath) {
return TaskEither(
() => CombineWorker().execute(
() async {
final err = _box
.create(configPath.toNativeUtf8().cast())
.cast<Utf8>()

View File

@@ -1,5 +1,8 @@
import 'dart:convert';
import 'package:flutter/services.dart';
import 'package:fpdart/fpdart.dart';
import 'package:hiddify/domain/singbox/config_options.dart';
import 'package:hiddify/services/singbox/singbox_service.dart';
import 'package:hiddify/utils/utils.dart';
@@ -31,6 +34,19 @@ class MobileSingboxService with InfraLogger implements SingboxService {
);
}
@override
TaskEither<String, Unit> changeConfigOptions(ConfigOptions options) {
return TaskEither(
() async {
await _methodChannel.invokeMethod(
"change_config_options",
jsonEncode(options.toJson()),
);
return right(unit);
},
);
}
@override
TaskEither<String, Unit> create(String configPath) {
return TaskEither(

View File

@@ -1,6 +1,7 @@
import 'dart:io';
import 'package:fpdart/fpdart.dart';
import 'package:hiddify/domain/singbox/singbox.dart';
import 'package:hiddify/services/singbox/ffi_singbox_service.dart';
import 'package:hiddify/services/singbox/mobile_singbox_service.dart';
@@ -20,6 +21,8 @@ abstract interface class SingboxService {
TaskEither<String, Unit> parseConfig(String path);
TaskEither<String, Unit> changeConfigOptions(ConfigOptions options);
TaskEither<String, Unit> create(String configPath);
TaskEither<String, Unit> start();