This commit is contained in:
Amir Mohammadi
2024-01-15 13:01:14 +03:30
4 changed files with 40 additions and 5 deletions

View File

@@ -154,6 +154,21 @@ public class MethodHandler: NSObject, FlutterPlugin {
return return
} }
result(true) result(true)
case "generate_config":
guard
let args = call.arguments as? [String:Any?],
let path = args["path"] as? String
else {
result(FlutterError(code: "INVALID_ARGS", message: nil, details: nil))
return
}
var error: NSError?
let config = MobileBuildConfig(path, VPNConfig.shared.configOptions, &error)
if let error {
result(FlutterError(code: "BUILD_CONFIG", message: error.localizedDescription, details: nil))
return
}
result(config)
default: default:
result(FlutterMethodNotImplemented) result(FlutterMethodNotImplemented)
} }

View File

@@ -16,6 +16,7 @@ import 'package:hiddify/utils/utils.dart';
import 'package:meta/meta.dart'; import 'package:meta/meta.dart';
abstract interface class ConnectionRepository { abstract interface class ConnectionRepository {
TaskEither<ConnectionFailure, Unit> setup();
Stream<ConnectionStatus> watchConnectionStatus(); Stream<ConnectionStatus> watchConnectionStatus();
TaskEither<ConnectionFailure, Unit> connect( TaskEither<ConnectionFailure, Unit> connect(
String fileName, String fileName,
@@ -120,7 +121,7 @@ class ConnectionRepositoryImpl
); );
} }
@visibleForTesting @override
TaskEither<ConnectionFailure, Unit> setup() { TaskEither<ConnectionFailure, Unit> setup() {
if (_initialized) return TaskEither.of(unit); if (_initialized) return TaskEither.of(unit);
return exceptionHandler( return exceptionHandler(

View File

@@ -1,3 +1,5 @@
import 'dart:io';
import 'package:hiddify/core/preferences/general_preferences.dart'; import 'package:hiddify/core/preferences/general_preferences.dart';
import 'package:hiddify/core/preferences/service_preferences.dart'; import 'package:hiddify/core/preferences/service_preferences.dart';
import 'package:hiddify/features/connection/data/connection_data_providers.dart'; import 'package:hiddify/features/connection/data/connection_data_providers.dart';
@@ -14,7 +16,13 @@ part 'connection_notifier.g.dart';
@Riverpod(keepAlive: true) @Riverpod(keepAlive: true)
class ConnectionNotifier extends _$ConnectionNotifier with AppLogger { class ConnectionNotifier extends _$ConnectionNotifier with AppLogger {
@override @override
Stream<ConnectionStatus> build() { Stream<ConnectionStatus> build() async* {
if (Platform.isIOS) {
await _connectionRepo.setup().mapLeft((l) {
loggy.error("error setting up connection repository", l);
}).run();
}
ref.listen( ref.listen(
activeProfileProvider.select((value) => value.asData?.value), activeProfileProvider.select((value) => value.asData?.value),
(previous, next) async { (previous, next) async {
@@ -25,7 +33,7 @@ class ConnectionNotifier extends _$ConnectionNotifier with AppLogger {
} }
}, },
); );
return _connectionRepo.watchConnectionStatus().doOnData((event) { yield* _connectionRepo.watchConnectionStatus().doOnData((event) {
if (event case Disconnected(connectionFailure: final _?) if (event case Disconnected(connectionFailure: final _?)
when PlatformUtils.isDesktop) { when PlatformUtils.isDesktop) {
ref.read(startedByUserProvider.notifier).update(false); ref.read(startedByUserProvider.notifier).update(false);

View File

@@ -1,4 +1,5 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:io';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:fpdart/fpdart.dart'; import 'package:fpdart/fpdart.dart';
@@ -37,8 +38,18 @@ class PlatformSingboxService with InfraLogger implements SingboxService {
TaskEither<String, Unit> setup( TaskEither<String, Unit> setup(
Directories directories, Directories directories,
bool debug, bool debug,
) => ) {
TaskEither.of(unit); return TaskEither(
() async {
if (!Platform.isIOS) {
return right(unit);
}
await _methodChannel.invokeMethod("setup");
return right(unit);
},
);
}
@override @override
TaskEither<String, Unit> validateConfigByPath( TaskEither<String, Unit> validateConfigByPath(