Change warp options

This commit is contained in:
problematicconsumer
2024-02-20 22:16:47 +03:30
parent c279e3550e
commit dc1b342ff6
11 changed files with 82 additions and 68 deletions

View File

@@ -18,7 +18,7 @@ abstract interface class ConfigOptionRepository {
ConfigOptionPatch patch,
);
TaskEither<ConfigOptionFailure, Unit> resetConfigOption();
TaskEither<ConfigOptionFailure, Unit> generateWarpConfig();
TaskEither<ConfigOptionFailure, String> generateWarpConfig();
}
abstract interface class SingBoxConfigOptionRepository {
@@ -115,7 +115,7 @@ class ConfigOptionRepositoryImpl
}
@override
TaskEither<ConfigOptionFailure, Unit> generateWarpConfig() {
TaskEither<ConfigOptionFailure, String> generateWarpConfig() {
return exceptionHandler(
() async {
final options = getConfigOption().getOrElse((l) => throw l);
@@ -131,8 +131,9 @@ class ConfigOptionRepositoryImpl
ConfigOptionPatch(
warpAccountId: warp.accountId,
warpAccessToken: warp.accessToken,
warpWireguardConfig: warp.wireguardConfig,
),
),
).map((_) => warp.log),
)
.run();
},

View File

@@ -68,6 +68,7 @@ class ConfigOptionEntity with _$ConfigOptionEntity {
@OptionalRangeJsonConverter()
@Default(OptionalRange())
OptionalRange warpNoise,
@Default("") String warpWireguardConfig,
}) = _ConfigOptionEntity;
factory ConfigOptionEntity.initial() => ConfigOptionEntity(
@@ -140,6 +141,7 @@ class ConfigOptionEntity with _$ConfigOptionEntity {
warpCleanIp: patch.warpCleanIp ?? warpCleanIp,
warpPort: patch.warpPort ?? warpPort,
warpNoise: patch.warpNoise ?? warpNoise,
warpWireguardConfig: patch.warpWireguardConfig ?? warpWireguardConfig,
);
}
@@ -184,17 +186,20 @@ class ConfigOptionEntity with _$ConfigOptionEntity {
muxPadding: muxPadding,
muxMaxStreams: muxMaxStreams,
muxProtocol: muxProtocol,
enableWarp: enableWarp,
warpDetourMode: warpDetourMode,
warpLicenseKey: warpLicenseKey,
warpAccountId: warpAccountId,
warpAccessToken: warpAccessToken,
warpCleanIp: warpCleanIp,
warpPort: warpPort,
warpNoise: warpNoise,
geoipPath: geoipPath,
geositePath: geositePath,
rules: rules,
warp: SingboxWarpOption(
enable: enableWarp,
mode: warpDetourMode,
licenseKey: warpLicenseKey,
accountId: warpAccountId,
accessToken: warpAccessToken,
cleanIp: warpCleanIp,
cleanPort: warpPort,
warpNoise: warpNoise,
wireguardConfig: warpWireguardConfig,
),
);
}
@@ -248,6 +253,7 @@ class ConfigOptionPatch with _$ConfigOptionPatch {
String? warpCleanIp,
int? warpPort,
@OptionalRangeJsonConverter() OptionalRange? warpNoise,
String? warpWireguardConfig,
}) = _ConfigOptionPatch;
factory ConfigOptionPatch.fromJson(Map<String, dynamic> json) =>

View File

@@ -1,4 +1,3 @@
import 'package:fpdart/fpdart.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:hiddify/core/preferences/preferences_provider.dart';
import 'package:hiddify/features/config_option/data/config_option_data_providers.dart';
@@ -27,7 +26,7 @@ class WarpOptionNotifier extends _$WarpOptionNotifier with AppLogger {
return WarpOptions(
consentGiven: consent,
configGeneration: hasWarpConfig
? const AsyncValue.data(unit)
? const AsyncValue.data("")
: AsyncError(const MissingWarpConfigFailure(), StackTrace.current),
);
}
@@ -66,6 +65,6 @@ class WarpOptionNotifier extends _$WarpOptionNotifier with AppLogger {
class WarpOptions with _$WarpOptions {
const factory WarpOptions({
required bool consentGiven,
required AsyncValue<Unit> configGeneration,
required AsyncValue<String> configGeneration,
}) = _WarpOptions;
}

View File

@@ -4,6 +4,7 @@ import 'package:flutter/material.dart';
import 'package:hiddify/core/localization/translations.dart';
import 'package:hiddify/core/model/constants.dart';
import 'package:hiddify/core/model/optional_range.dart';
import 'package:hiddify/core/widget/custom_alert_dialog.dart';
import 'package:hiddify/features/config_option/model/config_option_entity.dart';
import 'package:hiddify/features/config_option/notifier/warp_option_notifier.dart';
import 'package:hiddify/features/settings/widgets/settings_input_dialog.dart';
@@ -32,6 +33,18 @@ class WarpOptionsTiles extends HookConsumerWidget {
final warpPrefaceCompleted = warpOptions.consentGiven;
final canChangeOptions = warpPrefaceCompleted && options.enableWarp;
ref.listen(
warpOptionNotifierProvider.select((value) => value.configGeneration),
(previous, next) async {
if (next case AsyncData(value: final log) when log.isNotEmpty) {
await CustomAlertDialog(
title: t.settings.config.warpConfigGenerated,
message: log,
).show(context);
}
},
);
return Column(
children: [
SwitchListTile(