From 9e3feef720e637410bc4f7810311d24620564de3 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 10:50:24 -0600 Subject: [PATCH 01/19] IGN:Tag release --- src/calibre/translations/calibre.pot | 1242 +++++++++++++++----------- 1 file changed, 717 insertions(+), 525 deletions(-) diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 16e4a37a13..9f38c7fb8b 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.54\n" -"POT-Creation-Date: 2011-04-10 15:36+MDT\n" -"PO-Revision-Date: 2011-04-10 15:36+MDT\n" +"Project-Id-Version: calibre 0.7.55\n" +"POT-Creation-Date: 2011-04-15 09:45+MDT\n" +"PO-Revision-Date: 2011-04-15 09:45+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -31,8 +31,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:660 #: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:467 -#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:98 -#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:101 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:99 +#: /home/kovid/work/calibre/src/calibre/ebooks/chm/input.py:102 #: /home/kovid/work/calibre/src/calibre/ebooks/chm/metadata.py:56 #: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:430 #: /home/kovid/work/calibre/src/calibre/ebooks/epub/periodical.py:127 @@ -52,7 +52,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:678 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:36 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/ereader.py:61 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/extz.py:23 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/extz.py:24 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:54 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:364 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/meta.py:36 @@ -70,10 +70,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rtf.py:91 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/rtf.py:101 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/snb.py:16 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:46 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:47 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:79 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/covers.py:81 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/google.py:81 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:161 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:360 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:256 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/identify.py:258 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:18 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:43 #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:69 @@ -119,9 +122,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:315 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:336 #: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:343 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:155 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:368 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:157 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:397 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:42 @@ -137,16 +140,18 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:185 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:734 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:236 -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:252 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:429 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:448 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1016 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1190 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:436 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:455 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1197 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:72 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:169 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:188 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:252 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:320 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:156 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:199 @@ -155,11 +160,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/library/database2.py:500 #: /home/kovid/work/calibre/src/calibre/library/database2.py:508 #: /home/kovid/work/calibre/src/calibre/library/database2.py:519 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1782 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1906 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2895 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2897 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3030 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1801 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1925 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2914 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2916 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3049 #: /home/kovid/work/calibre/src/calibre/library/server/mobile.py:233 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:156 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:159 @@ -284,192 +289,192 @@ msgstr "" msgid "Set metadata from %s files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:871 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:872 msgid "Look and Feel" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:873 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:885 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:896 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:907 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:919 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:874 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:886 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:897 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:908 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:920 msgid "Interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:877 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:878 msgid "Adjust the look and feel of the calibre interface to suit your tastes" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:883 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:884 msgid "Behavior" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:889 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:890 msgid "Change the way calibre behaves" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:894 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:895 #: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:218 msgid "Add your own columns" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:900 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:901 msgid "Add/remove your own columns to the calibre book list" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:905 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:906 msgid "Toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:911 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:912 msgid "Customize the toolbars and context menus, changing which actions are available in each" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:917 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:918 msgid "Searching" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:923 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:924 msgid "Customize the way searching for books works in calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:928 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:929 msgid "Input Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:930 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:941 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:952 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:931 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:942 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:953 msgid "Conversion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:934 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:935 msgid "Set conversion options specific to each input format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:939 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:940 msgid "Common Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:945 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:946 msgid "Set conversion options common to all formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:950 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:951 msgid "Output Options" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:956 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:957 msgid "Set conversion options specific to each output format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:961 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:962 msgid "Adding books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:963 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:975 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:987 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:999 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:964 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:976 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:988 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1000 msgid "Import/Export" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:967 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:968 msgid "Control how calibre reads metadata from files when adding books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:973 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:974 msgid "Saving books to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:979 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:980 msgid "Control how calibre exports files from its database to disk when using Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:985 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:986 msgid "Sending books to devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:991 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:992 msgid "Control how calibre transfers files to your ebook reader" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:997 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:998 msgid "Metadata plugboards" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1003 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1004 msgid "Change metadata fields before saving/sending" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1008 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1009 msgid "Template Functions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1010 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1057 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1069 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1080 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1011 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1058 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1070 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1081 msgid "Advanced" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1014 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1015 msgid "Create your own template functions" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1019 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1020 msgid "Sharing books by email" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1021 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1033 -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1046 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1022 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1034 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1047 msgid "Sharing" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1025 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1026 msgid "Setup sharing of books via email. Can be used for automatic sending of downloaded news to your devices" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1031 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1032 msgid "Sharing over the net" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1037 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1038 msgid "Setup the calibre Content Server which will give you access to your calibre library from anywhere, on any device, over the internet" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1044 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1045 #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:57 msgid "Metadata download" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1050 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1051 msgid "Control how calibre downloads ebook metadata from the net" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1055 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1056 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:268 msgid "Plugins" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1061 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1062 msgid "Add/remove/customize various bits of calibre functionality" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1067 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1068 msgid "Tweaks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1073 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1074 msgid "Fine tune how calibre behaves in various contexts" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1078 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1079 msgid "Miscellaneous" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1084 +#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1085 msgid "Miscellaneous advanced configuration" msgstr "" @@ -498,7 +503,7 @@ msgid "This profile tries to provide sane defaults and is useful if you know not msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:61 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:453 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:454 msgid "This profile is intended for the SONY PRS line. The 500/505/600/700 etc." msgstr "" @@ -507,62 +512,62 @@ msgid "This profile is intended for the SONY PRS 300." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:82 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:493 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:494 msgid "This profile is intended for the SONY PRS-900." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:90 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:538 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:539 msgid "This profile is intended for the Microsoft Reader." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:101 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:549 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:550 msgid "This profile is intended for the Mobipocket books." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:114 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:562 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:563 msgid "This profile is intended for the Hanlin V3 and its clones." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:126 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:574 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:575 msgid "This profile is intended for the Hanlin V5 and its clones." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:136 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:582 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:583 msgid "This profile is intended for the Cybook G3." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:149 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:596 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:597 msgid "This profile is intended for the Cybook Opus." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:161 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:609 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:610 msgid "This profile is intended for the Amazon Kindle." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:173 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:659 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:660 msgid "This profile is intended for the Irex Illiad." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:185 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:672 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:673 msgid "This profile is intended for the IRex Digital Reader 1000." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:198 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:686 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:687 msgid "This profile is intended for the IRex Digital Reader 800." msgstr "" #: /home/kovid/work/calibre/src/calibre/customize/profiles.py:210 -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:700 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:701 msgid "This profile is intended for the B&N Nook." msgstr "" @@ -578,47 +583,47 @@ msgstr "" msgid "Intended for the iPad and similar devices with a resolution of 768x1024" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:437 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:438 msgid "Intended for generic tablet devices, does no resizing of images" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:445 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:446 msgid "Intended for the Samsung Galaxy and similar tablet devices with a resolution of 600x1280" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:471 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:472 msgid "This profile is intended for the Kobo Reader." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:484 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:485 msgid "This profile is intended for the SONY PRS-300." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:502 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:503 msgid "Suitable for use with any e-ink device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:509 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:510 msgid "Suitable for use with any large screen e-ink device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:518 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:519 msgid "This profile is intended for the 5-inch JetBook." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:527 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:528 msgid "This profile is intended for the SONY PRS line. The 500/505/700 etc, in landscape mode. Mainly useful for comics." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:635 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:636 msgid "This profile is intended for the Amazon Kindle DX." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:712 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:713 msgid "This profile is intended for the B&N Nook Color." msgstr "" -#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:723 +#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:724 msgid "This profile is intended for the Sanda Bambook." msgstr "" @@ -686,11 +691,11 @@ msgstr "" msgid "Communicate with Android phones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:92 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:95 msgid "Comma separated list of directories to send e-books to on the device. The first one that exists will be used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:141 +#: /home/kovid/work/calibre/src/calibre/devices/android/driver.py:145 msgid "Communicate with S60 phones." msgstr "" @@ -745,16 +750,16 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:431 #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:470 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1044 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1084 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3068 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3108 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1049 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1089 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3073 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3113 msgid "%d of %d" msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:477 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1089 -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3114 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1094 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3119 msgid "finished" msgstr "" @@ -765,13 +770,13 @@ msgid "" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1008 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1013 msgid "" "Some cover art could not be converted.\n" "Click 'Show Details' for a list." msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2650 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2655 #: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:100 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447 #: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470 @@ -782,20 +787,20 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:445 #: /home/kovid/work/calibre/src/calibre/library/database2.py:299 #: /home/kovid/work/calibre/src/calibre/library/database2.py:312 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2759 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2778 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:159 msgid "News" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2651 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2656 #: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65 #: /home/kovid/work/calibre/src/calibre/library/catalog.py:634 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2721 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:2739 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2740 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:2758 msgid "Catalog" msgstr "" -#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2972 +#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2977 msgid "Communicate with iTunes." msgstr "" @@ -1078,7 +1083,7 @@ msgid "The Kobo supports only one collection currently: the \"Im_Reading\" list. msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:398 msgid "Not Implemented" msgstr "" @@ -2264,9 +2269,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:75 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:426 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1021 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1028 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:151 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:331 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:574 msgid "Title" @@ -2275,14 +2281,15 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:678 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:61 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:431 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1022 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:438 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1029 msgid "Author(s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:679 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:63 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:148 msgid "Publisher" msgstr "" @@ -2296,8 +2303,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:247 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:129 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:94 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:388 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1209 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:395 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1216 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:146 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:211 msgid "Comments" msgstr "" @@ -2307,9 +2315,10 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:31 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:72 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:376 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1205 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1212 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:150 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:171 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:761 msgid "Tags" @@ -2320,19 +2329,21 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:30 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:73 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:393 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1214 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1221 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:67 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:152 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:114 msgid "Series" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:686 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:153 msgid "Language" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:688 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1197 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1204 msgid "Timestamp" msgstr "" @@ -2486,7 +2497,7 @@ msgid "Downloads metadata from Google Books" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fetch.py:198 -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:15 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:27 msgid "Downloads metadata from isbndb.com" msgstr "" @@ -2685,33 +2696,45 @@ msgstr "" msgid "Downloads metadata from Amazon" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:292 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:293 msgid "US" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:293 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:294 msgid "France" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:294 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:295 msgid "Germany" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:295 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:296 msgid "UK" msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:389 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/amazon.py:390 msgid "Amazon timed out. Try again later." msgstr "" -#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:138 +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/base.py:154 msgid "Metadata source" msgstr "" +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:37 +msgid "IsbnDB key:" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:38 +msgid "To use isbndb.com you have to sign up for a free accountat isbndb.com and get an access key." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/isbndb.py:42 +msgid "To use metadata from isbndb.com you must sign up for a free account and get an isbndb key and enter it below. Instructions to get the key are here." +msgstr "" + #: #: /home/kovid/work/calibre/src/calibre/ebooks/metadata/sources/openlibrary.py:15 -msgid "Downloads metadata from The Open Library" +msgid "Downloads covers from The Open Library" msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/mobi/output.py:22 @@ -2835,7 +2858,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:169 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:70 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:149 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759 msgid "Rating" msgstr "" @@ -3334,172 +3358,172 @@ msgstr "" msgid "tag browser categories not to display" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:448 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:449 msgid "Choose Files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:28 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:30 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:308 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:534 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:29 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:31 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:30 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:32 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:33 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:34 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:33 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:35 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:36 msgid "Topaz books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:35 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:37 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:36 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:38 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:37 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:39 msgid "SNB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:40 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:39 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:41 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:48 msgid "Add books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:47 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:49 msgid "Add books to the calibre library/device from files on your computer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:50 msgid "A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:56 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:56 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:58 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:60 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:62 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:64 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:66 msgid "Add Empty book. (Book entry with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:67 msgid "Shift+Ctrl+E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:68 msgid "Add from ISBN" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:68 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:70 msgid "Add files to selected book records" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:69 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:71 msgid "Shift+A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:89 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:91 msgid "Are you sure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:90 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:92 msgid "Are you sure you want to add the same files to all %d books? If the formatalready exists for a book, it will be replaced." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:98 msgid "Select book files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:167 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:169 msgid "Adding" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:168 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:170 msgid "Creating book records from ISBNs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:263 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:312 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:327 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:283 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:298 msgid "Supported books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:301 msgid "Select books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:323 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:338 msgid "Merged some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:324 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:339 msgid "The following duplicate books were found and incoming book formats were processed and merged into your Calibre database according to your automerge settings:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:344 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:359 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:345 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:360 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:366 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:371 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:386 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:405 msgid "Add to library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:386 #: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:116 #: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:28 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:138 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:185 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:384 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:399 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:390 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:405 msgid "No book files found" msgstr "" @@ -3530,10 +3554,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:30 #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:87 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:81 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:224 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:261 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:107 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:250 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:287 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:92 msgid "No books selected" msgstr "" @@ -3678,8 +3703,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/confirm_delete_ui.py:53 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:78 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles.py:368 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:424 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:463 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:102 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:274 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:223 @@ -3725,11 +3750,11 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:316 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:692 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:972 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:974 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:101 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:186 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:276 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:316 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:317 msgid "Failed" msgstr "" @@ -3757,7 +3782,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:404 #: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:167 #: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:101 -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:789 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:829 msgid "Not allowed" msgstr "" @@ -3786,7 +3811,7 @@ msgid "Bulk convert" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/actions/convert.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:518 msgid "Cannot convert" msgstr "" @@ -4036,82 +4061,88 @@ msgstr "" msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:48 msgid "Download metadata and covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:41 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:50 msgid "Download only metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:43 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:51 msgid "Download only covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:53 msgid "Download only social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:59 msgid "Merge into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:55 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:62 msgid "Merge into first selected book - keep others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:66 msgid "Merge only formats into first selected book - delete others" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:80 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:106 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:97 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:187 +msgid "Failed to download metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:126 msgid "social metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:128 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:227 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:129 msgid "Downloading {0} for {1} book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:127 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:153 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:249 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:260 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:286 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:289 msgid "Cannot merge books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:264 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:290 msgid "At least two books must be selected for merging" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:267 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:293 msgid "You are about to merge more than 5 books. Are you sure you want to proceed?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:301 msgid "Book formats and metadata from the selected books will be added to the first selected book (%s). ISBN will not be merged.

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

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

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

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

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

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

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

Are you sure you want to proceed?" msgstr "" @@ -4348,59 +4379,67 @@ msgstr "" msgid "No ePub available. First convert the book to ePub." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:24 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:36 msgid "V" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:24 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:31 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:36 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:32 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:43 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:38 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:51 msgid "Read a random book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:92 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:181 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:55 +msgid "Clear recently viewed list" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:219 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:226 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:105 -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:119 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:152 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:166 msgid "Format unavailable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:153 msgid "Selected books have no formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:108 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:127 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:120 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:167 msgid "Not all the selected books were available in the %s format. You should convert them first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:127 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:174 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:128 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:175 msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:137 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:184 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:182 +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:220 +msgid "This book no longer exists in your library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/actions/view.py:227 msgid "%s has no available formats." msgstr "" @@ -4613,8 +4652,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:147 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:160 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:383 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1195 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1202 msgid "Path" msgstr "" @@ -4624,17 +4663,17 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:149 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:153 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:382 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:63 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:389 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:65 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:148 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/emailp.py:27 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:124 msgid "Formats" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:29 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1025 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1198 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1032 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1205 msgid "Collections" msgstr "" @@ -4644,11 +4683,11 @@ msgid "Click to open" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:57 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:375 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:381 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:387 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1204 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1208 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:388 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1211 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1215 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:78 #: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:83 @@ -4754,7 +4793,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/custom_columns_ui.py:81 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:100 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:60 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins_ui.py:86 @@ -5736,6 +5775,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:537 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:848 msgid "Tags categorize the book. This is particularly useful while searching.

They can be any words or phrases, separated by commas." msgstr "" @@ -6416,7 +6456,7 @@ msgid "tags to remove" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:45 -#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:136 +#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:144 msgid "No details available." msgstr "" @@ -6506,7 +6546,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/device.py:631 #: /home/kovid/work/calibre/src/calibre/gui2/device.py:1166 -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:307 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:221 msgid "No suitable formats" msgstr "" @@ -6854,7 +6894,7 @@ msgstr "" #: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_format_device_ui.py:49 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1194 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1201 msgid "Format" msgstr "" @@ -7046,9 +7086,9 @@ msgstr "" #: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:76 #: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1023 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1030 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:32 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:73 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:241 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:321 #: /home/kovid/work/calibre/src/calibre/library/server/opds.py:573 @@ -7077,13 +7117,13 @@ msgstr "" #: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1434 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1439 msgid "Invalid author name" msgstr "" #: #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1435 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1440 msgid "Author names cannot contain & characters." msgstr "" @@ -7132,7 +7172,7 @@ msgid "Author Sort" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:65 msgid "ISBN" msgstr "" @@ -7204,7 +7244,7 @@ msgstr "" msgid "Download &social metadata (tags/rating/etc.) for the selected book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:42 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/job_view_ui.py:45 msgid "Details of job" msgstr "" @@ -7338,57 +7378,57 @@ msgstr "" msgid "S/R TEMPLATE ERROR" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:646 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:648 msgid "You must specify a destination when source is a composite field" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:652 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:654 msgid "You must specify a destination identifier type" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:759 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:778 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:905 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:761 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:780 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:907 msgid "Search/replace invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:760 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:762 msgid "Authors cannot be set to the empty string. Book title %s not processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:779 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:781 msgid "Title cannot be set to the empty string. Book title %s not processed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:906 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:908 msgid "Search pattern is invalid: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:958 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:960 msgid "" "Applying changes to %d books.\n" "Phase {0} {1}%%." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:988 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:990 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:587 msgid "Delete saved search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:989 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:991 msgid "The selected saved search/replace will be deleted. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1006 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1014 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1008 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1016 msgid "Save search/replace" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1009 msgid "Search/replace name:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1015 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1017 msgid "That saved search/replace already exists and will be overwritten. Are you sure?" msgstr "" @@ -7443,7 +7483,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:539 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:431 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:432 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:148 msgid "Open Tag Editor" msgstr "" @@ -7569,14 +7609,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:581 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:465 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:440 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:591 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:609 msgid "&Basic metadata" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:582 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:466 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:447 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:463 msgid "&Custom metadata" msgstr "" @@ -7736,18 +7776,18 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:122 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:128 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:268 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:275 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:274 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:281 msgid "Could not read cover" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:123 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:269 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:275 msgid "Could not read cover from %s format" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:129 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:276 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:282 msgid "The cover in the %s format is invalid" msgstr "" @@ -7862,7 +7902,7 @@ msgid " The red color warns that the current title sort does not match the curre msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:472 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:53 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:54 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:106 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:221 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:384 @@ -7871,13 +7911,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:475 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:484 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:395 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:416 msgid "Save changes and edit the metadata of %s" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:481 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:49 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:50 #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:820 #: /home/kovid/work/calibre/src/calibre/library/server/browse.py:107 #: /home/kovid/work/calibre/src/calibre/web/feeds/templates.py:211 @@ -7931,12 +7971,12 @@ msgid "You must specify at least one of ISBN, Title, Authors or Publisher" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:961 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:358 msgid "Permission denied" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:962 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:343 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:359 msgid "Could not open %s. Is it being used by another program?" msgstr "" @@ -7949,19 +7989,19 @@ msgid "Meta information" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:410 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:95 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:96 msgid "" "Automatically create the title sort entry based on the current title entry.\n" "Using this button to create title sort will change title sort from red to green." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:413 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:117 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:118 msgid "Swap the author and title" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:415 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:106 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:107 msgid "" "Automatically create the author sort entry based on the current author entry.\n" "Using this button to create author sort will change author sort from red to green." @@ -7988,7 +8028,7 @@ msgid "" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:436 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:124 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:125 msgid "Remove unused series (Series that have no books)" msgstr "" @@ -8068,7 +8108,7 @@ msgid "Update metadata from the metadata in the selected format" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:464 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:652 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:674 msgid "&Comments" msgstr "" @@ -8518,6 +8558,7 @@ msgid "Choose formats" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:145 #: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:102 msgid "Authors" msgstr "" @@ -8662,12 +8703,12 @@ msgid "%s (was %s)" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:85 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1380 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1385 msgid "Item is blank" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_list_editor.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1381 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1386 msgid "An item cannot be set to nothing. Delete it instead." msgstr "" @@ -8956,56 +8997,56 @@ msgstr "" msgid "Failed to download from %r with error: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:91 msgid "Email %s to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:189 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:110 msgid "News:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:191 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:112 msgid "Attached is the %s periodical downloaded by calibre." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:244 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:160 msgid "E-book:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:253 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:168 msgid "Attached, you will find the e-book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:254 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:169 #: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:185 msgid "by" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:255 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:170 msgid "in the %s format." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:270 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:184 msgid "Sending email to" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:301 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:215 msgid "Auto convert the following books before sending via email?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:308 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:222 msgid "Could not email the following books as no suitable formats were found:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:228 msgid "Failed to email book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:317 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:231 msgid "sent" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/email.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/email.py:254 msgid "Sent news to" msgstr "" @@ -9143,74 +9184,79 @@ msgstr "" msgid "Shift+Alt+D" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:62 msgid "Job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:63 msgid "Status" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:63 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:64 msgid "Progress" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:64 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:65 msgid "Running time" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:76 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:77 msgid "There are %d running jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:80 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:87 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:102 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:103 msgid "Unknown job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:83 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:84 msgid "There are %d waiting jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:219 -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:240 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:246 msgid "Cannot kill job" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:220 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:241 msgid "Cannot kill jobs that communicate with the device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:244 msgid "Job has already run" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:262 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:247 +msgid "This job cannot be stopped" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:283 msgid "Unavailable" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:294 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:327 msgid "Jobs:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:296 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:329 msgid "Shift+Alt+J" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:346 msgid "Click to see list of jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:382 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:415 msgid " - Jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:424 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:457 msgid "Do you really want to stop the selected job?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:463 msgid "Do you really want to stop all non-device jobs?" msgstr "" @@ -9227,7 +9273,7 @@ msgid "Show books in the main memory of the device" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:67 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1014 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1017 msgid "Card A" msgstr "" @@ -9236,7 +9282,7 @@ msgid "Show books in storage card A" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/layout.py:69 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1016 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1019 msgid "Card B" msgstr "" @@ -9276,23 +9322,23 @@ msgstr "" msgid "Reset Quick Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:207 msgid "Change the way searching for books works" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:215 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:219 msgid "Copy current search text (instead of search name)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:225 msgid "Save current search under the name shown in the box" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:231 msgid "Delete current saved search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:263 +#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:267 msgid "Donate" msgstr "" @@ -9314,38 +9360,38 @@ msgstr "" msgid "Size (MB)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:394 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:401 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:764 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1314 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:796 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:771 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1321 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:797 msgid "The lookup/search name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:770 -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1316 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:777 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1323 msgid "This book's UUID is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1020 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1027 msgid "In Library" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1024 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1031 msgid "Size" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1214 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1221 msgid "Book %s of %s." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1294 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1301 msgid "Marked for deletion" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1297 +#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1304 msgid "Double click to edit me

" msgstr "" @@ -9389,7 +9435,7 @@ msgstr "" msgid "Restore default layout" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:790 +#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:830 msgid "Dropping onto a device is not supported. First add the book to the calibre library." msgstr "" @@ -9635,10 +9681,6 @@ msgstr "" msgid "stars" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:848 -msgid "Tags categorize the book. This is particularly useful while searching.

They can be any wordsor phrases, separated by commas." -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:907 msgid "I&ds:" msgstr "" @@ -9666,10 +9708,6 @@ msgstr "" msgid "No matches found for this book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:187 -msgid "Failed to download metadata" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download.py:227 msgid "cover" msgstr "" @@ -9700,33 +9738,139 @@ msgstr "" msgid "Details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:74 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:34 +msgid "Schedule download?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:35 +msgid "The download of metadata for the %d selected book(s) will run in the background. Proceed?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:37 +msgid "You can monitor the progress of the download by clicking the rotating spinner in the bottom right corner." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:40 +msgid "When the download completes you will be asked for confirmation before calibre applies the downloaded metadata." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:43 +msgid "Configure download" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:54 +msgid "Download metadata for %d books" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:57 +msgid "Metadata download started" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:74 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:766 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:205 +msgid "Copy to clipboard" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:81 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:773 +msgid "Download log" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:103 +msgid "Applying downloaded metadata to your library" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:172 +msgid "Some failures" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:173 +msgid "Failed to apply updated metadata for some books in your library. Click \"Show Details\" to see details." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:212 +msgid "Some books changed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:213 +msgid "The metadata for some books in your library has changed since you started the download. If you proceed, some of those changes may be overwritten. Click \"Show details\" to see the list of changed books. Do you want to proceed?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:224 +msgid "Metadata download completed" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:228 +msgid "Could not download metadata and/or covers for %d of the books. Click \"Show details\" to see which books." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:234 +msgid "(Failed metadata)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:236 +msgid "(Failed cover)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:238 +msgid "Finished downloading metadata for %d book(s). Proceed with updating the metadata in your library?" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:240 +msgid "Download complete" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:243 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:918 +msgid "View log" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/bulk_download2.py:315 +msgid "Downloaded %d of %d" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/config.py:58 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:106 +msgid "Downloaded metadata fields" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:75 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:233 msgid "Edit Metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:163 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:164 msgid "&Download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:487 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:671 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:174 +msgid "Change how calibre downloads metadata" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:693 msgid "Change cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:535 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:553 msgid "Co&mments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:574 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:592 msgid "&Metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:579 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:597 msgid "&Cover and formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:640 +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:616 +msgid "Configure metadata downloading" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:662 msgid "C&ustom metadata" msgstr "" @@ -9794,26 +9938,16 @@ msgstr "" msgid "Found %d covers of %s. Pick the one you like best." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:766 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:205 -msgid "Copy to clipboard" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:773 -msgid "Download log" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:809 msgid "Downloading metadata..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:827 -#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:918 -msgid "View log" +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/__init__.py:37 +msgid "Restore settings to default values. You have to click Apply to actually save the default settings." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/__init__.py:36 -msgid "Restore settings to default values. You have to click Apply to actually save the default settings." +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/__init__.py:325 +msgid "Configure " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/preferences/adding.py:28 @@ -10075,9 +10209,9 @@ msgstr "" #: #: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:41 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:145 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:73 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:149 msgid "Yes/No" msgstr "" @@ -10087,125 +10221,130 @@ msgid "Column built from other columns" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:50 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:51 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:45 +msgid "Column built from other columns, behaves like tags" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:52 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:53 msgid "Create a custom column" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:62 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:64 msgid "Quick create:" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:64 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:149 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:153 msgid "Modified Date" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:66 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:68 msgid "People's names" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:73 msgid "Number" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:73 msgid "Text" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:86 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:87 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:88 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:89 msgid "Edit a custom column" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:91 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:93 msgid "No column selected" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:92 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:94 msgid "No column has been selected" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:98 msgid "Selected column is not a user-defined column" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:146 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:150 msgid "My Tags" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:147 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:151 msgid "My Series" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:148 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:152 msgid "My Rating" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:150 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:154 msgid "People" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:179 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:183 msgid "No lookup name was provided" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:183 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:187 msgid "The lookup name must contain only lower case letters, digits and underscores, and start with a letter" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:186 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:190 msgid "Lookup names cannot end with _index, because these names are reserved for the index of a series column." msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:196 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:200 msgid "No column heading was provided" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:206 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:210 msgid "The lookup name %s is already used" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:218 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:222 msgid "The heading %s is already used" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:233 msgid "You must enter a template for composite columns" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:238 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:242 msgid "You must enter at least one value for enumeration columns" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:242 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:246 msgid "You cannot provide the empty value, as it is included by default" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:246 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:250 msgid "The value \"{0}\" is in the list more than once" msgstr "" @@ -10587,65 +10726,100 @@ msgid "Restart needed" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:46 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:47 msgid "Source" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:48 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:49 msgid "Cover priority" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:93 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:75 +msgid "This source is configured and ready to go" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:76 +msgid "This source needs configuration" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:147 +msgid "Published date" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:229 +msgid "Configure %s
%s" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:277 +msgid "No source selected" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:278 +msgid "No source selected, cannot configure." +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:101 msgid "Metadata sources" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:94 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:102 msgid "" "Disable any metadata sources you do not want by unchecking them. You can also set the cover priority. Covers from sources that have a higher (smaller) priority will be preferred when bulk downloading metadata.\n" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:96 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:104 +msgid "Sources with a red X next to their names must be configured before they will be used. " +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:105 msgid "Configure selected source" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:97 -msgid "Downloaded metadata fields" -msgstr "" - -#: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:98 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:107 msgid "If you uncheck any fields, metadata for those fields will not be downloaded" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:99 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:108 msgid "Convert all downloaded comments to plain &text" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:100 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:109 +msgid "Swap author names from FN LN to LN, FN" +msgstr "" + +#: +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:110 msgid "Max. number of &tags to download:" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:101 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:111 msgid "Max. &time to wait after first match is found:" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:102 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:104 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:112 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:114 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/config_ui.py:199 msgid " secs" msgstr "" #: -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:103 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:113 msgid "Max. time to wait after first &cover is found:" msgstr "" @@ -11364,28 +11538,28 @@ msgstr "" msgid "Remove selected actions from toolbar" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:113 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:114 msgid "This tweak has it default value" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:116 msgid "This tweak has been customized" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:237 msgid "Add/edit tweaks for any custom plugins you have installed. Documentation for these tweaks should be available on the website from where you downloaded the plugins." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:277 -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:317 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:318 msgid "There was a syntax error in your tweak. Click the show details button for details." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:330 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:331 msgid "Invalid tweaks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:331 +#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:332 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 "" @@ -11432,28 +11606,38 @@ msgstr "" msgid "Search (For Advanced Search click the button to the left)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:431 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:388 +msgid "Enable or disable search highlighting." +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:447 msgid "Saved Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:433 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:449 msgid "Choose saved search or enter name for new saved search" msgstr "" +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:462 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:34 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:42 +msgid "*Current search" +msgstr "" + #: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:12 msgid "Restrict to" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:19 -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:59 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:79 msgid "(all books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:54 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:74 msgid "({0} of {1})" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:61 +#: /home/kovid/work/calibre/src/calibre/gui2/search_restriction_mixin.py:81 msgid "({0} of all)" msgstr "" @@ -11512,164 +11696,172 @@ msgstr "" msgid "&Alternate shortcut:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:344 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:374 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:403 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:345 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:375 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:404 msgid "Rename %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:349 msgid "Edit sort for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:356 msgid "Add %s to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:369 msgid "Children of %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:379 msgid "Delete search %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:383 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:384 msgid "Remove %s from category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:390 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:391 msgid "Search for %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:395 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:396 msgid "Search for everything but %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:408 msgid "Add sub-category to %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:411 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:412 msgid "Delete user category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:416 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:417 msgid "Hide category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:420 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:421 msgid "Show category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:431 msgid "Search for books in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:436 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:437 msgid "Search for books not in category %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:445 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:450 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:446 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:451 msgid "Manage %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:453 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:454 msgid "Manage Saved Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:461 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:465 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:462 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:466 msgid "Manage User Categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:472 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:473 msgid "Show all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:475 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:476 msgid "Change sub-categorization scheme" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:791 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:792 msgid "The grouped search term name is \"{0}\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1064 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1065 msgid "Changing the authors for several books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1069 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1070 msgid "Changing the metadata for that many books can take a while. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1152 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1157 #: /home/kovid/work/calibre/src/calibre/library/database2.py:418 msgid "Searches" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1386 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1406 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1415 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1391 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1411 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1420 msgid "Rename user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1387 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1392 msgid "You cannot use periods in the name when renaming user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1407 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1412 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1421 msgid "The name %s is already used" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1439 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1444 msgid "Duplicate search name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1440 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1445 msgid "The saved search name %s is already used." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1842 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1836 +msgid "Invalid search restriction" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1837 +msgid "The current search restriction is invalid" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1853 msgid "New Category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1893 -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1896 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1904 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1907 msgid "Delete user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1894 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1905 msgid "%s is not a user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1897 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1908 msgid "%s contains items. Do you really want to delete it?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1918 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1929 msgid "Remove category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1919 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1930 msgid "User category %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1938 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1949 msgid "Add to user category" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1939 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1950 msgid "A user category %s does not exist" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2062 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2073 msgid "Find item in tag browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2065 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2076 msgid "" "Search for items. This is a \"contains\" search; items containing the\n" "text anywhere in the name will be found. You can limit the search\n" @@ -11679,59 +11871,59 @@ msgid "" "containing the text \"foo\"" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2074 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2085 msgid "ALT+f" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2078 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2089 msgid "F&ind" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2079 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2090 msgid "Find the first/next matching item" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2084 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2095 msgid "Collapse all categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2108 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2119 msgid "No More Matches.

Click Find again to go to first match" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2121 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2132 msgid "Sort by name" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2121 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2132 msgid "Sort by popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2122 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2133 msgid "Sort by average rating" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2125 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2136 msgid "Set the sort order for entries in the Tag Browser" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2132 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2143 msgid "Match all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2132 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2143 msgid "Match any" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2137 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2148 msgid "When selecting multiple entries in the Tag Browser match any or all of them" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2141 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2152 msgid "Manage &user categories" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2144 +#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2155 msgid "Add your own categories to the Tag Browser" msgstr "" @@ -11797,30 +11989,30 @@ msgstr "" msgid "You have started calibre in debug mode. After you quit calibre, the debug log will be available in the file: %s

The log will be displayed automatically." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:506 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:528 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:529 msgid "Recipe Disabled" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:544 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:545 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:577 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:578 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:580 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:581 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:584 +#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:585 msgid "Active jobs" msgstr "" @@ -12617,53 +12809,53 @@ msgid "Turn on the &content server" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:161 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:565 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:575 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:574 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:584 msgid "checked" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:161 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:565 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:575 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:574 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:584 #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:192 msgid "yes" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:163 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:562 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:572 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:571 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:581 msgid "unchecked" msgstr "" #: /home/kovid/work/calibre/src/calibre/library/caches.py:163 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:562 -#: /home/kovid/work/calibre/src/calibre/library/caches.py:572 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:571 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:581 #: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:192 msgid "no" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/caches.py:355 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:356 msgid "today" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/caches.py:358 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:359 msgid "yesterday" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/caches.py:361 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:362 msgid "thismonth" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/caches.py:364 #: /home/kovid/work/calibre/src/calibre/library/caches.py:365 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:366 msgid "daysago" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/caches.py:569 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:578 msgid "blank" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/caches.py:569 +#: /home/kovid/work/calibre/src/calibre/library/caches.py:578 msgid "empty" msgstr "" @@ -13409,11 +13601,11 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/custom_columns.py:591 +#: /home/kovid/work/calibre/src/calibre/library/custom_columns.py:594 msgid "No label was provided" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/custom_columns.py:593 +#: /home/kovid/work/calibre/src/calibre/library/custom_columns.py:596 msgid "The label must contain only lower case letters, digits and underscores, and start with a letter" msgstr "" @@ -13421,19 +13613,19 @@ msgstr "" msgid "%sAverage rating is %3.1f" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1012 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1015 msgid "Main" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3056 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3075 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3085 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3104 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:3102 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:3121 msgid "Compacting database" msgstr "" @@ -14029,22 +14221,22 @@ msgid "subitems(val, start_index, end_index) -- This function is used to break a msgstr "" #: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:495 -msgid "format_date(val, format_string) -- format the value, which must be a date field, using the format_string, returning a string. The formatting codes are: d : the day as number without a leading zero (1 to 31) dd : the day as number with a leading zero (01 to 31) ddd : the abbreviated localized day name (e.g. \"Mon\" to \"Sun\"). dddd : the long localized day name (e.g. \"Monday\" to \"Sunday\"). M : the month as number without a leading zero (1 to 12). MM : the month as number with a leading zero (01 to 12) MMM : the abbreviated localized month name (e.g. \"Jan\" to \"Dec\"). MMMM : the long localized month name (e.g. \"January\" to \"December\"). yy : the year as two digit number (00 to 99). yyyy : the year as four digit number." +msgid "format_date(val, format_string) -- format the value, which must be a date field, using the format_string, returning a string. The formatting codes are: d : the day as number without a leading zero (1 to 31) dd : the day as number with a leading zero (01 to 31) ddd : the abbreviated localized day name (e.g. \"Mon\" to \"Sun\"). dddd : the long localized day name (e.g. \"Monday\" to \"Sunday\"). M : the month as number without a leading zero (1 to 12). MM : the month as number with a leading zero (01 to 12) MMM : the abbreviated localized month name (e.g. \"Jan\" to \"Dec\"). MMMM : the long localized month name (e.g. \"January\" to \"December\"). yy : the year as two digit number (00 to 99). yyyy : the year as four digit number. iso : the date with time and timezone. Must be the only format present" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:522 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:523 msgid "uppercase(val) -- return value of the field in upper case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:530 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:531 msgid "lowercase(val) -- return value of the field in lower case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:538 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:539 msgid "titlecase(val) -- return value of the field in title case" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:546 +#: /home/kovid/work/calibre/src/calibre/utils/formatter_functions.py:547 msgid "capitalize(val) -- return value of the field capitalized" msgstr "" From ab26bbe47e6cdcb3e203ece3140241eda054b3c9 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 13:58:27 -0600 Subject: [PATCH 02/19] Updated NSPM. Fixes #762130 (Updated recipe for NSPM) --- recipes/nspm.recipe | 101 ++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 31 deletions(-) diff --git a/recipes/nspm.recipe b/recipes/nspm.recipe index 58b782415b..f5a54b0a9a 100644 --- a/recipes/nspm.recipe +++ b/recipes/nspm.recipe @@ -1,12 +1,12 @@ __license__ = 'GPL v3' -__copyright__ = '2008-2010, Darko Miletic ' +__copyright__ = '2008-2011, Darko Miletic ' ''' nspm.rs ''' import re from calibre.web.feeds.news import BasicNewsRecipe -from calibre.ebooks.BeautifulSoup import NavigableString +from calibre.ebooks.BeautifulSoup import NavigableString, Tag class Nspm(BasicNewsRecipe): title = 'Nova srpska politicka misao' @@ -21,7 +21,6 @@ class Nspm(BasicNewsRecipe): INDEX = 'http://www.nspm.rs/?alphabet=l' encoding = 'utf-8' language = 'sr' - delay = 2 remove_empty_feeds = True publication_type = 'magazine' masthead_url = 'http://www.nspm.rs/templates/jsn_epic_pro/images/logol.jpg' @@ -29,27 +28,21 @@ class Nspm(BasicNewsRecipe): @font-face {font-family: "sans1";src:url(res:///opt/sony/ebook/FONT/tt0003m_.ttf)} body{font-family: "Times New Roman", serif1, serif} .article_description{font-family: Arial, sans1, sans-serif} - img{margin-top:0.5em; margin-bottom: 0.7em} + img{margin-top:0.5em; margin-bottom: 0.7em; display: block} .author{color: #990000; font-weight: bold} .author,.createdate{font-size: 0.9em} """ conversion_options = { - 'comment' : description - , 'tags' : category - , 'publisher' : publisher - , 'language' : language - , 'linearize_tables' : True + 'comment' : description + , 'tags' : category + , 'publisher' : publisher + , 'language' : language + , 'pretty_print' : True } preprocess_regexps = [(re.compile(u'\u0110'), lambda match: u'\u00D0')] - keep_only_tags = [dict(attrs={'id':'jsn-mainbody'})] - remove_tags = [ - dict(name=['link','object','embed','script','meta','base','iframe']) - ,dict(attrs={'class':'buttonheading'}) - ] - remove_tags_before = dict(attrs={'class':'contentheading'}) - remove_tags_after = dict(attrs={'class':'article_separator'}) - remove_attributes = ['width','height'] + remove_tags = [dict(name=['link','script','meta','base','img'])] + remove_attributes = ['width','height','lang','xmlns:fb','xmlns:og','vspace','hspace','type','start','size'] def get_browser(self): br = BasicNewsRecipe.get_browser() @@ -57,21 +50,67 @@ class Nspm(BasicNewsRecipe): return br feeds = [ - (u'Rubrike' , u'http://www.nspm.rs/rubrike/feed/rss.html') - ,(u'Debate' , u'http://www.nspm.rs/debate/feed/rss.html') - ,(u'Reci i misli' , u'http://www.nspm.rs/reci-i-misli/feed/rss.html') + (u'Rubrike' , u'http://www.nspm.rs/rubrike/feed/rss.html' ) + ,(u'Debate' , u'http://www.nspm.rs/debate/feed/rss.html' ) + ,(u'Reci i misli' , u'http://www.nspm.rs/reci-i-misli/feed/rss.html' ) ,(u'Samo smeh srbina spasava', u'http://www.nspm.rs/samo-smeh-srbina-spasava/feed/rss.html') - ,(u'Polemike' , u'http://www.nspm.rs/polemike/feed/rss.html') - ,(u'Prikazi' , u'http://www.nspm.rs/prikazi/feed/rss.html') - ,(u'Prenosimo' , u'http://www.nspm.rs/prenosimo/feed/rss.html') - ,(u'Hronika' , u'http://www.nspm.rs/tabela/hronika/feed/rss.html') + ,(u'Polemike' , u'http://www.nspm.rs/polemike/feed/rss.html' ) + ,(u'Prikazi' , u'http://www.nspm.rs/prikazi/feed/rss.html' ) + ,(u'Prenosimo' , u'http://www.nspm.rs/prenosimo/feed/rss.html' ) + ,(u'Hronika' , u'http://www.nspm.rs/tabela/hronika/feed/rss.html' ) ] def preprocess_html(self, soup): - for item in soup.body.findAll(style=True): - del item['style'] - for item in soup.body.findAll('h1'): - nh = NavigableString(item.a.string) - item.a.extract() - item.insert(0,nh) - return self.adeify_images(soup) + atitle = soup.body.find('a',attrs={'class':'contentpagetitle'}) + if atitle: + cleanTitle = Tag(soup,'h1',[('class','contentpagetitle')]) + cnt = NavigableString(self.tag_to_string(atitle)) + cleanTitle.append(cnt) + + author = soup.body.find('span',attrs={'class':'author'}) + if author: + author.extract() + author.name = 'div' + + crdate = soup.body.find('td',attrs={'class':'createdate'}) + if crdate: + cleanCrdate = Tag(soup,'div',[('class','createdate')]) + cnt = NavigableString(self.tag_to_string(crdate)) + cleanCrdate.append(cnt) + + #get the dependant element + artText = Tag(soup,'div',[('class','text')]) + textHolderp = crdate.parent + textHolder = textHolderp.nextSibling + while textHolder and (not isinstance(textHolder,Tag) or (textHolder.name <> textHolderp.name)): + textHolder = textHolder.nextSibling + if textHolder.td: + artText = textHolder.td + artText.name = 'div' + artText.attrs = [] + artText['class'] = 'text' + artText.extract() + + soup.body.contents=[] + + soup.body.append(cleanTitle) + soup.body.append(author) + soup.body.append(cleanCrdate) + soup.body.append(artText) + + for item in soup.findAll('a'): + limg = item.find('img') + if item.string is not None: + str = item.string + item.replaceWith(str) + else: + if limg: + item.name = 'div' + item.attrs = [] + else: + str = self.tag_to_string(item) + item.replaceWith(str) + for item in soup.findAll('img'): + if not item.has_key('alt'): + item['alt'] = 'image' + return soup From bd01d416bcf70f0d43ff3b2e3f9f7e696f879d68 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 14:32:41 -0600 Subject: [PATCH 03/19] Add a tool to inspect MOBI files. To use: calibre-debug -m file.mobi --- src/calibre/debug.py | 5 + src/calibre/ebooks/mobi/debug.py | 375 +++++++++++++++++++++++++++++++ 2 files changed, 380 insertions(+) create mode 100644 src/calibre/ebooks/mobi/debug.py diff --git a/src/calibre/debug.py b/src/calibre/debug.py index 3a080fc57b..86a0477811 100644 --- a/src/calibre/debug.py +++ b/src/calibre/debug.py @@ -51,6 +51,8 @@ Run an embedded python interpreter. 'with sqlite3 works.') parser.add_option('-p', '--py-console', help='Run python console', default=False, action='store_true') + parser.add_option('-m', '--inspect-mobi', + help='Inspect the MOBI file at the specified path', default=None) return parser @@ -227,6 +229,9 @@ def main(args=sys.argv): if len(args) > 1 and os.access(args[-1], os.R_OK): sql_dump = args[-1] reinit_db(opts.reinitialize_db, sql_dump=sql_dump) + elif opts.inspect_mobi is not None: + from calibre.ebooks.mobi.debug import inspect_mobi + inspect_mobi(opts.inspect_mobi) else: from calibre import ipython ipython() diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py new file mode 100644 index 0000000000..13a8e204bb --- /dev/null +++ b/src/calibre/ebooks/mobi/debug.py @@ -0,0 +1,375 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +from __future__ import (unicode_literals, division, absolute_import, + print_function) + +__license__ = 'GPL v3' +__copyright__ = '2011, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +import struct, datetime +from calibre.utils.date import utc_tz +from calibre.ebooks.mobi.langcodes import main_language, sub_language + +class PalmDOCAttributes(object): + + class Attr(object): + + def __init__(self, name, field, val): + self.name = name + self.val = val & field + + def __str__(self): + return '%s: %s'%(self.name, bool(self.val)) + + def __init__(self, raw): + self.val = struct.unpack(b'H', self.raw[34:36])[0] + + palm_epoch = datetime.datetime(1904, 1, 1, tzinfo=utc_tz) + self.creation_date_raw = struct.unpack(b'>I', self.raw[36:40])[0] + self.creation_date = (palm_epoch + + datetime.timedelta(seconds=self.creation_date_raw)) + self.modification_date_raw = struct.unpack(b'>I', self.raw[40:44])[0] + self.modification_date = (palm_epoch + + datetime.timedelta(seconds=self.modification_date_raw)) + self.last_backup_date_raw = struct.unpack(b'>I', self.raw[44:48])[0] + self.last_backup_date = (palm_epoch + + datetime.timedelta(seconds=self.last_backup_date_raw)) + self.modification_number = struct.unpack(b'>I', self.raw[48:52])[0] + self.app_info_id = self.raw[52:56] + self.sort_info_id = self.raw[56:60] + self.type = self.raw[60:64] + self.creator = self.raw[64:68] + self.ident = self.type + self.creator + if self.ident not in (b'BOOKMOBI', b'TEXTREAD'): + raise ValueError('Unknown book ident: %r'%self.ident) + self.uid_seed = self.raw[68:72] + self.next_rec_list_id = self.raw[72:76] + + self.number_of_records, = struct.unpack(b'>H', self.raw[76:78]) + + def __str__(self): + ans = ['*'*20 + ' PalmDB Header '+ '*'*20] + ans.append('Name: %r'%self.name) + ans.append(str(self.attributes)) + ans.append('Version: %s'%self.version) + ans.append('Creation date: %s (%s)'%(self.creation_date.isoformat(), + self.creation_date_raw)) + ans.append('Modification date: %s (%s)'%(self.modification_date.isoformat(), + self.modification_date_raw)) + ans.append('Backup date: %s (%s)'%(self.last_backup_date.isoformat(), + self.last_backup_date_raw)) + ans.append('Modification number: %s'%self.modification_number) + ans.append('App Info ID: %r'%self.app_info_id) + ans.append('Sort Info ID: %r'%self.sort_info_id) + ans.append('Type: %r'%self.type) + ans.append('Creator: %r'%self.creator) + ans.append('UID seed: %r'%self.uid_seed) + ans.append('Next record list id: %r'%self.next_rec_list_id) + ans.append('Number of records: %s'%self.number_of_records) + + return '\n'.join(ans) + +class Record(object): + + def __init__(self, raw, header): + self.offset, self.flags, self.uid = header + self.raw = raw + + @property + def header(self): + return 'Offset: %d Flags: %d UID: %d'%(self.offset, self.flags, + self.uid) + +class EXTHRecord(object): + + def __init__(self, type_, data): + self.type = type_ + self.data = data + self.name = { + 1 : 'DRM Server id', + 2 : 'DRM Commerce id', + 3 : 'DRM ebookbase book id', + 100 : 'author', + 101 : 'publisher', + 102 : 'imprint', + 103 : 'description', + 104 : 'isbn', + 105 : 'subject', + 106 : 'publishingdate', + 107 : 'review', + 108 : 'contributor', + 109 : 'rights', + 110 : 'subjectcode', + 111 : 'type', + 112 : 'source', + 113 : 'asin', + 114 : 'versionnumber', + 115 : 'sample', + 116 : 'startreading', + 117 : 'adult', + 118 : 'retailprice', + 119 : 'retailpricecurrency', + 201 : 'coveroffset', + 202 : 'thumboffset', + 203 : 'hasfakecover', + 204 : 'Creator Software', + 205 : 'Creator Major Version', # '>I' + 206 : 'Creator Minor Version', # '>I' + 207 : 'Creator Build number', # '>I' + 208 : 'watermark', + 209 : 'tamper_proof_keys', + 300 : 'fontsignature', + 301 : 'clippinglimit', # percentage '>B' + 402 : 'publisherlimit', + 404 : 'TTS flag', # '>B' 1 - TTS disabled 0 - TTS enabled + 501 : 'cdetype', # 4 chars (PDOC or EBOK) + 502 : 'lastupdatetime', + 503 : 'updatedtitle', + }.get(self.type, repr(self.type)) + + def __str__(self): + return '%s (%d): %r'%(self.name, self.type, self.data) + +class EXTHHeader(object): + + def __init__(self, raw): + self.raw = raw + if not self.raw.startswith(b'EXTH'): + raise ValueError('EXTH header does not start with EXTH') + self.length, = struct.unpack(b'>I', self.raw[4:8]) + self.count, = struct.unpack(b'>I', self.raw[8:12]) + + pos = 12 + self.records = [] + for i in xrange(self.count): + pos = self.read_record(pos) + + def read_record(self, pos): + type_, length = struct.unpack(b'>II', self.raw[pos:pos+8]) + data = self.raw[pos+8:pos+length-8] + self.records.append(EXTHRecord(type_, data)) + return pos + length + + def __str__(self): + ans = ['*'*20 + ' EXTH Header '+ '*'*20] + ans.append('EXTH header length: %d'%self.length) + ans.append('Number of EXTH records: %d'%self.count) + ans.append('EXTH records...') + for r in self.records: + ans.append(str(r)) + return '\n'.join(ans) + + +class MOBIHeader(object): + + def __init__(self, record0): + self.raw = record0.raw + + self.compression_raw = self.raw[:2] + self.compression = {1: 'No compression', 2: 'PalmDoc compression', + 17480: 'HUFF/CDIC compression'}.get(struct.unpack(b'>H', + self.compression_raw)[0], + repr(self.compression_raw)) + self.unused = self.raw[2:4] + self.text_length, = struct.unpack(b'>I', self.raw[4:8]) + self.number_of_text_records, self.text_record_size = \ + struct.unpack(b'>HH', self.raw[8:12]) + self.encryption_type_raw, = struct.unpack(b'>H', self.raw[12:14]) + self.encryption_type = {0: 'No encryption', + 1: 'Old mobipocket encryption', + 2:'Mobipocket encryption'}.get(self.encryption_type_raw, + repr(self.encryption_type_raw)) + self.unknown = self.raw[14:16] + + self.identifier = self.raw[16:20] + if self.identifier != b'MOBI': + raise ValueError('Identifier %r unknown'%self.identifier) + + self.length, = struct.unpack(b'>I', self.raw[20:24]) + self.type_raw, = struct.unpack(b'>I', self.raw[24:28]) + self.type = { + 2 : 'Mobipocket book', + 3 : 'PalmDOC book', + 4 : 'Audio', + 257 : 'News', + 258 : 'News Feed', + 259 : 'News magazine', + 513 : 'PICS', + 514 : 'Word', + 515 : 'XLS', + 516 : 'PPT', + 517 : 'TEXT', + 518 : 'HTML', + }.get(self.type_raw, repr(self.type_raw)) + + self.encoding_raw, = struct.unpack(b'>I', self.raw[28:32]) + self.encoding = { + 1252 : 'cp1252', + 65001: 'utf-8', + }.get(self.encoding_raw, repr(self.encoding_raw)) + self.uid = self.raw[32:36] + self.file_version = struct.unpack(b'>I', self.raw[36:40]) + self.reserved = self.raw[40:80] + self.first_non_book_record, = struct.unpack(b'>I', self.raw[80:84]) + self.fullname_offset, = struct.unpack(b'>I', self.raw[84:88]) + self.fullname_length, = struct.unpack(b'>I', self.raw[88:92]) + self.locale_raw, = struct.unpack(b'>I', self.raw[92:96]) + langcode = self.locale_raw + langid = langcode & 0xFF + sublangid = (langcode >> 10) & 0xFF + self.language = main_language.get(langid, 'ENGLISH') + self.sublanguage = sub_language.get(sublangid, 'NEUTRAL') + + self.input_language = self.raw[96:100] + self.output_langauage = self.raw[100:104] + self.min_version, = struct.unpack(b'>I', self.raw[104:108]) + self.first_image_index, = struct.unpack(b'>I', self.raw[108:112]) + self.huffman_record_offset, = struct.unpack(b'>I', self.raw[112:116]) + self.huffman_record_count, = struct.unpack(b'>I', self.raw[116:120]) + self.unknown2 = self.raw[120:128] + self.exth_flags, = struct.unpack(b'>I', self.raw[128:132]) + self.has_exth = bool(self.exth_flags & 0x40) + self.has_drm_data = self.length >= 184 and len(self.raw) >= 184 + if self.has_drm_data: + self.unknown3 = self.raw[132:164] + self.drm_offset, = struct.unpack(b'>I', self.raw[164:168]) + self.drm_count, = struct.unpack(b'>I', self.raw[168:172]) + self.drm_size, = struct.unpack(b'>I', self.raw[172:176]) + self.drm_flags = bin(struct.unpack(b'>I', self.raw[176:180])[0]) + self.has_extra_data_flags = self.length >= 244 and len(self.raw) >= 244 + if self.has_extra_data_flags: + self.unknown4 = self.raw[180:242] + self.extra_data_flags = bin(struct.unpack(b'>H', + self.raw[242:244])[0]) + + if self.has_exth: + self.exth_offset = 16 + self.length + + self.exth = EXTHHeader(self.raw[self.exth_offset:]) + + self.end_of_exth = self.exth_offset + self.exth.length + self.bytes_after_exth = len(self.raw) - self.end_of_exth + + def __str__(self): + ans = ['*'*20 + ' MOBI Header '+ '*'*20] + ans.append('Compression: %s'%self.compression) + ans.append('Unused: %r'%self.unused) + ans.append('Number of text records: %d'%self.number_of_text_records) + ans.append('Text record size: %d'%self.text_record_size) + ans.append('Encryption: %s'%self.encryption_type) + ans.append('Unknown: %r'%self.unknown) + ans.append('Identifier: %r'%self.identifier) + ans.append('Header length: %d'% self.length) + ans.append('Type: %s'%self.type) + ans.append('Encoding: %s'%self.encoding) + ans.append('UID: %r'%self.uid) + ans.append('File version: %d'%self.file_version) + ans.append('Reserved: %r'%self.reserved) + ans.append('First non-book record: %d'% self.first_non_book_record) + ans.append('Full name offset: %d'%self.fullname_offset) + ans.append('Full name length: %d bytes'%self.fullname_length) + ans.append('Langcode: %r'%self.locale_raw) + ans.append('Language: %s'%self.language) + ans.append('Sub language: %s'%self.sublanguage) + ans.append('Input language: %r'%self.input_language) + ans.append('Output language: %r'%self.output_langauage) + ans.append('Min version: %d'%self.min_version) + ans.append('First Image index: %d'%self.first_image_index) + ans.append('Huffman record offset: %d'%self.huffman_record_offset) + ans.append('Huffman record count: %d'%self.huffman_record_count) + ans.append('Unknown2: %r'%self.unknown2) + ans.append('EXTH flags: %r (%s)'%(self.exth_flags, self.has_exth)) + if self.has_drm_data: + ans.append('Unknown3: %r'%self.unknown3) + ans.append('DRM Offset: %s'%self.drm_offset) + ans.append('DRM Count: %s'%self.drm_count) + ans.append('DRM Size: %s'%self.drm_size) + ans.append('DRM Flags: %r'%self.drm_flags) + if self.has_extra_data_flags: + ans.append('Unknown4: %r'%self.unknown4) + ans.append('Extra data flags: %r'%self.extra_data_flags) + + ans = '\n'.join(ans) + + if self.has_exth: + ans += '\n\n' + str(self.exth) + ans += '\n\nBytes after EXTH: %d'%self.bytes_after_exth + + return ans + +class MOBIFile(object): + + def __init__(self, stream): + self.raw = stream.read() + + self.palmdb = PalmDB(self.raw[:78]) + + self.record_headers = [] + self.records = [] + for i in xrange(self.palmdb.number_of_records): + pos = 78 + i * 8 + offset, a1, a2, a3, a4 = struct.unpack(b'>LBBBB', self.raw[pos:pos+8]) + flags, val = a1, a2 << 16 | a3 << 8 | a4 + self.record_headers.append((offset, flags, val)) + + def section(section_number): + if section_number == self.palmdb.number_of_records - 1: + end_off = len(self.raw) + else: + end_off = self.record_headers[section_number + 1][0] + off = self.record_headers[section_number][0] + return self.raw[off:end_off] + + for i in range(self.palmdb.number_of_records): + self.records.append(Record(section(i), self.record_headers[i])) + + self.mobi_header = MOBIHeader(self.records[0]) + + + def print_header(self): + print (str(self.palmdb).encode('utf-8')) + print () + print ('Record headers:') + for i, r in enumerate(self.records): + print ('%6d. %s'%(i, r.header)) + + print () + print (str(self.mobi_header).encode('utf-8')) + +def inspect_mobi(path_or_stream): + stream = (path_or_stream if hasattr(path_or_stream, 'read') else + open(path_or_stream, 'rb')) + f = MOBIFile(stream) + f.print_header() + +if __name__ == '__main__': + import sys + f = MOBIFile(open(sys.argv[1], 'rb')) + f.print_header() + From 32464b666be699530418b2f9482d1e2fd1d2d25c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 14:39:49 -0600 Subject: [PATCH 04/19] ... --- src/calibre/ebooks/mobi/debug.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index 13a8e204bb..36aba39d65 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -172,7 +172,7 @@ class EXTHHeader(object): def read_record(self, pos): type_, length = struct.unpack(b'>II', self.raw[pos:pos+8]) - data = self.raw[pos+8:pos+length-8] + data = self.raw[(pos+8):(pos+length)] self.records.append(EXTHRecord(type_, data)) return pos + length @@ -321,6 +321,7 @@ class MOBIHeader(object): ans += '\n\n' + str(self.exth) ans += '\n\nBytes after EXTH: %d'%self.bytes_after_exth + ans += '\nRecord 0 length: %d'%len(self.raw) return ans class MOBIFile(object): From d84a8a721a0eb24b8567e09b309315f7fcf7d586 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 14:49:04 -0600 Subject: [PATCH 05/19] EPUB Input: Speed up processing of files with very large manifest/spines --- src/calibre/ebooks/epub/input.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/calibre/ebooks/epub/input.py b/src/calibre/ebooks/epub/input.py index e22ed27371..917c5ad8ae 100644 --- a/src/calibre/ebooks/epub/input.py +++ b/src/calibre/ebooks/epub/input.py @@ -175,18 +175,18 @@ class EPUBInput(InputFormatPlugin): raise ValueError( 'EPUB files with DTBook markup are not supported') + not_for_spine = set() + for y in opf.itermanifest(): + id_ = y.get('id', None) + if id_ and y.get('media-type', None) in \ + ('application/vnd.adobe-page-template+xml',): + not_for_spine.add(id_) + for x in list(opf.iterspine()): ref = x.get('idref', None) - if ref is None: + if ref is None or ref in not_for_spine: x.getparent().remove(x) continue - for y in opf.itermanifest(): - if y.get('id', None) == ref and y.get('media-type', None) in \ - ('application/vnd.adobe-page-template+xml',): - p = x.getparent() - if p is not None: - p.remove(x) - break with open('content.opf', 'wb') as nopf: nopf.write(opf.render()) From 77361444108f2e7ab3825ece60df4cd522d8d393 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 15:31:55 -0600 Subject: [PATCH 06/19] MOBI Output: Ensure that MOBI files always have 8KB worth of null bytes at the end of record 0. This appears to be necessary for Amazon to be able to add DRM to calibre generated MOBI files sent to their publishing service. --- src/calibre/ebooks/metadata/mobi.py | 1 + src/calibre/ebooks/mobi/debug.py | 5 ++++- src/calibre/ebooks/mobi/writer.py | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/calibre/ebooks/metadata/mobi.py b/src/calibre/ebooks/metadata/mobi.py index ffdef77d11..15fdceff15 100644 --- a/src/calibre/ebooks/metadata/mobi.py +++ b/src/calibre/ebooks/metadata/mobi.py @@ -259,6 +259,7 @@ class MetadataUpdater(object): trail = len(new_record0.getvalue()) % 4 pad = '\0' * (4 - trail) # Always pad w/ at least 1 byte new_record0.write(pad) + new_record0.write('\0'*(1024*8)) # Rebuild the stream, update the pdbrecords pointers self.patchSection(0,new_record0.getvalue()) diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index 36aba39d65..86ed3e9ef9 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -274,7 +274,7 @@ class MOBIHeader(object): self.exth = EXTHHeader(self.raw[self.exth_offset:]) self.end_of_exth = self.exth_offset + self.exth.length - self.bytes_after_exth = len(self.raw) - self.end_of_exth + self.bytes_after_exth = self.fullname_offset - self.end_of_exth def __str__(self): ans = ['*'*20 + ' MOBI Header '+ '*'*20] @@ -321,6 +321,9 @@ class MOBIHeader(object): ans += '\n\n' + str(self.exth) ans += '\n\nBytes after EXTH: %d'%self.bytes_after_exth + ans += '\nNumber of bytes after full name: %d' % (len(self.raw) - (self.fullname_offset + + self.fullname_length)) + ans += '\nRecord 0 length: %d'%len(self.raw) return ans diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index fc47b26c02..ddcba63eca 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -1511,7 +1511,7 @@ class MobiWriter(object): record0.write(exth) record0.write(title) record0 = record0.getvalue() - self._records[0] = record0 + ('\0' * (2452 - len(record0))) + self._records[0] = record0 + ('\0' * (1024*8)) def _build_exth(self): oeb = self._oeb From 96ab5a8c124cb02b06a221a1b6cee21894e57200 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 15:55:07 -0600 Subject: [PATCH 07/19] Fix Big Oven --- recipes/big_oven.recipe | 51 ++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 21 deletions(-) diff --git a/recipes/big_oven.recipe b/recipes/big_oven.recipe index d153255514..ba3a5dec38 100644 --- a/recipes/big_oven.recipe +++ b/recipes/big_oven.recipe @@ -23,7 +23,7 @@ class BigOven(BasicNewsRecipe): , 'publisher' : publisher , 'language' : language } - + def get_browser(self): br = BasicNewsRecipe.get_browser() if self.username is not None and self.password is not None: @@ -36,29 +36,38 @@ class BigOven(BasicNewsRecipe): remove_attributes = ['style', 'font'] - remove_tags = [dict(name='div', attrs={'class':['ppy-caption']}) - ,dict(name='div', attrs={'id':['float_corner']}) - ] + def get_article_url(self, article): + url = article.get('feedburner_origlink',article.get('link', None)) + front, middle, end = url.partition('comhttp//www.bigoven.com') + url = front + 'com' + end + return url + + keep_only_tags = [dict(name='div', attrs={'id':['nosidebar_main']})] + + remove_tags_after = [dict(name='div', attrs={'class':['display-field']})] + + remove_tags = [dict(name='ul', attrs={'class':['tabs']})] + + preprocess_regexps = [ + (re.compile(r'Want detailed nutrition information?', re.DOTALL), lambda match: ''), + (re.compile('\(You could win \$100 in our ', re.DOTALL), lambda match: ''), + ] def preprocess_html(self, soup): - for tag in soup.findAll(name='a', attrs={'class':['deflink']}): - tag.replaceWith(tag.string) for tag in soup.findAll(name='a', text=re.compile(r'.*View Metric.*', re.DOTALL)): - tag.parent.parent.extract() - for tag in soup.findAll(name='a', text=re.compile(r'.*Add my own photo.*', re.DOTALL)): - tag.parent.parent.extract() - for tag in soup.findAll(name='div', attrs={'class':['container']}): - if tag.find(name='h1'): - continue - if tag.find(name='h2', text=re.compile(r'.*Ingredients.*', re.DOTALL)): - print 'tag found Ingred h2' - continue - if tag.find(name='h2', text=re.compile(r'Preparation.*', re.DOTALL)): - print 'tag found Prep h2' - continue - tag.extract() + tag.parent.parent.extract() + for tag in soup.findAll(text=re.compile(r'.*Try BigOven Pro for Free.*', re.DOTALL)): + tag.extract() + for tag in soup.findAll(text=re.compile(r'.*Add my photo of this recipe.*', re.DOTALL)): + tag.parent.extract() + for tag in soup.findAll(name='a', text=re.compile(r'.*photo contest.*', re.DOTALL)): + tag.parent.extract() + for tag in soup.findAll(name='a', text='Remove ads'): + tag.parent.parent.extract() + for tag in soup.findAll(name='ol', attrs={'class':['recipe-tags']}): + tag.parent.extract() return soup - feeds = [(u'4 & 5 Star Rated Recipes', u'http://feeds.feedburner.com/Bigovencom-RecipeRaves?format=xml')] - + feeds = [(u'Recent Raves', u'http://www.bigoven.com/rss/recentraves'), + (u'Recipe Of The Day', u'http://feeds.feedburner.com/bigovencom-RecipeOfTheDay')] From 97ff2c2cfed0c77b2ae27a4e5615658a397a81db Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 16:37:38 -0600 Subject: [PATCH 08/19] Fix Irish Times --- recipes/irish_times.recipe | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/recipes/irish_times.recipe b/recipes/irish_times.recipe index 1434a25725..3efcfc6d29 100644 --- a/recipes/irish_times.recipe +++ b/recipes/irish_times.recipe @@ -18,7 +18,6 @@ class IrishTimes(BasicNewsRecipe): oldest_article = 1.0 max_articles_per_feed = 100 no_stylesheets = True - simultaneous_downloads= 5 r = re.compile('.*(?Phttp:\/\/(www.irishtimes.com)|(rss.feedsportal.com\/c)\/.*\.html?).*') remove_tags = [dict(name='div', attrs={'class':'footer'})] @@ -26,17 +25,17 @@ class IrishTimes(BasicNewsRecipe): feeds = [ ('Frontpage', 'http://www.irishtimes.com/feeds/rss/newspaper/index.rss'), - ('Ireland', 'http://www.irishtimes.com/feeds/rss/newspaper/ireland.rss'), - ('World', 'http://www.irishtimes.com/feeds/rss/newspaper/world.rss'), - ('Finance', 'http://www.irishtimes.com/feeds/rss/newspaper/finance.rss'), - ('Features', 'http://www.irishtimes.com/feeds/rss/newspaper/features.rss'), - ('Sport', 'http://www.irishtimes.com/feeds/rss/newspaper/sport.rss'), - ('Opinion', 'http://www.irishtimes.com/feeds/rss/newspaper/opinion.rss'), - ('Letters', 'http://www.irishtimes.com/feeds/rss/newspaper/letters.rss'), + ('Ireland', 'http://rss.feedsportal.com/c/851/f/10845/index.rss'), + ('World', 'http://rss.feedsportal.com/c/851/f/10846/index.rss'), + ('Finance', 'http://rss.feedsportal.com/c/851/f/10847/index.rss'), + ('Features', 'http://rss.feedsportal.com/c/851/f/10848/index.rss'), + ('Sport', 'http://rss.feedsportal.com/c/851/f/10849/index.rss'), + ('Opinion', 'http://rss.feedsportal.com/c/851/f/10850/index.rss'), + ('Letters', 'http://rss.feedsportal.com/c/851/f/10851/index.rss'), ('Magazine', 'http://www.irishtimes.com/feeds/rss/newspaper/magazine.rss'), - ('Health', 'http://www.irishtimes.com/feeds/rss/newspaper/health.rss'), - ('Education & Parenting', 'http://www.irishtimes.com/feeds/rss/newspaper/education.rss'), - ('Motors', 'http://www.irishtimes.com/feeds/rss/newspaper/motors.rss'), + ('Health', 'http://rss.feedsportal.com/c/851/f/10852/index.rss'), + ('Education & Parenting', 'http://rss.feedsportal.com/c/851/f/10853/index.rss'), + ('Motors', 'http://rss.feedsportal.com/c/851/f/10854/index.rss'), ('An Teanga Bheo', 'http://www.irishtimes.com/feeds/rss/newspaper/anteangabheo.rss'), ('Commercial Property', 'http://www.irishtimes.com/feeds/rss/newspaper/commercialproperty.rss'), ('Science Today', 'http://www.irishtimes.com/feeds/rss/newspaper/sciencetoday.rss'), @@ -57,5 +56,3 @@ class IrishTimes(BasicNewsRecipe): def get_article_url(self, article): return article.link - - From db20d3e2f5a25583ad51868b693962fcfbdfb90a Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 18:53:44 -0600 Subject: [PATCH 09/19] MOBI Inspect: Read FCIS/FLIS and index record information from record 0 --- src/calibre/ebooks/mobi/debug.py | 36 ++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index 86ed3e9ef9..5e1def45d5 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -235,7 +235,9 @@ class MOBIHeader(object): }.get(self.encoding_raw, repr(self.encoding_raw)) self.uid = self.raw[32:36] self.file_version = struct.unpack(b'>I', self.raw[36:40]) - self.reserved = self.raw[40:80] + self.reserved = self.raw[40:48] + self.secondary_index_record, = struct.unpack(b'>I', self.raw[48:52]) + self.reserved2 = self.raw[52:80] self.first_non_book_record, = struct.unpack(b'>I', self.raw[80:84]) self.fullname_offset, = struct.unpack(b'>I', self.raw[84:88]) self.fullname_length, = struct.unpack(b'>I', self.raw[88:92]) @@ -255,18 +257,28 @@ class MOBIHeader(object): self.unknown2 = self.raw[120:128] self.exth_flags, = struct.unpack(b'>I', self.raw[128:132]) self.has_exth = bool(self.exth_flags & 0x40) - self.has_drm_data = self.length >= 184 and len(self.raw) >= 184 + self.has_drm_data = self.length >= 174 and len(self.raw) >= 180 if self.has_drm_data: self.unknown3 = self.raw[132:164] self.drm_offset, = struct.unpack(b'>I', self.raw[164:168]) self.drm_count, = struct.unpack(b'>I', self.raw[168:172]) self.drm_size, = struct.unpack(b'>I', self.raw[172:176]) self.drm_flags = bin(struct.unpack(b'>I', self.raw[176:180])[0]) - self.has_extra_data_flags = self.length >= 244 and len(self.raw) >= 244 + self.has_extra_data_flags = self.length >= 232 and len(self.raw) >= 232+16 + self.has_fcis_flis = False if self.has_extra_data_flags: - self.unknown4 = self.raw[180:242] - self.extra_data_flags = bin(struct.unpack(b'>H', - self.raw[242:244])[0]) + self.unknown4 = self.raw[180:192] + self.first_content_record, self.last_content_record = \ + struct.unpack(b'>HH', self.raw[192:196]) + self.unknown5, = struct.unpack(b'>I', self.raw[196:200]) + (self.fcis_number, self.fcis_count, self.flis_number, + self.flis_count) = struct.unpack(b'>IIII', + self.raw[200:216]) + self.unknown6 = self.raw[216:240] + self.extra_data_flags = bin(struct.unpack(b'>I', + self.raw[240:244])[0]) + self.primary_index_record, = struct.unpack(b'>I', + self.raw[244:248]) if self.has_exth: self.exth_offset = 16 + self.length @@ -291,6 +303,9 @@ class MOBIHeader(object): ans.append('UID: %r'%self.uid) ans.append('File version: %d'%self.file_version) ans.append('Reserved: %r'%self.reserved) + ans.append('Secondary index record: %d (null val: %d)'%( + self.secondary_index_record, 0xffffffff)) + ans.append('Reserved2: %r'%self.reserved2) ans.append('First non-book record: %d'% self.first_non_book_record) ans.append('Full name offset: %d'%self.fullname_offset) ans.append('Full name length: %d bytes'%self.fullname_length) @@ -313,7 +328,16 @@ class MOBIHeader(object): ans.append('DRM Flags: %r'%self.drm_flags) if self.has_extra_data_flags: ans.append('Unknown4: %r'%self.unknown4) + ans.append('First content record: %d'% self.first_content_record) + ans.append('Last content record: %d'% self.last_content_record) + ans.append('Unknown5: %d'% self.unknown5) + ans.append('FCIS number: %d'% self.fcis_number) + ans.append('FCIS count: %d'% self.fcis_count) + ans.append('FLIS number: %d'% self.flis_number) + ans.append('FLIS count: %d'% self.flis_count) + ans.append('Unknown6: %r'% self.unknown6) ans.append('Extra data flags: %r'%self.extra_data_flags) + ans.append('Primary index record: %d'%self.primary_index_record) ans = '\n'.join(ans) From 83bc2b17141cd5cf64b0c8c830434d5127ae499a Mon Sep 17 00:00:00 2001 From: John Schember Date: Fri, 15 Apr 2011 21:22:09 -0400 Subject: [PATCH 10/19] Fix bug #762235: Shortcut conflict causes crash in Dialogs. --- src/calibre/gui2/actions/view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/gui2/actions/view.py b/src/calibre/gui2/actions/view.py index 48d10e660a..c93e69f0fc 100644 --- a/src/calibre/gui2/actions/view.py +++ b/src/calibre/gui2/actions/view.py @@ -43,7 +43,7 @@ class ViewAction(InterfaceAction): ac = self.view_specific_action = QAction(_('View specific format'), self.gui) self.qaction.setMenu(self.view_menu) - ac.setShortcut((Qt.ControlModifier if isosx else Qt.AltModifier)+Qt.Key_V) + ac.setShortcut(Qt.AltModifier+Qt.Key_V) ac.triggered.connect(self.view_specific_format, type=Qt.QueuedConnection) ac = self.view_action = QAction(self.qaction.icon(), self.qaction.text(), self.gui) From 423731e9eeeef983f52be951d98e6e736d138320 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 19:24:27 -0600 Subject: [PATCH 11/19] When generating MOBI files uses the same 2*n record index scheme as used by kindlegen --- src/calibre/ebooks/mobi/writer.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/calibre/ebooks/mobi/writer.py b/src/calibre/ebooks/mobi/writer.py index ddcba63eca..2ca62f0dea 100644 --- a/src/calibre/ebooks/mobi/writer.py +++ b/src/calibre/ebooks/mobi/writer.py @@ -7,8 +7,6 @@ __copyright__ = '2008, Marshall T. Vandegrift and \ Kovid Goyal ' from collections import defaultdict -from itertools import count -from itertools import izip import random import re from struct import pack @@ -1630,8 +1628,8 @@ class MobiWriter(object): self._write(title, pack('>HHIIIIII', 0, 0, now, now, 0, 0, 0, 0), 'BOOK', 'MOBI', pack('>IIH', nrecords, 0, nrecords)) offset = self._tell() + (8 * nrecords) + 2 - for id, record in izip(count(), self._records): - self._write(pack('>I', offset), '\0', pack('>I', id)[1:]) + for i, record in enumerate(self._records): + self._write(pack('>I', offset), '\0', pack('>I', 2*i)[1:]) offset += len(record) self._write('\0\0') From 4c4627fc38e11091156ebcfa93da47d21888d412 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 19:55:09 -0600 Subject: [PATCH 12/19] ... --- src/calibre/ebooks/mobi/debug.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index 5e1def45d5..3f2ca786a4 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -141,7 +141,7 @@ class EXTHRecord(object): 204 : 'Creator Software', 205 : 'Creator Major Version', # '>I' 206 : 'Creator Minor Version', # '>I' - 207 : 'Creator Build number', # '>I' + 207 : 'Creator Build Number', # '>I' 208 : 'watermark', 209 : 'tamper_proof_keys', 300 : 'fontsignature', @@ -153,6 +153,11 @@ class EXTHRecord(object): 503 : 'updatedtitle', }.get(self.type, repr(self.type)) + if self.name in ('coveroffset', 'thumboffset', 'hasfakecover', + 'Creator Major Version', 'Creator Minor Version', + 'Creator Build Number', 'Creator Software'): + self.data, = struct.unpack(b'>I', self.data) + def __str__(self): return '%s (%d): %r'%(self.name, self.type, self.data) From 6dcc6ae9f1a8ecd0cb49359c63e2e0ae70cf1447 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Fri, 15 Apr 2011 20:11:05 -0600 Subject: [PATCH 13/19] ... --- src/calibre/ebooks/mobi/debug.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/debug.py b/src/calibre/ebooks/mobi/debug.py index 3f2ca786a4..9c5318a5e7 100644 --- a/src/calibre/ebooks/mobi/debug.py +++ b/src/calibre/ebooks/mobi/debug.py @@ -155,7 +155,7 @@ class EXTHRecord(object): if self.name in ('coveroffset', 'thumboffset', 'hasfakecover', 'Creator Major Version', 'Creator Minor Version', - 'Creator Build Number', 'Creator Software'): + 'Creator Build Number', 'Creator Software', 'startreading'): self.data, = struct.unpack(b'>I', self.data) def __str__(self): From bb75ec2aafbc09b0558035a422e7555113976df6 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Apr 2011 06:46:00 -0600 Subject: [PATCH 14/19] Improved Suedduetsche Zeitung --- recipes/sueddeutschezeitung.recipe | 44 +++++++++++++++++++----------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/recipes/sueddeutschezeitung.recipe b/recipes/sueddeutschezeitung.recipe index 48618fe996..6aa2347b04 100644 --- a/recipes/sueddeutschezeitung.recipe +++ b/recipes/sueddeutschezeitung.recipe @@ -1,4 +1,3 @@ - __license__ = 'GPL v3' __copyright__ = '2010, Darko Miletic ' ''' @@ -19,11 +18,11 @@ class SueddeutcheZeitung(BasicNewsRecipe): encoding = 'cp1252' needs_subscription = True remove_empty_feeds = True - delay = 2 + delay = 1 PREFIX = 'http://www.sueddeutsche.de' INDEX = PREFIX + '/app/epaper/textversion/' use_embedded_content = False - masthead_url = 'http://pix.sueddeutsche.de/img/layout/header/logo.gif' + masthead_url = 'http://pix.sueddeutsche.de/img/layout/header/SZ_solo288x31.gif' language = 'de' publication_type = 'newspaper' extra_css = ' body{font-family: Arial,Helvetica,sans-serif} ' @@ -36,7 +35,7 @@ class SueddeutcheZeitung(BasicNewsRecipe): , 'linearize_tables' : True } - remove_attributes = ['height','width'] + remove_attributes = ['height','width','style'] def get_browser(self): br = BasicNewsRecipe.get_browser() @@ -50,24 +49,37 @@ class SueddeutcheZeitung(BasicNewsRecipe): remove_tags =[ dict(attrs={'class':'hidePrint'}) - ,dict(name=['link','object','embed','base','iframe']) + ,dict(name=['link','object','embed','base','iframe','br']) ] keep_only_tags = [dict(attrs={'class':'artikelBox'})] remove_tags_before = dict(attrs={'class':'artikelTitel'}) remove_tags_after = dict(attrs={'class':'author'}) feeds = [ - (u'Politik' , INDEX + 'Politik/' ) - ,(u'Seite drei' , INDEX + 'Seite+drei/' ) - ,(u'Meinungsseite', INDEX + 'Meinungsseite/') - ,(u'Wissen' , INDEX + 'Wissen/' ) - ,(u'Panorama' , INDEX + 'Panorama/' ) - ,(u'Feuilleton' , INDEX + 'Feuilleton/' ) - ,(u'Medien' , INDEX + 'Medien/' ) - ,(u'Wirtschaft' , INDEX + 'Wirtschaft/' ) - ,(u'Sport' , INDEX + 'Sport/' ) - ,(u'Bayern' , INDEX + 'Bayern/' ) - ,(u'Muenchen' , INDEX + 'M%FCnchen/' ) + (u'Politik' , INDEX + 'Politik/' ) + ,(u'Seite drei' , INDEX + 'Seite+drei/' ) + ,(u'Meinungsseite' , INDEX + 'Meinungsseite/') + ,(u'Wissen' , INDEX + 'Wissen/' ) + ,(u'Panorama' , INDEX + 'Panorama/' ) + ,(u'Feuilleton' , INDEX + 'Feuilleton/' ) + ,(u'Medien' , INDEX + 'Medien/' ) + ,(u'Wirtschaft' , INDEX + 'Wirtschaft/' ) + ,(u'Sport' , INDEX + 'Sport/' ) + ,(u'Bayern' , INDEX + 'Bayern/' ) + ,(u'Muenchen' , INDEX + 'M%FCnchen/' ) + ,(u'Muenchen City' , INDEX + 'M%FCnchen+City/' ) + ,(u'Jetzt.de' , INDEX + 'Jetzt.de/' ) + ,(u'Reise' , INDEX + 'Reise/' ) + ,(u'SZ Extra' , INDEX + 'SZ+Extra/' ) + ,(u'Wochenende' , INDEX + 'SZ+am+Wochenende/' ) + ,(u'Stellen-Markt' , INDEX + 'Stellen-Markt/') + ,(u'Motormarkt' , INDEX + 'Motormarkt/') + ,(u'Immobilien-Markt', INDEX + 'Immobilien-Markt/') + ,(u'Thema' , INDEX + 'Thema/' ) + ,(u'Forum' , INDEX + 'Forum/' ) + ,(u'Leute' , INDEX + 'Leute/' ) + ,(u'Jugend' , INDEX + 'Jugend/' ) + ,(u'Beilage' , INDEX + 'Beilage/' ) ] def parse_index(self): From 3bb24273f35da19f8fcd5eb1be1beb0885da4444 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Apr 2011 07:33:48 -0600 Subject: [PATCH 15/19] ... --- src/calibre/manual/faq.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/calibre/manual/faq.rst b/src/calibre/manual/faq.rst index 5a2b2669bb..9e0fab00fd 100644 --- a/src/calibre/manual/faq.rst +++ b/src/calibre/manual/faq.rst @@ -487,7 +487,13 @@ menu, choose "Validate fonts". I downloaded the installer, but it is not working? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Downloading from the internet can sometimes result in a corrupted download. If the |app| installer you downloaded is not opening, try downloading it again. If re-downloading it does not work, download it from `an alternate location `_. If the installer still doesn't work, then something on your computer is preventing it from running. Try rebooting your computer and running a registry cleaner like `Wise registry cleaner `_. Best place to ask for more help is in the `forums `_. +Downloading from the internet can sometimes result in a corrupted download. If the |app| installer you downloaded is not opening, try downloading it again. If re-downloading it does not work, download it from `an alternate location `_. If the installer still doesn't work, then something on your computer is preventing it from running. + + * Try rebooting your computer and running a registry cleaner like `Wise registry cleaner `_. + * Try temporarily disabling your antivirus program + * Try downloading the installer with an alternate browser. For example if you are using Internet Explorer, try using Firefox or Chrome instead. + +Best place to ask for more help is in the `forums `_. My antivirus program claims |app| is a virus/trojan? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ From d80584abb229adb82f7fc45e28464d6c3b044b96 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Apr 2011 07:48:22 -0600 Subject: [PATCH 16/19] Fix #762543 (add .txt when book is created) --- src/calibre/utils/date.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py index c35e8ee2ab..b368c0ed9b 100644 --- a/src/calibre/utils/date.py +++ b/src/calibre/utils/date.py @@ -130,7 +130,14 @@ def utcnow(): return datetime.utcnow().replace(tzinfo=_utc_tz) def utcfromtimestamp(stamp): - return datetime.utcfromtimestamp(stamp).replace(tzinfo=_utc_tz) + try: + return datetime.utcfromtimestamp(stamp).replace(tzinfo=_utc_tz) + except ValueError: + # Raised if stamp if out of range for the platforms gmtime function + # We print the error for debugging, but otherwise ignore it + import traceback + traceback.print_exc() + return utcnow() def format_date(dt, format, assume_utc=False, as_utc=False): ''' Return a date formatted as a string using a subset of Qt's formatting codes ''' From 9b581963edd9d8c19c04be4cc7a2ab07697ce256 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Apr 2011 08:39:34 -0600 Subject: [PATCH 17/19] ... --- src/calibre/manual/faq.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/manual/faq.rst b/src/calibre/manual/faq.rst index 9e0fab00fd..ef4da23826 100644 --- a/src/calibre/manual/faq.rst +++ b/src/calibre/manual/faq.rst @@ -489,8 +489,8 @@ I downloaded the installer, but it is not working? Downloading from the internet can sometimes result in a corrupted download. If the |app| installer you downloaded is not opening, try downloading it again. If re-downloading it does not work, download it from `an alternate location `_. If the installer still doesn't work, then something on your computer is preventing it from running. + * Try temporarily disabling your antivirus program (Microsoft Security Essentials, or Kaspersky or Norton or McAfee or whatever). This is most likely the culprit if the upgrade process is hanging in the middle. * Try rebooting your computer and running a registry cleaner like `Wise registry cleaner `_. - * Try temporarily disabling your antivirus program * Try downloading the installer with an alternate browser. For example if you are using Internet Explorer, try using Firefox or Chrome instead. Best place to ask for more help is in the `forums `_. From 66e37a89dfc2231863106b2323bab598e102cacc Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Apr 2011 08:52:11 -0600 Subject: [PATCH 18/19] Remove the quick access to search options from next to the search bar, as we now have a separate search highlights toggle button --- src/calibre/gui2/layout.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/gui2/layout.py b/src/calibre/gui2/layout.py index ebd2acfe1d..390c266019 100644 --- a/src/calibre/gui2/layout.py +++ b/src/calibre/gui2/layout.py @@ -205,6 +205,7 @@ class SearchBar(QWidget): # {{{ x.setObjectName("search_option_button") l.addWidget(x) x.setToolTip(_("Change the way searching for books works")) + x.setVisible(False) x = parent.saved_search = SavedSearchBox(self) x.setMaximumSize(QSize(150, 16777215)) From 76c833315993afabafc77d67d5e42e005a03b1a6 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 16 Apr 2011 09:26:06 -0600 Subject: [PATCH 19/19] Fix #762828 (Unrecognized device Coby Kyros) --- src/calibre/devices/android/driver.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calibre/devices/android/driver.py b/src/calibre/devices/android/driver.py index 1fca46f766..73de6e1200 100644 --- a/src/calibre/devices/android/driver.py +++ b/src/calibre/devices/android/driver.py @@ -108,7 +108,7 @@ class ANDROID(USBMS): 'SGH-T849', '_MB300', 'A70S', 'S_ANDROID', 'A101IT', 'A70H', 'IDEOS_TABLET', 'MYTOUCH_4G', 'UMS_COMPOSITE', 'SCH-I800_CARD', '7', 'A956', 'A955', 'A43', 'ANDROID_PLATFORM', 'TEGRA_2', - 'MB860', 'MULTI-CARD'] + 'MB860', 'MULTI-CARD', 'MID7015A'] WINDOWS_CARD_A_MEM = ['ANDROID_PHONE', 'GT-I9000_CARD', 'SGH-I897', 'FILE-STOR_GADGET', 'SGH-T959', 'SAMSUNG_ANDROID', 'GT-P1000_CARD', 'A70S', 'A101IT', '7']