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

@@ -0,0 +1,77 @@
import 'package:hiddify/domain/singbox/config_options.dart';
import 'package:hiddify/utils/pref_notifier.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'config_options_store.g.dart';
final _default = ConfigOptions.initial;
final executeConfigAsIs =
PrefNotifier.provider("execute-config-as-is", _default.executeConfigAsIs);
final logLevelStore = PrefNotifier.provider(
"log-level",
_default.logLevel,
mapFrom: LogLevel.values.byName,
mapTo: (value) => value.name,
);
final resolveDestinationStore =
PrefNotifier.provider("resolve-destination", _default.resolveDestination);
final ipv6ModeStore = PrefNotifier.provider(
"ipv6-mode",
_default.ipv6Mode,
mapFrom: IPv6Mode.values.byName,
mapTo: (value) => value.name,
);
final remoteDnsAddressStore =
PrefNotifier.provider("remote-dns-address", _default.remoteDnsAddress);
final remoteDnsDomainStrategyStore = PrefNotifier.provider(
"remote-domain-dns-strategy",
_default.remoteDnsDomainStrategy,
mapFrom: DomainStrategy.values.byName,
mapTo: (value) => value.name,
);
final directDnsAddressStore =
PrefNotifier.provider("direct-dns-address", _default.directDnsAddress);
final directDnsDomainStrategyStore = PrefNotifier.provider(
"direct-domain-dns-strategy",
_default.directDnsDomainStrategy,
mapFrom: DomainStrategy.values.byName,
mapTo: (value) => value.name,
);
final mixedPortStore = PrefNotifier.provider("mixed-port", _default.mixedPort);
final localDnsPortStore =
PrefNotifier.provider("localDns-port", _default.localDnsPort);
final mtuStore = PrefNotifier.provider("mtu", _default.mtu);
final connectionTestUrlStore =
PrefNotifier.provider("connection-test-url", _default.connectionTestUrl);
final urlTestIntervalStore =
PrefNotifier.provider("url-test-interval", _default.urlTestInterval);
final enableClashApiStore =
PrefNotifier.provider("enable-clash-api", _default.enableClashApi);
final clashApiPortStore =
PrefNotifier.provider("clash-api-port", _default.clashApiPort);
final enableTunStore = PrefNotifier.provider("enable-tun", _default.enableTun);
final setSystemProxyStore =
PrefNotifier.provider("set-system-proxy", _default.setSystemProxy);
@riverpod
ConfigOptions configOptions(ConfigOptionsRef ref) => ConfigOptions(
executeConfigAsIs: ref.watch(executeConfigAsIs),
logLevel: ref.watch(logLevelStore),
resolveDestination: ref.watch(resolveDestinationStore),
ipv6Mode: ref.watch(ipv6ModeStore),
remoteDnsAddress: ref.watch(remoteDnsAddressStore),
remoteDnsDomainStrategy: ref.watch(remoteDnsDomainStrategyStore),
directDnsAddress: ref.watch(directDnsAddressStore),
directDnsDomainStrategy: ref.watch(directDnsDomainStrategyStore),
mixedPort: ref.watch(mixedPortStore),
localDnsPort: ref.watch(localDnsPortStore),
mtu: ref.watch(mtuStore),
connectionTestUrl: ref.watch(connectionTestUrlStore),
urlTestInterval: ref.watch(urlTestIntervalStore),
enableClashApi: ref.watch(enableClashApiStore),
clashApiPort: ref.watch(clashApiPortStore),
enableTun: ref.watch(enableTunStore),
setSystemProxy: ref.watch(setSystemProxyStore),
);

View File

@@ -15,12 +15,19 @@ import 'package:hiddify/services/singbox/singbox_service.dart';
import 'package:hiddify/utils/utils.dart';
class CoreFacadeImpl with ExceptionHandler, InfraLogger implements CoreFacade {
CoreFacadeImpl(this.singbox, this.filesEditor, this.clash, this.connectivity);
CoreFacadeImpl(
this.singbox,
this.filesEditor,
this.clash,
this.connectivity,
this.configOptions,
);
final SingboxService singbox;
final FilesEditorService filesEditor;
final ClashApi clash;
final ConnectivityService connectivity;
final ConfigOptions Function() configOptions;
bool _initialized = false;
@@ -65,6 +72,21 @@ class CoreFacadeImpl with ExceptionHandler, InfraLogger implements CoreFacade {
);
}
@override
TaskEither<CoreServiceFailure, Unit> changeConfigOptions(
ConfigOptions options,
) {
return exceptionHandler(
() {
return singbox
.changeConfigOptions(options)
.mapLeft(CoreServiceFailure.invalidConfigOptions)
.run();
},
CoreServiceFailure.unexpected,
);
}
@override
TaskEither<CoreServiceFailure, Unit> changeConfig(String fileName) {
return exceptionHandler(
@@ -72,6 +94,7 @@ class CoreFacadeImpl with ExceptionHandler, InfraLogger implements CoreFacade {
final configPath = filesEditor.configPath(fileName);
loggy.debug("changing config to: $configPath");
return setup()
.andThen(() => changeConfigOptions(configOptions()))
.andThen(
() =>
singbox.create(configPath).mapLeft(CoreServiceFailure.create),