2020-07-20 12:29:07 +00:00
|
|
|
import 'package:logging/logging.dart';
|
|
|
|
import 'package:photos/db/files_db.dart';
|
|
|
|
import 'package:photos/db/memories_db.dart';
|
|
|
|
import 'package:photos/models/file.dart';
|
|
|
|
import 'package:photos/models/memory.dart';
|
2020-07-21 08:01:37 +00:00
|
|
|
import 'package:photos/utils/date_time_util.dart';
|
2020-07-20 12:29:07 +00:00
|
|
|
|
|
|
|
class MemoryService {
|
|
|
|
final _logger = Logger("MemoryService");
|
|
|
|
final _memoriesDB = MemoriesDB.instance;
|
|
|
|
final _filesDB = FilesDB.instance;
|
|
|
|
static final microSecondsInADay = 86400000000;
|
|
|
|
static final daysInAYear = 365;
|
|
|
|
static final daysBefore = 7;
|
|
|
|
static final daysAfter = 1;
|
|
|
|
|
|
|
|
MemoryService._privateConstructor();
|
|
|
|
|
|
|
|
static final MemoryService instance = MemoryService._privateConstructor();
|
|
|
|
|
2020-07-20 12:58:20 +00:00
|
|
|
Future<void> init() async {
|
2020-07-20 12:29:07 +00:00
|
|
|
await _memoriesDB.clearMemoriesSeenBeforeTime(
|
|
|
|
DateTime.now().microsecondsSinceEpoch - (7 * microSecondsInADay));
|
|
|
|
}
|
|
|
|
|
|
|
|
Future<List<Memory>> getMemories() async {
|
|
|
|
final files = List<File>();
|
2020-07-21 08:01:37 +00:00
|
|
|
final presentTime = DateTime.now();
|
|
|
|
final present = presentTime.subtract(Duration(
|
|
|
|
hours: presentTime.hour,
|
|
|
|
minutes: presentTime.minute,
|
|
|
|
seconds: presentTime.second));
|
2020-07-20 12:29:07 +00:00
|
|
|
for (var yearAgo = 1; yearAgo <= 100; yearAgo++) {
|
2020-07-21 08:01:37 +00:00
|
|
|
final year = (present.year - yearAgo).toString();
|
|
|
|
final month = present.month > 9
|
|
|
|
? present.month.toString()
|
|
|
|
: "0" + present.month.toString();
|
|
|
|
final day = present.day > 9
|
|
|
|
? present.day.toString()
|
|
|
|
: "0" + present.day.toString();
|
|
|
|
final date = DateTime.parse(year + "-" + month + "-" + day);
|
2020-07-20 12:29:07 +00:00
|
|
|
final startCreationTime =
|
2020-07-21 08:01:37 +00:00
|
|
|
date.subtract(Duration(days: 7)).microsecondsSinceEpoch;
|
2020-07-20 12:29:07 +00:00
|
|
|
final endCreationTime =
|
2020-07-21 08:01:37 +00:00
|
|
|
date.add(Duration(days: 1)).microsecondsSinceEpoch;
|
|
|
|
var memories = await _filesDB.getFilesCreatedWithinDuration(
|
|
|
|
startCreationTime, endCreationTime);
|
|
|
|
if (memories.length > 0)
|
|
|
|
_logger.info("Got " +
|
|
|
|
memories.length.toString() +
|
|
|
|
" memories between " +
|
|
|
|
getFormattedTime(
|
|
|
|
DateTime.fromMicrosecondsSinceEpoch(startCreationTime)) +
|
|
|
|
" to " +
|
|
|
|
getFormattedTime(
|
|
|
|
DateTime.fromMicrosecondsSinceEpoch(endCreationTime)));
|
|
|
|
files.addAll(memories);
|
2020-07-20 12:29:07 +00:00
|
|
|
}
|
|
|
|
final seenFileIDs = await _memoriesDB.getSeenFileIDs();
|
|
|
|
final memories = List<Memory>();
|
|
|
|
for (final file in files) {
|
|
|
|
memories.add(Memory(file, seenFileIDs.contains(file.generatedId)));
|
|
|
|
}
|
2020-07-20 15:09:30 +00:00
|
|
|
_logger.info("Number of memories: " + memories.length.toString());
|
2020-07-20 12:29:07 +00:00
|
|
|
return memories;
|
|
|
|
}
|
|
|
|
|
|
|
|
Future markMemoryAsSeen(Memory memory) async {
|
|
|
|
return _memoriesDB.markMemoryAsSeen(
|
|
|
|
memory, DateTime.now().microsecondsSinceEpoch);
|
|
|
|
}
|
|
|
|
}
|