From bf1b8f18b40680ce6e11749efdd80c2f064fca60 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 31 Mar 2026 13:21:33 +0530 Subject: [PATCH] Make getting list of groups re-useable --- src/calibre/gui2/library/bookshelf_view.py | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/calibre/gui2/library/bookshelf_view.py b/src/calibre/gui2/library/bookshelf_view.py index 03c577214b..1222a30f85 100644 --- a/src/calibre/gui2/library/bookshelf_view.py +++ b/src/calibre/gui2/library/bookshelf_view.py @@ -770,6 +770,17 @@ def all_groupings() -> dict[str, str]: } +def iter_all_groups(fm) -> Iterator[tuple[str, str]]: + cf = {} + for field, m in fm.custom_field_metadata(include_composites=False).items(): + if m['is_category'] or m['datatype'] == 'datetime': + cf[field] = numeric_sort_key(m['name']) + for k in all_groupings(): + cf[k] = numeric_sort_key(fm[k]['name']) + for k in sorted(cf, key=cf.get): + yield k, fm[k]['name'] + + class LayoutConstraints(NamedTuple): min_spine_width: int = 15 max_spine_width: int = 80 @@ -2385,14 +2396,8 @@ class BookshelfView(MomentumScrollMixin, QAbstractScrollArea): action.triggered.connect(partial(self.set_grouping_mode, field)) add('', _('Ungrouped')) grouping_menu.addSeparator() - cf = {} - for field, m in fm.custom_field_metadata(include_composites=False).items(): - if m['is_category'] or m['datatype'] == 'datetime': - cf[field] = numeric_sort_key(m['name']) - for k in all_groupings(): - cf[k] = numeric_sort_key(fm[k]['name']) - for k in sorted(cf, key=cf.get): - add(k, fm[k]['name']) + for k, name in iter_all_groups(fm): + add(k, name) def contextMenuEvent(self, ev: QContextMenuEvent): if self.context_menu: