ente/mobile/lib/models/duplicate_files.dart

97 lines
2.5 KiB
Dart
Raw Normal View History

import 'dart:convert';
2023-08-25 04:39:30 +00:00
import 'package:photos/models/file/file.dart';
import 'package:photos/services/collections_service.dart';
class DuplicateFilesResponse {
2023-12-14 03:28:12 +00:00
final List<FileWithSameSize> sameSizeFiles;
DuplicateFilesResponse(this.sameSizeFiles);
factory DuplicateFilesResponse.fromMap(Map<String, dynamic> map) {
return DuplicateFilesResponse(
2023-12-14 03:28:12 +00:00
List<FileWithSameSize>.from(
map['duplicates']?.map((x) => FileWithSameSize.fromMap(x)),
2022-06-11 08:23:52 +00:00
),
);
}
Map<int, int> toUploadIDToSize() {
final Map<int, int> result = {};
for (final filesWithSameSize in sameSizeFiles) {
for (final uploadID in filesWithSameSize.fileIDs) {
result[uploadID] = filesWithSameSize.size;
}
}
return result;
}
factory DuplicateFilesResponse.fromJson(String source) =>
DuplicateFilesResponse.fromMap(json.decode(source));
@override
2023-12-14 03:28:12 +00:00
String toString() => 'DuplicateFiles(sameSizeFiles: $sameSizeFiles)';
}
2023-12-14 03:28:12 +00:00
class FileWithSameSize {
final List<int> fileIDs;
final int size;
2023-12-14 03:28:12 +00:00
FileWithSameSize(this.fileIDs, this.size);
2023-12-14 03:28:12 +00:00
factory FileWithSameSize.fromMap(Map<String, dynamic> map) {
return FileWithSameSize(
List<int>.from(map['fileIDs']),
map['size'],
);
}
2023-12-14 03:28:12 +00:00
factory FileWithSameSize.fromJson(String source) =>
FileWithSameSize.fromMap(json.decode(source));
@override
String toString() => 'Duplicates(fileIDs: $fileIDs, size: $size)';
}
class DuplicateFiles {
2023-08-24 16:56:24 +00:00
final List<EnteFile> files;
final int size;
final Set<int> collectionIDs;
static final collectionsService = CollectionsService.instance;
DuplicateFiles(
this.files,
this.size,
this.collectionIDs,
) {
sortByCollectionName();
}
// sortByLocalIDs sorts the files such that files with localID are at the top
List<EnteFile> sortByLocalIDs() {
final List<EnteFile> filesWithoutLocalID = [];
final List<EnteFile> localFiles = [];
for (final file in files) {
if ((file.localID ?? '').isEmpty) {
localFiles.add(file);
} else {
filesWithoutLocalID.add(file);
}
}
localFiles.addAll(filesWithoutLocalID);
return localFiles;
}
@override
String toString() => 'DuplicateFiles(files: $files, size: $size)';
sortByCollectionName() {
files.sort((first, second) {
final firstName = collectionsService
.getCollectionByID(first.collectionID!)!
.displayName;
final secondName = collectionsService
.getCollectionByID(second.collectionID!)!
.displayName;
return firstName.compareTo(secondName);
});
}
}