finished implementation

This commit is contained in:
Fabian Freund
2025-09-14 11:41:01 +02:00
parent ac0f3b5dcc
commit a8334ae684
30 changed files with 848 additions and 83 deletions
@@ -266,7 +266,8 @@ Map<String, dynamic> _$GeneralSettingsToJson(
'showExtensionShortcut': instance.showExtensionShortcut,
'enableLocalAiFeatures': instance.enableLocalAiFeatures,
'defaultCreateTabType': _$TabTypeEnumMap[instance.defaultCreateTabType]!,
'defaultIntentTabType': _$TabTypeEnumMap[instance.defaultIntentTabType]!,
'tabIntentOpenSetting':
_$TabIntentOpenSettingEnumMap[instance.tabIntentOpenSetting]!,
'autoHideTabBar': instance.autoHideTabBar,
'tabBarSwipeAction': _$TabBarSwipeActionEnumMap[instance.tabBarSwipeAction]!,
};
@@ -4,17 +4,32 @@ import 'package:json_annotation/json_annotation.dart';
part 'tor_settings.g.dart';
enum TorConnectionConfig { auto, direct, obfs4, snowflake }
@CopyWith()
@JsonSerializable(includeIfNull: true, constructor: 'withDefaults')
class TorSettings with FastEquatable {
final bool proxyPrivateTabsTor;
final bool autoConfig;
final TorConnectionConfig config;
final bool requireBridge;
final bool fetchRemoteBridges;
TorSettings({required this.proxyPrivateTabsTor, required this.autoConfig});
TorSettings({
required this.proxyPrivateTabsTor,
required this.config,
required this.requireBridge,
required this.fetchRemoteBridges,
});
TorSettings.withDefaults({bool? proxyPrivateTabsTor, bool? autoConfig})
: proxyPrivateTabsTor = proxyPrivateTabsTor ?? false,
autoConfig = autoConfig ?? true;
TorSettings.withDefaults({
bool? proxyPrivateTabsTor,
TorConnectionConfig? config,
bool? requireBridge,
bool? fetchRemoteBridges,
}) : proxyPrivateTabsTor = proxyPrivateTabsTor ?? false,
config = config ?? TorConnectionConfig.auto,
requireBridge = requireBridge ?? false,
fetchRemoteBridges = fetchRemoteBridges ?? true;
factory TorSettings.fromJson(Map<String, dynamic> json) =>
_$TorSettingsFromJson(json);
@@ -22,5 +37,10 @@ class TorSettings with FastEquatable {
Map<String, dynamic> toJson() => _$TorSettingsToJson(this);
@override
List<Object?> get hashParameters => [proxyPrivateTabsTor, autoConfig];
List<Object?> get hashParameters => [
proxyPrivateTabsTor,
config,
requireBridge,
fetchRemoteBridges,
];
}
@@ -9,7 +9,11 @@ part of 'tor_settings.dart';
abstract class _$TorSettingsCWProxy {
TorSettings proxyPrivateTabsTor(bool proxyPrivateTabsTor);
TorSettings autoConfig(bool autoConfig);
TorSettings config(TorConnectionConfig config);
TorSettings requireBridge(bool requireBridge);
TorSettings fetchRemoteBridges(bool fetchRemoteBridges);
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TorSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
///
@@ -17,7 +21,12 @@ abstract class _$TorSettingsCWProxy {
/// ```dart
/// TorSettings(...).copyWith(id: 12, name: "My name")
/// ````
TorSettings call({bool proxyPrivateTabsTor, bool autoConfig});
TorSettings call({
bool proxyPrivateTabsTor,
TorConnectionConfig config,
bool requireBridge,
bool fetchRemoteBridges,
});
}
/// Proxy class for `copyWith` functionality. This is a callable class and can be used as follows: `instanceOfTorSettings.copyWith(...)`. Additionally contains functions for specific fields e.g. `instanceOfTorSettings.copyWith.fieldName(...)`
@@ -31,7 +40,15 @@ class _$TorSettingsCWProxyImpl implements _$TorSettingsCWProxy {
this(proxyPrivateTabsTor: proxyPrivateTabsTor);
@override
TorSettings autoConfig(bool autoConfig) => this(autoConfig: autoConfig);
TorSettings config(TorConnectionConfig config) => this(config: config);
@override
TorSettings requireBridge(bool requireBridge) =>
this(requireBridge: requireBridge);
@override
TorSettings fetchRemoteBridges(bool fetchRemoteBridges) =>
this(fetchRemoteBridges: fetchRemoteBridges);
@override
/// This function **does support** nullification of nullable fields. All `null` values passed to `non-nullable` fields will be ignored. You can also use `TorSettings(...).copyWith.fieldName(...)` to override fields one at a time with nullification support.
@@ -42,17 +59,27 @@ class _$TorSettingsCWProxyImpl implements _$TorSettingsCWProxy {
/// ````
TorSettings call({
Object? proxyPrivateTabsTor = const $CopyWithPlaceholder(),
Object? autoConfig = const $CopyWithPlaceholder(),
Object? config = const $CopyWithPlaceholder(),
Object? requireBridge = const $CopyWithPlaceholder(),
Object? fetchRemoteBridges = const $CopyWithPlaceholder(),
}) {
return TorSettings(
proxyPrivateTabsTor: proxyPrivateTabsTor == const $CopyWithPlaceholder()
? _value.proxyPrivateTabsTor
// ignore: cast_nullable_to_non_nullable
: proxyPrivateTabsTor as bool,
autoConfig: autoConfig == const $CopyWithPlaceholder()
? _value.autoConfig
config: config == const $CopyWithPlaceholder()
? _value.config
// ignore: cast_nullable_to_non_nullable
: autoConfig as bool,
: config as TorConnectionConfig,
requireBridge: requireBridge == const $CopyWithPlaceholder()
? _value.requireBridge
// ignore: cast_nullable_to_non_nullable
: requireBridge as bool,
fetchRemoteBridges: fetchRemoteBridges == const $CopyWithPlaceholder()
? _value.fetchRemoteBridges
// ignore: cast_nullable_to_non_nullable
: fetchRemoteBridges as bool,
);
}
}
@@ -70,11 +97,22 @@ extension $TorSettingsCopyWith on TorSettings {
TorSettings _$TorSettingsFromJson(Map<String, dynamic> json) =>
TorSettings.withDefaults(
proxyPrivateTabsTor: json['proxyPrivateTabsTor'] as bool?,
autoConfig: json['autoConfig'] as bool?,
config: $enumDecodeNullable(_$TorConnectionConfigEnumMap, json['config']),
requireBridge: json['requireBridge'] as bool?,
fetchRemoteBridges: json['fetchRemoteBridges'] as bool?,
);
Map<String, dynamic> _$TorSettingsToJson(TorSettings instance) =>
<String, dynamic>{
'proxyPrivateTabsTor': instance.proxyPrivateTabsTor,
'autoConfig': instance.autoConfig,
'config': _$TorConnectionConfigEnumMap[instance.config]!,
'requireBridge': instance.requireBridge,
'fetchRemoteBridges': instance.fetchRemoteBridges,
};
const _$TorConnectionConfigEnumMap = {
TorConnectionConfig.auto: 'auto',
TorConnectionConfig.direct: 'direct',
TorConnectionConfig.obfs4: 'obfs4',
TorConnectionConfig.snowflake: 'snowflake',
};