Skip to content

Commit

Permalink
Change mapping and bug fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
0xConsumer committed Feb 15, 2024
1 parent bd4c5ee commit 702c59c
Show file tree
Hide file tree
Showing 21 changed files with 503 additions and 424 deletions.
8 changes: 3 additions & 5 deletions lib/core/http_client/http_client_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -15,11 +15,9 @@ DioHttpClient httpClient(HttpClientRef ref) {
);

ref.listen(
configOptionNotifierProvider,
(_, next) {
if (next case AsyncData(value: final options)) {
client.setProxyPort(options.mixedPort);
}
configOptionNotifierProvider.selectAsync((data) => data.mixedPort),
(_, next) async {
client.setProxyPort(await next);
},
fireImmediately: true,
);
Expand Down
54 changes: 54 additions & 0 deletions lib/core/model/optional_range.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import 'package:dart_mappable/dart_mappable.dart';
import 'package:dartx/dartx.dart';
import 'package:hiddify/core/localization/translations.dart';

part 'optional_range.mapper.dart';

@MappableClass()
class OptionalRange with OptionalRangeMappable {
const OptionalRange({this.min, this.max});

final int? min;
final int? max;

String format() => [min, max].whereNotNull().join("-");
String present(TranslationsEn t) =>
format().isEmpty ? t.general.notSet : format();

factory OptionalRange._fromString(
String input, {
bool allowEmpty = true,
}) =>
switch (input.split("-")) {
[final String val] when val.isEmpty && allowEmpty =>
const OptionalRange(),
[final String min] => OptionalRange(min: int.parse(min)),
[final String min, final String max] => OptionalRange(
min: int.parse(min),
max: int.parse(max),
),
_ => throw Exception("Invalid range: $input"),
};

static OptionalRange? tryParse(
String input, {
bool allowEmpty = false,
}) {
try {
return OptionalRange._fromString(input);
} catch (_) {
return null;
}
}
}

class OptionalRangeJsonMapper extends SimpleMapper<OptionalRange> {
const OptionalRangeJsonMapper();

@override
OptionalRange decode(dynamic value) =>
OptionalRange._fromString(value as String);

@override
dynamic encode(OptionalRange self) => self.format();
}
57 changes: 0 additions & 57 deletions lib/core/model/range.dart

This file was deleted.

10 changes: 5 additions & 5 deletions lib/core/utils/json_converters.dart
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:dart_mappable/dart_mappable.dart';

class IntervalInSecondsConverter implements JsonConverter<Duration, int> {
const IntervalInSecondsConverter();
class IntervalInSecondsMapper extends SimpleMapper<Duration> {
const IntervalInSecondsMapper();

@override
Duration fromJson(int json) => Duration(seconds: json);
Duration decode(dynamic value) => Duration(seconds: value as int);

@override
int toJson(Duration object) => object.inSeconds;
dynamic encode(Duration self) => self.inSeconds;
}
55 changes: 6 additions & 49 deletions lib/features/config_option/data/config_option_repository.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,8 @@ import 'package:hiddify/core/model/region.dart';
import 'package:hiddify/core/utils/exception_handler.dart';
import 'package:hiddify/features/config_option/model/config_option_entity.dart';
import 'package:hiddify/features/config_option/model/config_option_failure.dart';
import 'package:hiddify/features/config_option/model/config_option_patch.dart';
import 'package:hiddify/features/geo_asset/data/geo_asset_path_resolver.dart';
import 'package:hiddify/features/geo_asset/data/geo_asset_repository.dart';
import 'package:hiddify/singbox/model/singbox_config_enum.dart';
import 'package:hiddify/singbox/model/singbox_config_option.dart';
import 'package:hiddify/singbox/model/singbox_rule.dart';
import 'package:hiddify/utils/utils.dart';
Expand Down Expand Up @@ -36,7 +34,7 @@ class ConfigOptionRepositoryImpl
@override
Either<ConfigOptionFailure, ConfigOptionEntity> getConfigOption() {
try {
final map = ConfigOptionEntity.initial.toJson();
final map = ConfigOptionEntity.initial().toMap();
for (final key in map.keys) {
final persisted = preferences.get(key);
if (persisted != null) {
Expand All @@ -51,7 +49,7 @@ class ConfigOptionRepositoryImpl
map[key] = persisted;
}
}
final options = ConfigOptionEntity.fromJson(map);
final options = ConfigOptionEntityMapper.fromMap(map);
return right(options);
} catch (error, stackTrace) {
return left(ConfigOptionUnexpectedFailure(error, stackTrace));
Expand All @@ -64,7 +62,7 @@ class ConfigOptionRepositoryImpl
) {
return exceptionHandler(
() async {
final map = patch.toJson();
final map = patch.toMap();
await updateByJson(map);
return right(unit);
},
Expand All @@ -76,7 +74,7 @@ class ConfigOptionRepositoryImpl
TaskEither<ConfigOptionFailure, Unit> resetConfigOption() {
return exceptionHandler(
() async {
final map = ConfigOptionEntity.initial.toJson();
final map = ConfigOptionEntity.initial().toMap();
await updateByJson(map);
return right(unit);
},
Expand All @@ -88,7 +86,7 @@ class ConfigOptionRepositoryImpl
Future<void> updateByJson(
Map<String, dynamic> options,
) async {
final map = ConfigOptionEntity.initial.toJson();
final map = ConfigOptionEntity.initial().toMap();
for (final key in map.keys) {
final value = options[key];
if (value != null) {
Expand Down Expand Up @@ -172,48 +170,7 @@ class SingBoxConfigOptionRepositoryImpl

final persisted =
optionsRepository.getConfigOption().getOrElse((l) => throw l);
final singboxConfigOption = SingboxConfigOption(
executeConfigAsIs: false,
logLevel: persisted.logLevel,
resolveDestination: persisted.resolveDestination,
ipv6Mode: persisted.ipv6Mode,
remoteDnsAddress: persisted.remoteDnsAddress,
remoteDnsDomainStrategy: persisted.remoteDnsDomainStrategy,
directDnsAddress: persisted.directDnsAddress,
directDnsDomainStrategy: persisted.directDnsDomainStrategy,
mixedPort: persisted.mixedPort,
localDnsPort: persisted.localDnsPort,
tunImplementation: persisted.tunImplementation,
mtu: persisted.mtu,
strictRoute: persisted.strictRoute,
connectionTestUrl: persisted.connectionTestUrl,
urlTestInterval: persisted.urlTestInterval,
enableClashApi: persisted.enableClashApi,
clashApiPort: persisted.clashApiPort,
enableTun: persisted.serviceMode == ServiceMode.tun,
enableTunService: persisted.serviceMode == ServiceMode.tunService,
setSystemProxy: persisted.serviceMode == ServiceMode.systemProxy,
bypassLan: persisted.bypassLan,
allowConnectionFromLan: persisted.allowConnectionFromLan,
enableFakeDns: persisted.enableFakeDns,
enableDnsRouting: persisted.enableDnsRouting,
independentDnsCache: persisted.independentDnsCache,
enableTlsFragment: persisted.enableTlsFragment,
tlsFragmentSize: persisted.tlsFragmentSize,
tlsFragmentSleep: persisted.tlsFragmentSleep,
enableTlsMixedSniCase: persisted.enableTlsMixedSniCase,
enableTlsPadding: persisted.enableTlsPadding,
tlsPaddingSize: persisted.tlsPaddingSize,
enableMux: persisted.enableMux,
muxPadding: persisted.muxPadding,
muxMaxStreams: persisted.muxMaxStreams,
muxProtocol: persisted.muxProtocol,
enableWarp: persisted.enableWarp,
warpDetourMode: persisted.warpDetourMode,
warpLicenseKey: persisted.warpLicenseKey,
warpCleanIp: persisted.warpCleanIp,
warpPort: persisted.warpPort,
warpNoise: persisted.warpNoise,
final singboxConfigOption = persisted.toSingbox(
geoipPath: geoAssetPathResolver.relativePath(
geoAssets.geoip.providerName,
geoAssets.geoip.fileName,
Expand Down
Loading

0 comments on commit 702c59c

Please sign in to comment.