From c2f655ad7188582a2709f035e7e46cb7ff82ad4b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 1 Jun 2010 19:24:01 -0600 Subject: [PATCH] When listing series, sort ignoring leading English prepositions. Fixes #5090 (Series Sort) --- src/calibre/library/caches.py | 5 +++-- src/calibre/library/database2.py | 3 +++ src/calibre/library/server/content.py | 4 ++-- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index 93891ee92b..83c56c5395 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -17,7 +17,7 @@ from calibre.utils.config import tweaks from calibre.utils.date import parse_date, now, UNDEFINED_DATE from calibre.utils.search_query_parser import SearchQueryParser from calibre.utils.pyparsing import ParseException -# from calibre.library.field_metadata import FieldMetadata +from calibre.ebooks.metadata import title_sort class CoverCache(QThread): @@ -564,7 +564,8 @@ class ResultCache(SearchQueryParser): def seriescmp(self, x, y): sidx = self.FIELD_MAP['series'] try: - ans = cmp(self._data[x][sidx].lower(), self._data[y][sidx].lower()) + ans = cmp(title_sort(self._data[x][sidx].lower()), + title_sort(self._data[y][sidx].lower())) except AttributeError: # Some entries may be None ans = cmp(self._data[x][sidx], self._data[y][sidx]) if ans != 0: return ans diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index 4107d327ce..f27a42beee 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -725,6 +725,9 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): categories[category] = [Tag(formatter(r[1]), count=r[2], id=r[0], icon=icon, tooltip = tooltip) for r in data if item_not_zero_func(r)] + if category == 'series': + categories[category].sort(cmp=lambda x,y:cmp(title_sort(x.name), + title_sort(y.name))) # We delayed computing the standard formats category because it does not # use a view, but is computed dynamically diff --git a/src/calibre/library/server/content.py b/src/calibre/library/server/content.py index 8638035c88..12bd786322 100644 --- a/src/calibre/library/server/content.py +++ b/src/calibre/library/server/content.py @@ -16,7 +16,7 @@ except ImportError: from calibre import fit_image, guess_type from calibre.utils.date import fromtimestamp - +from calibre.ebooks.metadata import title_sort class ContentServer(object): @@ -67,7 +67,7 @@ class ContentServer(object): def seriescmp(self, x, y): si = self.db.FIELD_MAP['series'] try: - ans = cmp(x[si].lower(), y[si].lower()) + ans = cmp(title_sort(x[si].lower()), title_sort(y[si].lower())) except AttributeError: # Some entries may be None ans = cmp(x[si], y[si]) if ans != 0: return ans