Added title_sort output option to CSV and XML catalog formats

This commit is contained in:
GRiker 2011-05-07 11:20:59 -06:00
parent d58cf62ffc
commit 3eea169827
2 changed files with 13 additions and 5 deletions

View File

@ -449,7 +449,7 @@ class CatalogPlugin(Plugin): # {{{
['author_sort','authors','comments','cover','formats', ['author_sort','authors','comments','cover','formats',
'id','isbn','ondevice','pubdate','publisher','rating', 'id','isbn','ondevice','pubdate','publisher','rating',
'series_index','series','size','tags','timestamp', 'series_index','series','size','tags','timestamp',
'title','uuid']) 'title_sort','title','uuid'])
all_custom_fields = set(db.custom_field_keys()) all_custom_fields = set(db.custom_field_keys())
all_fields = all_std_fields.union(all_custom_fields) all_fields = all_std_fields.union(all_custom_fields)

View File

@ -16,6 +16,7 @@ from calibre.customize import CatalogPlugin
from calibre.customize.conversion import OptionRecommendation, DummyReporter from calibre.customize.conversion import OptionRecommendation, DummyReporter
from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString from calibre.ebooks.BeautifulSoup import BeautifulSoup, BeautifulStoneSoup, Tag, NavigableString
from calibre.ebooks.chardet import substitute_entites from calibre.ebooks.chardet import substitute_entites
from calibre.ebooks.metadata import title_sort as _title_sort
from calibre.library.save_to_disk import preprocess_template from calibre.library.save_to_disk import preprocess_template
from calibre.ptempfile import PersistentTemporaryDirectory from calibre.ptempfile import PersistentTemporaryDirectory
from calibre.utils.bibtex import BibTeX from calibre.utils.bibtex import BibTeX
@ -27,7 +28,7 @@ from calibre.utils.logging import default_log as log
from calibre.utils.magick.draw import thumbnail from calibre.utils.magick.draw import thumbnail
from calibre.utils.zipfile import ZipFile, ZipInfo from calibre.utils.zipfile import ZipFile, ZipInfo
FIELDS = ['all', 'title', 'author_sort', 'authors', 'comments', FIELDS = ['all', 'title', 'title_sort', 'author_sort', 'authors', 'comments',
'cover', 'formats','id', 'isbn', 'ondevice', 'pubdate', 'publisher', 'cover', 'formats','id', 'isbn', 'ondevice', 'pubdate', 'publisher',
'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid'] 'rating', 'series_index', 'series', 'size', 'tags', 'timestamp', 'uuid']
@ -66,7 +67,7 @@ class CSV_XML(CatalogPlugin): # {{{
dest = 'sort_by', dest = 'sort_by',
action = None, action = None,
help = _('Output field to sort on.\n' help = _('Output field to sort on.\n'
'Available fields: author_sort, id, rating, size, timestamp, title.\n' 'Available fields: author_sort, id, rating, size, timestamp, title_sort\n'
"Default: '%default'\n" "Default: '%default'\n"
"Applies to: CSV, XML output formats"))] "Applies to: CSV, XML output formats"))]
@ -76,7 +77,7 @@ class CSV_XML(CatalogPlugin): # {{{
if opts.verbose: if opts.verbose:
opts_dict = vars(opts) opts_dict = vars(opts)
log("%s(): Generating %s" % (self.name,self.fmt)) log("%s(): Generating %s" % (self.name,self.fmt.upper()))
if opts.connected_device['is_device_connected']: if opts.connected_device['is_device_connected']:
log(" connected_device: %s" % opts.connected_device['name']) log(" connected_device: %s" % opts.connected_device['name'])
if opts_dict['search_text']: if opts_dict['search_text']:
@ -126,8 +127,11 @@ class CSV_XML(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)
elif field == 'title_sort':
item = _title_sort(unicode(entry['title']))
else: else:
item = entry[field] item = entry[field]
if item is None: if item is None:
outstr.append('""') outstr.append('""')
continue continue
@ -167,7 +171,7 @@ class CSV_XML(CatalogPlugin): # {{{
item = getattr(E, field.replace('#','_'))(val) item = getattr(E, field.replace('#','_'))(val)
record.append(item) record.append(item)
for field in ('id', 'uuid', 'title', 'publisher', 'rating', 'size', for field in ('id', 'uuid', 'publisher', 'rating', 'size',
'isbn','ondevice'): 'isbn','ondevice'):
if field in fields: if field in fields:
val = r[field] val = r[field]
@ -178,6 +182,10 @@ class CSV_XML(CatalogPlugin): # {{{
item = getattr(E, field)(val) item = getattr(E, field)(val)
record.append(item) record.append(item)
if 'title' in fields:
title = E.title(r['title'], sort=_title_sort(unicode(r['title'])))
record.append(title)
if 'authors' in fields: if 'authors' in fields:
aus = E.authors(sort=r['author_sort']) aus = E.authors(sort=r['author_sort'])
for au in r['authors']: for au in r['authors']: