From 8cbdc8cbdee14412b45a56fd06fa0338b7291aaf Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 00:32:45 +0530 Subject: [PATCH 1/9] ... --- setup.cfg | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.cfg b/setup.cfg index 5a0ae0e629..29bb083103 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,4 +1,4 @@ [flake8] max-line-length = 160 builtins = _,dynamic_property,__,P,I,lopen,icu_lower,icu_upper,icu_title,ngettext -ignore = E12,E22,E231,E301,E302,E304,E401,W391 +ignore = E12,E203,E22,E231,E241,E301,E302,E304,E401,W391 diff --git a/setup.py b/setup.py index 1424d83137..9ff70d30df 100644 --- a/setup.py +++ b/setup.py @@ -63,7 +63,7 @@ def main(args=sys.argv): parser = option_parser() command.add_all_options(parser) - parser.set_usage('Usage: python setup.py %s [options]\n\n'%args[1]+\ + parser.set_usage('Usage: python setup.py %s [options]\n\n'%args[1]+ command.description) opts, args = parser.parse_args(args) From 53b43f6e0ca4d97345eab420d8de39671cddb84f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 09:44:47 +0530 Subject: [PATCH 2/9] Diario Extra by Douglas Delgado --- recipes/diario_extra.recipe | 47 +++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 recipes/diario_extra.recipe diff --git a/recipes/diario_extra.recipe b/recipes/diario_extra.recipe new file mode 100644 index 0000000000..b7af9d0b2f --- /dev/null +++ b/recipes/diario_extra.recipe @@ -0,0 +1,47 @@ +from calibre.web.feeds.news import BasicNewsRecipe + + +class goonews(BasicNewsRecipe): + __author__ = 'Douglas Delgado' + title = u'Diario Extra' + publisher = 'Sociedad Periodistica Extra Limitada' + description = 'Diario de circulacion nacional de Costa Rica.' + category = 'Spanish, Entertainment' + masthead_url = 'http://www.diarioextra.com/img/apariencia/logo.png' + + oldest_article = 7 + delay = 1 + max_articles_per_feed = 100 + auto_cleanup = True + encoding = 'utf-8' + language = 'es_CR' + use_embedded_content = False + remove_empty_feeds = True + remove_javascript = True + no_stylesheets = True + + feeds = [(u'Nacionales', + u'http://www.diarioextra.com/includes/rss_text.php?id=1'), + (u'Internacionales', + u'http://www.diarioextra.com/includes/rss_text.php?id=2'), + (u'Sucesos', + u'http://www.diarioextra.com/includes/rss_text.php?id=3'), + (u'Deportes', + u'http://www.diarioextra.com/includes/rss_text.php?id=6'), + (u'Espectaculos', + u'http://www.diarioextra.com/includes/rss_text.php?id=7'), + (u'Opinion', + u'http://www.diarioextra.com/includes/rss_text.php?id=4')] + + def get_cover_url(self): + index = 'http://kiosko.net/cr/np/cr_extra.html' + soup = self.index_to_soup(index) + for image in soup.findAll('img', src=True): + if image['src'].endswith('cr_extra.750.jpg'): + return image['src'] + return None + + extra_css = ''' + h1{font-family:Arial,Helvetica,sans-serif; font-weight:bold;font-size:30px;} + h2{font-family:Arial,Helvetica,sans-serif; font-weight:normal; font-style:italic; font-size:18px;} + ''' From 2a50c69e868dd62b97c765b3f10238563f93a569 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 09:48:54 +0530 Subject: [PATCH 3/9] ... --- src/calibre/customize/builtins.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/customize/builtins.py b/src/calibre/customize/builtins.py index 32972e80bf..da90452d0f 100644 --- a/src/calibre/customize/builtins.py +++ b/src/calibre/customize/builtins.py @@ -1763,7 +1763,7 @@ if __name__ == '__main__': 'calibre.utils.terminal', 'calibre.utils.magick', 'PIL', 'Image', 'sqlite3', 'mechanize', 'httplib', 'xml', 'inspect', 'urllib', 'calibre.utils.date', 'calibre.utils.config', 'platform', - 'calibre.utils.zipfile', + 'calibre.utils.zipfile', 'calibre.utils.formatter', ): if x in sys.modules: ret = 1 From 202cc22c648dd8e88835d17d923f168751feaf07 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 09:49:20 +0530 Subject: [PATCH 4/9] version 0.9.29 --- Changelog.yaml | 48 ++++++++++++++++++++++++++++++++++++++++ src/calibre/constants.py | 2 +- 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/Changelog.yaml b/Changelog.yaml index 896d32004c..5e6890a1a5 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -20,6 +20,54 @@ # new recipes: # - title: +- version: 0.9.29 +date: 2013-05-03 + + new features: + - title: "Bulk metadata download: Allow reviewing of the downloaded metadata before it is applied" + + - title: "FB2 Output: Write ISBN, pubdate, tags and publisher metadata when creating fb2 files" + tickets: [1174047] + + bug fixes: + - title: "When reading metadata from EPUB 3 files, use the first element rather than the last." + tickets: [1175184] + + - title: "Fix regression causing the search query parser to not parse search string containing newlines/tabs instead of spaces correctly" + tickets: [1174629] + + - title: "Kobo driver: Fix covers written to wrong place on OS X/linux when books sent to SD card. Fix covers not sent to SD card is images directory missing." + tickets: [1174147,1174126] + + - title: "Fix 'Preferences->Behavior->Virtual library to use when this library is opened' being applied only on calibre startup and not when switching to the library" + + - title: "PDF metadata: When rendering the first page as the cover, respect the PDF CropBox." + tickets: [1173795] + + - title: "PDF Output: Fix link generation broken on windows when converting epubs if the filenames contained uppercase letters." + tickets: [1169795] + + - title: "Tolino driver: Fix card and main memory swapped on windows" + tickets: [1173544] + + - title: "FB2 Output: Fix images being ignored when converting a EPUB with image filenames that contain URL unsafe characters." + tickets: [1173351] + + - title: "EPUB Input: Fix page margins specified in Adobe page template files with incorrect mime-types not being removed." + + improved recipes: + - The New Republic + - io9 + - What if + - Orlando Sentinel + - Read It Later recipe + - Smithsonian + - Business Week Magazine + + new recipes: + - title: Diario Extra + author: Douglas Delgado + - version: 0.9.28 date: 2013-04-26 diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 636be40395..54ff1355f5 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -4,7 +4,7 @@ __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net' __docformat__ = 'restructuredtext en' __appname__ = u'calibre' -numeric_version = (0, 9, 28) +numeric_version = (0, 9, 29) __version__ = u'.'.join(map(unicode, numeric_version)) __author__ = u"Kovid Goyal " From fce66810902fdbf8c694661035d615d1217f1823 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 10:44:45 +0530 Subject: [PATCH 5/9] IGN:Tag release --- Changelog.yaml | 4 +- src/calibre/translations/calibre.pot | 908 ++++++++++++++------------- src/calibre/translations/uk.po | 2 +- 3 files changed, 489 insertions(+), 425 deletions(-) diff --git a/Changelog.yaml b/Changelog.yaml index 5e6890a1a5..affd00f850 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -21,13 +21,13 @@ # - title: - version: 0.9.29 -date: 2013-05-03 + date: 2013-05-03 new features: - title: "Bulk metadata download: Allow reviewing of the downloaded metadata before it is applied" - title: "FB2 Output: Write ISBN, pubdate, tags and publisher metadata when creating fb2 files" - tickets: [1174047] + tickets: [1174047] bug fixes: - title: "When reading metadata from EPUB 3 files, use the first element rather than the last." diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 6264429558..5312b802d2 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.9.28\n" -"POT-Creation-Date: 2013-04-26 09:23+IST\n" -"PO-Revision-Date: 2013-04-26 09:23+IST\n" +"Project-Id-Version: calibre 0.9.29\n" +"POT-Creation-Date: 2013-05-03 10:04+IST\n" +"PO-Revision-Date: 2013-05-03 10:04+IST\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -21,12 +21,13 @@ msgid "Does absolutely nothing" msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:59 -#: /home/kovid/work/calibre/src/calibre/db/backend.py:839 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:147 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:150 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:161 -#: /home/kovid/work/calibre/src/calibre/db/cache.py:715 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:840 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:148 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:151 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:162 #: /home/kovid/work/calibre/src/calibre/db/cache.py:716 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:717 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:858 #: /home/kovid/work/calibre/src/calibre/db/write.py:152 #: /home/kovid/work/calibre/src/calibre/db/write.py:156 #: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:384 @@ -51,8 +52,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/comic_input.py:189 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/fb2_input.py:99 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/fb2_input.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:119 -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:122 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:118 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:121 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/lrf_output.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdb_input.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/pdf_output.py:28 @@ -62,15 +63,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/epub/periodical.py:140 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1897 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1899 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:311 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:312 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:35 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:36 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:37 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:38 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:39 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:101 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:494 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:499 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:731 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:67 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:462 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:467 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:701 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:740 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/docx.py:64 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61 @@ -85,10 +86,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:489 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:491 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/mobi.py:493 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1184 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1294 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1191 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1301 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:44 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:105 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:106 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/plucker.py:25 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:23 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pml.py:49 @@ -96,18 +97,18 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rtf.py:91 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rtf.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/snb.py:16 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:50 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:350 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:85 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:87 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:79 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/google.py:81 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:259 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:365 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:367 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:468 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:59 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:130 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:32 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:334 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:86 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:88 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:78 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/google.py:79 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:260 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:366 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:368 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:469 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:58 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:129 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/worker.py:27 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader/headers.py:28 @@ -135,12 +136,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ereader/writer.py:174 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/palmdoc/writer.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/pdb/ztxt/writer.py:27 -#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/render/links.py:129 +#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/render/links.py:133 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:451 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:459 #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:446 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:449 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:502 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:505 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:174 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:721 @@ -167,6 +168,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:250 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:426 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:177 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:181 @@ -179,12 +181,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:573 #: /home/kovid/work/calibre/src/calibre/library/database2.py:581 #: /home/kovid/work/calibre/src/calibre/library/database2.py:592 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2293 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2446 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2896 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3545 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3547 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3685 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2269 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2422 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2872 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3511 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3513 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3651 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:250 #: /home/kovid/work/calibre/src/calibre/library/server/content.py:251 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:247 @@ -891,8 +893,8 @@ msgstr "" msgid "Disable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/backend.py:327 -#: /home/kovid/work/calibre/src/calibre/db/backend.py:336 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:328 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:337 #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:324 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:98 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:749 @@ -902,19 +904,19 @@ msgstr "" msgid "Path to library too long. Must be less than %d characters." msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/backend.py:395 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:396 #: /home/kovid/work/calibre/src/calibre/library/database2.py:187 msgid "restored preference " msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/backend.py:401 +#: /home/kovid/work/calibre/src/calibre/db/backend.py:402 #: /home/kovid/work/calibre/src/calibre/library/database2.py:192 #: /home/kovid/work/calibre/src/calibre/library/restore.py:234 msgid "creating custom column " msgstr "" -#: /home/kovid/work/calibre/src/calibre/db/cache.py:175 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666 +#: /home/kovid/work/calibre/src/calibre/db/cache.py:176 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:635 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:677 #: /home/kovid/work/calibre/src/calibre/library/database2.py:1049 @@ -947,15 +949,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/db/fields.py:484 #: /home/kovid/work/calibre/src/calibre/db/fields.py:499 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2826 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2838 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:107 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:448 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:471 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:773 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:792 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:419 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:425 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:456 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:420 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:426 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:457 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:80 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:84 #: /home/kovid/work/calibre/src/calibre/devices/utils.py:116 @@ -965,7 +967,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/model.py:1224 #: /home/kovid/work/calibre/src/calibre/library/database2.py:359 #: /home/kovid/work/calibre/src/calibre/library/database2.py:372 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3399 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3365 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:187 msgid "News" msgstr "" @@ -1101,15 +1103,15 @@ msgstr "" msgid "Communicate with WebOS tablets." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:65 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:64 msgid "

If you do not want calibre to recognize your Apple iDevice when it is connected to your computer, click Disable Apple Driver.

To transfer books to your iDevice, click Disable Apple Driver, then use the 'Connect to iTunes' method recommended in the Calibre + iDevices FAQ, using the Connect/Share|Connect to iTunes menu item.

Enabling the Apple driver for direct connection to iDevices is an unsupported advanced user mode.

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:82 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:81 msgid "Disable Apple driver" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:86 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:85 msgid "Enable Apple driver" msgstr "" @@ -1167,43 +1169,43 @@ msgstr "" msgid "Updating device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:464 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:505 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1151 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1198 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3302 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3344 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:465 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:506 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1155 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1202 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3315 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3357 #, python-format msgid "%(num)d of %(tot)d" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:513 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1203 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3351 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:514 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1207 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3364 #: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:110 msgid "finished" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:705 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:706 msgid "" "Some books not found in iTunes database.\n" "Delete using the iBooks app.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1113 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1117 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2827 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3356 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3374 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2839 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3322 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3340 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3194 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3206 msgid "Communicate with iTunes." msgstr "" @@ -1243,10 +1245,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:130 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:133 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:350 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1354 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1358 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1362 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1732 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1357 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1361 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1365 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1735 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:155 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:144 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:147 @@ -1260,9 +1262,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:264 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:268 #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:391 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1136 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1138 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:393 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1139 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1141 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:277 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279 msgid "Transferring books to device..." @@ -1272,9 +1274,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:344 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:493 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:527 -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:430 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1149 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1160 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:432 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1152 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1163 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:301 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:332 msgid "Adding books to device metadata listing..." @@ -1287,7 +1289,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:442 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:474 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:617 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:2585 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:2595 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:338 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:359 msgid "Removing books from device..." @@ -1297,8 +1299,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:374 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:481 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:488 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1198 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1204 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1201 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1207 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:366 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:371 msgid "Removing books from device metadata listing..." @@ -1323,7 +1325,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:14 #: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:37 -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:298 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:306 #: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18 msgid "Kovid Goyal" msgstr "" @@ -1356,31 +1358,31 @@ msgstr "" msgid "Communicate with the Tolino Shine reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:214 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:222 msgid "Communicate with the Astak Mentor EB600" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:237 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:245 msgid "Communicate with the PocketBook 301 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:254 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:262 msgid "Communicate with the PocketBook 602/603/902/903/Pro 912 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:282 msgid "Communicate with the PocketBook 622 reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:287 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:295 msgid "Communicate with the PocketBook 360+ reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:297 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:305 msgid "Communicate with the PocketBook 701" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:328 +#: /home/kovid/work/calibre/src/calibre/devices/eb600/driver.py:337 msgid "Communicate with the Infibeam Pi2 reader." msgstr "" @@ -1589,32 +1591,32 @@ msgid "Normally, the KOBO readers get the cover image from the ebook file itself msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:76 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1233 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1236 msgid "Upload Black and White Covers" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:77 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1237 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1240 msgid "Show expired books" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:78 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1241 msgid "A bug in an earlier version left non kepubs book records in the database. With this option Calibre will show the expired records and allow you to delete them with the new delete logic." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:82 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1242 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1245 msgid "Show Previews" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:83 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1243 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1246 msgid "Kobo previews are included on the Touch and some other versions by default they are no longer displayed as there is no good reason to see them. Enable if you wish to see/delete them." msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:86 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1246 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1249 msgid "Show Recommendations" msgstr "" @@ -1623,7 +1625,7 @@ msgid "Kobo now shows recommendations on the device. In some case these have fi msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:90 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1255 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1258 msgid "Attempt to support newer firmware" msgstr "" @@ -1632,12 +1634,12 @@ msgid "Kobo routinely updates the firmware and the database version. With this o msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:619 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:2587 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:2597 msgid "Kobo database version unsupported - See details" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:620 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:2588 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:2598 msgid "Your Kobo is running an updated firmware/database version. As calibre does not know about this updated firmware, database editing is disabled, to prevent corruption. You can still send books to your Kobo with calibre, but deleting books and managing collections is disabled. If you are willing to experiment and know how to reset your Kobo to Factory defaults, you can override this check by right clicking the device icon in calibre and selecting \"Configure this device\" and then the \"Attempt to support newer firmware\" option. Doing so may require you to perform a factory reset of your Kobo." msgstr "" @@ -1672,67 +1674,67 @@ msgstr "" msgid "Chapter %(chapter)d: %(chapter_title)s
%(typ)s
Chapter Progress: %(chapter_progress)s%%
Highlight: %(text)s
Notes: %(annotation)s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1224 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 msgid "The Kobo Touch from firmware V2.0.0 supports bookshelves." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1226 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 msgid "Specify a tags type column for automatic management" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1227 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 msgid "Create Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1228 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 msgid "Create new bookshelves on the Kobo Touch if they do not exist. This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1229 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1232 msgid "Delete Empty Bookshelves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1233 msgid "Delete any empty bookshelves from the Kobo Touch when syncing is finished. This is only for firmware V2.0.0 or later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1231 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 msgid "Upload covers for books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1232 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 msgid "Upload cover images from the calibre library when sending books to the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1234 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1237 msgid "Keep cover aspect ratio" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1235 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1238 msgid "When uploading covers, do not change the aspect ratio when resizing for the device. This is for firmware versions 2.3.1 and later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1247 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 msgid "Kobo shows recommendations on the device. In some cases these have files but in other cases they are just pointers to the web site to buy. Enable if you wish to see/delete them." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1250 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1253 msgid "Set Series information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1251 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1254 msgid "The book lists on the Kobo devices can display series information. This is not read by the device from the sideloaded books. Series information can only be added to the device after the book has been processed by the device. Enable if you wish to set series information." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1256 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1259 msgid "Kobo routinely updates the firmware and the database version. With this option Calibre will attempt to perform full read-write functionality - Here be Dragons!! Enable only if you are comfortable with restoring your kobo to factory defaults and testing software. This driver supports firmware V2.x.x and DBVersion up to " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1262 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1265 msgid "Title to test when debugging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1263 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:1266 msgid "Part of title of a book that can be used when doing some tests for debugging. The test is to see if the string is contained in the title of a book. The better the match, the less extraneous output." msgstr "" @@ -1809,74 +1811,74 @@ msgstr "" msgid "Communicate with MTP devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:167 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:960 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:169 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:963 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:95 msgid "Get device information..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:190 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:192 msgid "Listing files, this can take a while" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:205 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:207 msgid "Reading ebook metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:238 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:240 #, python-format msgid "Reading metadata from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:257 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 msgid "Updating metadata cache on device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:259 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:261 msgid "Finished reading metadata from device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:419 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 #, python-format msgid "Transferred %s to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:421 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:423 msgid "Transfer to device finished..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:442 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 #, python-format msgid "Added %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:444 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:446 msgid "Adding complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:460 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:462 msgid "Deleting books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:466 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:468 #, python-format msgid "Deleted %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:467 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:469 msgid "All books deleted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:470 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:472 msgid "Removing books from metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:482 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 #, python-format msgid "Removed %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:484 +#: /home/kovid/work/calibre/src/calibre/devices/mtp/driver.py:486 msgid "All books removed" msgstr "" @@ -1927,66 +1929,66 @@ msgstr "" msgid "Communicate with the Nuut2 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:22 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:21 msgid "Communicate with Sony eBook readers older than the PRST1." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:60 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:59 msgid "Comments have been removed as the SONY reader chokes on them" msgstr "" +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:65 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:271 +msgid "All by title" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:66 #: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:272 -msgid "All by title" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:67 -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "All by author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:70 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:69 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:68 msgid "Comma separated list of metadata fields to turn into collections on the device. Possibilities include: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:73 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:72 #, python-format msgid ". Two special collections are available: %(abt)s:%(abtv)s and %(aba)s:%(abav)s. Add these values to the list to enable them. The collections will be given the name provided after the \":\" character." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:77 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:76 msgid "Upload separate cover thumbnails for books (newer readers)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:78 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:77 msgid "Normally, the SONY readers get the cover image from the ebook file itself. With this option, calibre will send a separate cover image to the reader, useful if you are sending DRMed books in which you cannot change the cover. WARNING: This option should only be used with newer SONY readers: 350, 650, 950 and newer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:84 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:83 msgid "Refresh separate covers when using automatic management (newer readers)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:86 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:85 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:78 msgid "Set this option to have separate book covers uploaded every time you connect your device. Unset this option if you have so many books on the reader that performance is unacceptable." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:90 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:89 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:82 msgid "Preserve cover aspect ratio when building thumbnails" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:92 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:91 #: /home/kovid/work/calibre/src/calibre/devices/prst1/driver.py:84 msgid "Set this option if you want the cover thumbnails to have the same aspect ratio (width to height) as the cover. Unset it if you want the thumbnail to be the maximum size, ignoring aspect ratio." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:96 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:95 msgid "Search for books in all folders" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:98 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:97 msgid "Setting this option tells calibre to look for books in all folders on the device and its cards. This permits calibre to find books put on the device by other software and by wireless download." msgstr "" @@ -2019,107 +2021,107 @@ msgstr "" msgid "Set this option if you want the author on the Sony to appear the same way the T1 sets it. This means it will only show the first author for books with multiple authors. Leave this disabled if you use Metadata Plugboards." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:184 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:183 msgid "Wireless Device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:188 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:187 msgid "Communicate with Smart Device apps" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:274 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:273 msgid "All by something" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:276 msgid "Enable connections at startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:277 msgid "Check this box to allow connections when calibre starts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:279 msgid "Security password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:281 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:280 msgid "Enter a password that the device app must use to connect to calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:282 msgid "Use fixed network port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:284 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:283 msgid "If checked, use the port number in the \"Port\" box, otherwise the driver will pick a random port" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:286 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:285 msgid "Port number: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:287 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:286 msgid "Enter the port number the driver is to use if the \"fixed port\" box is checked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:288 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:287 msgid "Print extra debug information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:289 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:288 msgid "Check this box if requested when reporting problems" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:291 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:290 msgid "Comma separated list of metadata fields to turn into collections on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:293 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:292 msgid "Possibilities include: series, tags, authors, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:301 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:300 msgid "Enable the no-activity timeout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:302 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:301 #, python-format msgid "If this box is checked, calibre will automatically disconnect if a connected device does nothing for %d minutes. Unchecking this box disables this timeout, so calibre will never automatically disconnect." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:306 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:305 msgid "Use this IP address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:307 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:306 msgid "Use this option if you want to force the driver to listen on a particular IP address. The driver will listen only on the entered address, and this address will be the one advertized over mDNS (bonjour)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:311 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:310 msgid "Replace books with the same calibre identifier" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:312 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:311 msgid "Use this option to overwrite a book on the device if that book has the same calibre identifier as the book being sent. The file name of the book will not change even if the save template produces a different result. Using this option in most cases prevents having multiple copies of a book on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:805 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:807 #, python-format msgid "Too many connection attempts from %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1312 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1315 #, python-format msgid "Invalid port in options: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1320 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1323 #, python-format msgid "Failed to connect to port %d. Try a different value." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1332 +#: /home/kovid/work/calibre/src/calibre/devices/smart_device_app/driver.py:1335 msgid "Failed to allocate a random port" msgstr "" @@ -2230,7 +2232,7 @@ msgstr "" msgid "Extra customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:42 +#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:40 msgid "Communicate with an eBook reader." msgstr "" @@ -2547,16 +2549,16 @@ msgstr "" msgid "for a complete list with descriptions." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:33 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:32 msgid "Traverse links in HTML files breadth first. Normally, they are traversed depth first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:40 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:39 #, python-format msgid "Maximum levels of recursion when following links in HTML files. Must be non-negative. 0 implies that no links in the root HTML file are followed. Default is %default." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:49 +#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plugins/html_input.py:48 msgid "Normally this input plugin re-arranges all the input files into a standard folder hierarchy. Only use this option if you know what you are doing as it can result in various nasty side effects in the rest of the conversion pipeline." msgstr "" @@ -3542,24 +3544,20 @@ msgstr "" msgid "Extract common e-book formats from archives (zip/rar) files. Also try to autodetect if they are actually cbz/cbr files." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:61 -msgid "Value: unknown field " -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:165 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:132 msgid "TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:666 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:635 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:67 #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:677 msgid "No" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:769 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:739 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:85 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:223 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1190 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:149 @@ -3572,31 +3570,31 @@ msgstr "" msgid "Title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:770 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:740 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:124 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1191 #: /home/kovid/work/calibre/src/calibre/gui2/store/stores/mobileread/models.py:23 msgid "Author(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:771 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:741 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:159 msgid "Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:772 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:742 msgid "Producer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:773 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:743 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:982 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:157 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:245 msgid "Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:775 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:745 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:186 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:102 @@ -3619,7 +3617,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:128 #: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:981 #: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1227 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:201 @@ -3627,15 +3625,15 @@ msgstr "" msgid "Tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:777 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:747 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:184 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:89 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:225 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:131 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:163 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:129 #: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:306 #: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:2304 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:140 @@ -3644,18 +3642,18 @@ msgid_plural "Series" msgstr[0] "" msgstr[1] "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:778 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:748 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:133 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:164 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:127 msgid "Languages" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:780 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:750 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:782 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:752 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:183 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:127 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:149 @@ -3663,10 +3661,14 @@ msgstr "" msgid "Published" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:784 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:754 msgid "Rights" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/formatter.py:32 +msgid "Value: unknown field " +msgstr "" + #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/cli.py:20 msgid "options" msgstr "" @@ -3758,55 +3760,56 @@ msgid "" "Fetch a cover image/social metadata for the book identified by ISBN from LibraryThing.com\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1489 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1496 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1298 #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/polish/cover.py:183 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:994 #: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:39 +#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:255 msgid "Cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:518 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:517 msgid "Downloads metadata and covers from Amazon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:528 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:527 msgid "US" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:529 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:528 msgid "France" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:530 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:529 msgid "Germany" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:531 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:530 msgid "UK" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:532 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:531 msgid "Italy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:533 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:532 msgid "Japan" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:534 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:533 msgid "Spain" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:535 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:534 msgid "Brazil" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:539 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:538 msgid "Amazon website to use:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:540 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:539 msgid "Metadata from Amazon will be fetched using this country's Amazon website." msgstr "" @@ -3814,7 +3817,7 @@ msgstr "" msgid "Amazon timed out. Try again later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:190 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:173 msgid "Metadata source" msgstr "" @@ -3835,7 +3838,7 @@ msgstr "" msgid "The maximum number of covers to process from the search result" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:155 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/douban.py:154 msgid "Downloads metadata and covers from Douban.com. Useful only for chinese language books." msgstr "" @@ -3843,7 +3846,7 @@ msgstr "" msgid "Downloads metadata and covers from Edelweiss - A catalog updated by book publishers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/google.py:162 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/google.py:161 msgid "Downloads metadata and covers from Google Books" msgstr "" @@ -3886,19 +3889,19 @@ msgstr "" msgid "Larger than %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:24 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:23 msgid "Downloads metadata from isbndb.com" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:34 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:33 msgid "IsbnDB key:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:35 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:34 msgid "To use isbndb.com you have to sign up for a free account at isbndb.com and get an access key." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:39 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:38 msgid "To use metadata from isbndb.com you must sign up for a free account and get an isbndb key and enter it below. Instructions to get the key are here." msgstr "" @@ -3922,7 +3925,7 @@ msgstr "" msgid "Additional metadata can be taken from Overdrive's book detail page. This includes a limited set of tags used by libraries, comments, language, and the ebook ISBN. Collecting this data is disabled by default due to the extra time required. Check the download all metadata option below to enable downloading this data." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:20 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/ozon.py:18 msgid "Downloads metadata and covers from OZON.ru" msgstr "" @@ -4545,10 +4548,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:132 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:238 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:103 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:219 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:288 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:328 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:344 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:384 #: /home/kovid/work/calibre/src/calibre/gui2/actions/polish.py:426 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:83 #: /home/kovid/work/calibre/src/calibre/gui2/actions/toc_edit.py:114 @@ -5010,7 +5013,7 @@ msgid "Create a catalog of the books in your calibre library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:131 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:647 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:649 msgid "Cannot convert" msgstr "" @@ -5139,7 +5142,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:93 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:302 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:452 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:242 msgid "Are you sure?" msgstr "" @@ -5374,147 +5377,173 @@ msgstr "" msgid "Manage the collections on this device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:26 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:27 msgid "Change the title/author/cover etc. of books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:26 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:27 msgid "E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:26 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:27 msgid "Edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:62 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:65 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:68 msgid "Download metadata and covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:75 msgid "Merge into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:78 msgid "Merge into first selected book - keep others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:82 msgid "Merge only formats into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:87 msgid "Merge book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:88 msgid "M" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:103 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:120 msgid "Failed to download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:129 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:130 #: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:532 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:898 msgid "Download failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:131 #, python-format msgid "Failed to download metadata or covers for any of the %d book(s)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:134 msgid "Metadata download completed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:135 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:136 #, python-format msgid "Finished downloading metadata for %d book(s). Proceed with updating the metadata in your library?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:144 #, python-format msgid "Could not download metadata and/or covers for %d of the books. Click \"Show details\" to see which books." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:146 msgid "Show the &failed books in the main book list after updating metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:154 msgid "Download complete" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:154 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:961 msgid "Download log" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:225 +msgid "Review downloaded metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:184 msgid "Some books changed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:185 msgid "The metadata for some books in your library has changed since you started the download. If you proceed, some of those changes may be overwritten. Click \"Show details\" to see the list of changed books. Do you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:218 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:226 +msgid "Discard downloaded metadata for this book" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:227 +msgid "Use the downloaded metadata for all remaining books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:228 +msgid "Discard downloaded metadata for all remaining books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:229 +#, python-format +msgid "Discard the downloaded value for: %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:230 +msgid "The downloaded metadata is on the left and the original metadata is on the right. If a downloaded value is blank or unknown, the original value is used." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:343 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:327 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:386 msgid "Cannot merge books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:387 msgid "At least two books must be selected for merging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:390 msgid "You are about to merge more than 5 books. Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:343 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:399 #, python-format msgid "Book formats and metadata from the selected books will be added to the first selected book (%s). ISBN will not be merged.

The second and subsequently selected books will not be deleted or changed.

Please confirm you want to proceed." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:411 #, python-format msgid "Book formats from the selected books will be merged into the first selected book (%s). Metadata in the first selected book will not be changed. Author, Title, ISBN and all other metadata will not be merged.

After merger the second and subsequently selected books, with any metadata they have will be deleted.

All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:427 #, python-format msgid "Book formats and metadata from the selected books will be merged into the first selected book (%s). ISBN will not be merged.

After merger the second and subsequently selected books will be deleted.

All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.

Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:597 msgid "Applying changed metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:630 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:686 msgid "Some failures" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:631 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:687 msgid "Failed to apply updated metadata for some books in your library. Click \"Show Details\" to see details." msgstr "" @@ -6150,7 +6179,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:105 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:25 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:249 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/main.py:234 #: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:667 msgid "&Cancel" @@ -7063,172 +7092,172 @@ msgstr "" msgid "Tab template for catalog.ui" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:80 msgid "Bold" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:81 msgid "Italic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:84 msgid "Underline" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:85 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:86 msgid "Strikethrough" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:88 msgid "Superscript" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:90 msgid "Subscript" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:92 msgid "Ordered list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:94 msgid "Unordered list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:97 msgid "Align left" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:99 msgid "Align center" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:101 msgid "Align right" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:103 msgid "Align justified" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:104 msgid "Undo" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:105 msgid "Redo" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:106 msgid "Remove formatting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:107 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:174 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:108 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:176 msgid "Paste" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:109 msgid "Cut" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:111 msgid "Increase Indentation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:113 msgid "Decrease Indentation" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:115 msgid "Select all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:126 msgid "Foreground color" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:130 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:131 msgid "Background color" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:134 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:135 msgid "Style text block" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:136 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:137 msgid "Style the selected text block" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:33 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:165 msgid "Normal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:142 #: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:143 #: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:145 #: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:146 #: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:148 msgid "Heading" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:149 msgid "Pre-formatted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:150 msgid "Blockquote" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:151 msgid "Address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:158 msgid "Insert link" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:84 msgid "Clear" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:188 msgid "Choose foreground color" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:194 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config.py:239 msgid "Choose background color" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:209 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:214 msgid "Create link" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:220 msgid "Enter &URL:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:216 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:221 msgid "Enter name (optional):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:584 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:589 msgid "Normal view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:585 +#: /home/kovid/work/calibre/src/calibre/gui2/comments_editor.py:590 msgid "HTML Source" msgstr "" @@ -8205,6 +8234,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder_ui.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/keyboard.py:610 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:483 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins_ui.py:110 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks_ui.py:124 msgid "&Next" @@ -8703,7 +8733,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:236 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:293 #: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:297 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1437 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1438 msgid "Undefined" msgstr "" @@ -9614,7 +9644,8 @@ msgid "&Profile:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comments_dialog.py:24 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:247 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:248 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:483 #: /usr/src/qt-everywhere-opensource-src-4.8.4/src/gui/widgets/qdialogbuttonbox.cpp:658 msgid "&OK" msgstr "" @@ -9658,7 +9689,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:305 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:223 msgid "Author" msgstr "" @@ -10196,7 +10227,7 @@ msgid "&Force numbers to start with:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:591 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1419 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1420 msgid "&Date:" msgstr "" @@ -10218,7 +10249,7 @@ msgid "Clear published date" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:600 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1188 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1187 msgid "&Languages:" msgstr "" @@ -10779,7 +10810,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:156 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:128 #: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:302 #: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi_builder.py:1417 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:113 @@ -11395,7 +11426,7 @@ msgid "&Automatically allow connections at calibre startup" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:129 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:164 msgid "Publishers" msgstr "" @@ -11410,7 +11441,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:191 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:222 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:259 msgid "Invalid name" msgstr "" @@ -11564,44 +11595,44 @@ msgstr "" msgid "Copy the selected color name to the clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:224 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:223 msgid "Author Sort" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:228 msgid "Tag 1" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:228 msgid "Tag 2" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:270 msgid "Template language tutorial" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:273 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:274 msgid "Template function reference" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:291 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:292 msgid "EXCEPTION: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:318 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:319 msgid "No column chosen" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:320 msgid "You must specify a column to be colored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:322 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:323 msgid "No template provided" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog.py:324 msgid "The template box cannot be empty" msgstr "" @@ -12000,7 +12031,7 @@ msgid "Regular expression (?P)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:149 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1321 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1322 msgid "ISBN:" msgstr "" @@ -12346,7 +12377,7 @@ msgid "available" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:176 -msgid "Virtual Library" +msgid "Vi&rtual Library" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:193 @@ -12861,26 +12892,26 @@ msgstr "" msgid "You have changed the tags. In order to use the tags editor, you must either discard or apply these changes. Apply changes?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1189 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1188 msgid "A comma separated list of languages for this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1212 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1213 msgid "Unknown language" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1213 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1214 #, python-format msgid "The language %s is not recognized" msgid_plural "The languages %s are not recognized" msgstr[0] "" msgstr[1] "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1225 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1226 msgid "I&ds:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1226 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1227 #, python-format msgid "" "Edit the identifiers for this book. For example: \n" @@ -12888,38 +12919,38 @@ msgid "" "%s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1290 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1352 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1291 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1353 msgid "This ISBN number is valid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1293 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1355 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1294 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1356 msgid "This ISBN number is invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1318 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1340 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1319 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1341 msgid "Invalid ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1319 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1320 msgid "Enter an ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1341 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1342 msgid "The ISBN you entered is not valid. Try again." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1365 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1366 msgid "&Publisher:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1440 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1442 msgid "Clear date" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1474 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1476 msgid "Publishe&d:" msgstr "" @@ -12983,6 +13014,33 @@ msgstr "" msgid "Downloaded metadata fields" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:348 +#, python-format +msgid "Revert %s" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:452 +msgid "Compare metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:468 +msgid "&Accept all remaining" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:473 +msgid "Re&ject all remaining" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:478 +msgid "&Reject" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/diff.py:523 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:301 +#, python-format +msgid " [%(num)d of %(tot)d]" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/metadata/pdf_covers.py:35 msgid "Choose a cover from the list of PDF pages below" msgstr "" @@ -13094,11 +13152,6 @@ msgstr "" msgid "Change how calibre downloads metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:301 -#, python-format -msgid " [%(num)d of %(tot)d]" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:359 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:369 msgid "Could not read cover" @@ -15000,12 +15053,10 @@ msgid "Grouped search terms are search names that permit a query to autom msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:421 msgid "Match all" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/search.py:77 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:421 msgid "Match any" msgstr "" @@ -15592,7 +15643,7 @@ msgid "Enable or disable search highlighting." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:460 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:129 msgid "Saved Searches" msgstr "" @@ -15619,30 +15670,35 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:34 #, python-format -msgid "Match all selected %s names" +msgid "Match any of the selected %s names" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:35 +#, python-format +msgid "Match all of the selected %s names" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:95 msgid "Edit virtual library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:97 msgid "Create virtual library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:102 msgid "Virtual library &name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:115 msgid "&Search expression:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:123 msgid "Create a virtual library based on: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:133 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:136 msgid "" "\n" "

Virtual Libraries

\n" @@ -15659,115 +15715,115 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:175 msgid "Saved searches recognized in the expression:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:215 msgid "Search text changed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:213 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:216 msgid "The virtual library name or the search text has changed. Do you want to discard these changes?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:253 msgid "No name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:251 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:254 msgid "You must provide a name for the new virtual library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:257 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:260 msgid "A virtual library name cannot begin with \"*\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:265 msgid "Name already in use" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:266 msgid "That name is already in use. Do you want to replace it with the new search?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:273 msgid "No search string" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:271 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:274 msgid "You must provide a search to define the new virtual library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:279 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:282 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:412 msgid "Invalid search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:280 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:413 msgid "The search in the search box is not valid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:288 msgid "Search found no books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:289 msgid "The search found no books, so the virtual library will be empty. Do you really want to use that search?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:298 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:301 msgid "" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:311 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:314 msgid "Use a \"virtual library\" to show only a subset of the books present in this library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:316 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:576 msgid "(all books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:317 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:320 msgid "Additional restriction" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:318 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:321 msgid "Edit Virtual Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:319 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:322 msgid "Remove Virtual Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:344 msgid "Create Virtual Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:373 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:494 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:496 msgid "*current search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:404 msgid "No search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:405 msgid "There is no current search to use" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:451 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:453 msgid "Are you sure you want to remove the virtual library {0}" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:571 msgid "({0} of {1})" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:576 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:578 msgid "({0} of all)" msgstr "" @@ -16327,23 +16383,31 @@ msgstr "" msgid "Sort by average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:412 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:413 msgid "Set the sort order for entries in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:415 -msgid "Match type" +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:416 +msgid "Search type when selecting multiple items" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:427 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:422 +msgid "Match all of the items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:422 +msgid "Match any of the items" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:429 msgid "When selecting multiple entries in the Tag Browser match any or all of them" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:431 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:433 msgid "Manage authors, tags, etc" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:432 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_browser/ui.py:434 msgid "All of these category_managers are available by right-clicking on items in the tag browser above" msgstr "" @@ -16916,16 +16980,16 @@ msgstr "" msgid "The library database at %s appears to be corrupted. Do you want calibre to try and rebuild it automatically? The rebuild may not be completely successful." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:635 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:637 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:656 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:658 #, python-format msgid "

Failed to convert: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:657 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:659 msgid "" "\n" " Many older ebook reader devices are incapable of displaying\n" @@ -16942,34 +17006,34 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:673 msgid "Conversion Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:683 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:685 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:716 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:718 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:748 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:750 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:751 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:753 msgid "" " is communicating with the device!
\n" " Quitting may cause corruption on the device.
\n" " Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:755 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:757 msgid "Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:823 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:825 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" @@ -18244,7 +18308,7 @@ msgid "" "Applies to: CSV, XML output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:43 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:42 #, python-format msgid "" "Title of generated catalog used as title in metadata.\n" @@ -18252,7 +18316,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:50 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:49 #, python-format msgid "" "Create cross-references in Authors section for books with multiple authors.\n" @@ -18260,7 +18324,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:57 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:56 #, python-format msgid "" "Save the output from different stages of the conversion pipeline to the specified directory. Useful if you are unsure at which stage of the conversion process a bug is occurring.\n" @@ -18268,7 +18332,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:67 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:66 #, python-format msgid "" "Regex describing tags to exclude as genres.\n" @@ -18276,7 +18340,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:74 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:73 msgid "" "Specifies the rules used to exclude books from the generated catalog.\n" "The model for an exclusion rule is either\n" @@ -18289,7 +18353,7 @@ msgid "" "Default: \n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:87 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:86 #, python-format msgid "" "Include 'Authors' section in catalog.\n" @@ -18297,7 +18361,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:94 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:93 #, python-format msgid "" "Include 'Descriptions' section in catalog.\n" @@ -18305,7 +18369,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:101 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:100 #, python-format msgid "" "Include 'Genres' section in catalog.\n" @@ -18313,7 +18377,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:108 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:107 #, python-format msgid "" "Include 'Titles' section in catalog.\n" @@ -18321,7 +18385,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:115 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:114 #, python-format msgid "" "Include 'Series' section in catalog.\n" @@ -18329,7 +18393,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:122 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:121 #, python-format msgid "" "Include 'Recently Added' section in catalog.\n" @@ -18337,7 +18401,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:129 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:128 #, python-format msgid "" "Source field for Genres section.\n" @@ -18345,7 +18409,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:136 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:135 #, python-format msgid "" "Custom field containing note text to insert in Description header.\n" @@ -18353,7 +18417,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:143 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:142 #, python-format msgid "" "#:[before|after]:[True|False] specifying:\n" @@ -18364,7 +18428,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:153 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:152 #, python-format msgid "" "Specifies the output profile. In some cases, an output profile is required to optimize the catalog for the device. For example, 'kindle' or 'kindle_dx' creates a structured Table of Contents with Sections and Articles.\n" @@ -18372,7 +18436,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:160 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:159 msgid "" "Specifies the rules used to include prefixes indicating read books, wishlist items and other user-specified prefixes.\n" "The model for a prefix rule is ('','','','').\n" @@ -18380,7 +18444,7 @@ msgid "" "Default:\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:169 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:168 #, python-format msgid "" "Use a named preset created with the GUI Catalog builder.\n" @@ -18389,7 +18453,7 @@ msgid "" "Applies to AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:177 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:176 #, python-format msgid "" "Replace existing cover when generating the catalog.\n" @@ -18397,7 +18461,7 @@ msgid "" "Applies to: AZW3, ePub, MOBI output formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:184 +#: /home/kovid/work/calibre/src/calibre/library/catalogs/epub_mobi.py:183 #, python-format msgid "" "Size hint (in inches) for book covers in catalog.\n" @@ -19207,17 +19271,17 @@ msgstr "" msgid " (%s books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3711 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3677 #, python-format msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3740 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3706 #, python-format msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3757 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3723 msgid "Compacting database" msgstr "" diff --git a/src/calibre/translations/uk.po b/src/calibre/translations/uk.po index 3679d88c0f..249281a07e 100644 --- a/src/calibre/translations/uk.po +++ b/src/calibre/translations/uk.po @@ -5574,7 +5574,7 @@ msgstr "" "

Цим інструментом слід користуватися на останньому кроці створення вашої \n" "електронної книги.

\n" "{0}\n" -"

Зауважте, що покращення працює лише для файлів у форматах %s.

\n" +"

Зауважте, що покращення працює лише для файлів у форматах %s.

" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/polish/main.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/actions/polish.py:446 From 6b99cd01c26244d2ca11cf6877200545a18736e3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 14:24:15 +0530 Subject: [PATCH 6/9] When pressing Ctrl+Home/End preserve the horizontal scroll position in the book list --- src/calibre/gui2/library/views.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 2dc84cf240..b7fe690717 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -807,6 +807,14 @@ class BooksView(QTableView): # {{{ sm = self.selectionModel() sm.select(index, sm.ClearAndSelect|sm.Rows) + def keyPressEvent(self, ev): + val = self.horizontalScrollBar().value() + ret = super(BooksView, self).keyPressEvent(ev) + if ev.isAccepted() and ev.key() in (Qt.Key_Home, Qt.Key_End + ) and ev.modifiers() & Qt.ControlModifier: + self.horizontalScrollBar().setValue(val) + return ret + def ids_to_rows(self, ids): row_map = OrderedDict() ids = frozenset(ids) From 2f7a442c63cff12faa62561148ee964f1ab41055 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 17:33:12 +0530 Subject: [PATCH 7/9] Add keyboard shortcuts to focus the book list and clear the virtual library --- manual/gui.rst | 4 ++++ src/calibre/gui2/ui.py | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/manual/gui.rst b/manual/gui.rst index 1bcf53747c..6d75f65542 100755 --- a/manual/gui.rst +++ b/manual/gui.rst @@ -582,6 +582,10 @@ Calibre has several keyboard shortcuts to save you time and mouse movement. Thes - Open the advanced search dialog * - :kbd:`Esc` - Clear the current search + * - :kbd:`Shift+Esc` + - Focus the book list + * - :kbd:`Ctrl+Esc` + - Clear the virtual library * - :kbd:`N or F3` - Find the next book that matches the current search (only works if the highlight checkbox next to the search bar is checked) * - :kbd:`Shift+N or Shift+F3` diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index fa3f24d63e..8a5f1ffbb5 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -265,6 +265,20 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ action=self.esc_action) self.esc_action.triggered.connect(self.esc) + self.shift_esc_action = QAction(self) + self.addAction(self.shift_esc_action) + self.keyboard.register_shortcut('focus book list', + _('Focus the book list'), default_keys=('Shift+Esc',), + action=self.shift_esc_action) + self.shift_esc_action.triggered.connect(self.shift_esc) + + self.ctrl_esc_action = QAction(self) + self.addAction(self.ctrl_esc_action) + self.keyboard.register_shortcut('clear virtual library', + _('Clear the virtual library'), default_keys=('Ctrl+Esc',), + action=self.ctrl_esc_action) + self.ctrl_esc_action.triggered.connect(self.ctrl_esc) + ####################### Start spare job server ######################## QTimer.singleShot(1000, self.add_spare_server) @@ -377,6 +391,13 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ def esc(self, *args): self.clear_button.click() + def shift_esc(self): + self.current_view().setFocus(Qt.OtherFocusReason) + + def ctrl_esc(self): + self.apply_virtual_library() + self.current_view().setFocus(Qt.OtherFocusReason) + def start_smartdevice(self): message = None if self.device_manager.get_option('smartdevice', 'autostart'): From 8e8efd61a99409c5901b42b1327a9125748a0acc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 18:12:19 +0530 Subject: [PATCH 8/9] Txt Input: Use the gbk encoding for txt files with detected encoding of gb2312. Fixes #1175974 (Simplifed Chinese text file charset detection problem: GBK text files detected as GB2312) --- src/calibre/ebooks/conversion/plugins/txt_input.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/conversion/plugins/txt_input.py b/src/calibre/ebooks/conversion/plugins/txt_input.py index 50f1409ea6..046b362ae7 100644 --- a/src/calibre/ebooks/conversion/plugins/txt_input.py +++ b/src/calibre/ebooks/conversion/plugins/txt_input.py @@ -63,7 +63,6 @@ class TXTInput(InputFormatPlugin): normalize_line_endings, convert_textile, remove_indents, block_to_single_line, separate_hard_scene_breaks) - self.log = log txt = '' log.debug('Reading text from file...') @@ -92,6 +91,12 @@ class TXTInput(InputFormatPlugin): log.debug('Using user specified input encoding of %s' % ienc) else: det_encoding = detect(txt) + if det_encoding and det_encoding.lower().replace('_', '-').strip() in ( + 'gb2312', 'chinese', 'csiso58gb231280', 'euc-cn', 'euccn', + 'eucgb2312-cn', 'gb2312-1980', 'gb2312-80', 'iso-ir-58'): + # Microsoft Word exports to HTML with encoding incorrectly set to + # gb2312 instead of gbk. gbk is a superset of gb2312, anyway. + det_encoding = 'gbk' ienc = det_encoding['encoding'] log.debug('Detected input encoding as %s with a confidence of %s%%' % (ienc, det_encoding['confidence'] * 100)) if not ienc: From 42989d47a3317a2b157fa3814c74b98ec93a94e9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 3 May 2013 18:35:49 +0530 Subject: [PATCH 9/9] MOBI metadata: Strip XML unsafe unicode characters when reading metadata from MOBI files. Fixes #1175965 (E-book Viewer: 'NoneType' object is not iterable) --- src/calibre/ebooks/mobi/reader/headers.py | 26 +++++++++++------------ src/calibre/utils/cleantext.py | 8 ++++++- 2 files changed, 20 insertions(+), 14 deletions(-) diff --git a/src/calibre/ebooks/mobi/reader/headers.py b/src/calibre/ebooks/mobi/reader/headers.py index 8e96475e36..b5b55b2ba0 100644 --- a/src/calibre/ebooks/mobi/reader/headers.py +++ b/src/calibre/ebooks/mobi/reader/headers.py @@ -13,12 +13,12 @@ from calibre.utils.date import parse_date from calibre.ebooks.mobi import MobiError from calibre.ebooks.metadata import MetaInformation, check_isbn from calibre.ebooks.mobi.langcodes import main_language, sub_language, mobi2iana -from calibre.utils.cleantext import clean_ascii_chars +from calibre.utils.cleantext import clean_ascii_chars, clean_xml_chars from calibre.utils.localization import canonicalize_lang NULL_INDEX = 0xffffffff -class EXTHHeader(object): # {{{ +class EXTHHeader(object): # {{{ def __init__(self, raw, codec, title): self.doctype = raw[:4] @@ -62,7 +62,7 @@ class EXTHHeader(object): # {{{ elif idx == 502: # last update time pass - elif idx == 503: # Long title + elif idx == 503: # Long title # Amazon seems to regard this as the definitive book title # rather than the title from the PDB header. In fact when # sending MOBI files through Amazon's email service if the @@ -72,7 +72,7 @@ class EXTHHeader(object): # {{{ title = self.decode(content) except: pass - elif idx == 524: # Lang code + elif idx == 524: # Lang code try: lang = content.decode(codec) lang = canonicalize_lang(lang) @@ -83,22 +83,22 @@ class EXTHHeader(object): # {{{ #else: # print 'unknown record', idx, repr(content) if title: - self.mi.title = replace_entities(clean_ascii_chars(title)) + self.mi.title = replace_entities(clean_xml_chars(clean_ascii_chars(title))) def process_metadata(self, idx, content, codec): if idx == 100: if self.mi.is_null('authors'): self.mi.authors = [] - au = self.decode(content).strip() + au = clean_xml_chars(self.decode(content).strip()) self.mi.authors.append(au) if self.mi.is_null('author_sort') and re.match(r'\S+?\s*,\s+\S+', au.strip()): self.mi.author_sort = au.strip() elif idx == 101: - self.mi.publisher = self.decode(content).strip() + self.mi.publisher = clean_xml_chars(self.decode(content).strip()) if self.mi.publisher in {'Unknown', _('Unknown')}: self.mi.publisher = None elif idx == 103: - self.mi.comments = self.decode(content).strip() + self.mi.comments = clean_xml_chars(self.decode(content).strip()) elif idx == 104: raw = check_isbn(self.decode(content).strip().replace('-', '')) if raw: @@ -106,7 +106,7 @@ class EXTHHeader(object): # {{{ elif idx == 105: if not self.mi.tags: self.mi.tags = [] - self.mi.tags.extend([x.strip() for x in self.decode(content).split(';')]) + self.mi.tags.extend([x.strip() for x in clean_xml_chars(self.decode(content)).split(';')]) self.mi.tags = list(set(self.mi.tags)) elif idx == 106: try: @@ -114,8 +114,8 @@ class EXTHHeader(object): # {{{ except: pass elif idx == 108: - self.mi.book_producer = self.decode(content).strip() - elif idx == 112: # dc:source set in some EBSP amazon samples + self.mi.book_producer = clean_xml_chars(self.decode(content).strip()) + elif idx == 112: # dc:source set in some EBSP amazon samples try: content = content.decode(codec).strip() isig = 'urn:isbn:' @@ -131,7 +131,7 @@ class EXTHHeader(object): # {{{ self.mi.application_id = self.mi.uuid = cid except: pass - elif idx == 113: # ASIN or other id + elif idx == 113: # ASIN or other id try: self.uuid = content.decode('ascii') self.mi.set_identifier('mobi-asin', self.uuid) @@ -242,7 +242,7 @@ class BookHeader(object): # if cnt is 1 or less, fdst section number can be garbage if self.fdstcnt <= 1: self.fdstidx = NULL_INDEX - else: # Null values + else: # Null values self.skelidx = self.dividx = self.othidx = self.fdstidx = \ NULL_INDEX diff --git a/src/calibre/utils/cleantext.py b/src/calibre/utils/cleantext.py index 27e667612e..219199815e 100644 --- a/src/calibre/utils/cleantext.py +++ b/src/calibre/utils/cleantext.py @@ -1,9 +1,9 @@ -from __future__ import with_statement __license__ = 'GPL 3' __copyright__ = '2010, sengian ' __docformat__ = 'restructuredtext en' import re, htmlentitydefs +from future_builtins import map _ascii_pat = None @@ -28,6 +28,12 @@ def clean_ascii_chars(txt, charlist=None): pat = re.compile(u'|'.join(map(unichr, charlist))) return pat.sub('', txt) +def clean_xml_chars(unicode_string): + def allowed(x): + x = ord(x) + return (0x0001 < x < 0xd7ff) or (0xe000 < x < 0xfffd) or (0x10000 < x < 0x10ffff) + return u''.join(filter(allowed, unicode_string)) + ## # Fredrik Lundh: http://effbot.org/zone/re-sub.htm#unescape-html # Removes HTML or XML character references and entities from a text string.