From 0993324488d9129e66a0d4d3f3a2a07f77c92dcd Mon Sep 17 00:00:00 2001 From: Ming Ming Date: Wed, 12 Jan 2022 14:00:33 +0800 Subject: [PATCH] Improve error handling and logging in appdb --- lib/entity/album.dart | 18 +++++++++--- lib/entity/file/data_source.dart | 49 ++++++++++++++++++++++++-------- 2 files changed, 51 insertions(+), 16 deletions(-) diff --git a/lib/entity/album.dart b/lib/entity/album.dart index 0e56f321..c5d98755 100644 --- a/lib/entity/album.dart +++ b/lib/entity/album.dart @@ -511,8 +511,13 @@ class AlbumCachedDataSource implements AlbumDataSource { .map((pair) => pair.item2) .toList(); for (final k in danglingKeys) { - _log.fine("[cleanUp] Removing DB entry: $k"); - await store.delete(k); + _log.fine("[cleanUp] Removing albumStore entry: $k"); + try { + await store.delete(k); + } catch (e, stackTrace) { + _log.shout( + "[cleanUp] Failed removing albumStore entry", e, stackTrace); + } } }); } @@ -579,8 +584,13 @@ Future _cacheAlbum( .map((cursor) => cursor.primaryKey) .toList(); for (final k in rmKeys) { - _log.fine("[_cacheAlbum] Removing DB entry: $k"); - await store.delete(k); + _log.fine("[_cacheAlbum] Removing albumStore entry: $k"); + try { + await store.delete(k); + } catch (e, stackTrace) { + _log.shout( + "[_cacheAlbum] Failed removing albumStore entry", e, stackTrace); + } } } } diff --git a/lib/entity/file/data_source.dart b/lib/entity/file/data_source.dart index f7d6b33f..fffd025d 100644 --- a/lib/entity/file/data_source.dart +++ b/lib/entity/file/data_source.dart @@ -783,7 +783,12 @@ Future _removeFileFromAppDb( required ObjectStore fileStore, }) async { assert(file.isCollection != true); - await fileStore.delete(AppDbFile2Entry.toPrimaryKeyForFile(account, file)); + try { + await fileStore.delete(AppDbFile2Entry.toPrimaryKeyForFile(account, file)); + } catch (e, stackTrace) { + _log.shout("[_removeFileFromAppDb] Failed removing fileStore entry", e, + stackTrace); + } } /// Remove a dir and all files inside from the database @@ -795,10 +800,15 @@ Future _removeDirFromAppDb( }) async { assert(dir.isCollection == true); // delete the dir itself - await AppDbDirEntry.toPrimaryKeyForDir(account, dir).runFuture((key) async { - _log.fine("[_removeDirFromAppDb] Removing dirStore entry: $key"); - await dirStore.delete(key); - }); + try { + await AppDbDirEntry.toPrimaryKeyForDir(account, dir).runFuture((key) async { + _log.fine("[_removeDirFromAppDb] Removing dirStore entry: $key"); + await dirStore.delete(key); + }); + } catch (e, stackTrace) { + _log.shout( + "[_removeDirFromAppDb] Failed removing dirStore entry", e, stackTrace); + } // then its children final childrenRange = KeyRange.bound( AppDbDirEntry.toPrimaryLowerKeyForSubDirs(account, dir), @@ -806,16 +816,26 @@ Future _removeDirFromAppDb( ); for (final key in await dirStore.getAllKeys(childrenRange)) { _log.fine("[_removeDirFromAppDb] Removing dirStore entry: $key"); - await dirStore.delete(key); + try { + await dirStore.delete(key); + } catch (e, stackTrace) { + _log.shout("[_removeDirFromAppDb] Failed removing dirStore entry", e, + stackTrace); + } } // delete files from fileStore // first the dir - await AppDbFile2Entry.toPrimaryKeyForFile(account, dir) - .runFuture((key) async { - _log.fine("[_removeDirFromAppDb] Removing fileStore entry: $key"); - await fileStore.delete(key); - }); + try { + await AppDbFile2Entry.toPrimaryKeyForFile(account, dir) + .runFuture((key) async { + _log.fine("[_removeDirFromAppDb] Removing fileStore entry: $key"); + await fileStore.delete(key); + }); + } catch (e, stackTrace) { + _log.shout( + "[_removeDirFromAppDb] Failed removing fileStore entry", e, stackTrace); + } // then files under this dir and sub-dirs final range = KeyRange.bound( AppDbFile2Entry.toStrippedPathIndexLowerKeyForDir(account, dir), @@ -825,7 +845,12 @@ Future _removeDirFromAppDb( fileStore.index(AppDbFile2Entry.strippedPathIndexName); for (final key in await strippedPathIndex.getAllKeys(range)) { _log.fine("[_removeDirFromAppDb] Removing fileStore entry: $key"); - await fileStore.delete(key); + try { + await fileStore.delete(key); + } catch (e, stackTrace) { + _log.shout("[_removeDirFromAppDb] Failed removing fileStore entry", e, + stackTrace); + } } }