fixed source update for externally modified entries

This commit is contained in:
Thibault Deckers 2022-02-22 11:52:49 +09:00
parent 8bab3b8f0c
commit b6367e391c
2 changed files with 11 additions and 26 deletions

View file

@ -85,12 +85,13 @@ class MediaStoreSource extends CollectionSource {
debugPrint('$runtimeType refresh ${stopwatch.elapsed} check obsolete entries'); debugPrint('$runtimeType refresh ${stopwatch.elapsed} check obsolete entries');
final knownDateByContentId = Map.fromEntries(knownLiveEntries.map((entry) => MapEntry(entry.contentId, entry.dateModifiedSecs))); final knownDateByContentId = Map.fromEntries(knownLiveEntries.map((entry) => MapEntry(entry.contentId, entry.dateModifiedSecs)));
final obsoleteContentIds = (await mediaStoreService.checkObsoleteContentIds(knownDateByContentId.keys.toList())).toSet(); final knownContentIds = knownDateByContentId.keys.toList();
final removedContentIds = (await mediaStoreService.checkObsoleteContentIds(knownContentIds)).toSet();
if (topEntries.isNotEmpty) { if (topEntries.isNotEmpty) {
final obsoleteTopEntries = topEntries.where((entry) => obsoleteContentIds.contains(entry.contentId)); final obsoleteTopEntries = topEntries.where((entry) => removedContentIds.contains(entry.contentId));
await removeEntries(obsoleteTopEntries.map((entry) => entry.uri).toSet(), includeTrash: false); await removeEntries(obsoleteTopEntries.map((entry) => entry.uri).toSet(), includeTrash: false);
} }
knownEntries.removeWhere((entry) => obsoleteContentIds.contains(entry.contentId)); knownEntries.removeWhere((entry) => removedContentIds.contains(entry.contentId));
// show known entries // show known entries
debugPrint('$runtimeType refresh ${stopwatch.elapsed} add known entries'); debugPrint('$runtimeType refresh ${stopwatch.elapsed} add known entries');
@ -109,7 +110,7 @@ class MediaStoreSource extends CollectionSource {
// clean up obsolete entries // clean up obsolete entries
debugPrint('$runtimeType refresh ${stopwatch.elapsed} remove obsolete entries'); debugPrint('$runtimeType refresh ${stopwatch.elapsed} remove obsolete entries');
await metadataDb.removeIds(obsoleteContentIds); await metadataDb.removeIds(removedContentIds);
if (directory != null) { if (directory != null) {
// trash // trash
@ -148,7 +149,11 @@ class MediaStoreSource extends CollectionSource {
mediaStoreService.getEntries(knownDateByContentId, directory: directory).listen( mediaStoreService.getEntries(knownDateByContentId, directory: directory).listen(
(entry) { (entry) {
entry.id = metadataDb.nextId; // when discovering modified entry with known content ID,
// reuse known entry ID to overwrite it while preserving favourites, etc.
final contentId = entry.contentId;
entry.id = (knownContentIds.contains(contentId) ? knownLiveEntries.firstWhereOrNull((entry) => entry.contentId == contentId)?.id : null) ?? metadataDb.nextId;
pendingNewEntries.add(entry); pendingNewEntries.add(entry);
if (pendingNewEntries.length >= refreshCount) { if (pendingNewEntries.length >= refreshCount) {
refreshCount = min(refreshCount * 10, refreshCountMax); refreshCount = min(refreshCount * 10, refreshCountMax);
@ -175,7 +180,7 @@ class MediaStoreSource extends CollectionSource {
} }
await analyze(analysisController, entries: analysisEntries); await analyze(analysisController, entries: analysisEntries);
debugPrint('$runtimeType refresh ${stopwatch.elapsed} done for ${knownEntries.length} known, ${allNewEntries.length} new, ${obsoleteContentIds.length} obsolete'); debugPrint('$runtimeType refresh ${stopwatch.elapsed} done for ${knownEntries.length} known, ${allNewEntries.length} new, ${removedContentIds.length} obsolete');
}, },
onError: (error) => debugPrint('$runtimeType stream error=$error'), onError: (error) => debugPrint('$runtimeType stream error=$error'),
); );

View file

@ -3,26 +3,6 @@
"entryActionConvert" "entryActionConvert"
], ],
"es": [
"timeDays",
"doNotAskAgain",
"entryActionRestore",
"filterBinLabel",
"binEntriesConfirmationDialogMessage",
"collectionActionEmptyBin",
"binPageTitle",
"settingsConfirmationDialogTile",
"settingsConfirmationDialogTitle",
"settingsConfirmationDialogDeleteItems",
"settingsConfirmationDialogMoveToBinItems",
"settingsEnableBin",
"settingsEnableBinSubtitle"
],
"pt": [
"entryActionConvert"
],
"ru": [ "ru": [
"entryActionConvert" "entryActionConvert"
] ]