Refactor code to get list of sortable fields

This commit is contained in:
Kovid Goyal 2015-11-14 09:22:35 +05:30
parent e4f2d70a9d
commit 2624b41932
3 changed files with 13 additions and 10 deletions

View File

@ -53,20 +53,12 @@ class SortByAction(InterfaceAction):
except TypeError: except TypeError:
sort_col, order = 'date', True sort_col, order = 'date', True
fm = db.field_metadata fm = db.field_metadata
def get_name(k): name_map = {v:k for k, v in fm.ui_sortable_field_keys().iteritems()}
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']}
self._sactions = [] self._sactions = []
for name in sorted(name_map, key=sort_key): for name in sorted(name_map, key=sort_key):
key = name_map[name] key = name_map[name]
if key in {'sort', 'series_sort', 'formats', 'path'}:
continue
if key == 'ondevice' and self.gui.device_connected is None: if key == 'ondevice' and self.gui.device_connected is None:
continue continue
ascending = None ascending = None
if key == sort_col: if key == sort_col:
name = _('%s [reverse current sort]') % name name = _('%s [reverse current sort]') % name

View File

@ -448,6 +448,15 @@ class FieldMetadata(dict):
if self._tb_cats[k]['kind']=='field' and if self._tb_cats[k]['kind']=='field' and
self._tb_cats[k]['datatype'] is not None] 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): def displayable_field_keys(self):
return [k for k in self._tb_cats.keys() return [k for k in self._tb_cats.keys()
if self._tb_cats[k]['kind']=='field' and if self._tb_cats[k]['kind']=='field' and

View File

@ -107,6 +107,8 @@ def interface_data(ctx, rd):
raise HTTPNotFound('Invalid number of books: %r' % rd.query.get('num')) raise HTTPNotFound('Invalid number of books: %r' % rd.query.get('num'))
with db.safe_read_lock: with db.safe_read_lock:
ans['search_result'] = search_result(ctx, rd, db, '', num, 0, ','.join(sorts), ','.join(orders)) 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['field_metadata'] = db.field_metadata.all_metadata()
# ans['categories'] = ctx.get_categories(rd, db) # ans['categories'] = ctx.get_categories(rd, db)
mdata = ans['metadata'] = {} mdata = ans['metadata'] = {}