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',
|
'series_index','series','size','tags','timestamp',
|
||||||
'title_sort','title','uuid','languages'])
|
'title_sort','title','uuid','languages'])
|
||||||
all_custom_fields = set(db.custom_field_keys())
|
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)
|
all_fields = all_std_fields.union(all_custom_fields)
|
||||||
|
|
||||||
if opts.fields != 'all':
|
if opts.fields != 'all':
|
||||||
|
@ -35,7 +35,10 @@ class PluginWidget(QWidget, Ui_Form):
|
|||||||
|
|
||||||
self.all_fields = [x for x in FIELDS if x != 'all']
|
self.all_fields = [x for x in FIELDS if x != 'all']
|
||||||
#add custom columns
|
#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
|
#populate
|
||||||
for x in self.all_fields:
|
for x in self.all_fields:
|
||||||
QListWidgetItem(x, self.db_fields)
|
QListWidgetItem(x, self.db_fields)
|
||||||
|
@ -33,6 +33,9 @@ class PluginWidget(QWidget, Ui_Form):
|
|||||||
self.all_fields.append(x)
|
self.all_fields.append(x)
|
||||||
QListWidgetItem(x, self.db_fields)
|
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):
|
def initialize(self, name, db):
|
||||||
self.name = name
|
self.name = name
|
||||||
|
@ -348,6 +348,8 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
for field in fields:
|
for field in fields:
|
||||||
if field.startswith('#'):
|
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':
|
elif field == 'title_sort':
|
||||||
item = entry['sort']
|
item = entry['sort']
|
||||||
else:
|
else:
|
||||||
@ -391,7 +393,7 @@ class BIBTEX(CatalogPlugin): # {{{
|
|||||||
|
|
||||||
elif field == 'isbn' :
|
elif field == 'isbn' :
|
||||||
# Could be 9, 10 or 13 digits
|
# 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' :
|
elif field == 'formats' :
|
||||||
#Add file path if format is selected
|
#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)))
|
bibtex_entry.append(u'month = "%s"' % bibtexdict.utf8ToBibtex(strftime("%b", item)))
|
||||||
|
|
||||||
elif field.startswith('#') :
|
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:
|
else:
|
||||||
# elif field in ['title', 'publisher', 'cover', 'uuid', 'ondevice',
|
# 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)
|
data = db.get_data_as_dict(prefix, authors_as_string=True)
|
||||||
fields = ['id'] + fields
|
fields = ['id'] + fields
|
||||||
title_fields = fields
|
title_fields = fields
|
||||||
fields = [db.custom_column_label_map[x[1:]]['num'] if x[0]=='*'
|
def field_name(f):
|
||||||
else x for x in fields]
|
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:
|
for f in data:
|
||||||
fmts = [x for x in f['formats'] if x is not None]
|
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):
|
def list_option_parser(db=None):
|
||||||
fields = set(FIELDS)
|
fields = set(FIELDS)
|
||||||
if db is not None:
|
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)
|
fields.add('*'+f)
|
||||||
|
if data['datatype'] == 'series':
|
||||||
|
fields.add('*'+f+'_index')
|
||||||
|
|
||||||
parser = get_parser(_(
|
parser = get_parser(_(
|
||||||
'''\
|
'''\
|
||||||
@ -161,8 +172,10 @@ def command_list(args, dbpath):
|
|||||||
opts, args = parser.parse_args(sys.argv[:1] + args)
|
opts, args = parser.parse_args(sys.argv[:1] + args)
|
||||||
afields = set(FIELDS)
|
afields = set(FIELDS)
|
||||||
if db is not None:
|
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)
|
afields.add('*'+f)
|
||||||
|
if data['datatype'] == 'series':
|
||||||
|
afields.add('*'+f+'_index')
|
||||||
fields = [str(f.strip().lower()) for f in opts.fields.split(',')]
|
fields = [str(f.strip().lower()) for f in opts.fields.split(',')]
|
||||||
if 'all' in fields:
|
if 'all' in fields:
|
||||||
fields = sorted(list(afields))
|
fields = sorted(list(afields))
|
||||||
|
@ -3376,11 +3376,15 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
|
|||||||
'''
|
'''
|
||||||
if prefix is None:
|
if prefix is None:
|
||||||
prefix = self.library_path
|
prefix = self.library_path
|
||||||
FIELDS = set(['title', 'sort', 'authors', 'author_sort', 'publisher', 'rating',
|
fdata = self.custom_column_num_map
|
||||||
'timestamp', 'size', 'tags', 'comments', 'series', 'series_index',
|
|
||||||
'uuid', 'pubdate', 'last_modified', 'identifiers', 'languages'])
|
FIELDS = set(['title', 'sort', 'authors', 'author_sort', 'publisher',
|
||||||
for x in self.custom_column_num_map:
|
'rating', 'timestamp', 'size', 'tags', 'comments', 'series',
|
||||||
FIELDS.add(x)
|
'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 = []
|
data = []
|
||||||
for record in self.data:
|
for record in self.data:
|
||||||
if record is None: continue
|
if record is None: continue
|
||||||
|
Loading…
x
Reference in New Issue
Block a user