duplicate_files.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import 'dart:convert';
  2. import 'package:photos/models/file.dart';
  3. import 'package:photos/services/collections_service.dart';
  4. class DuplicateFilesResponse {
  5. final List<DuplicateItems> duplicates;
  6. DuplicateFilesResponse(this.duplicates);
  7. factory DuplicateFilesResponse.fromMap(Map<String, dynamic> map) {
  8. return DuplicateFilesResponse(
  9. List<DuplicateItems>.from(
  10. map['duplicates']?.map((x) => DuplicateItems.fromMap(x)),
  11. ),
  12. );
  13. }
  14. factory DuplicateFilesResponse.fromJson(String source) =>
  15. DuplicateFilesResponse.fromMap(json.decode(source));
  16. @override
  17. String toString() => 'DuplicateFiles(duplicates: $duplicates)';
  18. }
  19. class DuplicateItems {
  20. final List<int> fileIDs;
  21. final int size;
  22. DuplicateItems(this.fileIDs, this.size);
  23. factory DuplicateItems.fromMap(Map<String, dynamic> map) {
  24. return DuplicateItems(
  25. List<int>.from(map['fileIDs']),
  26. map['size'],
  27. );
  28. }
  29. factory DuplicateItems.fromJson(String source) =>
  30. DuplicateItems.fromMap(json.decode(source));
  31. @override
  32. String toString() => 'Duplicates(fileIDs: $fileIDs, size: $size)';
  33. }
  34. class DuplicateFiles {
  35. final List<File> files;
  36. final int size;
  37. static final collectionsService = CollectionsService.instance;
  38. DuplicateFiles(this.files, this.size) {
  39. sortByCollectionName();
  40. }
  41. @override
  42. String toString() => 'DuplicateFiles(files: $files, size: $size)';
  43. sortByCollectionName() {
  44. files.sort((first, second) {
  45. final firstName =
  46. collectionsService.getCollectionByID(first.collectionID!)!.name ?? '';
  47. final secondName =
  48. collectionsService.getCollectionByID(second.collectionID!)!.name ??
  49. '';
  50. return firstName.compareTo(secondName);
  51. });
  52. }
  53. }