diff --git a/src/calibre/devices/prs505/driver.py b/src/calibre/devices/prs505/driver.py
index f569667ba1..702dd37592 100644
--- a/src/calibre/devices/prs505/driver.py
+++ b/src/calibre/devices/prs505/driver.py
@@ -4,15 +4,14 @@
'''
Device driver for the SONY PRS-505
'''
-import sys, os, shutil, time, subprocess, re
+import os, time
from itertools import cycle
from calibre.devices.usbms.cli import CLI
from calibre.devices.usbms.device import Device
from calibre.devices.errors import DeviceError, FreeSpaceError
from calibre.devices.prs505.books import BookList, fix_ids
-from calibre import iswindows, islinux, isosx, __appname__
-from calibre.devices.errors import PathError
+from calibre import __appname__
class PRS505(CLI, Device):
@@ -22,7 +21,7 @@ class PRS505(CLI, Device):
supported_platforms = ['windows', 'osx', 'linux']
FORMATS = ['epub', 'lrf', 'lrx', 'rtf', 'pdf', 'txt']
-
+
VENDOR_ID = [0x054c] #: SONY Vendor Id
PRODUCT_ID = [0x031e] #: Product Id for the PRS-505
BCD = [0x229] #: Needed to disambiguate 505 and 700 on linux
@@ -46,27 +45,34 @@ class PRS505(CLI, Device):
def open(self):
Device.open(self)
-
+
def write_cache(prefix):
try:
cachep = os.path.join(prefix, self.CACHE_XML)
if not os.path.exists(cachep):
- os.makedirs(os.path.dirname(cachep), mode=0777)
- f = open(cachep, 'wb')
- f.write(u'''
-
-
-'''.encode('utf8'))
- f.close()
+ try:
+ os.makedirs(os.path.dirname(cachep), mode=0777)
+ except:
+ time.sleep(5)
+ os.makedirs(os.path.dirname(cachep), mode=0777)
+ with open(cachep, 'wb') as f:
+ f.write(u'''
+
+
+ '''.encode('utf8'))
+ return True
except:
self._card_prefix = None
import traceback
traceback.print_exc()
+ return False
if self._card_a_prefix is not None:
- write_cache(self._card_a_prefix)
+ if not write_cache(self._card_a_prefix):
+ self._card_a_prefix = None
if self._card_b_prefix is not None:
- write_cache(self._card_b_prefix)
+ if not write_cache(self._card_b_prefix):
+ self._card_b_prefix = None
def get_device_information(self, end_session=True):
return (self.__class__.__name__, '', '', '')
@@ -132,7 +138,7 @@ def get_size(obj):
if not hasattr(infile, 'read'):
infile, close = open(infile, 'rb'), True
infile.seek(0)
-
+
newpath = path
mdata = metadata.next()
@@ -159,11 +165,11 @@ def get_size(obj):
paths.append(filepath)
self.put_file(infile, paths[-1], replace_file=True)
-
+
if close:
infile.close()
ctimes.append(os.path.getctime(paths[-1]))
-
+
return zip(paths, sizes, ctimes, cycle([on_card]))
@classmethod
@@ -199,7 +205,7 @@ def sync_booklists(self, booklists, end_session=True):
f = open(self._main_prefix + self.__class__.MEDIA_XML, 'wb')
booklists[0].write(f)
f.close()
-
+
def write_card_prefix(prefix, listid):
if prefix is not None and hasattr(booklists[listid], 'write'):
if not os.path.exists(prefix):
diff --git a/src/calibre/ebooks/conversion/cli.py b/src/calibre/ebooks/conversion/cli.py
index b165fbf8f4..53b1a2065d 100644
--- a/src/calibre/ebooks/conversion/cli.py
+++ b/src/calibre/ebooks/conversion/cli.py
@@ -128,7 +128,7 @@ def add_pipeline_options(parser, plumber):
[
'dont_split_on_page_breaks', 'chapter', 'chapter_mark',
'prefer_metadata_cover', 'remove_first_image',
- 'insert_comments', 'page_breaks_before',
+ 'insert_metadata', 'page_breaks_before',
]
),
diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py
index 9987ec0243..37611dcea7 100644
--- a/src/calibre/ebooks/conversion/plumber.py
+++ b/src/calibre/ebooks/conversion/plumber.py
@@ -300,11 +300,11 @@ def __init__(self, input, output, log, report_progress=DummyReporter()):
)
),
-OptionRecommendation(name='insert_comments',
+OptionRecommendation(name='insert_metadata',
recommended_value=False, level=OptionRecommendation.LOW,
- help=_('Insert the comments/summary from the book metadata at the start of '
+ help=_('Insert the book metadata at the start of '
'the book. This is useful if your ebook reader does not support '
- 'displaying the comments from the metadata.'
+ 'displaying/searching metadata directly.'
)
),
@@ -607,7 +607,7 @@ def run(self):
fkey = map(float, fkey.split(','))
from calibre.ebooks.oeb.transforms.jacket import Jacket
- Jacket()(self.oeb, self.opts)
+ Jacket()(self.oeb, self.opts, self.user_metadata)
pr(0.4)
if self.opts.extra_css and os.path.exists(self.opts.extra_css):
diff --git a/src/calibre/ebooks/oeb/transforms/jacket.py b/src/calibre/ebooks/oeb/transforms/jacket.py
index c182faedfa..78f4ab871e 100644
--- a/src/calibre/ebooks/oeb/transforms/jacket.py
+++ b/src/calibre/ebooks/oeb/transforms/jacket.py
@@ -25,9 +25,13 @@ class Jacket(object):
%(title)s
- %(title)s
- %(jacket)s
-
+
+
%(title)s
+
%(jacket)s
+
%(series)s
+
%(tags)s
+
+
%(comments)s
@@ -46,21 +50,47 @@ def remove_first_image(self):
img.getparent().remove(img)
return
- def insert_comments(self, comments):
- self.log('Inserting metadata comments into book...')
+ def insert_metadata(self, mi):
+ self.log('Inserting metadata into book...')
+ comments = mi.comments
+ if not comments:
+ try:
+ comments = unicode(self.oeb.metadata.description[0])
+ except:
+ comments = ''
+ if not comments.strip():
+ comments = ''
comments = comments.replace('\r\n', '\n').replace('\n\n', '
')
+ series = '
Series: ' + mi.series if mi.series else ''
+ if series and mi.series_index is not None:
+ series += ' [%s]'%mi.series_index
+ tags = mi.tags
+ if not tags:
+ try:
+ tags = map(unicode, self.oeb.metadata.subject)
+ except:
+ tags = []
+ tags = u'/'.join(tags)
+ if tags:
+ tags = '
Tags: ' + u'/%s/'%tags
+ else:
+ tags = ''
+ try:
+ title = mi.title if mi.title else unicode(self.oeb.metadata.title[0])
+ except:
+ title = _('Unknown')
html = self.JACKET_TEMPLATE%dict(xmlns=XPNSMAP['h'],
- title=self.opts.title, comments=comments,
- jacket=_('Book Jacket'))
+ title=title, comments=comments,
+ jacket=_('Book Jacket'), series=series, tags=tags)
id, href = self.oeb.manifest.generate('jacket', 'jacket.xhtml')
root = etree.fromstring(html)
item = self.oeb.manifest.add(id, href, guess_type(href)[0], data=root)
self.oeb.spine.insert(0, item, True)
- def __call__(self, oeb, opts):
+ def __call__(self, oeb, opts, metadata):
self.oeb, self.opts, self.log = oeb, opts, oeb.log
if opts.remove_first_image:
self.remove_fisrt_image()
- if opts.insert_comments and opts.comments:
- self.insert_comments(opts.comments)
+ if opts.insert_metadata:
+ self.insert_metadata(metadata)
diff --git a/src/calibre/linux.py b/src/calibre/linux.py
index 1d641de51c..e6c0504316 100644
--- a/src/calibre/linux.py
+++ b/src/calibre/linux.py
@@ -5,7 +5,6 @@
from subprocess import check_call, call
from calibre import __version__, __appname__
-from calibre.devices import devices
DEVICES = devices()