From f37f5126a23097e07fba9b08c5c2fde6f1601b0a Mon Sep 17 00:00:00 2001 From: Timothy Legge Date: Wed, 25 Aug 2010 23:17:17 -0300 Subject: [PATCH 01/22] Fix issue where driver does not properly save attributes to metadata.calibre on adding a book --- src/calibre/devices/kobo/driver.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py index 35fceb80f7..88d69a6399 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -320,6 +320,7 @@ class KOBO(USBMS): book = Book(prefix, lpath, '', '', '', '', '', '', other=info) if book.size is None: book.size = os.stat(self.normalize_path(path)).st_size + book._new_book = True # Must be before add_book booklists[blist].add_book(book, replace_metadata=True) self.report_progress(1.0, _('Adding books to device metadata listing...')) From d860d97dce5a3071bc8e6537184fd1f385c2a275 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 27 Aug 2010 12:03:04 -0600 Subject: [PATCH 02/22] IGN:Tag release --- src/calibre/translations/calibre.pot | 1366 ++++++++++++++------------ 1 file changed, 747 insertions(+), 619 deletions(-) diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 37ebba2665..a98ef07a82 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -4,9 +4,9 @@ # msgid "" msgstr "" -"Project-Id-Version: calibre 0.7.15\n" -"POT-Creation-Date: 2010-08-20 13:28+MDT\n" -"PO-Revision-Date: 2010-08-20 13:28+MDT\n" +"Project-Id-Version: calibre 0.7.16\n" +"POT-Creation-Date: 2010-08-27 11:23+MDT\n" +"PO-Revision-Date: 2010-08-27 11:23+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -21,11 +21,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/__init__.py:46 #: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:72 -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:75 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:76 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 -#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:507 +#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:522 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:405 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:97 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:100 @@ -33,15 +33,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:407 #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:70 #: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:72 -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:335 -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:338 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:336 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:339 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1894 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1896 #: /home/kovid/work/calibre/src/calibre/ebooks/lrf/output.py:24 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:236 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:279 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:282 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:398 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:240 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:283 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:286 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:402 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:20 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:21 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36 @@ -98,10 +98,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/split.py:82 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:97 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:98 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:234 -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:236 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:293 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:300 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:247 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:249 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:330 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:289 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:292 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:172 @@ -156,80 +156,97 @@ msgstr "" msgid "File type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:206 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:208 msgid "Metadata reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:235 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:238 msgid "Metadata writer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:263 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:268 msgid "Catalog generator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:359 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:366 msgid "User Interface Action" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:16 +#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:17 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:605 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 +msgid "Preferences" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:17 msgid "Follow all local links in an HTML file and create a ZIP file containing all linked files. This plugin is run every time you add an HTML file to the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:52 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:53 msgid "Character encoding for the input HTML files. Common choices include: cp1252, latin1, iso-8859-1 and utf-8." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:59 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:60 msgid "Create a PMLZ archive containing the PML file and all images in the directory pmlname_img or images. This plugin is run every time you add a PML file to the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:93 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:94 msgid "Extract cover from comic files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:120 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:131 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:143 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:153 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:163 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:174 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:184 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:194 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:204 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:214 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:224 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:235 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:246 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:258 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:279 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:290 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:300 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:310 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:121 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:132 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:144 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:154 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:164 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:175 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:185 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:195 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:205 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:215 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:225 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:236 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:247 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:259 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:280 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:291 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:301 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:311 msgid "Read metadata from %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:269 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:270 msgid "Read metadata from ebooks in RAR archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:321 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:322 msgid "Read metadata from ebooks in ZIP archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:334 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:344 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:354 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:376 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:387 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:397 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:335 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:345 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:355 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:377 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:388 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:398 msgid "Set metadata in %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:365 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:366 msgid "Set metadata from %s files" msgstr "" +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:681 +msgid "Look and Feel" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 +msgid "Interface" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/customize/conversion.py:102 msgid "Conversion Input" msgstr "" @@ -355,35 +372,35 @@ msgstr "" msgid "This profile is intended for the Amazon Kindle DX." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:33 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:34 msgid "Installed plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:34 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:35 msgid "Mapping for filetype plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:35 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:36 msgid "Local plugin customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:36 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:37 msgid "Disabled plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:37 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:38 msgid "Enabled plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:85 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:86 msgid "No valid plugin found in " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:489 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:501 msgid "Initialization of plugin %s failed with traceback:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:522 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:534 msgid "" " %prog options\n" "\n" @@ -391,27 +408,27 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:528 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:540 msgid "Add a plugin by specifying the path to the zip file containing it." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:530 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:542 msgid "Remove a custom plugin by name. Has no effect on builtin plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:532 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:544 msgid "Customize plugin. Specify name of plugin and customization string separated by a comma." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:534 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:546 msgid "List all installed plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:536 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:548 msgid "Enable the named plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/ui.py:538 +#: /home/kovid/work/calibre/src/calibre/customize/ui.py:550 msgid "Disable the named plugin" msgstr "" @@ -614,15 +631,15 @@ msgstr "" msgid "Communicate with the MiBuk Wolder reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:42 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:43 msgid "Communicate with the Kindle eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:169 -msgid "Communicate with the Kindle 2 eBook reader." +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:170 +msgid "Communicate with the Kindle 2/3 eBook reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:210 +#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:211 msgid "Communicate with the Kindle DX eBook reader." msgstr "" @@ -633,7 +650,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:53 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:56 #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:59 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:161 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:170 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:68 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:71 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:74 @@ -643,33 +660,33 @@ msgstr "" msgid "Getting list of books on device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:221 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:265 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:230 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:274 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:253 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:271 msgid "Removing books from device..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:269 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:276 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:278 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:285 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:278 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:283 msgid "Removing books from device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:281 -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:315 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:290 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:324 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:217 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:247 msgid "Adding books to device metadata listing..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:249 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:251 msgid "Not Implemented" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:367 +#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:376 msgid "\".kobo\" files do not exist on the device as books instead, they are rows in the sqlite database. Currently they cannot be exported or viewed." msgstr "" @@ -1382,7 +1399,7 @@ msgstr "" msgid "Start" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:144 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/fb2ml.py:147 #: /home/kovid/work/calibre/src/calibre/ebooks/rb/rbml.py:102 #: /home/kovid/work/calibre/src/calibre/ebooks/txt/txtml.py:77 msgid "Table of Contents:" @@ -1400,19 +1417,23 @@ msgstr "" msgid "Add Table of Contents to beginning of the book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:248 +#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/output.py:24 +msgid "Try to turn chapters into individual sections. WARNING: This option is experimental. It can cause conversion to fail. It can also produce unexpected output." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:249 msgid "Traverse links in HTML files breadth first. Normally, they are traversed depth first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:255 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:256 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/html/input.py:264 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:265 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 of the conversion pipeline." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:272 +#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:273 msgid "Average line length for line breaking if the HTML is from a previous partial conversion of a PDF file. Default is %default which disables this." msgstr "" @@ -1615,7 +1636,7 @@ msgstr "" msgid "Comic" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:397 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:401 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:98 @@ -1628,7 +1649,7 @@ msgstr "" msgid "Title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:398 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:402 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:364 @@ -1636,18 +1657,18 @@ msgstr "" msgid "Author(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:399 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:403 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:72 msgid "Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:400 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:404 #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:49 msgid "Producer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:401 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:405 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:210 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:211 @@ -1659,7 +1680,7 @@ msgstr "" msgid "Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:409 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:413 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:27 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:50 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73 @@ -1669,7 +1690,7 @@ msgstr "" msgid "Tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:411 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:415 #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:26 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:50 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:74 @@ -1679,22 +1700,22 @@ msgstr "" msgid "Series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:412 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:416 msgid "Language" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:414 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:418 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1067 msgid "Timestamp" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:416 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:420 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:70 msgid "Published" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:418 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:422 msgid "Rights" msgstr "" @@ -2278,7 +2299,7 @@ msgstr "" msgid "Specify the character encoding of the output document. The default is cp1252." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:194 +#: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:196 msgid "" "This RTF file has a feature calibre does not support. Convert it to HTML first and then try it.\n" "%s" @@ -2320,254 +2341,258 @@ msgstr "" msgid "Force splitting on the max-line-length value when no space is present. Also allows max-line-length to be below the minimum" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 msgid "Send file to storage card instead of main memory by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67 msgid "Confirm before deleting" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:69 msgid "Main window geometry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:71 msgid "Notify when a new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:73 msgid "Use Roman numerals for series number" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:75 msgid "Sort tags list by name, popularity, or rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:45 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:77 msgid "Number of covers to show in the cover browsing mode" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:79 msgid "Defaults for conversion to LRF" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:81 msgid "Options for the LRF ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:84 msgid "Formats that are viewed using the internal viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:86 msgid "Columns to be displayed in the book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:87 msgid "Automatically launch content server on application startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:88 msgid "Oldest news kept in database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:57 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:89 msgid "Show system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:91 msgid "Upload downloaded news to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:93 msgid "Delete books from library after uploading to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:95 msgid "Show the cover flow in a separate window instead of in the main calibre window" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:97 msgid "Disable notifications from the system tray icon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:99 msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:119 msgid "Maximum number of waiting worker processes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:121 msgid "Download social metadata (tags/rating/etc.)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:123 msgid "Overwrite author and title with new metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:125 msgid "Limit max simultaneous jobs to number of CPUs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:127 msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:129 msgid "The layout of the user interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:131 msgid "Show the average rating per item indication in the tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:133 msgid "Disable UI animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:151 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:181 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:479 msgid "Copied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:215 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:185 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:215 msgid "Copy to Clipboard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:433 msgid "Choose Files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:25 -msgid "A" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:25 msgid "Add books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:30 -msgid "Add books from a single directory" +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:26 +msgid "Add books to the calibre library/device from files on your computer" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:27 +msgid "A" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:32 +msgid "Add books from a single directory" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:34 msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:38 msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:42 msgid "Add Empty book. (Book entry with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:44 msgid "Add from ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:83 msgid "How many empty books?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:84 msgid "How many empty books should be added?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:140 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:198 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:142 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:200 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:159 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:165 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:158 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:160 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:161 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:162 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:163 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:162 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:164 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:165 msgid "Topaz books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:167 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:168 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:169 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:173 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:207 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:209 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:208 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:210 msgid "Some duplicates were found and merged into the following existing books:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:217 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:219 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:220 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:237 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:258 msgid "Add to library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:237 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:239 #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:55 #: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:94 #: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:119 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:252 msgid "The following books are virtual and cannot be added to the calibre library:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:256 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:258 msgid "No book files found" msgstr "" @@ -2575,6 +2600,10 @@ msgstr "" msgid "Add books to library" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add_to_library.py:14 +msgid "Add books to your calibre library from the connected device" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:20 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:499 msgid "Fetch annotations (experimental)" @@ -2591,9 +2620,9 @@ msgid "User annotations generated from main library only" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:86 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:99 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:74 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:140 #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:176 @@ -2631,43 +2660,43 @@ msgid "Location %d • %s
" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:20 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:33 msgid "Create catalog of books in your calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:32 msgid "No books selected to generate catalog for" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:49 msgid "Generating %s catalog..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:54 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:264 msgid "No books found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:55 msgid "" "No books to catalog\n" "Check exclude tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:65 msgid "Catalog generated." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:68 msgid "Export Catalog Directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:69 msgid "Select destination for %s.%s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:73 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:110 msgid "%d books" msgstr "" @@ -2676,34 +2705,34 @@ msgstr "" msgid "Choose calibre library to work with" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:83 msgid "Switch to library..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:91 msgid "Quick switch" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:149 msgid "No library found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:150 msgid "No existing calibre library was found at %s. It will be removed from the list of known libraries." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:187 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:540 msgid "Not allowed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:183 msgid "You cannot change libraries when a device is connected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:188 msgid "You cannot change libraries while jobs are running." msgstr "" @@ -2715,19 +2744,19 @@ msgstr "" msgid "Convert books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:26 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:27 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:29 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:85 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:114 msgid "Starting conversion of %d book(s)" msgstr "" @@ -2739,34 +2768,34 @@ msgstr "" msgid "Copy selected books to the specified library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:98 msgid "Cannot copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103 msgid "No library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:104 msgid "No library found at %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:106 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:111 msgid "Copying" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:121 msgid "Could not copy books: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:121 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:678 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:231 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:234 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:123 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:124 msgid "Copied %d books to %s" msgstr "" @@ -2855,46 +2884,46 @@ msgstr "" msgid "The selected books will be permanently deleted from your device. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:25 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:26 msgid "Connect to folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:31 msgid "Connect to iTunes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:39 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:40 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:48 msgid "Start Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:50 msgid "Stop Content Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:60 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:69 msgid "Email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:69 msgid " and delete from library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:81 msgid "Setup email based sharing of books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:98 msgid "D" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:98 msgid "Send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/device.py:117 msgid "Connect/share" msgstr "" @@ -2902,6 +2931,10 @@ msgstr "" msgid "Manage collections" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_collections.py:14 +msgid "Manage the collections on this device" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:24 msgid "E" msgstr "" @@ -2984,8 +3017,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:608 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:566 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:998 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1001 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:54 msgid "Error" msgstr "" @@ -3056,27 +3089,20 @@ msgstr "" msgid "Ctrl+P" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:17 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:21 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:602 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:201 -msgid "Preferences" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:22 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:23 msgid "Run welcome wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:38 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:34 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/preferences.py:39 msgid "Cannot configure before calibre is restarted." msgstr "" @@ -3152,11 +3178,11 @@ msgstr "" msgid "I" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:24 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:25 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:25 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_book_details.py:26 msgid "No detailed information is available for books on the device." msgstr "" @@ -3260,35 +3286,35 @@ msgstr "" msgid "No books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:328 msgid "Added" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:343 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:341 msgid "Adding failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:344 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:342 msgid "The add books process seems to have hung. Try restarting calibre and adding the books in smaller increments, until you find the problem book." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:357 msgid "Duplicates found!" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:358 msgid "Books with the same title as the following already exist in the database. Add them anyway?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:361 msgid "Adding duplicates..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:427 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:428 msgid "Saving..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/add.py:480 +#: /home/kovid/work/calibre/src/calibre/gui2/add.py:481 msgid "Saved" msgstr "" @@ -3370,26 +3396,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:79 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library_ui.py:72 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:617 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:618 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:630 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:632 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:634 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:620 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:621 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:633 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:635 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:637 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:693 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:103 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:404 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/saved_search_editor_ui.py:90 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories_ui.py:156 @@ -3405,6 +3430,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:143 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:84 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:85 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:80 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:186 @@ -3443,7 +3475,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:118 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:122 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:229 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:312 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:100 msgid "Formats" @@ -3469,7 +3501,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:47 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:73 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:282 msgid "None" msgstr "" @@ -3522,7 +3554,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/debug_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/convert/epub_output_ui.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_input_ui.py:28 -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:31 #: /home/kovid/work/calibre/src/calibre/gui2/convert/look_and_feel_ui.py:119 #: /home/kovid/work/calibre/src/calibre/gui2/convert/lrf_output_ui.py:115 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 @@ -3541,9 +3573,12 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67 #: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:77 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/save_template_ui.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35 #: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:125 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:97 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107 msgid "Form" msgstr "" @@ -3836,13 +3871,17 @@ msgstr "" msgid "FB2 Output" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:32 #: /home/kovid/work/calibre/src/calibre/gui2/convert/pdb_output_ui.py:37 #: /home/kovid/work/calibre/src/calibre/gui2/convert/rb_output_ui.py:29 #: /home/kovid/work/calibre/src/calibre/gui2/convert/txt_output_ui.py:47 msgid "&Inline TOC" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/convert/fb2_output_ui.py:33 +msgid "Sectionize Chapters (Use with care!)" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/convert/font_key_ui.py:99 msgid "Font rescaling wizard" msgstr "" @@ -4077,7 +4116,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:167 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 msgid "Book Cover" msgstr "" @@ -4086,28 +4125,27 @@ msgid "Use cover from &source file" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:401 msgid "Change &cover image:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:170 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 msgid "Browse for an image to use as the cover of this book." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 msgid "&Title: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362 msgid "Change the title of this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:158 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 msgid "&Author(s): " msgstr "" @@ -4120,39 +4158,39 @@ msgid "Change the author(s) of this book. Multiple authors should be separated b msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 msgid "Ta&gs: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 msgid "Tags categorize the book. This is particularly useful while searching.

They can be any words or phrases, separated by commas." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:180 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "&Series:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:180 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:181 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 msgid "List of known series. You can add new series." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:183 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:387 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 msgid "Book " msgstr "" @@ -4626,7 +4664,7 @@ msgid " index:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:451 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 msgid "Automatically number books in this series" msgstr "" @@ -4779,7 +4817,7 @@ msgid "Attached, you will find the e-book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:880 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:180 msgid "by" msgstr "" @@ -5031,247 +5069,255 @@ msgstr "" msgid "Edit Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:173 msgid "%(plugin_type)s %(plugins)s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:174 msgid "plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:183 msgid "" "\n" "Customization: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:197 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:198 msgid "General" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:198 -msgid "Interface" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 msgid "Conversion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 msgid "" "Email\n" "Delivery" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:201 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:202 msgid "Add/Save" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:202 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:203 msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:204 msgid "" "Content\n" "Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:204 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:205 msgid "Plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:229 msgid "Auto send" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:229 msgid "Email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:234 msgid "Formats to email. The first matching format will be sent." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:234 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:235 msgid "If checked, downloaded news will be automatically mailed
to this email address (provided it is in one of the listed formats)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:309 msgid "new email address" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:490 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:491 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:24 msgid "Wide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:491 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:492 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:24 msgid "Narrow" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:50 msgid "Medium" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:508 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:50 msgid "Small" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:509 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:51 msgid "Large" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:54 msgid "Always" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:515 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:54 msgid "Automatic" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:516 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel.py:55 msgid "Never" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:540 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:529 +msgid "Toolbars/Context menus" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:543 msgid "Done" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:541 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:544 msgid "Confirmation dialogs have all been reset" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:546 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:549 msgid "System port selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:547 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:550 msgid "The value %d you have chosen for the content server port is a system port. Your operating system may not allow the server to run on this port. To be safe choose a port number larger than 1024." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:567 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:570 msgid "Failed to install command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:570 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:573 msgid "Command line tools installed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:571 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:574 msgid "Command line tools installed in" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:572 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:575 msgid "If you move calibre.app, you have to re-install the command line tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:626 msgid "No valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:624 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:627 msgid "%s is not a valid plugin path" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:627 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:630 msgid "Choose plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:642 msgid "Plugin cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:643 msgid "The plugin: %s cannot be disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:649 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:652 msgid "Plugin not customizable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:650 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:653 msgid "Plugin: %s does not need customization" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:658 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:661 msgid "Customize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:696 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:699 msgid "Cannot remove builtin plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:697 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:700 msgid " cannot be removed. It is a builtin plugin. Try disabling it instead." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:712 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:715 msgid "Invalid tweaks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:713 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:716 msgid "The tweaks you entered are invalid, try resetting the tweaks to default and changing them one by one until you find the invalid setting." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:743 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:746 msgid "You must select a column to delete it" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:748 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:751 msgid "The selected column is not a custom column" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:752 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:48 msgid "Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:750 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:753 msgid "Do you really want to delete column %s and all its data?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:817 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:820 msgid "Error log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:824 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:827 msgid "Access log:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:852 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:315 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:855 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:319 msgid "Failed to start content server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:880 msgid "Invalid size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:881 msgid "The size %s is invalid. must be of the form widthxheight" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:944 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:947 msgid "Must restart" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:945 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:948 msgid "The changes you made require that Calibre be restarted. Please restart as soon as practical." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:979 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:982 msgid "Checking database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:999 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1002 msgid "Failed to check database integrity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1004 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1007 msgid "Some inconsistencies found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1005 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:1008 msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly." msgstr "" @@ -5386,334 +5432,366 @@ msgstr "" msgid "Sending to &device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:603 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:128 msgid "Show notification when &new version is available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:604 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:607 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:127 msgid "Download &social metadata (tags/ratings/etc.) by default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:605 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:608 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:126 msgid "&Overwrite author and title by default when fetching metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:606 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:609 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:131 msgid "Default network &timeout:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:607 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:610 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:132 msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:608 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:611 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:133 msgid " seconds" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:609 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:612 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:100 msgid "Choose &language (requires restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:610 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:613 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:134 msgid "Normal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:611 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:614 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:135 msgid "High" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:612 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:615 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:136 msgid "Low" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:613 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:616 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:137 msgid "Job &priority:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:614 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:617 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:138 msgid "Preferred &output format:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:615 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:618 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:141 msgid "Reset all disabled &confirmation dialogs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:616 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:619 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:142 msgid "Preferred &input format order:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:619 -msgid "Use &Roman numerals for series number" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:620 -msgid "Enable system &tray icon (needs restart)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:621 -msgid "Show ¬ifications in system tray" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:622 -msgid "Show &splash screen at startup" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:623 -msgid "Show cover &browser in a separate window (needs restart)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:624 -msgid "Show &average ratings in the tags browser" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:625 -msgid "Search as you type" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:626 -msgid "Automatically send downloaded &news to ebook reader" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:627 -msgid "&Delete news from library when it is automatically sent to reader" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:628 -msgid "&Number of covers to show in browse mode (needs restart):" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:629 -msgid "Select visible &columns in library view" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:631 -msgid "Remove a user-defined column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:633 -msgid "Add a user-defined column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:635 -msgid "Edit settings of a user-defined column" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:638 -msgid "Use internal &viewer for:" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:98 msgid "User Interface &layout (needs restart):" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:623 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:99 +msgid "&Number of covers to show in browse mode (needs restart):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:624 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:139 msgid "Restriction to apply when the current library is opened:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:641 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:625 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:140 msgid "Apply this restriction on calibre startup if the current library is being used. Also applied when switching to this library. Note that this setting is per library. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:626 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:102 msgid "Disable all animations. Useful if you have a slow/old computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:627 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:103 msgid "Disable &animations" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:644 -msgid "Show &donate button (restart)" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:628 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:110 msgid "&Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:646 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:629 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:111 msgid "&Icon size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:647 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:630 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:112 msgid "Show &text under icons:" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:631 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:130 +msgid "&Delete news from library when it is automatically sent to reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:632 +msgid "Select visible &columns in library view" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:634 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:79 +msgid "Remove a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:636 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:81 +msgid "Add a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:638 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:83 +msgid "Edit settings of a user-defined column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:641 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:145 +msgid "Use internal &viewer for:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:642 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:109 +msgid "Search as you type" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:643 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:107 +msgid "Use &Roman numerals for series" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:644 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:104 +msgid "Enable system &tray icon (needs restart)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:645 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:101 +msgid "Show &average ratings in the tags browser" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:646 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/behavior_ui.py:129 +msgid "Automatically send downloaded &news to ebook reader" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:647 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:105 +msgid "Show &splash screen at startup" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:648 -msgid "Add an email address to which to send books" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:108 +msgid "Show cover &browser in a separate window (needs restart)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:649 -msgid "&Add email" +msgid "Show ¬ifications in system tray" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:650 -msgid "Make &default" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:651 -msgid "&Remove email" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:652 -msgid "calibre can send your books to you (or your reader) by email. Emails will be automatically sent for downloaded news to all email addresses that have Auto-send checked." -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:653 -msgid "&Maximum number of waiting worker processes (needs restart):" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:654 -msgid "Limit the max. simultaneous jobs to the available CPU &cores" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:655 -msgid "Debug &device detection" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:656 -msgid "&Check database integrity" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:657 -msgid "Open calibre &configuration directory" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:658 -msgid "&Install command line tools" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:659 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:662 msgid "&Miscellaneous" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:651 +msgid "Add an email address to which to send books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:652 +msgid "&Add email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:653 +msgid "Make &default" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:654 +msgid "&Remove email" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:655 +msgid "calibre can send your books to you (or your reader) by email. Emails will be automatically sent for downloaded news to all email addresses that have Auto-send checked." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:656 +msgid "&Maximum number of waiting worker processes (needs restart):" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:657 +msgid "Limit the max. simultaneous jobs to the available CPU &cores" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:658 +msgid "Debug &device detection" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:659 +msgid "&Check database integrity" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:660 -msgid "Values for the tweaks are shown below. Edit them to change the behavior of calibre" +msgid "Open calibre &configuration directory" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:661 -msgid "All available tweaks" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:662 -msgid "&Current tweaks" +msgid "&Install command line tools" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:663 -msgid "&Restore to defaults" +msgid "Values for the tweaks are shown below. Edit them to change the behavior of calibre" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:664 -msgid "&Tweaks" +msgid "All available tweaks" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:665 -msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart." +msgid "&Current tweaks" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:666 -msgid "Server &port:" +msgid "&Restore to defaults" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:667 +msgid "&Tweaks" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:668 +msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:669 +msgid "Server &port:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:670 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117 msgid "&Username:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:668 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:671 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:213 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119 msgid "&Password:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:669 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:672 msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:670 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:673 msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:674 msgid "Max. &cover size:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:672 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:675 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:214 msgid "&Show password" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:673 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:676 msgid "Max. &OPDS items per query:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:674 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:677 msgid "Max. OPDS &ungrouped items:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:675 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:678 msgid "Restriction (saved search) to apply:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:676 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:679 msgid "This restriction (based on a saved search) will restrict the books the content server makes available to those matching the search. This setting is per library (i.e. you can have a different restriction per library)." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:677 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:680 msgid "&Start Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:678 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:681 msgid "St&op Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:679 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:682 msgid "&Test Server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:680 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:683 msgid "Run server &automatically on startup" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:681 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:684 msgid "View &server logs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:682 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:685 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46 msgid "" "

Remember to leave calibre running as the server only runs as long as calibre is running.\n" "

Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:684 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:687 msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:685 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:688 msgid "Enable/&Disable plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:689 msgid "&Customize plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:687 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:690 msgid "&Remove plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:688 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:691 msgid "Add new plugin" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:689 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:692 msgid "Plugin &file:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:691 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:694 msgid "&Add" msgstr "" @@ -5965,63 +6043,87 @@ msgstr "" msgid "Downloading social metadata, please wait..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:50 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:35 +msgid "Switch between library and device views" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:38 msgid "Separator" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:51 msgid "Choose library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:201 msgid "The main toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:114 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:202 msgid "The main toolbar when a device is connected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:203 msgid "The context menu for the books in the calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:205 msgid "The context menu for the books on the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:94 -msgid "Customize the actions in:" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:243 +msgid "Cannot add" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:95 -msgid "A&vailable actions" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:244 +msgid "Cannot add the actions %s to this location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:96 -msgid "&Current actions" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:261 +msgid "Cannot remove" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar.py:262 +msgid "Cannot remove the actions %s from this location" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:97 -msgid "Move selected action up" +msgid "Customize the actions in:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:98 +msgid "A&vailable actions" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:99 +msgid "&Current actions" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:100 +msgid "Move selected action up" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102 msgid "Move selected action down" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor_ui.py:78 msgid "Ctrl+S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:105 msgid "Add selected actions to toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:107 msgid "Remove selected actions from toolbar" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/toolbar_ui.py:109 +msgid "Restore to &default" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:50 msgid "&Show this warning again" msgstr "" @@ -6172,76 +6274,84 @@ msgstr "" msgid "Editing meta information for %d books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:225 msgid "Applying changes to %d books. This may take a while." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 msgid "Edit Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:159 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 msgid "A&utomatically set author sort" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:160 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 msgid "Author s&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:161 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 msgid "Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:162 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 msgid "&Rating:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:163 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:164 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 msgid "Rating of this book. 0-5 stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 msgid "No change" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:169 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 msgid " stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 msgid "Add ta&gs: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:170 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "Open Tag Editor" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:172 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:175 msgid "&Remove tags:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:173 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:176 msgid "Comma separated list of tags to remove from the books. " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:177 -msgid "Remove &format:" +msgid "Remove all" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:178 +msgid "Check this box to remove all tags from the books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:182 +msgid "Remove &format:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:183 msgid "&Swap title and author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 msgid "" "Selected books will be automatically numbered,\n" "in the order you selected them.\n" @@ -6249,24 +6359,24 @@ msgid "" "Book A will have series number 1 and Book B series number 2." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:184 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 msgid "" "Remove stored conversion settings for the selected books.\n" "\n" "Future conversion of these books will use the default settings." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:192 msgid "Remove &stored conversion settings for the selected books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:188 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 msgid "&Basic metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:189 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:194 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 msgid "&Custom metadata" msgstr "" @@ -6406,87 +6516,91 @@ msgstr "" msgid "Could not open %s. Is it being used by another program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 msgid "Edit Meta Information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:360 msgid "Meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:363 msgid "Swap the author and title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 msgid "Automatically create the author sort entry based on the current author entry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:384 msgid "IS&BN:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:385 msgid "Publishe&d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:388 msgid "dd MMM yyyy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:389 msgid "&Date:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:390 msgid "&Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:392 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:391 msgid "&Fetch metadata from server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:392 msgid "Available Formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:393 msgid "Add a new format for this book to the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:396 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:395 msgid "Remove the selected formats for this book from the database." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:398 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:397 msgid "Set the cover for the book from the selected format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:399 msgid "Update metadata from the metadata in the selected format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:402 +msgid "&Browse" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:403 msgid "Reset cover to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:405 msgid "Download &cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:408 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:406 msgid "Generate a default cover based on the title and author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:409 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:407 msgid "&Generate cover" msgstr "" @@ -7184,48 +7298,48 @@ msgstr "" msgid "Regular expression (?P)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:105 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:97 msgid "Cover Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:110 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:102 msgid "Shift+Alt+B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:116 msgid "Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:126 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:118 msgid "Shift+Alt+T" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:138 msgid "version" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:139 msgid "created by Kovid Goyal" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:157 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:166 msgid "Update found" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:218 -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:210 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220 msgid "Book Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:212 msgid "Alt+D" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/init.py:230 +#: /home/kovid/work/calibre/src/calibre/gui2/init.py:222 msgid "Shift+Alt+D" msgstr "" @@ -7292,74 +7406,74 @@ msgstr "" msgid " - Jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:53 msgid "Eject this device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:62 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:194 msgid "Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:63 msgid "Show books in calibre library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:77 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:64 msgid "Reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:78 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:65 msgid "Show books in the main memory of the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:79 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:66 #: /home/kovid/work/calibre/src/calibre/library/database2.py:598 msgid "Card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:67 msgid "Show books in storage card A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:68 #: /home/kovid/work/calibre/src/calibre/library/database2.py:600 msgid "Card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:82 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:69 msgid "Show books in storage card B" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:121 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:109 msgid "available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:140 msgid "Books display will be restricted to those matching the selected saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:153 msgid "Advanced search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:174 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:162 msgid "

Search the list of books by title, author, publisher, tags, comments, etc.

Words separated by spaces are ANDed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:181 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:169 msgid "Reset Quick Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:181 msgid "Copy current search text (instead of search name)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:199 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:187 msgid "Save current search under the name shown in the box" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:205 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:193 msgid "Delete current saved search" msgstr "" @@ -7664,9 +7778,23 @@ msgstr "" msgid "No matches found for this book" msgstr "" +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:77 +msgid "Here you can re-arrange the layout of the columns in the calibre library book list. You can hide columns by unchecking them. You can also create your own, custom columns." +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:86 +msgid "Add &custom column" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:106 +msgid "Disable ¬ifications in system tray" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:94 #: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:255 -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:554 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:562 msgid "Search" msgstr "" @@ -7881,59 +8009,59 @@ msgstr "" msgid "The following books have already been converted to %s format. Do you wish to reconvert them?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:165 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:167 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:169 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:171 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:173 msgid "&Eject connected device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:212 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:215 msgid "Calibre Quick Start Guide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:441 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:417 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:445 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:414 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:418 msgid "

Could not convert: %s

It is a DRMed book. You must first remove the DRM using third party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:427 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:431 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:442 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:446 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:478 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:482 msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development. Your donation helps keep calibre development going." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:508 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:507 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:511 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:511 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:515 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:569 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:573 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" @@ -8401,47 +8529,47 @@ msgstr "" msgid "Print eBook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:246 msgid "Copy Image" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:247 msgid "Paste Image" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:372 msgid "Change Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:373 msgid "Upper Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:374 msgid "Lower Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:375 msgid "Swap Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:376 msgid "Title Case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:838 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:846 msgid "Drag to resize" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:873 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:881 msgid "Show" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:880 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:888 msgid "Hide" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:917 +#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:925 msgid "Toggle" msgstr "" @@ -9472,63 +9600,63 @@ msgstr "" msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:663 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:696 msgid "Path to the database in which books are stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:665 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:698 msgid "Pattern to guess metadata from filenames" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:667 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:700 msgid "Access key for isbndb.com" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:669 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:702 msgid "Default timeout for network operations (seconds)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:671 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:704 msgid "Path to directory in which your library of books is stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:673 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:706 msgid "The language in which to display the user interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:675 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:708 msgid "The default output format for ebook conversions." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:679 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:712 msgid "Ordered list of formats to prefer for input." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:681 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:714 msgid "Read metadata from files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:683 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:716 msgid "The priority of worker processes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:685 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:718 msgid "Swap author first and last names when reading metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:687 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:720 msgid "Add new formats to existing book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:692 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:725 msgid "List of named saved searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:693 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:726 msgid "User-created tag browser categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:695 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:728 msgid "How and when calibre updates metadata on the device." msgstr "" From c7a9412747f0eba4a3a1655b73ff4c08f86298d0 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 27 Aug 2010 12:06:29 -0600 Subject: [PATCH 03/22] Europa Sur by DM --- resources/recipes/europasur.recipe | 68 ++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 resources/recipes/europasur.recipe diff --git a/resources/recipes/europasur.recipe b/resources/recipes/europasur.recipe new file mode 100644 index 0000000000..3179c83234 --- /dev/null +++ b/resources/recipes/europasur.recipe @@ -0,0 +1,68 @@ + +__license__ = 'GPL v3' +__copyright__ = '2010, Darko Miletic ' +''' +europasur.es +''' + +from calibre.web.feeds.news import BasicNewsRecipe + +class Europasur(BasicNewsRecipe): + title = 'Europa Sur' + __author__ = 'Darko Miletic' + description = 'News in Spanish' + publisher = 'Joly Digital' + category = 'news, politics, Spanish' + oldest_article = 2 + max_articles_per_feed = 100 + use_embedded_content = False + remove_empty_feeds = True + delay = 2 + no_stylesheets = True + encoding = 'cp1252' + language = 'es_ES' + publication_type = 'newspaper' + extra_css = """ body{font-family: Verdana,Arial,Helvetica,sans-serif} + h2{font-family: Georgia,Times New Roman,Times,serif} + .subtitle{font-weight:bold} + .caption{font-size: small} + .body{font-size: 1.1em} + .info{color: #848484} + """ + + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher': publisher + , 'language' : language + } + + keep_only_tags = [ + dict(attrs={'class':['titles','current']}) + ,dict(attrs={'id':'newsBody'}) + ] + remove_tags = [ + dict(name=['iframe','base','embed','object']) + ,dict(name='a', attrs={'class':'zoom thickbox'}) + ,dict(name='div', attrs={'class':'other'}) + ] + remove_attributes = ['width','height'] + + feeds = [ + (u'Portada', u'http://www.europasur.es/rss/articles.php') + ,(u'Deportes', u'http://www.europasur.es/rss/articles.php?sec=1224') + ,(u'Economia', u'http://www.europasur.es/rss/articles.php?sec=427') + ,(u'Espana', u'http://www.europasur.es/rss/articles.php?sec=437') + ,(u'Mundo', u'http://www.europasur.es/rss/articles.php?sec=428') + ,(u'Pasarela', u'http://www.europasur.es/rss/articles.php?sec=1958') + ,(u'Ocio y cultura', u'http://www.europasur.es/rss/articles.php?sec=1210') + ,(u'Opinion', u'http://www.europasur.es/rss/articles.php?sec=1195') + ,(u'Tecnologia', u'http://www.europasur.es/rss/articles.php?sec=1681') + ,(u'Salud', u'http://www.europasur.es/rss/articles.php?sec=2379') + ] + + def image_url_processor(self, baseurl, url): + artl, sep, width = url.rpartition('&an=') + artid, sep, ext = artl.rpartition('.') + article_id = artid.rpartition('/')[2] + return 'http://media.grupojoly.com/cache/' + article_id + '_' + width + 'x' + width + '_' + ext + '000.' + ext From 7c8ab0051ac37c4ca062f62abfa62e3cba5e94c1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 27 Aug 2010 12:13:39 -0600 Subject: [PATCH 04/22] ... --- Changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Changelog.yaml b/Changelog.yaml index 34beb86956..4ff8ebf7fb 100644 --- a/Changelog.yaml +++ b/Changelog.yaml @@ -45,7 +45,7 @@ - title: "SONY driver: Use the tz field (available in newer readers) to set timestamps correctly, when available." - title: "Shortening file paths: Handle the case of very long filenames with periods in them." - title: [6566] + tickets: [6566] new recipes: - title: "The TMZ and Atlanta Journal Constitution" From c2ecaf1fb7fa12d5cd505a40607d5e201ea397af Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 27 Aug 2010 20:08:11 -0600 Subject: [PATCH 05/22] Marietta Daily Journal by Tony Stegall --- resources/recipes/mdj.recipe | 50 ++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 resources/recipes/mdj.recipe diff --git a/resources/recipes/mdj.recipe b/resources/recipes/mdj.recipe new file mode 100644 index 0000000000..b7a5fe0d63 --- /dev/null +++ b/resources/recipes/mdj.recipe @@ -0,0 +1,50 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1282101454(BasicNewsRecipe): + title = 'Marietta Daily Journal' + __author__ = 'Tony Stegall' + language = 'en' + description = 'Marietta Ga and Metro Atlanta News' + publisher = 'MDJ' + category = 'news,politics,Georgia,USA' + oldest_article = 1 + max_articles_per_feed = 100 + no_stylesheets = True + remove_javascript = True + + masthead_url = 'http://assets.matchbin.com/sites/624/assets/logo.gif' + + + keep_only_tags = [ + dict(name='div', attrs={'id':['print_content_container']}) + + ] + + + feeds = [ + ('Local News', 'http://mdjonline.com/rss/rss/Local+News?content_type=article&tags=news&page_name=rss&tag_inclusion=or&offset=0&limit=10&instance=Local+News'), + ('Sports', 'http://mdjonline.com/rss/rss/Sports?content_type=article&tags=sports&page_name=rss&tag_inclusion=or&offset=0&limit=10&instance=Sports'), + ('Obits', 'http://mdjonline.com/rss/rss/Obits?content_type=article&tags=obits&page_name=rss&tag_inclusion=or&offset=0&limit=20&instance=Obits'), + ('Editorial & oped', 'http://mdjonline.com/rss/rss/Editorial+and+OPED?content_type=article&tags=oped+editorial&page_name=rss&tag_inclusion=or&offset=0&limit=10&instance=Editorial+and+OPED'), + ('Lifestyle', 'http://mdjonline.com/rss/rss/Lifestyle?content_type=article&tags=lifestyle&page_name=rss&tag_inclusion=or&offset=0&limit=10&instance=Lifestyle'), + ('Blogs', 'http://mdjonline.com/rss/rss/Lifestyle?content_type=article&tags=lifestyle&page_name=rss&tag_inclusion=or&offset=0&limit=10&instance=Lifestyle') + ] + + def print_version(self, url): + split1 = url.split("/") + artid = split1[4] + + #example of link to convert + #Original link: http://mdjonline.com/bookmark/9274197 + #print version: http://mdjonline.com/printer_friendly/9274197 + + print_url = 'http://mdjonline.com/printer_friendly/' + artid + return print_url + + #test with ebook-convert nejm.recipe output_dir --test -vv > myrecipe.txt + + + + + + From 6831e6e53f9af56ff50465b07649b0e74fd08c86 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 27 Aug 2010 22:23:30 -0600 Subject: [PATCH 06/22] West Hawaii Today by Tony Stegall --- resources/recipes/hawaii.recipe | 55 +++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 resources/recipes/hawaii.recipe diff --git a/resources/recipes/hawaii.recipe b/resources/recipes/hawaii.recipe new file mode 100644 index 0000000000..30a2b26def --- /dev/null +++ b/resources/recipes/hawaii.recipe @@ -0,0 +1,55 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class AdvancedUserRecipe1282101454(BasicNewsRecipe): + title = 'West Hawaii Today' + language = 'en' + __author__ = 'Tony Stegall' + description = 'Westhawaiitoday.com' + publisher = 'West Hawaii ' + category = 'news,Hawaii,USA' + oldest_article = 7 + max_articles_per_feed = 100 + no_stylesheets = True + remove_javascript = True + + masthead_url = 'http://images.townnews.com/westhawaiitoday.com/art/whttoplogo.gif' + + + + + + feeds = [ + ('Local News', 'http://www.westhawaiitoday.com/?rss=local/'), + ('Local Sports', 'http://www.westhawaiitoday.com/?rss=sports/local_sports/'), + ('Big Fish List', 'http://www.westhawaiitoday.com/?rss=sports/big_fish_list/'), + ('Local Features' 'http://www.westhawaiitoday.com/?rss=features/'), + ('Obituaries', 'http://www.westhawaiitoday.com/?rss=obituaries/'), + ('Letters To Editor', 'http://www.westhawaiitoday.com/?rss=opinion/letters_-_your_voice/'), + ('Editorial', 'http://www.westhawaiitoday.com/?rss=opinion/editorial/'), + ('Columns', 'http://www.westhawaiitoday.com/?rss=opinion/columns/'), + ('Volcano Update Sunday', 'http://www.westhawaiitoday.com/?rss=volcano/') + ] + + def print_version(self, url): + split1 = url.split("//") + url1 = split1[1] + xxx = split1[2] + split2 = xxx.split(".") + artid = split2[0] + print 'ARTICLE ID IS: ', artid + + #example of link to convert + #Original link: http://www.westhawaiitoday.com/articles/2010/08/27/local//local01.txt + #print version: http://www.westhawaiitoday.com/articles/2010/08/27/local//local01.prt + + print_url = 'http://' + url1 + '//' + artid + '.prt' + print 'print_url is: ', print_url + return print_url + + #test with ebook-convert hawaii.recipe output_dir --test -vv > myrecipe.txt + + + + + + From 1f922ddb5a55272d15b5f6c0aff2eb25bd303421 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 27 Aug 2010 22:32:41 -0600 Subject: [PATCH 07/22] Fix bug in HTML Input plugin preprocess code when it is called before __call__ --- src/calibre/ebooks/html/input.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/calibre/ebooks/html/input.py b/src/calibre/ebooks/html/input.py index 51c74228b7..d57bfddd3e 100644 --- a/src/calibre/ebooks/html/input.py +++ b/src/calibre/ebooks/html/input.py @@ -491,6 +491,9 @@ class HTMLInput(InputFormatPlugin): return (None, raw) def preprocess_html(self, html): + if not hasattr(self, 'log'): + from calibre.utils.logging import default_log + self.log = default_log self.log("********* Preprocessing HTML *********") # Detect Chapters to match the xpath in the GUI chapdetect = re.compile(r'(?=]*>)?\s*(?P(<(i|b)><(i|b)>|<(i|b)>)?(.?Chapter|Epilogue|Prologue|Book|Part|Dedication)\s*([\d\w-]+(\s\w+)?)?(|)?)(]*>)', re.IGNORECASE) From 0dc1e4cc33c474d840223e30e11df863524faac4 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 28 Aug 2010 11:38:26 -0600 Subject: [PATCH 08/22] Change similar books series shortcut to Alt+Shift+S. Fixes #6630 (Problem with 'Similar books' options in v7.15) --- src/calibre/gui2/actions/similar_books.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/actions/similar_books.py b/src/calibre/gui2/actions/similar_books.py index af350835a9..c36eb4915b 100644 --- a/src/calibre/gui2/actions/similar_books.py +++ b/src/calibre/gui2/actions/similar_books.py @@ -21,7 +21,8 @@ class SimilarBooksAction(InterfaceAction): m = QMenu(self.gui) for text, icon, target, shortcut in [ (_('Books by same author'), 'user_profile.svg', 'authors', _('Alt+A')), - (_('Books in this series'), 'books_in_series.svg', 'series', _('Alt+S')), + (_('Books in this series'), 'books_in_series.svg', 'series', + _('Alt+Shift+S')), (_('Books by this publisher'), 'publisher.png', 'publisher', _('Alt+P')), (_('Books with the same tags'), 'tags.svg', 'tag', _('Alt+T')),]: ac = self.create_action(spec=(text, icon, None, shortcut), From 14380349ec89280dbeb795dc3d3a082cc18e3d3b Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 29 Aug 2010 08:30:00 -0600 Subject: [PATCH 09/22] Fix #6649 (Ebook viewer final page formatting breaks due to long URL) --- src/calibre/web/feeds/templates.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/web/feeds/templates.py b/src/calibre/web/feeds/templates.py index eb31b541e8..e23b8dda1b 100644 --- a/src/calibre/web/feeds/templates.py +++ b/src/calibre/web/feeds/templates.py @@ -195,7 +195,8 @@ class NavBarTemplate(Template): if bottom: navbar.append(HR()) text = 'This article was downloaded by ' - p = PT(text, STRONG(__appname__), A(url, href=url), style='text-align:left') + p = PT(text, STRONG(__appname__), A(url, href=url), + style='text-align:left; max-width: 100%; overflow: hidden;') p[0].tail = ' from ' navbar.append(p) navbar.append(BR()) From df74c23bda25b2754dd7371d79d77d7353532881 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Sun, 29 Aug 2010 18:15:15 +0100 Subject: [PATCH 10/22] Add search capability for series and series_index, custom and non-custom --- src/calibre/library/database2.py | 6 +++++- src/calibre/library/field_metadata.py | 16 ++++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py index ef74188bdf..ba4095fbc5 100644 --- a/src/calibre/library/database2.py +++ b/src/calibre/library/database2.py @@ -264,7 +264,11 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns): # account for the series index column. Field_metadata knows that # the series index is one larger than the series. If you change # it here, be sure to change it there as well. - self.FIELD_MAP[str(col)+'_s_index'] = base = base+1 + self.FIELD_MAP[str(col)+'_index'] = base = base+1 + self.field_metadata.set_field_record_index( + self.custom_column_num_map[col]['label']+'_index', + base, + prefer_custom=True) self.FIELD_MAP['cover'] = base+1 self.field_metadata.set_field_record_index('cover', base+1, prefer_custom=False) diff --git a/src/calibre/library/field_metadata.py b/src/calibre/library/field_metadata.py index f29b432eec..2a79c3a75b 100644 --- a/src/calibre/library/field_metadata.py +++ b/src/calibre/library/field_metadata.py @@ -36,7 +36,7 @@ class FieldMetadata(dict): treated as a single term. If not None, it contains a string, and the field is assumed to contain a list of terms separated by that string - kind == standard: is a db field. + kind == field: is a db field. kind == category: standard tag category that isn't a field. see news. kind == user: user-defined tag category. kind == search: saved-searches category. @@ -239,7 +239,7 @@ class FieldMetadata(dict): 'is_multiple':None, 'kind':'field', 'name':None, - 'search_terms':[], + 'search_terms':['series_index'], 'is_custom':False, 'is_category':False}), ('sort', {'table':None, @@ -395,6 +395,18 @@ class FieldMetadata(dict): 'is_editable': is_editable,} self._add_search_terms_to_map(key, [key]) self.custom_label_to_key_map[label] = key + if datatype == 'series': + key += '_index' + self._tb_cats[key] = {'table':None, 'column':None, + 'datatype':'float', 'is_multiple':False, + 'kind':'field', 'name':'', + 'search_terms':[key], 'label':label+'_index', + 'colnum':None, 'display':{}, + 'is_custom':False, 'is_category':False, + 'link_column':None, 'category_sort':None, + 'is_editable': False,} + self._add_search_terms_to_map(key, [key]) + self.custom_label_to_key_map[label+'_index'] = key def remove_custom_fields(self): for key in self.get_custom_fields(): From 38d3be5cabdeed9a845cf5f8a925dc8a13db4b20 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 29 Aug 2010 12:39:20 -0600 Subject: [PATCH 11/22] News download: Don't add downloaded from link when the download is from a temp file. Also fix Slate --- resources/recipes/slate.recipe | 1 - src/calibre/web/feeds/templates.py | 15 ++++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/recipes/slate.recipe b/resources/recipes/slate.recipe index 07ed89d0f4..c03255d2df 100644 --- a/resources/recipes/slate.recipe +++ b/resources/recipes/slate.recipe @@ -102,7 +102,6 @@ class PeriodicalNameHere(BasicNewsRecipe): todays_section = soup.find(True, attrs={'class':'todaydateline'}) self.section_dates.append(self.tag_to_string(todays_section,use_alt=False)) - self.section_dates.append(self.tag_to_string(todays_section,use_alt=False)) older_section_dates = soup.findAll(True, attrs={'class':'maindateline'}) for older_section in older_section_dates : diff --git a/src/calibre/web/feeds/templates.py b/src/calibre/web/feeds/templates.py index e23b8dda1b..6e8168be31 100644 --- a/src/calibre/web/feeds/templates.py +++ b/src/calibre/web/feeds/templates.py @@ -193,13 +193,14 @@ class NavBarTemplate(Template): navbar = DIV(CLASS('calibre_navbar', 'calibre_rescale_70', style='text-align:'+align)) if bottom: - navbar.append(HR()) - text = 'This article was downloaded by ' - p = PT(text, STRONG(__appname__), A(url, href=url), - style='text-align:left; max-width: 100%; overflow: hidden;') - p[0].tail = ' from ' - navbar.append(p) - navbar.append(BR()) + if not url.startswith('file://'): + navbar.append(HR()) + text = 'This article was downloaded by ' + p = PT(text, STRONG(__appname__), A(url, href=url), + style='text-align:left; max-width: 100%; overflow: hidden;') + p[0].tail = ' from ' + navbar.append(p) + navbar.append(BR()) navbar.append(BR()) else: next = 'feed_%d'%(feed+1) if art == number_of_articles_in_feed - 1 \ From 0f4513457844501978dd2be8f60495dfdf49b203 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Mon, 30 Aug 2010 12:04:29 +0100 Subject: [PATCH 12/22] Changes to FAQ for series indices. Change custom column editor to not permit names ending with _index. This uses a hammer to solve the problem of series index names conflicting with another column name. --- .../dialogs/config/create_custom_column.py | 2 ++ src/calibre/manual/gui.rst | 24 ++++++++++++------- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/calibre/gui2/dialogs/config/create_custom_column.py b/src/calibre/gui2/dialogs/config/create_custom_column.py index fdf093b6d5..c0f17b8cba 100644 --- a/src/calibre/gui2/dialogs/config/create_custom_column.py +++ b/src/calibre/gui2/dialogs/config/create_custom_column.py @@ -105,6 +105,8 @@ class CreateCustomColumn(QDialog, Ui_QCreateCustomColumn): return self.simple_error('', _('No lookup name was provided')) if re.match('^\w*$', col) is None or not col[0].isalpha() or col.lower() != col: return self.simple_error('', _('The lookup name must contain only lower case letters, digits and underscores, and start with a letter')) + if col.endswith('_index'): + return self.simple_error('', _('Lookup names cannot end with _index, because these names are reserved for the index of a series column.')) col_heading = unicode(self.column_heading_box.text()) col_type = self.column_types[self.column_type_box.currentIndex()]['datatype'] if col_type == '*text': diff --git a/src/calibre/manual/gui.rst b/src/calibre/manual/gui.rst index 7ffc77575e..a2032f3071 100644 --- a/src/calibre/manual/gui.rst +++ b/src/calibre/manual/gui.rst @@ -212,9 +212,10 @@ metadata. You can build advanced search queries easily using the :guilabel:`Advanced Search Dialog`, accessed by clicking the button |sbi|. -Available fields for searching are: ``tag, title, author, publisher, series, rating, cover, comments, format, -isbn, date, pubdate, search, size`` and custom columns. If a device is plugged in, the ``ondevice`` field -becomes available. To find the search name for a custom column, hover your mouse over the column header. +Available fields for searching are: ``tag, title, author, publisher, series, series_index, rating, cover, +comments, format, isbn, date, pubdate, search, size`` and custom columns. If a device is plugged in, the +``ondevice`` field becomes available. To find the search name for a custom column, hover your mouse over the +column header. The syntax for searching for dates is:: @@ -223,9 +224,8 @@ The syntax for searching for dates is:: pubdate:=2009 Will find all books published in 2009 If the date is ambiguous, the current locale is used for date comparison. For example, in an mm/dd/yyyy -locale, 2/1/2009 is interpreted as 1 Feb 2009. In a dd/mm/yyyy locale, it is interpreted as 2 Jan 2009. - -Some special date strings are available. The string ``today`` translates to today's date, whatever it is. The +locale, 2/1/2009 is interpreted as 1 Feb 2009. In a dd/mm/yyyy locale, it is interpreted as 2 Jan 2009. Some +special date strings are available. The string ``today`` translates to today's date, whatever it is. The strings `yesterday`` and ``thismonth`` also work. In addition, the string ``daysago`` can be used to compare to a date some number of days ago, for example: date:>10daysago, date:<=45daysago. @@ -234,9 +234,15 @@ You can search for books that have a format of a certain size like this:: size:>1.1M Will find books with a format larger than 1.1MB size:<=1K Will find books with a format smaller than 1KB -Dates and numeric fields support the operators ``=`` (equals), ``>`` (greater than), ``>=`` (greater than or -equal to), ``<`` (less than), ``<=`` (less than or equal to), and ``!=`` (not equal to). Rating fields are -considered to be numeric. For example, the search ``rating:>=3`` will find all books rated 3 or higher. +Dates and numeric fields support the relational operators ``=`` (equals), ``>`` (greater than), ``>=`` +(greater than or equal to), ``<`` (less than), ``<=`` (less than or equal to), and ``!=`` (not equal to). +Rating fields are considered to be numeric. For example, the search ``rating:>=3`` will find all books rated 3 +or higher. + +Series indices are searchable. For the standard series, the search name is 'series_index'. For +custom series columns, use the column search name followed by _index. For example, to search the indices for a +custom series column named ``#my_series``, you would use the search name ``#my_series_index``. +Series indices are numbers, so you can use the relational operators described above. The special field ``search`` is used for saved searches. So if you save a search with the name "My spouse's books" you can enter ``search:"My spouse's books"`` in the search bar to reuse the saved From 5270022152436b8cf3574b9d14c1b4717851a9e5 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 30 Aug 2010 08:41:42 -0600 Subject: [PATCH 13/22] Fix #6672 (no write access to ~/.config/calibre) --- src/calibre/constants.py | 9 ++++++++- src/calibre/utils/config.py | 4 +--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/calibre/constants.py b/src/calibre/constants.py index 6ecdf93084..49ce83864e 100644 --- a/src/calibre/constants.py +++ b/src/calibre/constants.py @@ -84,6 +84,9 @@ if plugins is None: # }}} # config_dir {{{ + +CONFIG_DIR_MODE = 0700 + if os.environ.has_key('CALIBRE_CONFIG_DIRECTORY'): config_dir = os.path.abspath(os.environ['CALIBRE_CONFIG_DIRECTORY']) elif iswindows: @@ -98,7 +101,11 @@ elif isosx: else: bdir = os.path.abspath(os.path.expanduser(os.environ.get('XDG_CONFIG_HOME', '~/.config'))) config_dir = os.path.join(bdir, 'calibre') - if not os.access(config_dir, os.W_OK): + try: + os.makedirs(config_dir, mode=CONFIG_DIR_MODE) + except: + pass + if not os.access(config_dir, os.W_OK) or not os.access(config_dir, os.X_OK): print 'No write acces to', config_dir, 'using a temporary dir instead' import tempfile, atexit config_dir = tempfile.mkdtemp(prefix='calibre-config-') diff --git a/src/calibre/utils/config.py b/src/calibre/utils/config.py index 432018e9b3..a890d653b6 100644 --- a/src/calibre/utils/config.py +++ b/src/calibre/utils/config.py @@ -13,14 +13,12 @@ from optparse import OptionParser as _OptionParser from optparse import IndentedHelpFormatter from collections import defaultdict -from calibre.constants import terminal_controller, config_dir, \ +from calibre.constants import terminal_controller, config_dir, CONFIG_DIR_MODE, \ __appname__, __version__, __author__ from calibre.utils.lock import LockError, ExclusiveFile plugin_dir = os.path.join(config_dir, 'plugins') -CONFIG_DIR_MODE = 0700 - def make_config_dir(): if not os.path.exists(plugin_dir): os.makedirs(plugin_dir, mode=CONFIG_DIR_MODE) From 23a135324d3be6cf42dbff8a54fb68a4223a4ab1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 30 Aug 2010 09:14:19 -0600 Subject: [PATCH 14/22] Add list of keyboard shortcuts to manual --- src/calibre/manual/gui.rst | 62 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) diff --git a/src/calibre/manual/gui.rst b/src/calibre/manual/gui.rst index a2032f3071..c31f8e41c5 100644 --- a/src/calibre/manual/gui.rst +++ b/src/calibre/manual/gui.rst @@ -316,6 +316,68 @@ Jobs The Jobs panel shows you the number of currently running jobs. Jobs are tasks that run in a separate process, they include converting ebooks and talking to your reader device. You can click on the jobs panel to access the list of jobs. Once a job has completed, by double-clicking it in the list, you can see a detailed log from that job. This is useful to debug jobs that may not have completed successfully. +Keyboard Shortcuts +--------------------- + +Calibre has several keyboard shortcuts to save you time and mouse movement. These shortcuts are active in the book list view (when you're not editing the details of a particular book), and most of them affect the title you have selected. The |app| e-book viewer has its own shortcuts, which can be customised by clicking the Preferences button in the viewer. + +.. note:: + + Note: The Calibre keyboard shortcuts do not require a modifier key (Command, Option, Control etc.), unless specifically noted. You only need to press the letter key, e.g. E to edit. + +.. list-table:: Keyboard Shortcuts + :widths: 10 100 + :header-rows: 1 + + * - Keyboard Shortcut + - Action + * - :kbd:`A` + - Add Books + * - :kbd:`C` + - Convert selected Books + * - :kbd:`D` + - Send to device + * - :kbd:`Del` + - Remove selected Books + * - :kbd:`E` + - Edit metadata of selected books + * - :kbd:`I` + - Show book details + * - :kbd:`M` + - Merge selected records + * - :kbd:`O` + - Open containing folder + * - :kbd:`S` + - Save to Disk + * - :kbd:`V` + - View + * - :kbd:`Alt+V/Cmd+V in OS X` + - View specific format + * - :kbd:`Alt+Shift+J` + - Toggle jobs list + * - :kbd:`Alt+Shift+B` + - Toggle Cover Browser + * - :kbd:`Alt+Shift+T` + - Toggle Tag Browser + * - :kbd:`Alt+A` + - Show books by the Same author as the current book + * - :kbd:`Alt+T` + - Show books with the same tags as current book + * - :kbd:`Alt+P` + - Show books by the same publisher as current book + * - :kbd:`Alt+Shift+S` + - Show books in the same series as current book + * - :kbd:`/, Ctrl+F` + - Focus the search bar + * - :kbd:`Ctrl+D` + - Download metadata and shortcuts + * - :kbd:`Ctrl+R` + - Restart calibre + + + + + From 2d6009b45f8c85da8d6e47b25d21d7c82e0aa131 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 30 Aug 2010 10:21:53 -0600 Subject: [PATCH 15/22] ... --- src/calibre/manual/gui.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/calibre/manual/gui.rst b/src/calibre/manual/gui.rst index c31f8e41c5..6016b072de 100644 --- a/src/calibre/manual/gui.rst +++ b/src/calibre/manual/gui.rst @@ -373,6 +373,8 @@ Calibre has several keyboard shortcuts to save you time and mouse movement. Thes - Download metadata and shortcuts * - :kbd:`Ctrl+R` - Restart calibre + * - :kbd:`Ctrl+Q` + - Quit calibre From a3bb2c06fb2d4f1b1da2214295f59334d621e092 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Mon, 30 Aug 2010 18:59:15 -0600 Subject: [PATCH 16/22] Updated La Jornada --- resources/images/news/la_jornada.png | Bin 0 -> 943 bytes resources/recipes/clarin.recipe | 2 +- resources/recipes/europasur.recipe | 2 +- resources/recipes/la_jornada.recipe | 160 +++++++++------------------ src/calibre/manual/gui.rst | 2 +- 5 files changed, 55 insertions(+), 111 deletions(-) create mode 100644 resources/images/news/la_jornada.png diff --git a/resources/images/news/la_jornada.png b/resources/images/news/la_jornada.png new file mode 100644 index 0000000000000000000000000000000000000000..718731a380702fbcf3de68792f80a1bf94f6ebc8 GIT binary patch literal 943 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zK-vS0-A-oPfdtD69Mgd`SU*F|v9*U87?^H&x;TbdoNk>Qn=`po;%NQ<`siI{hqsAD z%4%;|X>g2da$({jwwMLSHaLd##7XsB+2{1elqZ zbLN~1cTdP(y`gZUOzprY=0)g)C z<@@?x?z``?=dawt^H!S6)eVmw)8vUe?zN1efaQhtA(o!>v4YjW3igsrjp zzCl&>mCjZ`_@^P8ilxy5? zCM5|nXwN(($;Ft^bH`D7@nVVXd5?Km3fPz|R%um=O_}$5udQ{r@s7>0p;xY-O!@A~ zv_4GWWcSnD#uQN@;^ML&fdFhTk`YI9f6CI zYK4=gZ&bVV;KCJIyCZv4!uEVoT7O6Cm^7d9p1;01x0e;@dR<*6W+OdY^Qdsd_jirg zuE<*Uub)qS`D)eGqW?bc_ZaC~B%BwK7o2pw@ATHT zuR_(YV?F2oaLhS8;s59Vtg82VUGIzQ_yH5VYKdz^NlIc#s#S7PDv)9@GB7mIHL%b% zHV82^u`)5RGBVUPFtai+xaAwT1Vuw`eoAIqC5i?!D-&}oBQuDGH|CWf4Gf;HelF{r G5}E)MpsW%A literal 0 HcmV?d00001 diff --git a/resources/recipes/clarin.recipe b/resources/recipes/clarin.recipe index 7bbb663d1d..cf9440ad55 100644 --- a/resources/recipes/clarin.recipe +++ b/resources/recipes/clarin.recipe @@ -18,7 +18,7 @@ class Clarin(BasicNewsRecipe): use_embedded_content = False no_stylesheets = True encoding = 'utf8' - language = 'es_AR' + language = 'es' publication_type = 'newspaper' INDEX = 'http://www.clarin.com' masthead_url = 'http://www.clarin.com/static/CLAClarin/images/logo-clarin-print.jpg' diff --git a/resources/recipes/europasur.recipe b/resources/recipes/europasur.recipe index 3179c83234..cda111e995 100644 --- a/resources/recipes/europasur.recipe +++ b/resources/recipes/europasur.recipe @@ -20,7 +20,7 @@ class Europasur(BasicNewsRecipe): delay = 2 no_stylesheets = True encoding = 'cp1252' - language = 'es_ES' + language = 'es' publication_type = 'newspaper' extra_css = """ body{font-family: Verdana,Arial,Helvetica,sans-serif} h2{font-family: Georgia,Times New Roman,Times,serif} diff --git a/resources/recipes/la_jornada.recipe b/resources/recipes/la_jornada.recipe index edcd1ec9a7..2e1a3bb50d 100644 --- a/resources/recipes/la_jornada.recipe +++ b/resources/recipes/la_jornada.recipe @@ -1,120 +1,64 @@ -#!/usr/bin/env python - __license__ = 'GPL v3' -__copyright__ = '2010, Rogelio Dominguez ' +__copyright__ = '2010, Darko Miletic ' ''' www.jornada.unam.mx ''' +from calibre import strftime from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import BeautifulStoneSoup -import re +class LaJornada_mx(BasicNewsRecipe): + title = 'La Jornada (Mexico)' + __author__ = 'Darko Miletic' + description = 'Noticias del diario mexicano La Jornada' + publisher = 'DEMOS, Desarrollo de Medios, S.A. de C.V.' + category = 'news, Mexico' + oldest_article = 2 + max_articles_per_feed = 200 + no_stylesheets = True + encoding = 'utf8' + use_embedded_content = False + language = 'es' + remove_empty_feeds = True + cover_url = strftime("http://www.jornada.unam.mx/%Y/%m/%d/planitas/portadita.jpg") + masthead_url = 'http://www.jornada.unam.mx/v7.0/imagenes/la-jornada-trans.png' + extra_css = """ + body{font-family: "Times New Roman",serif } + .cabeza{font-size: xx-large; font-weight: bold } + .credito-articulo{font-size: 1.3em} + """ -class LaJornada(BasicNewsRecipe): - title = u'La Jornada' - language = 'es' - oldest_article = 1 - __author__ = 'rogeliodh' - max_articles_per_feed = 100 - remove_tags = [dict(name='div', attrs={'class':['go gui','go gui top','comment-cont',]})] - remove_tags_before = dict(id='article-cont') - remove_tags_after = dict(id='article-cont') - no_stylesheets = True - extra_css = ' .series{ \ - border-bottom: 1px solid #626366; \ - font-weight: bold; \ - } \ - .sumario{ \ - font-weight: bold; \ - margin-top: 2em; \ - text-align: center \ - } \ - p.sumario{ \ - text-align: center \ - } \ - .sumarios{font-weight: bold} \ - .cabeza{ font-size: 1.5em} \ - .pie-foto { \ - text-align: justify; \ - font-size: 0.8em; \ - text-align: justify; \ - } \ - .pie-foto .credito { \ - font-weight: bold; \ - display: block \ - } \ - .credito-autor{ \ - margin-top: 1.5em; \ - padding-left: 0.6em; \ - border-bottom: 1px solid #626366; \ - font-variant: small-caps; \ - font-weight: bold \ - } \ - .credito-articulo{ \ - margin-top: 1.5em; \ - padding-left: 0.6em; \ - border-bottom: 1px solid #626366; \ - font-variant: small-caps; \ - font-weight: bold \ - } \ - .credito-titulo{text-align: right} \ - .hemero { \ - text-align: right; \ - font-size: 0.9em; \ - margin-bottom: 8px; \ - } \ - .loc { \ - font-weight: bold; \ - } \ - .carton { \ - text-align: center; \ - } \ - .credit { \ - font-weight: bold; \ - } \ - ' + conversion_options = { + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + } - preprocess_regexps = [ - # Remove capitalized initial letter on some articles (editorial) - (re.compile(r'

(.*)

', re.DOTALL|re.IGNORECASE), - lambda match: match.group(1)), - # Cartons section uses a class instead of a div to identify the main content. Change it. - (re.compile(r'class="carton"', re.DOTALL|re.IGNORECASE), - lambda match: 'id="article-cont" class="carton"'), - # Remove as calibre has a bug (to report) - (re.compile(r'', re.DOTALL|re.IGNORECASE), - lambda match: ''), - ] - - INDEX = 'http://www.jornada.unam.mx/rss/edicion.xml' - feeds = [ - (u'Opinion','http://www.jornada.unam.mx/rss/opinion.xml'), - (u'Cartones','http://www.jornada.unam.mx/rss/cartones.xml'), - (u'Política','http://www.jornada.unam.mx/rss/politica.xml'), - (u'Economía','http://www.jornada.unam.mx/rss/economia.xml'), - (u'Mundo','http://www.jornada.unam.mx/rss/mundo.xml'), - (u'Estados','http://www.jornada.unam.mx/rss/estados.xml'), - (u'Capital','http://www.jornada.unam.mx/rss/capital.xml'), - (u'Sociedad','http://www.jornada.unam.mx/rss/sociedad.xml'), - (u'Ciencias','http://www.jornada.unam.mx/rss/ciencias.xml'), - (u'Cultura','http://www.jornada.unam.mx/rss/cultura.xml'), - (u'Gastronomia','http://www.jornada.unam.mx/rss/gastronomia.xml'), - (u'Espectáculos','http://www.jornada.unam.mx/rss/espectaculos.xml'), - (u'Deportes','http://www.jornada.unam.mx/rss/deportes.xml'), + keep_only_tags = [ + dict(name='div', attrs={'class':['documentContent','cabeza','sumarios','text']}) + ,dict(name='div', attrs={'id':'renderComments'}) ] + remove_tags = [dict(name='div', attrs={'class':'buttonbar'})] - def get_cover_url(self): - ''' - Cover URL is http://www.jornada.unam.mx/YYYY/MM/DD/portada.pdf - ''' - cover_url = None - soup = self.index_to_soup(self.INDEX) - soupstone = BeautifulStoneSoup(str(soup)) - urlbase = str(soupstone('link')[0]) - r= re.compile(r'.*http://www.jornada.unam.mx/([0-9]{4})/([0-9]{2})/([0-9]{2})', re.DOTALL|re.IGNORECASE) - m = r.match(urlbase) - if m: - cover_url = 'http://www.jornada.unam.mx/' + m.groups()[0] + '/' + m.groups()[1] + '/' + m.groups()[2] + '/portada.pdf' + feeds = [ + (u'Ultimas noticias' , u'http://www.jornada.unam.mx/ultimas/news/RSS' ) + ,(u'Opinion' , u'http://www.jornada.unam.mx/rss/opinion.xml' ) + ,(u'Politica' , u'http://www.jornada.unam.mx/rss/politica.xml' ) + ,(u'Economia' , u'http://www.jornada.unam.mx/rss/economia.xml' ) + ,(u'Mundo' , u'http://www.jornada.unam.mx/rss/mundo.xml' ) + ,(u'Estados' , u'http://www.jornada.unam.mx/rss/estados.xml' ) + ,(u'Capital' , u'http://www.jornada.unam.mx/rss/capital.xml' ) + ,(u'Sociedad y justicia' , u'http://www.jornada.unam.mx/rss/sociedad.xml' ) + ,(u'Ciencias' , u'http://www.jornada.unam.mx/rss/ciencias.xml' ) + ,(u'Cultura' , u'http://www.jornada.unam.mx/rss/cultura.xml' ) + ,(u'Gastronomia' , u'http://www.jornada.unam.mx/rss/gastronomia.xml' ) + ,(u'Espectaculos' , u'http://www.jornada.unam.mx/rss/espectaculos.xml' ) + ,(u'Deportes' , u'http://www.jornada.unam.mx/rss/deportes.xml' ) + ] + + def preprocess_html(self, soup): + for item in soup.findAll(style=True): + del item['style'] + return soup - return cover_url diff --git a/src/calibre/manual/gui.rst b/src/calibre/manual/gui.rst index 6016b072de..e9573e91be 100644 --- a/src/calibre/manual/gui.rst +++ b/src/calibre/manual/gui.rst @@ -166,7 +166,7 @@ Search & Sort The Search & Sort section allows you to perform several powerful actions on your book collections. - * You can sort them by title, author, date, rating etc. by clicking on the column titles. + * You can sort them by title, author, date, rating etc. by clicking on the column titles. You can also sub-sort (i.e. sort on multiple columns). For example, if you click on the title column and then the author column, the book will be sorted by author and then all the entries for the same author will be sorted by title. * You can search for a particular book or set of books using the search bar. More on that below. From bac3965847a87742d674cb003f7c86d588c51c77 Mon Sep 17 00:00:00 2001 From: Timothy Legge Date: Mon, 30 Aug 2010 23:15:47 -0300 Subject: [PATCH 17/22] Fix bug 6015 - Metadata was not being resaved to the metadata file after the device was reconnected --- src/calibre/devices/kobo/books.py | 8 +++----- src/calibre/devices/kobo/driver.py | 20 ++++++++++++++++++-- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/calibre/devices/kobo/books.py b/src/calibre/devices/kobo/books.py index 124a10b380..9da99d75c8 100644 --- a/src/calibre/devices/kobo/books.py +++ b/src/calibre/devices/kobo/books.py @@ -23,7 +23,7 @@ class Book(MetaInformation): 'uuid', 'device_collections', ] - def __init__(self, prefix, lpath, title, authors, mime, date, ContentType, thumbnail_name, other=None): + def __init__(self, prefix, lpath, title, authors, mime, date, ContentType, thumbnail_name, size=None, other=None): MetaInformation.__init__(self, '') self.device_collections = [] @@ -42,10 +42,8 @@ class Book(MetaInformation): else: self.authors = [authors] self.mime = mime - try: - self.size = os.path.getsize(self.path) - except OSError: - self.size = 0 + + self.size = size # will be set later if None try: if ContentType == '6': self.datetime = time.strptime(date, "%Y-%m-%dT%H:%M:%S.%f") diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py index 88d69a6399..310f642adc 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -94,19 +94,19 @@ class KOBO(USBMS): idx = bl_cache.get(lpath, None) if idx is not None: + bl_cache[lpath] = None if ImageID is not None: imagename = self.normalize_path(self._main_prefix + '.kobo/images/' + ImageID + ' - NickelBookCover.parsed') #print "Image name Normalized: " + imagename if imagename is not None: bl[idx].thumbnail = ImageWrapper(imagename) - bl_cache[lpath] = None if ContentType != '6': if self.update_metadata_item(bl[idx]): # print 'update_metadata_item returned true' changed = True bl[idx].device_collections = playlist_map.get(lpath, []) else: - book = Book(prefix, lpath, title, authors, mime, date, ContentType, ImageID) + book = self.book_from_path(prefix, lpath, title, authors, mime, date, ContentType, ImageID) # print 'Update booklist' if bl.add_book(book, replace_metadata=False): changed = True @@ -381,3 +381,19 @@ class KOBO(USBMS): return USBMS.get_file(self, path, *args, **kwargs) + @classmethod + def book_from_path(cls, prefix, lpath, title, authors, mime, date, ContentType, ImageID): + from calibre.ebooks.metadata import MetaInformation + + if cls.settings().read_metadata or cls.MUST_READ_METADATA: + mi = cls.metadata_from_path(cls.normalize_path(os.path.join(prefix, lpath))) + else: + from calibre.ebooks.metadata.meta import metadata_from_filename + mi = metadata_from_filename(cls.normalize_path(os.path.basename(lpath)), + cls.build_template_regexp()) + if mi is None: + mi = MetaInformation(os.path.splitext(os.path.basename(lpath))[0], + [_('Unknown')]) + size = os.stat(cls.normalize_path(os.path.join(prefix, lpath))).st_size + book = Book(prefix, lpath, title, authors, mime, date, ContentType, ImageID, size=size, other=mi) + return book From abdce202eaa9d1f444b14afd66920f3af214d51e Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 31 Aug 2010 09:44:52 +0100 Subject: [PATCH 18/22] Fix sort_columns_at_startup tweak problem where the column 'date' was ignored. --- src/calibre/gui2/library/views.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/calibre/gui2/library/views.py b/src/calibre/gui2/library/views.py index 389208fdcd..966180467c 100644 --- a/src/calibre/gui2/library/views.py +++ b/src/calibre/gui2/library/views.py @@ -229,6 +229,8 @@ class BooksView(QTableView): # {{{ def cleanup_sort_history(self, sort_history): history = [] for col, order in sort_history: + if col == 'date': + col = 'timestamp' if col in self.column_map and (not history or history[0][0] != col): history.append([col, order]) return history From 9c1d7e060980954707c70087f64a41ccabb38562 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 31 Aug 2010 10:02:30 -0600 Subject: [PATCH 19/22] Field and stream blog by Tony Stegall --- resources/images/news/fstream.png | Bin 0 -> 636 bytes resources/recipes/fstream.recipe | 64 ++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 resources/images/news/fstream.png create mode 100644 resources/recipes/fstream.recipe diff --git a/resources/images/news/fstream.png b/resources/images/news/fstream.png new file mode 100644 index 0000000000000000000000000000000000000000..a9fc6b4aae77e4f3c9d164b4ddd8795d8965568d GIT binary patch literal 636 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b zK-vS0-A-oPfdtD69Mgd`SU*F|v9*U87#Np&x;TbdoL)Lvw?HaTq}6^#M~Pa~jz1a--+3$@2ApS4FiJY4N{Iy=*9liY*&%YFhvfo`$Ui>z z8wYj1A7gUd#CxPd!p0$CTD7BucbyK z;VjQhc>&M&iLs?8Uph^T&5U{A6T!4bBY^*}=lYvpd_pZ_FWBFkF8ovK#;SJvi+ZV- zy(I4JetWv`XxOyC;B1Z8g_>n0b-kAhWzTH-@qWFGiD3kf;|7iYO~Pu2pP02(Jh8gZ ztg!RQMSl~XUSRC0mbgZgq$HN4S|t~y0x1R~149E{0}EYa!w>^YD^n9IBU4=iGb;mw tNjg$fP&DM`r(~v8A~YC;7#RcASs9u^Gz5NbC;@6<@O1TaS?83{1OO_o{AvII literal 0 HcmV?d00001 diff --git a/resources/recipes/fstream.recipe b/resources/recipes/fstream.recipe new file mode 100644 index 0000000000..f6d56042d1 --- /dev/null +++ b/resources/recipes/fstream.recipe @@ -0,0 +1,64 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class FIELDSTREAM(BasicNewsRecipe): + title = 'Field and Stream' + __author__ = 'Starson17 and Tonythebookworm' + description = 'Hunting and Fishing and Gun Talk' + language = 'en' + no_stylesheets = True + publisher = 'Starson17 and Tonythebookworm' + category = 'food recipes, hunting, fishing, guns' + use_embedded_content= False + no_stylesheets = True + oldest_article = 24 + remove_javascript = True + remove_empty_feeds = True + masthead_url = 'http://www.fieldandstream.com/sites/all/themes/fs/logo.png' + cover_url = 'http://www.arrowheadflyangler.com/Portals/1/Articles/FieldStream/Field%20and%20Stream%20March%20Fishing%20Edition%20Article%20Cover.jpg' + # recursions = 0 + max_articles_per_feed = 10 + INDEX = 'http://www.fieldandstream.com' + + keep_only_tags = [dict(name='div', attrs={'class':['interior-main']}) + ] + remove_tags = [dict(name='div', attrs={'id':['comments']})] + + def parse_index(self): + feeds = [] + for title, url in [ + (u"Wild Chef", u"http://www.fieldandstream.com/blogs/wild-chef"), + (u"The Gun Nut", u"http://www.fieldandstream.com/blogs/gun-nut"), + (u"Whitetail 365", u"http://www.fieldandstream.com/blogs/whitetail-365"), + (u"Fly Talk", u"http://www.fieldandstream.com/blogs/flytalk"), + (u"Generation Wild", u"http://www.fieldandstream.com/blogs/generation-wild"), + (u"Conservationist", u"http://www.fieldandstream.com/blogs/conservationist"), + (u"Honest Angler", u"http://www.fieldandstream.com/blogs/honest-angler"), + (u"Mans Best Friend", u"http://www.fieldandstream.com/blogs/mans-best-friend"), + + ]: + articles = self.make_links(url) + if articles: + feeds.append((title, articles)) + return feeds + + def make_links(self, url): + title = 'Temp' + current_articles = [] + soup = self.index_to_soup(url) + print 'The soup is: ', soup + for item in soup.findAll('h2'): + print 'item is: ', item + link = item.find('a') + print 'the link is: ', link + if link: + url = self.INDEX + link['href'] + title = self.tag_to_string(link) + print 'the title is: ', title + print 'the url is: ', url + print 'the title is: ', title + current_articles.append({'title': title, 'url': url, 'description':'', 'date':''}) # append all this + return current_articles + + + + From 85e18d08ab120cef506eb8cf799e7676365c035e Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Tue, 31 Aug 2010 18:54:51 +0100 Subject: [PATCH 20/22] Add custom columns to the OPDF book display --- src/calibre/library/server/opds.py | 33 +++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/calibre/library/server/opds.py b/src/calibre/library/server/opds.py index 87a0fecee3..c3a1d68749 100644 --- a/src/calibre/library/server/opds.py +++ b/src/calibre/library/server/opds.py @@ -19,6 +19,7 @@ from calibre.ebooks.metadata import fmt_sidx from calibre.library.comments import comments_to_html from calibre import guess_type from calibre.utils.ordered_dict import OrderedDict +from calibre.utils.date import format_date BASE_HREFS = { 0 : '/stanza', @@ -130,7 +131,7 @@ def CATALOG_GROUP_ENTRY(item, category, base_href, version, updated): link ) -def ACQUISITION_ENTRY(item, version, FM, updated): +def ACQUISITION_ENTRY(item, version, FM, updated, CFM, CKEYS): title = item[FM['title']] if not title: title = _('Unknown') @@ -153,6 +154,21 @@ def ACQUISITION_ENTRY(item, version, FM, updated): extra.append(_('SERIES: %s [%s]
')%\ (series, fmt_sidx(float(item[FM['series_index']])))) + for key in CKEYS: + val = item[CFM[key]['rec_index']] + if val is not None: + name = CFM[key]['name'] + datatype = CFM[key]['datatype'] + if datatype == 'text' and CFM[key]['is_multiple']: + extra.append('%s: %s
'%(name, ', '.join(val.split('|')))) + elif datatype == 'series': + extra.append('%s: %s [%s]
'%(name, val, + fmt_sidx(item[CFM.cc_series_index_column_for(key)]))) + elif datatype == 'datetime': + extra.append('%s: %s
'%(name, + format_date(val, CFM[key]['display'].get('date_format','dd MMM yyyy')))) + else: + extra.append('%s: %s
' % (CFM[key]['name'], val)) comments = item[FM['comments']] if comments: comments = comments_to_html(comments) @@ -260,10 +276,14 @@ class NavFeed(Feed): class AcquisitionFeed(NavFeed): def __init__(self, updated, id_, items, offsets, page_url, up_url, version, - FM): + FM, CFM): NavFeed.__init__(self, id_, updated, version, offsets, page_url, up_url) + CKEYS = [key for key in sorted(CFM.get_custom_fields(), + cmp=lambda x,y: cmp(CFM[x]['name'].lower(), + CFM[y]['name'].lower()))] for item in items: - self.root.append(ACQUISITION_ENTRY(item, version, FM, updated)) + self.root.append(ACQUISITION_ENTRY(item, version, FM, updated, + CFM, CKEYS)) class CategoryFeed(NavFeed): @@ -360,7 +380,7 @@ class OPDSServer(object): cherrypy.response.headers['Last-Modified'] = self.last_modified(updated) cherrypy.response.headers['Content-Type'] = 'application/atom+xml;profile=opds-catalog' return str(AcquisitionFeed(updated, id_, items, offsets, - page_url, up_url, version, self.db.FIELD_MAP)) + page_url, up_url, version, self.db.FIELD_MAP, self.db.field_metadata)) def opds_search(self, query=None, version=0, offset=0): try: @@ -568,7 +588,10 @@ class OPDSServer(object): (_('Newest'), _('Date'), 'Onewest'), (_('Title'), _('Title'), 'Otitle'), ] - for category in categories: + def getter(x): + return category_meta[x]['name'].lower() + for category in sorted(categories, + cmp=lambda x,y: cmp(getter(x), getter(y))): if len(categories[category]) == 0: continue if category == 'formats': From e4377bf734d78e3d22ad616d607d9d85f8cd6282 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 31 Aug 2010 12:48:13 -0600 Subject: [PATCH 21/22] Winnipeg Free Press by buyo --- resources/recipes/winnipeg_free_press.recipe | 30 ++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 resources/recipes/winnipeg_free_press.recipe diff --git a/resources/recipes/winnipeg_free_press.recipe b/resources/recipes/winnipeg_free_press.recipe new file mode 100644 index 0000000000..8c59dff645 --- /dev/null +++ b/resources/recipes/winnipeg_free_press.recipe @@ -0,0 +1,30 @@ +from calibre.web.feeds.news import BasicNewsRecipe + +class WinnipegFreePress(BasicNewsRecipe): + title = u'Winnipeg Free Press' + __author__ = 'buyo' + description = 'News from Winnipeg, Manitoba, Canada' + oldest_article = 1 + max_articles_per_feed = 15 + category = 'News, Winnipeg, Canada' + cover_url = 'http://media.winnipegfreepress.com/designimages/winnipegfreepress_WFP.gif' + no_stylesheets = True + encoding = 'UTF-8' + remove_javascript = True + use_embedded_content = False + language = 'en_CA' + + feeds = [(u'Breaking News', u'http://www.winnipegfreepress.com/rss?path=/breakingnews'), + (u'Local News',u'http://www.winnipegfreepress.com/rss?path=/local'), + (u'Breaking Business News',u'http://www.winnipegfreepress.com/rss?path=/business/finance'), + (u'Business',u'http://www.winnipegfreepress.com/rss?path=/business'), + (u'Editorials',u'http://www.winnipegfreepress.com/rss?path=/opinion/editorials'), + (u'Views from the West',u'http://www.winnipegfreepress.com/rss?path=/opinion/westview'), + (u'Life & Style',u'http://www.winnipegfreepress.com/rss?path=/life'), + (u'Food & Drink',u'http://www.winnipegfreepress.com/rss?path=/life/food') + ] + + keep_only_tags = [ + dict(name='div', attrs={'id':'article_header'}), + dict(name='div', attrs={'class':'article'}), + ] From 76867d5da5130698dc93d57e14e62a7235eac53e Mon Sep 17 00:00:00 2001 From: Timothy Legge Date: Tue, 31 Aug 2010 21:04:36 -0300 Subject: [PATCH 22/22] Fix bug that sent full path to metadata instead of lpath. Caused metadata to get incorrectly replaced. --- src/calibre/devices/kobo/driver.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/calibre/devices/kobo/driver.py b/src/calibre/devices/kobo/driver.py index 310f642adc..5e1c752c76 100644 --- a/src/calibre/devices/kobo/driver.py +++ b/src/calibre/devices/kobo/driver.py @@ -316,7 +316,6 @@ class KOBO(USBMS): lpath = lpath[1:] #print "path: " + lpath #book = self.book_class(prefix, lpath, other=info) - lpath = self.normalize_path(prefix + lpath) book = Book(prefix, lpath, '', '', '', '', '', '', other=info) if book.size is None: book.size = os.stat(self.normalize_path(path)).st_size