Catalog generation: Include the series_index field for custom series columns as well

This commit is contained in:
Kovid Goyal 2011-12-10 14:51:54 +05:30
parent 60a2e50b9f
commit 20717e69db
6 changed files with 43 additions and 13 deletions

View File

@ -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':

View File

@ -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)

View File

@ -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

View File

@ -347,7 +347,9 @@ 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',

View File

@ -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))

View File

@ -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