file_sync_util.dart 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import 'dart:math';
  2. import 'package:logging/logging.dart';
  3. import 'package:photo_manager/photo_manager.dart';
  4. import 'package:photos/models/file.dart';
  5. final _logger = Logger("FileSyncUtil");
  6. Future<List<File>> getDeviceFiles(int fromTime, int toTime) async {
  7. final pathEntities = await _getGalleryList(fromTime, toTime);
  8. final files = List<File>();
  9. AssetPathEntity recents;
  10. for (AssetPathEntity pathEntity in pathEntities) {
  11. if (pathEntity.name == "Recent" || pathEntity.name == "Recents") {
  12. recents = pathEntity;
  13. } else {
  14. await _addToPhotos(pathEntity, fromTime, files);
  15. }
  16. }
  17. if (recents != null) {
  18. await _addToPhotos(recents, fromTime, files);
  19. }
  20. files.sort(
  21. (first, second) => first.creationTime.compareTo(second.creationTime));
  22. return files;
  23. }
  24. Future<List<AssetPathEntity>> _getGalleryList(
  25. final int fromTime, final int toTime) async {
  26. final filterOptionGroup = FilterOptionGroup();
  27. filterOptionGroup.setOption(AssetType.image, FilterOption(needTitle: true));
  28. filterOptionGroup.setOption(AssetType.video, FilterOption(needTitle: true));
  29. filterOptionGroup.createTimeCond = DateTimeCond(
  30. min: DateTime.fromMicrosecondsSinceEpoch(fromTime),
  31. max: DateTime.fromMicrosecondsSinceEpoch(toTime),
  32. );
  33. filterOptionGroup.updateTimeCond = DateTimeCond(
  34. min: DateTime.fromMicrosecondsSinceEpoch(fromTime),
  35. max: DateTime.fromMicrosecondsSinceEpoch(toTime),
  36. );
  37. final galleryList = await PhotoManager.getAssetPathList(
  38. hasAll: true,
  39. type: RequestType.common,
  40. filterOption: filterOptionGroup,
  41. );
  42. galleryList.sort((s1, s2) {
  43. return s2.assetCount.compareTo(s1.assetCount);
  44. });
  45. return galleryList;
  46. }
  47. Future _addToPhotos(
  48. AssetPathEntity pathEntity, int fromTime, List<File> files) async {
  49. final assetList = await pathEntity.assetList;
  50. for (AssetEntity entity in assetList) {
  51. if (max(entity.createDateTime.microsecondsSinceEpoch,
  52. entity.modifiedDateTime.microsecondsSinceEpoch) >
  53. fromTime) {
  54. try {
  55. final file = await File.fromAsset(pathEntity, entity);
  56. if (!files.contains(file)) {
  57. files.add(file);
  58. }
  59. } catch (e) {
  60. _logger.severe(e);
  61. }
  62. }
  63. }
  64. }