From 8a3aa64776aaf11c9909a6518c4f0f90f55a2946 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 21 Sep 2010 15:53:54 +0100 Subject: [PATCH] Changed sort to use field_metadata.search_term_to_field_key. In the process, refactored field_metadata and LibraryDatabase2 to use the same method names for the same function (in more cases). --- src/calibre/library/caches.py | 11 ++++------- src/calibre/library/database2.py | 4 ++-- src/calibre/library/field_metadata.py | 4 ++-- 3 files changed, 8 insertions(+), 11 deletions(-) diff --git a/src/calibre/library/caches.py b/src/calibre/library/caches.py index 573c1f5797..d310a0e6fe 100644 --- a/src/calibre/library/caches.py +++ b/src/calibre/library/caches.py @@ -334,7 +334,7 @@ class ResultCache(SearchQueryParser): if query and query.strip(): # get metadata key associated with the search term. Eliminates # dealing with plurals and other aliases - location = self.field_metadata.search_term_to_key(location.lower().strip()) + location = self.field_metadata.search_term_to_field_key(location.lower().strip()) if isinstance(location, list): if allow_recursion: for loc in location: @@ -610,12 +610,9 @@ class ResultCache(SearchQueryParser): # Sorting functions {{{ def sanitize_sort_field_name(self, field): - field = field.lower().strip() - if field not in self.field_metadata.iterkeys(): - if field in ('author', 'tag', 'comment'): - field += 's' - if field == 'date': field = 'timestamp' - elif field == 'title': field = 'sort' + field = self.field_metadata.search_term_to_field_key(field.lower().strip()) + # translate some fields to their hidden equivalent + if field == 'title': field = 'sort' elif field == 'authors': field = 'author_sort' return field diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index c1ada94a84..77e3afc8a3 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -552,10 +552,10 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): return self.field_metadata.sortable_field_keys() def searchable_fields(self): - return self.field_metadata.searchable_field_keys() + return self.field_metadata.searchable_fields() def search_term_to_field_key(self, term): - return self.field_metadata.search_term_to_key(term) + return self.field_metadata.search_term_to_field_key(term) def metadata_for_field(self, key): return self.field_metadata[key] diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index a8031e5172..bac423f46d 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -501,12 +501,12 @@ class FieldMetadata(dict): raise ValueError('Attempt to add duplicate search term "%s"'%t) self._search_term_map[t] = key - def search_term_to_key(self, term): + def search_term_to_field_key(self, term): if term in self._search_term_map: return self._search_term_map[term] return term - def searchable_field_keys(self): + def searchable_fields(self): return [k for k in self._tb_cats.keys() if self._tb_cats[k]['kind']=='field' and len(self._tb_cats[k]['search_terms']) > 0]