mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Refactor code to get list of sortable fields
This commit is contained in:
parent
e4f2d70a9d
commit
2624b41932
@ -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
|
||||||
|
@ -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
|
||||||
|
@ -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'] = {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user