Add core mode
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
// ignore_for_file: avoid_manual_providers_as_generated_provider_dependency
|
// ignore_for_file: avoid_manual_providers_as_generated_provider_dependency
|
||||||
import 'package:hiddify/core/prefs/prefs.dart';
|
import 'package:hiddify/core/prefs/prefs.dart';
|
||||||
|
import 'package:hiddify/data/data_providers.dart';
|
||||||
import 'package:hiddify/domain/singbox/singbox.dart';
|
import 'package:hiddify/domain/singbox/singbox.dart';
|
||||||
import 'package:hiddify/utils/pref_notifier.dart';
|
import 'package:hiddify/utils/pref_notifier.dart';
|
||||||
|
import 'package:hiddify/utils/utils.dart';
|
||||||
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
import 'package:riverpod_annotation/riverpod_annotation.dart';
|
||||||
|
|
||||||
part 'config_options_store.g.dart';
|
part 'config_options_store.g.dart';
|
||||||
@@ -11,6 +13,25 @@ final _default = ConfigOptions.initial;
|
|||||||
final executeConfigAsIs =
|
final executeConfigAsIs =
|
||||||
PrefNotifier.provider("execute-config-as-is", _default.executeConfigAsIs);
|
PrefNotifier.provider("execute-config-as-is", _default.executeConfigAsIs);
|
||||||
|
|
||||||
|
@Riverpod(keepAlive: true)
|
||||||
|
class CoreModeStore extends _$CoreModeStore {
|
||||||
|
late final _pref = Pref(
|
||||||
|
ref.watch(sharedPreferencesProvider),
|
||||||
|
"mode",
|
||||||
|
PlatformUtils.isDesktop ? CoreMode.proxy : CoreMode.tun,
|
||||||
|
mapFrom: CoreMode.values.byName,
|
||||||
|
mapTo: (value) => value.name,
|
||||||
|
);
|
||||||
|
|
||||||
|
@override
|
||||||
|
CoreMode build() => _pref.getValue();
|
||||||
|
|
||||||
|
Future<void> update(CoreMode value) {
|
||||||
|
state = value;
|
||||||
|
return _pref.update(value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
final logLevelStore = PrefNotifier.provider(
|
final logLevelStore = PrefNotifier.provider(
|
||||||
"log-level",
|
"log-level",
|
||||||
_default.logLevel,
|
_default.logLevel,
|
||||||
@@ -104,25 +125,28 @@ List<Rule> rules(RulesRef ref) => switch (ref.watch(regionNotifierProvider)) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
@riverpod
|
@riverpod
|
||||||
ConfigOptions configOptions(ConfigOptionsRef ref) => ConfigOptions(
|
ConfigOptions configOptions(ConfigOptionsRef ref) {
|
||||||
executeConfigAsIs:
|
final mode = ref.watch(coreModeStoreProvider);
|
||||||
ref.watch(debugModeNotifierProvider) && ref.watch(executeConfigAsIs),
|
return ConfigOptions(
|
||||||
logLevel: ref.watch(logLevelStore),
|
executeConfigAsIs:
|
||||||
resolveDestination: ref.watch(resolveDestinationStore),
|
ref.watch(debugModeNotifierProvider) && ref.watch(executeConfigAsIs),
|
||||||
ipv6Mode: ref.watch(ipv6ModeStore),
|
logLevel: ref.watch(logLevelStore),
|
||||||
remoteDnsAddress: ref.watch(remoteDnsAddressStore),
|
resolveDestination: ref.watch(resolveDestinationStore),
|
||||||
remoteDnsDomainStrategy: ref.watch(remoteDnsDomainStrategyStore),
|
ipv6Mode: ref.watch(ipv6ModeStore),
|
||||||
directDnsAddress: ref.watch(directDnsAddressStore),
|
remoteDnsAddress: ref.watch(remoteDnsAddressStore),
|
||||||
directDnsDomainStrategy: ref.watch(directDnsDomainStrategyStore),
|
remoteDnsDomainStrategy: ref.watch(remoteDnsDomainStrategyStore),
|
||||||
mixedPort: ref.watch(mixedPortStore),
|
directDnsAddress: ref.watch(directDnsAddressStore),
|
||||||
localDnsPort: ref.watch(localDnsPortStore),
|
directDnsDomainStrategy: ref.watch(directDnsDomainStrategyStore),
|
||||||
tunImplementation: ref.watch(tunImplementationStore),
|
mixedPort: ref.watch(mixedPortStore),
|
||||||
mtu: ref.watch(mtuStore),
|
localDnsPort: ref.watch(localDnsPortStore),
|
||||||
connectionTestUrl: ref.watch(connectionTestUrlStore),
|
tunImplementation: ref.watch(tunImplementationStore),
|
||||||
urlTestInterval: ref.watch(urlTestIntervalStore),
|
mtu: ref.watch(mtuStore),
|
||||||
enableClashApi: ref.watch(enableClashApiStore),
|
connectionTestUrl: ref.watch(connectionTestUrlStore),
|
||||||
clashApiPort: ref.watch(clashApiPortStore),
|
urlTestInterval: ref.watch(urlTestIntervalStore),
|
||||||
enableTun: ref.watch(enableTunStore),
|
enableClashApi: ref.watch(enableClashApiStore),
|
||||||
setSystemProxy: ref.watch(setSystemProxyStore),
|
clashApiPort: ref.watch(clashApiPortStore),
|
||||||
rules: ref.watch(rulesProvider),
|
enableTun: mode == CoreMode.tun || ref.watch(enableTunStore),
|
||||||
);
|
setSystemProxy: mode == CoreMode.proxy || ref.watch(setSystemProxyStore),
|
||||||
|
rules: ref.watch(rulesProvider),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ import 'package:freezed_annotation/freezed_annotation.dart';
|
|||||||
import 'package:hiddify/core/prefs/prefs.dart';
|
import 'package:hiddify/core/prefs/prefs.dart';
|
||||||
import 'package:hiddify/domain/singbox/box_log.dart';
|
import 'package:hiddify/domain/singbox/box_log.dart';
|
||||||
import 'package:hiddify/domain/singbox/rules.dart';
|
import 'package:hiddify/domain/singbox/rules.dart';
|
||||||
import 'package:hiddify/utils/platform_utils.dart';
|
|
||||||
|
|
||||||
part 'config_options.freezed.dart';
|
part 'config_options.freezed.dart';
|
||||||
part 'config_options.g.dart';
|
part 'config_options.g.dart';
|
||||||
@@ -34,16 +33,13 @@ class ConfigOptions with _$ConfigOptions {
|
|||||||
@Default(true) bool enableClashApi,
|
@Default(true) bool enableClashApi,
|
||||||
@Default(6756) int clashApiPort,
|
@Default(6756) int clashApiPort,
|
||||||
@Default(false) bool enableTun,
|
@Default(false) bool enableTun,
|
||||||
@Default(true) bool setSystemProxy,
|
@Default(false) bool setSystemProxy,
|
||||||
@Default(false) bool bypassLan,
|
@Default(false) bool bypassLan,
|
||||||
@Default(false) bool enableFakeDns,
|
@Default(false) bool enableFakeDns,
|
||||||
List<Rule>? rules,
|
List<Rule>? rules,
|
||||||
}) = _ConfigOptions;
|
}) = _ConfigOptions;
|
||||||
|
|
||||||
static ConfigOptions initial = ConfigOptions(
|
static ConfigOptions initial = const ConfigOptions();
|
||||||
enableTun: !PlatformUtils.isDesktop,
|
|
||||||
setSystemProxy: PlatformUtils.isDesktop,
|
|
||||||
);
|
|
||||||
|
|
||||||
String format() {
|
String format() {
|
||||||
const encoder = JsonEncoder.withIndent(' ');
|
const encoder = JsonEncoder.withIndent(' ');
|
||||||
|
|||||||
13
lib/domain/singbox/core_mode.dart
Normal file
13
lib/domain/singbox/core_mode.dart
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
import 'package:hiddify/core/prefs/locale_prefs.dart';
|
||||||
|
|
||||||
|
enum CoreMode {
|
||||||
|
none,
|
||||||
|
proxy,
|
||||||
|
tun;
|
||||||
|
|
||||||
|
String present(TranslationsEn t) => switch (this) {
|
||||||
|
none => t.settings.config.modes.none,
|
||||||
|
proxy => t.settings.config.modes.proxy,
|
||||||
|
tun => t.settings.config.modes.tun,
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -1,5 +1,6 @@
|
|||||||
export 'box_log.dart';
|
export 'box_log.dart';
|
||||||
export 'config_options.dart';
|
export 'config_options.dart';
|
||||||
|
export 'core_mode.dart';
|
||||||
export 'core_status.dart';
|
export 'core_status.dart';
|
||||||
export 'outbounds.dart';
|
export 'outbounds.dart';
|
||||||
export 'proxy_type.dart';
|
export 'proxy_type.dart';
|
||||||
|
|||||||
Reference in New Issue
Block a user