From 2624b41932c03a65ed0d52ce97489c6f3bf4fbe8 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 14 Nov 2015 09:22:35 +0530 Subject: [PATCH] Refactor code to get list of sortable fields --- src/calibre/gui2/actions/sort.py | 12 ++---------- src/calibre/library/field_metadata.py | 9 +++++++++ src/calibre/srv/code.py | 2 ++ 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/src/calibre/gui2/actions/sort.py b/src/calibre/gui2/actions/sort.py index 4fdb77b0f2..d147429e0d 100644 --- a/src/calibre/gui2/actions/sort.py +++ b/src/calibre/gui2/actions/sort.py @@ -53,20 +53,12 @@ class SortByAction(InterfaceAction): except TypeError: sort_col, order = 'date', True fm = db.field_metadata - def get_name(k): - ans = fm[k]['name'] - if k == 'cover': - ans = _('Has cover') - return ans - - name_map = {get_name(k):k for k in fm.sortable_field_keys() if fm[k]['name']} + name_map = {v:k for k, v in fm.ui_sortable_field_keys().iteritems()} self._sactions = [] for name in sorted(name_map, key=sort_key): key = name_map[name] - if key in {'sort', 'series_sort', 'formats', 'path'}: - continue if key == 'ondevice' and self.gui.device_connected is None: - continue + continue ascending = None if key == sort_col: name = _('%s [reverse current sort]') % name diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index de006f0d13..64d6c6841e 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -448,6 +448,15 @@ class FieldMetadata(dict): if self._tb_cats[k]['kind']=='field' and self._tb_cats[k]['datatype'] is not None] + def ui_sortable_field_keys(self): + ans = {k:self._tb_cats[k]['name'] for k in set(self.sortable_field_keys()) - { + 'sort', 'author_sort', 'au_map', 'series_sort', 'marked', + 'series_index', 'path', 'formats', 'identifiers', 'uuid', + 'comments', + } if self._tb_cats[k]['name']} + ans['cover'] = _('Has cover') + return ans + def displayable_field_keys(self): return [k for k in self._tb_cats.keys() if self._tb_cats[k]['kind']=='field' and diff --git a/src/calibre/srv/code.py b/src/calibre/srv/code.py index a1cbf5a6a3..d956d0d212 100644 --- a/src/calibre/srv/code.py +++ b/src/calibre/srv/code.py @@ -107,6 +107,8 @@ def interface_data(ctx, rd): raise HTTPNotFound('Invalid number of books: %r' % rd.query.get('num')) with db.safe_read_lock: ans['search_result'] = search_result(ctx, rd, db, '', num, 0, ','.join(sorts), ','.join(orders)) + ans['sortable_fields'] = sf = db.field_metadata.ui_sortable_field_keys() + sf.pop('ondevice', None) ans['field_metadata'] = db.field_metadata.all_metadata() # ans['categories'] = ctx.get_categories(rd, db) mdata = ans['metadata'] = {}