diff --git a/lib/widgets/collection/entry_set_action_delegate.dart b/lib/widgets/collection/entry_set_action_delegate.dart index 82e111941..8b2e3094f 100644 --- a/lib/widgets/collection/entry_set_action_delegate.dart +++ b/lib/widgets/collection/entry_set_action_delegate.dart @@ -71,6 +71,7 @@ class EntrySetActionDelegate with FeedbackMixin, PermissionAwareMixin, SizeAware final restrictedDirs = await storageService.getRestrictedDirectories(); for (final selectionDir in selectionDirs) { final dir = VolumeRelativeDirectory.fromPath(selectionDir); + if (dir == null) return; if (restrictedDirs.contains(dir)) { await showRestrictedDirectoryDialog(context, dir); return; diff --git a/lib/widgets/filter_grids/albums_page.dart b/lib/widgets/filter_grids/albums_page.dart index 320e8657d..9e5049b99 100644 --- a/lib/widgets/filter_grids/albums_page.dart +++ b/lib/widgets/filter_grids/albums_page.dart @@ -39,13 +39,18 @@ class AlbumListPage extends StatelessWidget { showHeaders: settings.albumGroupFactor != AlbumChipGroupFactor.none, chipSetActionDelegate: AlbumChipSetActionDelegate(), chipActionDelegate: AlbumChipActionDelegate(), - chipActionsBuilder: (filter) => [ - settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin, - ChipAction.setCover, - ChipAction.rename, - ChipAction.delete, - ChipAction.hide, - ], + chipActionsBuilder: (filter) { + final dir = VolumeRelativeDirectory.fromPath(filter.album); + // do not allow renaming volume root + final canRename = dir != null && dir.relativeDir.isNotEmpty; + return [ + settings.pinnedFilters.contains(filter) ? ChipAction.unpin : ChipAction.pin, + ChipAction.setCover, + if (canRename) ChipAction.rename, + ChipAction.delete, + ChipAction.hide, + ]; + }, filterSections: getAlbumEntries(context, source), emptyBuilder: () => EmptyContent( icon: AIcons.album, diff --git a/lib/widgets/filter_grids/common/chip_action_delegate.dart b/lib/widgets/filter_grids/common/chip_action_delegate.dart index fff8b977c..69ebb2de8 100644 --- a/lib/widgets/filter_grids/common/chip_action_delegate.dart +++ b/lib/widgets/filter_grids/common/chip_action_delegate.dart @@ -192,10 +192,13 @@ class AlbumChipActionDelegate extends ChipActionDelegate with FeedbackMixin, Per final todoEntries = source.visibleEntries.where(filter.test).toSet(); final todoCount = todoEntries.length; + final dir = VolumeRelativeDirectory.fromPath(album); + // do not allow renaming volume root + if (dir == null || dir.relativeDir.isEmpty) return; + // check whether renaming is possible given OS restrictions, // before asking to input a new name final restrictedDirs = await storageService.getRestrictedDirectories(); - final dir = VolumeRelativeDirectory.fromPath(album); if (restrictedDirs.contains(dir)) { await showRestrictedDirectoryDialog(context, dir); return;