mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Catalog generation: Include the series_index field for custom series columns as well
This commit is contained in:
parent
60a2e50b9f
commit
20717e69db
@ -451,6 +451,10 @@ class CatalogPlugin(Plugin): # {{{
|
||||
'series_index','series','size','tags','timestamp',
|
||||
'title_sort','title','uuid','languages'])
|
||||
all_custom_fields = set(db.custom_field_keys())
|
||||
for field in list(all_custom_fields):
|
||||
fm = db.field_metadata[field]
|
||||
if fm['datatype'] == 'series':
|
||||
all_custom_fields.add(field+'_index')
|
||||
all_fields = all_std_fields.union(all_custom_fields)
|
||||
|
||||
if opts.fields != 'all':
|
||||
|
@ -35,7 +35,10 @@ class PluginWidget(QWidget, Ui_Form):
|
||||
|
||||
self.all_fields = [x for x in FIELDS if x != 'all']
|
||||
#add custom columns
|
||||
self.all_fields.extend([x for x in sorted(db.custom_field_keys())])
|
||||
for x in sorted(db.custom_field_keys()):
|
||||
self.all_fields.append(x)
|
||||
if db.field_metadata[x]['datatype'] == 'series':
|
||||
self.all_fields.append(x+'_index')
|
||||
#populate
|
||||
for x in self.all_fields:
|
||||
QListWidgetItem(x, self.db_fields)
|
||||
|
@ -33,6 +33,9 @@ class PluginWidget(QWidget, Ui_Form):
|
||||
self.all_fields.append(x)
|
||||
QListWidgetItem(x, self.db_fields)
|
||||
|
||||
fm = db.field_metadata[x]
|
||||
if fm['datatype'] == 'series':
|
||||
QListWidgetItem(x+'_index', self.db_fields)
|
||||
|
||||
def initialize(self, name, db):
|
||||
self.name = name
|
||||
|
@ -347,7 +347,9 @@ class BIBTEX(CatalogPlugin): # {{{
|
||||
|
||||
for field in fields:
|
||||
if field.startswith('#'):
|
||||
item = db.get_field(entry['id'],field,index_is_id=True)
|
||||
item = db.get_field(entry['id'],field,index_is_id=True)
|
||||
if isinstance(item, (bool, float, int)):
|
||||
item = repr(item)
|
||||
elif field == 'title_sort':
|
||||
item = entry['sort']
|
||||
else:
|
||||
@ -391,7 +393,7 @@ class BIBTEX(CatalogPlugin): # {{{
|
||||
|
||||
elif field == 'isbn' :
|
||||
# Could be 9, 10 or 13 digits
|
||||
bibtex_entry.append(u'isbn = "%s"' % re.sub(u'[\D]', u'', item))
|
||||
bibtex_entry.append(u'isbn = "%s"' % re.sub(u'[0-9xX]', u'', item))
|
||||
|
||||
elif field == 'formats' :
|
||||
#Add file path if format is selected
|
||||
@ -413,7 +415,8 @@ class BIBTEX(CatalogPlugin): # {{{
|
||||
bibtex_entry.append(u'month = "%s"' % bibtexdict.utf8ToBibtex(strftime("%b", item)))
|
||||
|
||||
elif field.startswith('#') :
|
||||
bibtex_entry.append(u'%s = "%s"' % (field[1:], bibtexdict.utf8ToBibtex(item)))
|
||||
bibtex_entry.append(u'custom_%s = "%s"' % (field[1:],
|
||||
bibtexdict.utf8ToBibtex(item)))
|
||||
|
||||
else:
|
||||
# elif field in ['title', 'publisher', 'cover', 'uuid', 'ondevice',
|
||||
|
@ -64,8 +64,17 @@ def do_list(db, fields, afields, sort_by, ascending, search_text, line_width, se
|
||||
data = db.get_data_as_dict(prefix, authors_as_string=True)
|
||||
fields = ['id'] + fields
|
||||
title_fields = fields
|
||||
fields = [db.custom_column_label_map[x[1:]]['num'] if x[0]=='*'
|
||||
else x for x in fields]
|
||||
def field_name(f):
|
||||
ans = f
|
||||
if f[0] == '*':
|
||||
if f.endswith('_index'):
|
||||
fkey = f[1:-len('_index')]
|
||||
num = db.custom_column_label_map[fkey]['num']
|
||||
ans = '%d_index'%num
|
||||
else:
|
||||
ans = db.custom_column_label_map[f[1:]]['num']
|
||||
return ans
|
||||
fields = list(map(field_name, fields))
|
||||
|
||||
for f in data:
|
||||
fmts = [x for x in f['formats'] if x is not None]
|
||||
@ -121,8 +130,10 @@ def do_list(db, fields, afields, sort_by, ascending, search_text, line_width, se
|
||||
def list_option_parser(db=None):
|
||||
fields = set(FIELDS)
|
||||
if db is not None:
|
||||
for f in db.custom_column_label_map:
|
||||
for f, data in db.custom_column_label_map.iteritems():
|
||||
fields.add('*'+f)
|
||||
if data['datatype'] == 'series':
|
||||
fields.add('*'+f+'_index')
|
||||
|
||||
parser = get_parser(_(
|
||||
'''\
|
||||
@ -161,8 +172,10 @@ def command_list(args, dbpath):
|
||||
opts, args = parser.parse_args(sys.argv[:1] + args)
|
||||
afields = set(FIELDS)
|
||||
if db is not None:
|
||||
for f in db.custom_column_label_map:
|
||||
for f, data in db.custom_column_label_map.iteritems():
|
||||
afields.add('*'+f)
|
||||
if data['datatype'] == 'series':
|
||||
afields.add('*'+f+'_index')
|
||||
fields = [str(f.strip().lower()) for f in opts.fields.split(',')]
|
||||
if 'all' in fields:
|
||||
fields = sorted(list(afields))
|
||||
|
@ -3376,11 +3376,15 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
||||
'''
|
||||
if prefix is None:
|
||||
prefix = self.library_path
|
||||
FIELDS = set(['title', 'sort', 'authors', 'author_sort', 'publisher', 'rating',
|
||||
'timestamp', 'size', 'tags', 'comments', 'series', 'series_index',
|
||||
'uuid', 'pubdate', 'last_modified', 'identifiers', 'languages'])
|
||||
for x in self.custom_column_num_map:
|
||||
FIELDS.add(x)
|
||||
fdata = self.custom_column_num_map
|
||||
|
||||
FIELDS = set(['title', 'sort', 'authors', 'author_sort', 'publisher',
|
||||
'rating', 'timestamp', 'size', 'tags', 'comments', 'series',
|
||||
'series_index', 'uuid', 'pubdate', 'last_modified', 'identifiers',
|
||||
'languages']).union(set(fdata))
|
||||
for x, data in fdata.iteritems():
|
||||
if data['datatype'] == 'series':
|
||||
FIELDS.add('%d_index'%x)
|
||||
data = []
|
||||
for record in self.data:
|
||||
if record is None: continue
|
||||
|
Loading…
x
Reference in New Issue
Block a user