61 lines
1.6 KiB
Dart
61 lines
1.6 KiB
Dart
// ignore_for_file: invalid_annotation_target
|
|
import 'package:freezed_annotation/freezed_annotation.dart';
|
|
|
|
import '../utils/formatters.dart';
|
|
|
|
part 'download_models.freezed.dart';
|
|
|
|
enum DownloadStatus {
|
|
queued,
|
|
downloading,
|
|
paused,
|
|
completed,
|
|
failed,
|
|
cancelled,
|
|
partial, // Some episodes downloaded, but not all (for shows/seasons)
|
|
}
|
|
|
|
@freezed
|
|
sealed class DownloadProgress with _$DownloadProgress {
|
|
const DownloadProgress._();
|
|
|
|
const factory DownloadProgress({
|
|
required String globalKey,
|
|
required DownloadStatus status,
|
|
@Default(0) int progress,
|
|
@Default(0) int downloadedBytes,
|
|
@Default(0) int totalBytes,
|
|
@Default(0.0) double speed,
|
|
String? errorMessage,
|
|
String? currentFile,
|
|
String? thumbPath,
|
|
}) = _DownloadProgress;
|
|
|
|
double get progressPercent => progress / 100.0;
|
|
|
|
String get speedFormatted => ByteFormatter.formatSpeed(speed);
|
|
String get downloadedFormatted => ByteFormatter.formatBytes(downloadedBytes);
|
|
String get totalFormatted => ByteFormatter.formatBytes(totalBytes);
|
|
|
|
bool get hasArtworkPaths => thumbPath != null;
|
|
}
|
|
|
|
@freezed
|
|
sealed class DeletionProgress with _$DeletionProgress {
|
|
const DeletionProgress._();
|
|
|
|
const factory DeletionProgress({
|
|
required String globalKey,
|
|
required String itemTitle,
|
|
required int currentItem,
|
|
required int totalItems,
|
|
String? currentOperation,
|
|
}) = _DeletionProgress;
|
|
|
|
double get progressPercent => totalItems > 0 ? (currentItem / totalItems) : 0.0;
|
|
|
|
int get progressPercentInt => (progressPercent * 100).round();
|
|
|
|
bool get isComplete => currentItem >= totalItems;
|
|
}
|