From 9180cf7d9a1f78991f584d664dd2b37b2c134879 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 25 Jul 2012 09:15:26 +0530 Subject: [PATCH 1/3] Fix #1028690 (Device not detected - Zeki TB782B) --- src/calibre/devices/android/driver.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index eca5d615ce..beee1082fb 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -194,7 +194,7 @@ class ANDROID(USBMS): 'GENERIC-', 'ZTE', 'MID', 'QUALCOMM', 'PANDIGIT', 'HYSTON', 'VIZIO', 'GOOGLE', 'FREESCAL', 'KOBO_INC', 'LENOVO', 'ROCKCHIP', 'POCKET', 'ONDA_MID', 'ZENITHIN', 'INGENIC', 'PMID701C', 'PD', - 'PMP5097C', 'MASS', 'NOVO7'] + 'PMP5097C', 'MASS', 'NOVO7', 'ZEKI'] WINDOWS_MAIN_MEM = ['ANDROID_PHONE', 'A855', 'A853', 'INC.NEXUS_ONE', '__UMS_COMPOSITE', '_MB200', 'MASS_STORAGE', '_-_CARD', 'SGH-I897', 'GT-I9000', 'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID', @@ -212,7 +212,7 @@ class ANDROID(USBMS): 'KTABLET_PC', 'INGENIC', 'GT-I9001_CARD', 'USB_2.0_DRIVER', 'GT-S5830L_CARD', 'UNIVERSE', 'XT875', 'PRO', '.KOBO_VOX', 'THINKPAD_TABLET', 'SGH-T989', 'YP-G70', 'STORAGE_DEVICE', - 'ADVANCED', 'SGH-I727'] + 'ADVANCED', 'SGH-I727', 'USB_FLASH_DRIVER'] WINDOWS_CARD_A_MEM = ['ANDROID_PHONE', 'GT-I9000_CARD', 'SGH-I897', 'FILE-STOR_GADGET', 'SGH-T959_CARD', 'SGH-T959', 'SAMSUNG_ANDROID', 'GT-P1000_CARD', 'A70S', 'A101IT', '7', 'INCREDIBLE', 'A7EB', 'SGH-T849_CARD', @@ -221,7 +221,8 @@ class ANDROID(USBMS): 'A1-07___C0541A4F', 'XT912', 'MB855', 'XT910', 'BOOK_A10_CARD', 'USB_2.0_DRIVER', 'I9100T', 'P999DW_SD_CARD', 'KTABLET_PC', 'FILE-CD_GADGET', 'GT-I9001_CARD', 'USB_2.0_DRIVER', 'XT875', - 'UMS_COMPOSITE', 'PRO', '.KOBO_VOX', 'SGH-T989_CARD', 'SGH-I727'] + 'UMS_COMPOSITE', 'PRO', '.KOBO_VOX', 'SGH-T989_CARD', 'SGH-I727', + 'USB_FLASH_DRIVER'] OSX_MAIN_MEM = 'Android Device Main Memory' From 2aa4f7c70bb5749e714dc2d2b3044b1e872b292e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 25 Jul 2012 10:14:40 +0530 Subject: [PATCH 2/3] Conversion: Ignore invalid chapter detection and level n ToC expressions instead of erroring out --- .../ebooks/oeb/transforms/structure.py | 26 +++++++++++++++---- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/src/calibre/ebooks/oeb/transforms/structure.py b/src/calibre/ebooks/oeb/transforms/structure.py index dd3db1415a..b90774bcc7 100644 --- a/src/calibre/ebooks/oeb/transforms/structure.py +++ b/src/calibre/ebooks/oeb/transforms/structure.py @@ -82,10 +82,17 @@ class DetectStructure(object): def detect_chapters(self): self.detected_chapters = [] + + def find_matches(expr, doc): + try: + return XPath(expr)(doc) + except: + self.log.warn('Invalid chapter expression, ignoring: %s'%expr) + return [] + if self.opts.chapter: - chapter_xpath = XPath(self.opts.chapter) for item in self.oeb.spine: - for x in chapter_xpath(item.data): + for x in find_matches(self.opts.chapter, item.data): self.detected_chapters.append((item, x)) chapter_mark = self.opts.chapter_mark @@ -164,11 +171,19 @@ class DetectStructure(object): added = OrderedDict() added2 = OrderedDict() counter = 1 + + def find_matches(expr, doc): + try: + return XPath(expr)(doc) + except: + self.log.warn('Invalid ToC expression, ignoring: %s'%expr) + return [] + for document in self.oeb.spine: previous_level1 = list(added.itervalues())[-1] if added else None previous_level2 = list(added2.itervalues())[-1] if added2 else None - for elem in XPath(self.opts.level1_toc)(document.data): + for elem in find_matches(self.opts.level1_toc, document.data): text, _href = self.elem_to_link(document, elem, counter) counter += 1 if text: @@ -178,7 +193,7 @@ class DetectStructure(object): #node.add(_('Top'), _href) if self.opts.level2_toc is not None and added: - for elem in XPath(self.opts.level2_toc)(document.data): + for elem in find_matches(self.opts.level2_toc, document.data): level1 = None for item in document.data.iterdescendants(): if item in added: @@ -196,7 +211,8 @@ class DetectStructure(object): break if self.opts.level3_toc is not None and added2: - for elem in XPath(self.opts.level3_toc)(document.data): + for elem in find_matches(self.opts.level3_toc, + document.data): level2 = None for item in document.data.iterdescendants(): if item in added2: From 1941541cdf4296fed1c9116f3328036b3939951c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 25 Jul 2012 10:18:37 +0530 Subject: [PATCH 3/3] ... --- src/calibre/ebooks/conversion/plumber.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/ebooks/conversion/plumber.py b/src/calibre/ebooks/conversion/plumber.py index 78821fa595..6a7b5e586b 100644 --- a/src/calibre/ebooks/conversion/plumber.py +++ b/src/calibre/ebooks/conversion/plumber.py @@ -326,7 +326,7 @@ OptionRecommendation(name='page_breaks_before', recommended_value="//*[name()='h1' or name()='h2']", level=OptionRecommendation.LOW, help=_('An XPath expression. Page breaks are inserted ' - 'before the specified elements.') + 'before the specified elements. To disable use the expression: /') ), OptionRecommendation(name='remove_fake_margins',