duplicate_files.dart 1.7 KB

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