Add service mode and strict route

This commit is contained in:
problematicconsumer
2023-11-11 23:10:58 +03:30
parent 5125c1cc13
commit 305bead110
12 changed files with 132 additions and 85 deletions

View File

@@ -19,6 +19,7 @@ class ConfigOptionsPage extends HookConsumerWidget {
final t = ref.watch(translationsProvider);
final options = ref.watch(configPreferencesProvider);
final serviceMode = ref.watch(serviceModeStoreProvider);
return Scaffold(
appBar: AppBar(
@@ -59,6 +60,11 @@ class ConfigOptionsPage extends HookConsumerWidget {
),
const SettingsDivider(),
SettingsSection(t.settings.config.section.route),
// SwitchListTile(
// title: Text(t.settings.config.bypassLan),
// value: options.bypassLan,
// onChanged: ref.read(bypassLanStore.notifier).update,
// ),
SwitchListTile(
title: Text(t.settings.config.resolveDestination),
value: options.resolveDestination,
@@ -141,20 +147,47 @@ class ConfigOptionsPage extends HookConsumerWidget {
.update(domainStrategy);
},
),
// SwitchListTile(
// title: Text(t.settings.config.enableFakeDns),
// value: options.enableFakeDns,
// onChanged: ref.read(enableFakeDnsStore.notifier).update,
// ),
const SettingsDivider(),
SettingsSection(t.settings.config.section.inbound),
if (PlatformUtils.isDesktop) ...[
SwitchListTile(
title: Text(t.settings.config.enableTun),
value: options.enableTun,
onChanged: ref.read(enableTunStore.notifier).update,
),
SwitchListTile(
title: Text(t.settings.config.setSystemProxy),
value: options.setSystemProxy,
onChanged: ref.read(setSystemProxyStore.notifier).update,
),
],
// if (PlatformUtils.isDesktop) ...[
// SwitchListTile(
// title: Text(t.settings.config.enableTun),
// value: options.enableTun,
// onChanged: ref.read(enableTunStore.notifier).update,
// ),
// SwitchListTile(
// title: Text(t.settings.config.setSystemProxy),
// value: options.setSystemProxy,
// onChanged: ref.read(setSystemProxyStore.notifier).update,
// ),
// ],
ListTile(
title: Text(t.settings.config.serviceMode),
subtitle: Text(serviceMode.present(t)),
onTap: () async {
final pickedMode = await SettingsPickerDialog(
title: t.settings.config.serviceMode,
selected: serviceMode,
options: ServiceMode.choices,
getTitle: (e) => e.present(t),
resetValue: ServiceMode.defaultMode,
).show(context);
if (pickedMode == null) return;
await ref
.read(serviceModeStoreProvider.notifier)
.update(pickedMode);
},
),
SwitchListTile(
title: Text(t.settings.config.strictRoute),
value: options.strictRoute,
onChanged: ref.read(strictRouteStore.notifier).update,
),
ListTile(
title: Text(t.settings.config.tunImplementation),
subtitle: Text(options.tunImplementation.name),

View File

@@ -31,7 +31,7 @@ class SystemTrayController extends _$SystemTrayController
}
final connection = await ref.watch(connectivityControllerProvider.future);
final mode = ref.watch(coreModeStoreProvider);
final serviceMode = ref.watch(serviceModeStoreProvider);
final t = ref.watch(translationsProvider);
@@ -56,19 +56,19 @@ class SystemTrayController extends _$SystemTrayController
onClick: handleClickSetAsSystemProxy,
),
MenuItem.submenu(
label: t.settings.config.mode,
label: t.settings.config.serviceMode,
submenu: Menu(
items: [
...CoreMode.values.map(
...ServiceMode.values.map(
(e) => MenuItem.checkbox(
checked: e == mode,
checked: e == serviceMode,
key: e.name,
label: e.present(t),
onClick: (menuItem) async {
final newMode = CoreMode.values.byName(menuItem.key!);
loggy.debug("switching core mode: [$newMode]");
final newMode = ServiceMode.values.byName(menuItem.key!);
loggy.debug("switching service mode: [$newMode]");
await ref
.read(coreModeStoreProvider.notifier)
.read(serviceModeStoreProvider.notifier)
.update(newMode);
},
),