diff --git a/src/calibre/customize/ui.py b/src/calibre/customize/ui.py index 04f9b80529..22885edf24 100644 --- a/src/calibre/customize/ui.py +++ b/src/calibre/customize/ui.py @@ -289,6 +289,7 @@ def available_input_formats(): if not is_disabled(plugin): for format in plugin.file_types: formats.add(format) + formats.add('zip'), formats.add('rar') return formats def output_format_plugins(): diff --git a/src/calibre/devices/bebook/driver.py b/src/calibre/devices/bebook/driver.py index 5aba34e879..1542346955 100644 --- a/src/calibre/devices/bebook/driver.py +++ b/src/calibre/devices/bebook/driver.py @@ -20,7 +20,7 @@ class BEBOOK(USBMS): supported_platforms = ['windows', 'osx', 'linux'] # Ordered list of supported formats - FORMATS = ['mobi', 'epub', 'pdf', 'txt'] + FORMATS = ['mobi', 'epub', 'pdf', 'rtf', 'txt'] VENDOR_ID = [0x0525] PRODUCT_ID = [0x8803, 0x6803] diff --git a/src/calibre/devices/prs500/driver.py b/src/calibre/devices/prs500/driver.py index 5c97144049..73dd5b543d 100644 --- a/src/calibre/devices/prs500/driver.py +++ b/src/calibre/devices/prs500/driver.py @@ -239,6 +239,8 @@ class PRS500(DeviceConfig, DevicePlugin): Also initialize the device. See the source code for the sequence of initialization commands. """ + if not hasattr(self, 'key'): + self.key = '-1\0\0\0\0\0\0' self.device = get_device_by_id(self.VENDOR_ID, self.PRODUCT_ID) if not self.device: raise DeviceError() diff --git a/src/calibre/devices/usbms/device.py b/src/calibre/devices/usbms/device.py index 24ad929cbd..50f183a83e 100644 --- a/src/calibre/devices/usbms/device.py +++ b/src/calibre/devices/usbms/device.py @@ -727,11 +727,14 @@ class Device(DeviceConfig, DevicePlugin): if r.startswith('.'): r = x[0]+r else: r = x[:-delta] + r = r.strip() + if not r: + r = x.strip()[0] if x.strip() else 'x' if x is resizable[-1]: filepath = filepath.replace(os.sep+x, os.sep+r) else: filepath = filepath.replace(os.sep+x+os.sep, os.sep+r+os.sep) - filepath = filepath.replace(os.sep+os.sep, os.sep) + filepath = filepath.replace(os.sep+os.sep, os.sep).strip() newpath = os.path.dirname(filepath) if not os.path.exists(newpath): diff --git a/src/calibre/ebooks/oeb/iterator.py b/src/calibre/ebooks/oeb/iterator.py index 9b9158b37e..33cc96f08b 100644 --- a/src/calibre/ebooks/oeb/iterator.py +++ b/src/calibre/ebooks/oeb/iterator.py @@ -150,7 +150,8 @@ class EbookIterator(object): self.language = self.opf.language if self.language: self.language = self.language.lower() - self.spine = [SpineItem(i.path) for i in self.opf.spine] + self.spine = [SpineItem(i.path) for i in self.opf.spine if i.is_linear] + self.spine += [SpineItem(i.path) for i in self.opf.spine if not i.is_linear] cover = self.opf.cover if self.ebook_ext in ('lit', 'mobi', 'prc', 'opf') and cover: diff --git a/src/calibre/gui2/device.py b/src/calibre/gui2/device.py index 1f0b315df6..3a46352a70 100644 --- a/src/calibre/gui2/device.py +++ b/src/calibre/gui2/device.py @@ -812,9 +812,9 @@ class DeviceGUI(object): bad = '\n'.join('%s'%(i,) for i in bad) d = warning_dialog(self, _('No suitable formats'), _('Could not upload the following books to the device, ' - 'as no suitable formats were found. Try changing the output ' - 'format in the upper right corner next to the red heart and ' - 're-converting.'), bad) + 'as no suitable formats were found. Convert the book(s) to a ' + 'format supported by your device first.' + ), bad) d.exec_() def upload_booklists(self): diff --git a/src/calibre/gui2/wizard/__init__.py b/src/calibre/gui2/wizard/__init__.py index 8ebb3528d1..8610d8bba7 100644 --- a/src/calibre/gui2/wizard/__init__.py +++ b/src/calibre/gui2/wizard/__init__.py @@ -63,6 +63,14 @@ class Kindle(Device): manufacturer = 'Amazon' id = 'kindle' +class JetBook(Device): + + output_profile = 'jetbook5' + output_format = 'EPUB' + name = 'JetBook' + manufacturer = 'Ectaco' + id = 'jetbook' + class KindleDX(Kindle): output_profile = 'kindle_dx' diff --git a/src/calibre/utils/filenames.py b/src/calibre/utils/filenames.py index 539d2960d3..ba10d6934e 100644 --- a/src/calibre/utils/filenames.py +++ b/src/calibre/utils/filenames.py @@ -54,6 +54,9 @@ def shorten_components_to(length, components): if r.startswith('.'): r = x[0]+r else: r = x[:-delta] + r = r.strip() + if not r: + r = x.strip()[0] if x.strip() else 'x' ans.append(r) return ans