update custom navigation menu on album renaming/removal

This commit is contained in:
Thibault Deckers 2021-08-18 11:45:15 +09:00
parent 8370816055
commit 3aea36f3a7
3 changed files with 13 additions and 4 deletions

View file

@ -120,8 +120,13 @@ mixin AlbumMixin on SourceBase {
_notifyAlbumChange(); _notifyAlbumChange();
invalidateAlbumFilterSummary(directories: emptyAlbums); invalidateAlbumFilterSummary(directories: emptyAlbums);
final bookmarks = settings.drawerAlbumBookmarks;
final pinnedFilters = settings.pinnedFilters; 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; settings.pinnedFilters = pinnedFilters;
} }
} }

View file

@ -159,6 +159,7 @@ abstract class CollectionSource with SourceBase, AlbumMixin, LocationMixin, TagM
Future<void> renameAlbum(String sourceAlbum, String destinationAlbum, Set<AvesEntry> todoEntries, Set<MoveOpEvent> movedOps) async { Future<void> renameAlbum(String sourceAlbum, String destinationAlbum, Set<AvesEntry> todoEntries, Set<MoveOpEvent> movedOps) async {
final oldFilter = AlbumFilter(sourceAlbum, null); final oldFilter = AlbumFilter(sourceAlbum, null);
final bookmarked = settings.drawerAlbumBookmarks?.contains(sourceAlbum) == true;
final pinned = settings.pinnedFilters.contains(oldFilter); final pinned = settings.pinnedFilters.contains(oldFilter);
final oldCoverContentId = covers.coverContentId(oldFilter); final oldCoverContentId = covers.coverContentId(oldFilter);
final coverEntry = oldCoverContentId != null ? todoEntries.firstWhereOrNull((entry) => entry.contentId == oldCoverContentId) : null; 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, destinationAlbum: destinationAlbum,
movedOps: movedOps, 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); final newFilter = AlbumFilter(destinationAlbum, null);
if (bookmarked) {
settings.drawerAlbumBookmarks = settings.drawerAlbumBookmarks?..add(destinationAlbum);
}
if (pinned) { if (pinned) {
settings.pinnedFilters = settings.pinnedFilters..add(newFilter); settings.pinnedFilters = settings.pinnedFilters..add(newFilter);
} }

View file

@ -211,12 +211,12 @@ class AlbumChipSetActionDelegate extends ChipSetActionDelegate<AlbumFilter> {
); );
if (newName == null || newName.isEmpty) return; if (newName == null || newName.isEmpty) return;
if (!await checkStoragePermissionForAlbums(context, {album})) return;
final destinationAlbumParent = pContext.dirname(album); final destinationAlbumParent = pContext.dirname(album);
final destinationAlbum = pContext.join(destinationAlbumParent, newName); final destinationAlbum = pContext.join(destinationAlbumParent, newName);
if (!await checkFreeSpaceForMove(context, todoEntries, destinationAlbum, MoveType.move)) return; if (!await checkFreeSpaceForMove(context, todoEntries, destinationAlbum, MoveType.move)) return;
if (!await checkStoragePermissionForAlbums(context, {album})) return;
if (!(await File(destinationAlbum).exists())) { if (!(await File(destinationAlbum).exists())) {
// access to the destination parent is required to create the underlying destination folder // access to the destination parent is required to create the underlying destination folder
if (!await checkStoragePermissionForAlbums(context, {destinationAlbumParent})) return; if (!await checkStoragePermissionForAlbums(context, {destinationAlbumParent})) return;