memory_service.dart 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import 'package:logging/logging.dart';
  2. import 'package:photos/db/files_db.dart';
  3. import 'package:photos/db/memories_db.dart';
  4. import 'package:photos/models/file.dart';
  5. import 'package:photos/models/memory.dart';
  6. class MemoryService {
  7. final _logger = Logger("MemoryService");
  8. final _memoriesDB = MemoriesDB.instance;
  9. final _filesDB = FilesDB.instance;
  10. static final microSecondsInADay = 86400000000;
  11. static final daysInAYear = 365;
  12. static final daysBefore = 7;
  13. static final daysAfter = 1;
  14. MemoryService._privateConstructor();
  15. static final MemoryService instance = MemoryService._privateConstructor();
  16. Future<void> init() async {
  17. await _memoriesDB.clearMemoriesSeenBeforeTime(
  18. DateTime.now().microsecondsSinceEpoch - (7 * microSecondsInADay));
  19. }
  20. Future<List<Memory>> getMemories() async {
  21. final files = List<File>();
  22. var now = DateTime.now().microsecondsSinceEpoch;
  23. for (var yearAgo = 1; yearAgo <= 100; yearAgo++) {
  24. var checkPointDay = yearAgo * daysInAYear;
  25. final startCreationTime =
  26. now - ((checkPointDay + daysBefore) * microSecondsInADay);
  27. final endCreationTime =
  28. now - ((checkPointDay - daysAfter) * microSecondsInADay);
  29. files.addAll(await _filesDB.getFilesCreatedWithinDuration(
  30. startCreationTime, endCreationTime));
  31. }
  32. final seenFileIDs = await _memoriesDB.getSeenFileIDs();
  33. final memories = List<Memory>();
  34. for (final file in files) {
  35. memories.add(Memory(file, seenFileIDs.contains(file.generatedId)));
  36. }
  37. _logger.info("Number of memories: " + memories.length.toString());
  38. return memories;
  39. }
  40. Future markMemoryAsSeen(Memory memory) async {
  41. return _memoriesDB.markMemoryAsSeen(
  42. memory, DateTime.now().microsecondsSinceEpoch);
  43. }
  44. }