mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Added title_sort output option to CSV and XML catalog formats
This commit is contained in:
parent
d58cf62ffc
commit
3eea169827
@ -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)
|
||||||
|
|
||||||
|
@ -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']:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user