Files
MWClash/lib/models/core.dart

213 lines
6.3 KiB
Dart
Raw Normal View History

2024-04-30 23:38:49 +08:00
import 'package:fl_clash/enum/enum.dart';
import 'package:fl_clash/models/models.dart';
2024-04-30 23:38:49 +08:00
import 'package:freezed_annotation/freezed_annotation.dart';
part 'generated/core.freezed.dart';
part 'generated/core.g.dart';
@freezed
abstract class SetupParams with _$SetupParams {
const factory SetupParams({
@JsonKey(name: 'selected-map') required Map<String, String> selectedMap,
@JsonKey(name: 'test-url') required String testUrl,
}) = _SetupParams;
factory SetupParams.fromJson(Map<String, dynamic> json) =>
_$SetupParamsFromJson(json);
}
@freezed
abstract class UpdateParams with _$UpdateParams {
const factory UpdateParams({
required Tun tun,
@JsonKey(name: 'mixed-port') required int mixedPort,
@JsonKey(name: 'allow-lan') required bool allowLan,
@JsonKey(name: 'find-process-mode')
required FindProcessMode findProcessMode,
required Mode mode,
@JsonKey(name: 'log-level') required LogLevel logLevel,
required bool ipv6,
@JsonKey(name: 'tcp-concurrent') required bool tcpConcurrent,
@JsonKey(name: 'external-controller')
required ExternalControllerStatus externalController,
@JsonKey(name: 'unified-delay') required bool unifiedDelay,
}) = _UpdateParams;
factory UpdateParams.fromJson(Map<String, dynamic> json) =>
_$UpdateParamsFromJson(json);
}
2024-04-30 23:38:49 +08:00
@freezed
abstract class VpnOptions with _$VpnOptions {
const factory VpnOptions({
required bool enable,
required int port,
required bool ipv6,
required bool dnsHijacking,
required AccessControlProps accessControlProps,
required bool allowBypass,
required bool systemProxy,
required List<String> bypassDomain,
required String stack,
@Default([]) List<String> routeAddress,
}) = _VpnOptions;
factory VpnOptions.fromJson(Map<String, Object?> json) =>
_$VpnOptionsFromJson(json);
}
@freezed
abstract class InitParams with _$InitParams {
const factory InitParams({
@JsonKey(name: 'home-dir') required String homeDir,
required int version,
}) = _InitParams;
factory InitParams.fromJson(Map<String, Object?> json) =>
_$InitParamsFromJson(json);
}
2024-04-30 23:38:49 +08:00
@freezed
abstract class ChangeProxyParams with _$ChangeProxyParams {
2024-04-30 23:38:49 +08:00
const factory ChangeProxyParams({
@JsonKey(name: 'group-name') required String groupName,
@JsonKey(name: 'proxy-name') required String proxyName,
2024-04-30 23:38:49 +08:00
}) = _ChangeProxyParams;
factory ChangeProxyParams.fromJson(Map<String, Object?> json) =>
_$ChangeProxyParamsFromJson(json);
}
@freezed
abstract class UpdateGeoDataParams with _$UpdateGeoDataParams {
const factory UpdateGeoDataParams({
@JsonKey(name: 'geo-type') required String geoType,
@JsonKey(name: 'geo-name') required String geoName,
}) = _UpdateGeoDataParams;
factory UpdateGeoDataParams.fromJson(Map<String, Object?> json) =>
_$UpdateGeoDataParamsFromJson(json);
}
2024-04-30 23:38:49 +08:00
@freezed
abstract class CoreEvent with _$CoreEvent {
const factory CoreEvent({required CoreEventType type, dynamic data}) =
_CoreEvent;
2024-04-30 23:38:49 +08:00
factory CoreEvent.fromJson(Map<String, Object?> json) =>
_$CoreEventFromJson(json);
2024-07-13 16:36:08 +08:00
}
@freezed
abstract class InvokeMessage with _$InvokeMessage {
const factory InvokeMessage({required InvokeMessageType type, dynamic data}) =
_InvokeMessage;
2024-07-13 16:36:08 +08:00
factory InvokeMessage.fromJson(Map<String, Object?> json) =>
_$InvokeMessageFromJson(json);
2024-04-30 23:38:49 +08:00
}
@freezed
abstract class Delay with _$Delay {
const factory Delay({required String name, required String url, int? value}) =
_Delay;
2024-04-30 23:38:49 +08:00
factory Delay.fromJson(Map<String, Object?> json) => _$DelayFromJson(json);
}
2024-05-05 21:40:12 +08:00
@freezed
abstract class Now with _$Now {
const factory Now({required String name, required String value}) = _Now;
2024-05-05 21:40:12 +08:00
factory Now.fromJson(Map<String, Object?> json) => _$NowFromJson(json);
}
@freezed
abstract class ProviderSubscriptionInfo with _$ProviderSubscriptionInfo {
const factory ProviderSubscriptionInfo({
@JsonKey(name: 'UPLOAD') @Default(0) int upload,
@JsonKey(name: 'DOWNLOAD') @Default(0) int download,
@JsonKey(name: 'TOTAL') @Default(0) int total,
@JsonKey(name: 'EXPIRE') @Default(0) int expire,
}) = _ProviderSubscriptionInfo;
factory ProviderSubscriptionInfo.fromJson(Map<String, Object?> json) =>
_$ProviderSubscriptionInfoFromJson(json);
}
SubscriptionInfo? subscriptionInfoFormCore(Map<String, Object?>? json) {
if (json == null) return null;
return SubscriptionInfo(
upload: (json['Upload'] as num?)?.toInt() ?? 0,
download: (json['Download'] as num?)?.toInt() ?? 0,
total: (json['Total'] as num?)?.toInt() ?? 0,
expire: (json['Expire'] as num?)?.toInt() ?? 0,
);
}
@freezed
abstract class ExternalProvider with _$ExternalProvider {
const factory ExternalProvider({
required String name,
required String type,
String? path,
required int count,
@JsonKey(name: 'subscription-info', fromJson: subscriptionInfoFormCore)
SubscriptionInfo? subscriptionInfo,
@JsonKey(name: 'vehicle-type') required String vehicleType,
@JsonKey(name: 'update-at') required DateTime updateAt,
}) = _ExternalProvider;
factory ExternalProvider.fromJson(Map<String, Object?> json) =>
_$ExternalProviderFromJson(json);
}
2024-07-13 16:36:08 +08:00
extension ExternalProviderExt on ExternalProvider {
String get updatingKey => 'provider_$name';
}
@freezed
abstract class Action with _$Action {
const factory Action({
required ActionMethod method,
required dynamic data,
required String id,
}) = _Action;
2024-07-13 16:36:08 +08:00
factory Action.fromJson(Map<String, Object?> json) => _$ActionFromJson(json);
2024-07-13 16:36:08 +08:00
}
@freezed
abstract class ProxiesData with _$ProxiesData {
const factory ProxiesData({
required Map<String, dynamic> proxies,
required List<String> all,
}) = _ProxiesData;
factory ProxiesData.fromJson(Map<String, Object?> json) =>
_$ProxiesDataFromJson(json);
}
@freezed
abstract class ActionResult with _$ActionResult {
const factory ActionResult({
required ActionMethod method,
required dynamic data,
String? id,
@Default(ResultType.success) ResultType code,
}) = _ActionResult;
factory ActionResult.fromJson(Map<String, Object?> json) =>
_$ActionResultFromJson(json);
2024-07-13 16:36:08 +08:00
}
extension ActionResultExt on ActionResult {
Result get toResult {
if (code == ResultType.success) {
return Result.success(data);
} else {
return Result.error('$data');
}
}
}