From 3aea36f3a7451c5f17ba4661cd6ce8e2ec6369d5 Mon Sep 17 00:00:00 2001 From: Thibault Deckers Date: Wed, 18 Aug 2021 11:45:15 +0900 Subject: [PATCH] update custom navigation menu on album renaming/removal --- lib/model/source/album.dart | 7 ++++++- lib/model/source/collection_source.dart | 6 +++++- .../filter_grids/common/action_delegates/album_set.dart | 4 ++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/lib/model/source/album.dart b/lib/model/source/album.dart index 55f43af2f..0770f2494 100644 --- a/lib/model/source/album.dart +++ b/lib/model/source/album.dart @@ -120,8 +120,13 @@ mixin AlbumMixin on SourceBase { _notifyAlbumChange(); invalidateAlbumFilterSummary(directories: emptyAlbums); + final bookmarks = settings.drawerAlbumBookmarks; final pinnedFilters = settings.pinnedFilters; - emptyAlbums.forEach((album) => pinnedFilters.removeWhere((filter) => filter is AlbumFilter && filter.album == album)); + emptyAlbums.forEach((album) { + bookmarks?.remove(album); + pinnedFilters.removeWhere((filter) => filter is AlbumFilter && filter.album == album); + }); + settings.drawerAlbumBookmarks = bookmarks; settings.pinnedFilters = pinnedFilters; } } diff --git a/lib/model/source/collection_source.dart b/lib/model/source/collection_source.dart index f767408c5..f91df8aeb 100644 --- a/lib/model/source/collection_source.dart +++ b/lib/model/source/collection_source.dart @@ -159,6 +159,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM Future renameAlbum(String sourceAlbum, String destinationAlbum, Set todoEntries, Set movedOps) async { final oldFilter = AlbumFilter(sourceAlbum, null); + final bookmarked = settings.drawerAlbumBookmarks?.contains(sourceAlbum) == true; final pinned = settings.pinnedFilters.contains(oldFilter); final oldCoverContentId = covers.coverContentId(oldFilter); final coverEntry = oldCoverContentId != null ? todoEntries.firstWhereOrNull((entry) => entry.contentId == oldCoverContentId) : null; @@ -169,8 +170,11 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM destinationAlbum: destinationAlbum, movedOps: movedOps, ); - // restore pin and cover, as the obsolete album got removed and its associated state cleaned + // restore bookmark, pin and cover, as the obsolete album got removed and its associated state cleaned final newFilter = AlbumFilter(destinationAlbum, null); + if (bookmarked) { + settings.drawerAlbumBookmarks = settings.drawerAlbumBookmarks?..add(destinationAlbum); + } if (pinned) { settings.pinnedFilters = settings.pinnedFilters..add(newFilter); } diff --git a/lib/widgets/filter_grids/common/action_delegates/album_set.dart b/lib/widgets/filter_grids/common/action_delegates/album_set.dart index f14b9d5a9..c74fcf6a1 100644 --- a/lib/widgets/filter_grids/common/action_delegates/album_set.dart +++ b/lib/widgets/filter_grids/common/action_delegates/album_set.dart @@ -211,12 +211,12 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate { ); if (newName == null || newName.isEmpty) return; - if (!await checkStoragePermissionForAlbums(context, {album})) return; - final destinationAlbumParent = pContext.dirname(album); final destinationAlbum = pContext.join(destinationAlbumParent, newName); if (!await checkFreeSpaceForMove(context, todoEntries, destinationAlbum, MoveType.move)) return; + if (!await checkStoragePermissionForAlbums(context, {album})) return; + if (!(await File(destinationAlbum).exists())) { // access to the destination parent is required to create the underlying destination folder if (!await checkStoragePermissionForAlbums(context, {destinationAlbumParent})) return;