Add title_sort as available field to CSV/XML catalogs

This commit is contained in:
Kovid Goyal 2011-05-07 11:45:31 -06:00
commit c4cdf50d66
4 changed files with 15 additions and 6 deletions

View File

@ -30,3 +30,4 @@ nbproject/
.project .project
.pydevproject .pydevproject
.settings/ .settings/
*.DS_Store

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

View File

@ -3056,7 +3056,7 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
''' '''
if prefix is None: if prefix is None:
prefix = self.library_path prefix = self.library_path
FIELDS = set(['title', 'authors', 'author_sort', 'publisher', 'rating', FIELDS = set(['title', 'sort', 'authors', 'author_sort', 'publisher', 'rating',
'timestamp', 'size', 'tags', 'comments', 'series', 'series_index', 'timestamp', 'size', 'tags', 'comments', 'series', 'series_index',
'uuid', 'pubdate', 'last_modified', 'identifiers']) 'uuid', 'pubdate', 'last_modified', 'identifiers'])
for x in self.custom_column_num_map: for x in self.custom_column_num_map: