Files
umbrix/lib/features/profile/model/profile_entity.dart
2024-07-29 13:11:51 +02:00

60 lines
1.4 KiB
Dart

import 'package:dartx/dartx.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
part 'profile_entity.freezed.dart';
enum ProfileType { remote, local }
@freezed
sealed class ProfileEntity with _$ProfileEntity {
const ProfileEntity._();
const factory ProfileEntity.remote({
required String id,
required bool active,
required String name,
required String url,
required DateTime lastUpdate,
String? testUrl,
ProfileOptions? options,
SubscriptionInfo? subInfo,
}) = RemoteProfileEntity;
const factory ProfileEntity.local({
required String id,
required bool active,
required String name,
required DateTime lastUpdate,
String? testUrl,
}) = LocalProfileEntity;
}
@freezed
class ProfileOptions with _$ProfileOptions {
const factory ProfileOptions({
required Duration updateInterval,
}) = _ProfileOptions;
}
@freezed
class SubscriptionInfo with _$SubscriptionInfo {
const SubscriptionInfo._();
const factory SubscriptionInfo({
required int upload,
required int download,
required int total,
required DateTime expire,
String? webPageUrl,
String? supportUrl,
}) = _SubscriptionInfo;
bool get isExpired => expire <= DateTime.now();
int get consumption => upload + download;
double get ratio => (consumption / total).clamp(0, 1);
Duration get remaining => expire.difference(DateTime.now());
}