Tag Browser: Fix clicking on first-letter groups for series not working

This commit is contained in:
Kovid Goyal 2015-10-12 09:37:27 +05:30
parent 2ba85a0869
commit 8b7a8997d9
3 changed files with 26 additions and 1 deletions

View File

@ -670,6 +670,24 @@ class SeriesField(ManyToOneField):
val = self.table.id_map[item_id]
return title_sort(val, order=tss, lang=lang)
def iter_searchable_values_for_sort(self, candidates, lang_map, default_value=None):
cbm = self.table.col_book_map
sso = tweaks['title_series_sorting']
ts = title_sort
empty = set()
lang_map = {k:v[0] if v else None for k, v in lang_map.iteritems()}
for item_id, val in self.table.id_map.iteritems():
book_ids = cbm.get(item_id, empty).intersection(candidates)
if book_ids:
lang_counts = Counter()
for book_id in book_ids:
lang = lang_map.get(book_id)
if lang:
lang_counts[lang[0]] += 1
lang = lang_counts.most_common(1)[0][0] if lang_counts else None
yield ts(val, order=sso, lang=lang), book_ids
class TagsField(ManyToManyField):
def get_news_category(self, tag_class, book_ids=None):

View File

@ -682,6 +682,13 @@ class Parser(SearchQueryParser): # {{{
if _match(q, val, matchkind, use_primary_find_in_search=upf):
matches |= book_ids
if location == 'series_sort':
book_lang_map = self.dbcache.fields['languages'].book_value_map
for val, book_ids in self.dbcache.fields['series'].iter_searchable_values_for_sort(current_candidates, book_lang_map):
if val is not None:
if _match(q, (val,), matchkind, use_primary_find_in_search=upf):
matches |= book_ids
return matches
def get_user_category_matches(self, location, query, candidates):

View File

@ -290,7 +290,7 @@ class ReadingTest(BaseTest):
'title:="Title One"', 'title:~title', '#enum:=one', '#enum:tw',
'#enum:false', '#enum:true', 'series:one', 'tags:one', 'tags:true',
'tags:false', 'uuid:2', 'one', '20.02', '"publisher one"',
'"my comments one"',
'"my comments one"', 'series_sort:one',
# User categories
'@Good Authors:One', '@Good Series.good tags:two',