Surface/lib/models/file.dart
2025-05-04 01:43:27 +08:00

55 lines
1.5 KiB
Dart

import 'package:freezed_annotation/freezed_annotation.dart';
part 'file.freezed.dart';
part 'file.g.dart';
enum UniversalFileType { image, video, audio, file }
@freezed
abstract class UniversalFile with _$UniversalFile {
const UniversalFile._();
const factory UniversalFile({
required dynamic data,
required UniversalFileType type,
}) = _UniversalFile;
bool get isOnCloud => data is SnCloudFile;
bool get isOnDevice => !isOnCloud;
factory UniversalFile.fromAttachment(SnCloudFile attachment) {
return UniversalFile(
data: attachment,
type: switch (attachment.mimeType?.split('/').firstOrNull) {
'image' => UniversalFileType.image,
'audio' => UniversalFileType.audio,
'video' => UniversalFileType.video,
_ => UniversalFileType.file,
},
);
}
}
@freezed
abstract class SnCloudFile with _$SnCloudFile {
const factory SnCloudFile({
required String id,
required String name,
required String? description,
required Map<String, dynamic>? fileMeta,
required Map<String, dynamic>? userMeta,
required String? mimeType,
required String? hash,
required int size,
required DateTime? uploadedAt,
required String? uploadedTo,
required int usedCount,
required DateTime createdAt,
required DateTime updatedAt,
required DateTime? deletedAt,
}) = _SnCloudFile;
factory SnCloudFile.fromJson(Map<String, dynamic> json) =>
_$SnCloudFileFromJson(json);
}