Fix bug where the option "recognize numbers inside text" wasn't used when first-letter-sorting is turned on but the column isn't partitioned.

This commit is contained in:
Charles Haley 2024-12-16 18:40:55 +00:00
parent 3c7b3591a4
commit 821813cbb2
3 changed files with 17 additions and 7 deletions

View File

@ -1542,12 +1542,13 @@ class Cache:
@api @api
def get_categories(self, sort='name', book_ids=None, already_fixed=None, def get_categories(self, sort='name', book_ids=None, already_fixed=None,
first_letter_sort=False): first_letter_sort=False, uncollapsed_categories=None):
' Used internally to implement the Tag Browser ' ' Used internally to implement the Tag Browser '
try: try:
with self.safe_read_lock: with self.safe_read_lock:
return get_categories(self, sort=sort, book_ids=book_ids, return get_categories(self, sort=sort, book_ids=book_ids,
first_letter_sort=first_letter_sort) first_letter_sort=first_letter_sort,
uncollapsed_categories=uncollapsed_categories)
except InvalidLinkTable as err: except InvalidLinkTable as err:
bad_field = err.field_name bad_field = err.field_name
if bad_field == already_fixed: if bad_field == already_fixed:

View File

@ -193,7 +193,7 @@ category_sort_keys[False]['name'] = sort_key_for_name
# dict being in the default display order: standard fields, custom in alpha order, # dict being in the default display order: standard fields, custom in alpha order,
# user categories, then saved searches. This works because the backend adds # user categories, then saved searches. This works because the backend adds
# custom columns to field metadata in the right order. # custom columns to field metadata in the right order.
def get_categories(dbcache, sort='name', book_ids=None, first_letter_sort=False): def get_categories(dbcache, sort='name', book_ids=None, first_letter_sort=False, uncollapsed_categories=None):
if sort not in CATEGORY_SORTS: if sort not in CATEGORY_SORTS:
raise ValueError('sort ' + sort + ' not a valid value') raise ValueError('sort ' + sort + ' not a valid value')
@ -213,9 +213,10 @@ def get_categories(dbcache, sort='name', book_ids=None, first_letter_sort=False)
return ans return ans
bids = None bids = None
first_letter_sort = bool(first_letter_sort) uncollapsed_categories = () if uncollapsed_categories is None else uncollapsed_categories
for category, is_multiple, is_composite in find_categories(fm): for category, is_multiple, is_composite in find_categories(fm):
fl_sort = False if category in uncollapsed_categories else bool(first_letter_sort)
tag_class = create_tag_class(category, fm) tag_class = create_tag_class(category, fm)
sort_on, reverse = sort, False sort_on, reverse = sort, False
if is_composite: if is_composite:
@ -240,7 +241,7 @@ def get_categories(dbcache, sort='name', book_ids=None, first_letter_sort=False)
cat['is_multiple'] and cat['display'].get('is_names', False)): cat['is_multiple'] and cat['display'].get('is_names', False)):
for item in cats: for item in cats:
item.sort = author_to_author_sort(item.sort) item.sort = author_to_author_sort(item.sort)
cats.sort(key=partial(category_sort_keys[first_letter_sort][sort_on], cats.sort(key=partial(category_sort_keys[fl_sort][sort_on],
hierarchical_categories=hierarchical_categories), hierarchical_categories=hierarchical_categories),
reverse=reverse) reverse=reverse)
categories[category] = cats categories[category] = cats

View File

@ -1274,6 +1274,12 @@ class TagsModel(QAbstractItemModel): # {{{
self.row_map = [] self.row_map = []
self.categories = OrderedDict() self.categories = OrderedDict()
# We need to pass this to get_categories so it can adjust how it sorts
# the values. The "first_letter_sort" argument is the default. It is
# changed to False by get_categories() if the category is not collapsed
uncollapsed_categories = self.db.prefs.get('tag_browser_dont_collapse',
self.prefs['tag_browser_dont_collapse'])
# Get the categories # Get the categories
try: try:
# We must disable the in_tag_browser ids because we want all the # We must disable the in_tag_browser ids because we want all the
@ -1283,12 +1289,14 @@ class TagsModel(QAbstractItemModel): # {{{
self.db.data.set_in_tag_browser(None) self.db.data.set_in_tag_browser(None)
data = self.db.new_api.get_categories(sort=sort, data = self.db.new_api.get_categories(sort=sort,
book_ids=self.get_book_ids_to_use(), book_ids=self.get_book_ids_to_use(),
first_letter_sort=self.collapse_model == 'first letter') first_letter_sort=(self.collapse_model == 'first letter'),
uncollapsed_categories=uncollapsed_categories)
self.db.data.set_in_tag_browser(old_in_tb) self.db.data.set_in_tag_browser(old_in_tb)
except Exception as e: except Exception as e:
traceback.print_exc() traceback.print_exc()
data = self.db.new_api.get_categories(sort=sort, data = self.db.new_api.get_categories(sort=sort,
first_letter_sort=self.collapse_model == 'first letter') first_letter_sort=(self.collapse_model == 'first letter'),
uncollapsed_categories=uncollapsed_categories)
self.restriction_error.emit(str(e)) self.restriction_error.emit(str(e))
if self.filter_categories_by: if self.filter_categories_by: