improved report log for source init/refresh
This commit is contained in:
parent
6869839b44
commit
467093e283
2 changed files with 20 additions and 18 deletions
|
@ -37,6 +37,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
bool loadTopEntriesFirst = false,
|
bool loadTopEntriesFirst = false,
|
||||||
bool canAnalyze = true,
|
bool canAnalyze = true,
|
||||||
}) async {
|
}) async {
|
||||||
|
await reportService.log('$runtimeType init directory=$directory');
|
||||||
if (_initState == SourceInitializationState.none) {
|
if (_initState == SourceInitializationState.none) {
|
||||||
await _loadEssentials();
|
await _loadEssentials();
|
||||||
}
|
}
|
||||||
|
@ -81,7 +82,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
required bool loadTopEntriesFirst,
|
required bool loadTopEntriesFirst,
|
||||||
required bool canAnalyze,
|
required bool canAnalyze,
|
||||||
}) async {
|
}) async {
|
||||||
debugPrint('$runtimeType refresh start');
|
unawaited(reportService.log('$runtimeType load start'));
|
||||||
final stopwatch = Stopwatch()..start();
|
final stopwatch = Stopwatch()..start();
|
||||||
state = SourceState.loading;
|
state = SourceState.loading;
|
||||||
clearEntries();
|
clearEntries();
|
||||||
|
@ -90,17 +91,17 @@ class MediaStoreSource extends CollectionSource {
|
||||||
if (loadTopEntriesFirst) {
|
if (loadTopEntriesFirst) {
|
||||||
final topIds = settings.topEntryIds?.toSet();
|
final topIds = settings.topEntryIds?.toSet();
|
||||||
if (topIds != null) {
|
if (topIds != null) {
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} load ${topIds.length} top entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} load ${topIds.length} top entries');
|
||||||
topEntries.addAll(await localMediaDb.loadEntriesById(topIds));
|
topEntries.addAll(await localMediaDb.loadEntriesById(topIds));
|
||||||
addEntries(topEntries);
|
addEntries(topEntries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} fetch known entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} fetch known entries');
|
||||||
final knownEntries = await localMediaDb.loadEntries(origin: EntryOrigins.mediaStoreContent, directory: directory);
|
final knownEntries = await localMediaDb.loadEntries(origin: EntryOrigins.mediaStoreContent, directory: directory);
|
||||||
final knownLiveEntries = knownEntries.where((entry) => !entry.trashed).toSet();
|
final knownLiveEntries = knownEntries.where((entry) => !entry.trashed).toSet();
|
||||||
|
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} check obsolete entries');
|
debugPrint('$runtimeType load ${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 knownContentIds = knownDateByContentId.keys.toList();
|
final knownContentIds = knownDateByContentId.keys.toList();
|
||||||
final removedContentIds = (await mediaStoreService.checkObsoleteContentIds(knownContentIds)).toSet();
|
final removedContentIds = (await mediaStoreService.checkObsoleteContentIds(knownContentIds)).toSet();
|
||||||
|
@ -112,14 +113,14 @@ class MediaStoreSource extends CollectionSource {
|
||||||
knownEntries.removeAll(removedEntries);
|
knownEntries.removeAll(removedEntries);
|
||||||
|
|
||||||
// show known entries
|
// show known entries
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} add known entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} add known entries');
|
||||||
// add entries without notifying, so that the collection is not refreshed
|
// add entries without notifying, so that the collection is not refreshed
|
||||||
// with items that may be hidden right away because of their metadata
|
// with items that may be hidden right away because of their metadata
|
||||||
addEntries(knownEntries, notify: false);
|
addEntries(knownEntries, notify: false);
|
||||||
|
|
||||||
await _loadVaultEntries(directory);
|
await _loadVaultEntries(directory);
|
||||||
|
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} load metadata');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} load metadata');
|
||||||
if (directory != null) {
|
if (directory != null) {
|
||||||
final ids = knownLiveEntries.map((entry) => entry.id).toSet();
|
final ids = knownLiveEntries.map((entry) => entry.id).toSet();
|
||||||
await loadCatalogMetadata(ids: ids);
|
await loadCatalogMetadata(ids: ids);
|
||||||
|
@ -144,12 +145,12 @@ class MediaStoreSource extends CollectionSource {
|
||||||
|
|
||||||
// clean up obsolete entries
|
// clean up obsolete entries
|
||||||
if (removedEntries.isNotEmpty) {
|
if (removedEntries.isNotEmpty) {
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} remove obsolete entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} remove obsolete entries');
|
||||||
await localMediaDb.removeIds(removedEntries.map((entry) => entry.id).toSet());
|
await localMediaDb.removeIds(removedEntries.map((entry) => entry.id).toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify paths because some apps move files without updating their `last modified date`
|
// verify paths because some apps move files without updating their `last modified date`
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} check obsolete paths');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} check obsolete paths');
|
||||||
final knownPathByContentId = Map.fromEntries(knownLiveEntries.map((entry) => MapEntry(entry.contentId, entry.path)));
|
final knownPathByContentId = Map.fromEntries(knownLiveEntries.map((entry) => MapEntry(entry.contentId, entry.path)));
|
||||||
final movedContentIds = (await mediaStoreService.checkObsoletePaths(knownPathByContentId)).toSet();
|
final movedContentIds = (await mediaStoreService.checkObsoletePaths(knownPathByContentId)).toSet();
|
||||||
movedContentIds.forEach((contentId) {
|
movedContentIds.forEach((contentId) {
|
||||||
|
@ -161,13 +162,13 @@ class MediaStoreSource extends CollectionSource {
|
||||||
final newEntries = <AvesEntry>{};
|
final newEntries = <AvesEntry>{};
|
||||||
|
|
||||||
// recover untracked trash items
|
// recover untracked trash items
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} recover untracked entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} recover untracked entries');
|
||||||
if (directory == null) {
|
if (directory == null) {
|
||||||
newEntries.addAll(await recoverUntrackedTrashItems());
|
newEntries.addAll(await recoverUntrackedTrashItems());
|
||||||
}
|
}
|
||||||
|
|
||||||
// fetch new & modified entries
|
// fetch new & modified entries
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} fetch new entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} fetch new entries');
|
||||||
mediaStoreService.getEntries(_safeMode, knownDateByContentId, directory: directory).listen(
|
mediaStoreService.getEntries(_safeMode, knownDateByContentId, directory: directory).listen(
|
||||||
(entry) {
|
(entry) {
|
||||||
// when discovering modified entry with known content ID,
|
// when discovering modified entry with known content ID,
|
||||||
|
@ -180,7 +181,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
},
|
},
|
||||||
onDone: () async {
|
onDone: () async {
|
||||||
if (newEntries.isNotEmpty) {
|
if (newEntries.isNotEmpty) {
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} save new entries');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} save new entries');
|
||||||
await localMediaDb.insertEntries(newEntries);
|
await localMediaDb.insertEntries(newEntries);
|
||||||
|
|
||||||
// TODO TLAD find duplication cause
|
// TODO TLAD find duplication cause
|
||||||
|
@ -203,7 +204,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
updateDirectories();
|
updateDirectories();
|
||||||
}
|
}
|
||||||
|
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} analyze');
|
debugPrint('$runtimeType load ${stopwatch.elapsed} analyze');
|
||||||
Set<AvesEntry>? analysisEntries;
|
Set<AvesEntry>? analysisEntries;
|
||||||
final analysisIds = analysisController?.entryIds;
|
final analysisIds = analysisController?.entryIds;
|
||||||
if (analysisIds != null) {
|
if (analysisIds != null) {
|
||||||
|
@ -220,8 +221,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
// so we manually notify change for potential home screen filters
|
// so we manually notify change for potential home screen filters
|
||||||
notifyAlbumsChanged();
|
notifyAlbumsChanged();
|
||||||
|
|
||||||
debugPrint('$runtimeType refresh ${stopwatch.elapsed} done');
|
unawaited(reportService.log('$runtimeType load done in ${stopwatch.elapsed.inSeconds}s for ${knownEntries.length} known, ${newEntries.length} new, ${removedEntries.length} removed'));
|
||||||
unawaited(reportService.log('Source refresh complete in ${stopwatch.elapsed.inSeconds}s for ${knownEntries.length} known, ${newEntries.length} new, ${removedEntries.length} removed'));
|
|
||||||
},
|
},
|
||||||
onError: (error) => debugPrint('$runtimeType stream error=$error'),
|
onError: (error) => debugPrint('$runtimeType stream error=$error'),
|
||||||
);
|
);
|
||||||
|
@ -238,7 +238,7 @@ class MediaStoreSource extends CollectionSource {
|
||||||
|
|
||||||
state = SourceState.loading;
|
state = SourceState.loading;
|
||||||
|
|
||||||
debugPrint('$runtimeType refreshUris ${changedUris.length} uris');
|
unawaited(reportService.log('$runtimeType refresh start for ${changedUris.length} uris'));
|
||||||
final changedUriByContentId = Map.fromEntries(changedUris.map((uri) {
|
final changedUriByContentId = Map.fromEntries(changedUris.map((uri) {
|
||||||
final pathSegments = Uri.parse(uri).pathSegments;
|
final pathSegments = Uri.parse(uri).pathSegments;
|
||||||
// e.g. URI `content://media/` has no path segment
|
// e.g. URI `content://media/` has no path segment
|
||||||
|
@ -297,8 +297,6 @@ class MediaStoreSource extends CollectionSource {
|
||||||
|
|
||||||
invalidateAlbumFilterSummary(directories: existingDirectories);
|
invalidateAlbumFilterSummary(directories: existingDirectories);
|
||||||
|
|
||||||
state = SourceState.ready;
|
|
||||||
|
|
||||||
if (newEntries.isNotEmpty) {
|
if (newEntries.isNotEmpty) {
|
||||||
await localMediaDb.insertEntries(newEntries);
|
await localMediaDb.insertEntries(newEntries);
|
||||||
|
|
||||||
|
@ -323,6 +321,10 @@ class MediaStoreSource extends CollectionSource {
|
||||||
await refreshEntries(entriesToRefresh, EntryDataType.values.toSet());
|
await refreshEntries(entriesToRefresh, EntryDataType.values.toSet());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unawaited(reportService.log('$runtimeType refresh end for ${changedUris.length} uris'));
|
||||||
|
|
||||||
|
state = SourceState.ready;
|
||||||
|
|
||||||
return tempUris;
|
return tempUris;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -411,7 +411,7 @@ class _AvesAppState extends State<AvesApp> with WidgetsBindingObserver {
|
||||||
@override
|
@override
|
||||||
void didHaveMemoryPressure() {
|
void didHaveMemoryPressure() {
|
||||||
super.didHaveMemoryPressure();
|
super.didHaveMemoryPressure();
|
||||||
reportService.log('App memory pressure');
|
debugPrint('App memory pressure');
|
||||||
imageCache.clear();
|
imageCache.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue