-
+
-
Qt::Vertical
@@ -131,6 +131,13 @@
+ -
+
+
+
+
+
+
diff --git a/src/calibre/gui2/tag_view.py b/src/calibre/gui2/tag_view.py
index 3b8c27866c..c3f17105dc 100644
--- a/src/calibre/gui2/tag_view.py
+++ b/src/calibre/gui2/tag_view.py
@@ -627,7 +627,8 @@ class TagTreeItem(object): # {{{
except:
pass
self.parent = self.icon_state_map = self.bold_font = self.tag = \
- self.icon = self.children = None
+ self.icon = self.children = self.tooltip = \
+ self.py_name = self.id_set = self.category_key = None
def __str__(self):
if self.type == self.ROOT:
@@ -1121,7 +1122,7 @@ class TagsModel(QAbstractItemModel): # {{{
self.search_restriction = s
def get_node_tree(self, sort):
- old_row_map = self.row_map[:]
+ old_row_map_len = len(self.row_map)
self.row_map = []
self.categories = {}
@@ -1176,7 +1177,7 @@ class TagsModel(QAbstractItemModel): # {{{
self.row_map.append(category)
self.categories[category] = tb_categories[category]['name']
- if len(old_row_map) != 0 and len(old_row_map) != len(self.row_map):
+ if old_row_map_len != 0 and old_row_map_len != len(self.row_map):
# A category has been added or removed. We must force a rebuild of
# the model
return None
@@ -1367,6 +1368,9 @@ class TagsModel(QAbstractItemModel): # {{{
self.beginRemoveRows(self.createIndex(category.row(), 0, category),
start, len(child_map)-1)
category.children = ctags
+ for i in range(start, len(child_map)):
+ child_map[i].break_cycles()
+ child_map = None
self.endRemoveRows()
else:
state_map = {}
diff --git a/src/calibre/library/database2.py b/src/calibre/library/database2.py
index 4c61438e35..c9ed5c250a 100644
--- a/src/calibre/library/database2.py
+++ b/src/calibre/library/database2.py
@@ -7,7 +7,7 @@ __docformat__ = 'restructuredtext en'
The database used to store ebook metadata
'''
import os, sys, shutil, cStringIO, glob, time, functools, traceback, re, \
- json, uuid, tempfile
+ json, uuid, tempfile, hashlib
import threading, random
from itertools import repeat
from math import ceil
@@ -1118,9 +1118,31 @@ class LibraryDatabase2(LibraryDatabase, SchemaUpgrade, CustomColumns):
return self.format_abspath(index, format, index_is_id) is not None
def format_last_modified(self, id_, fmt):
+ m = self.format_metadata(id_, fmt)
+ if m:
+ return m['mtime']
+
+ def format_metadata(self, id_, fmt):
path = self.format_abspath(id_, fmt, index_is_id=True)
+ ans = {}
if path is not None:
- return utcfromtimestamp(os.stat(path).st_mtime)
+ stat = os.stat(path)
+ ans['size'] = stat.st_size
+ ans['mtime'] = utcfromtimestamp(stat.st_mtime)
+ return ans
+
+ def format_hash(self, id_, fmt):
+ path = self.format_abspath(id_, fmt, index_is_id=True)
+ if path is None:
+ raise NoSuchFormat('Record %d has no fmt: %s'%(id_, fmt))
+ sha = hashlib.sha256()
+ with lopen(path, 'rb') as f:
+ while True:
+ raw = f.read(SPOOL_SIZE)
+ sha.update(raw)
+ if len(raw) < SPOOL_SIZE:
+ break
+ return sha.hexdigest()
def format_abspath(self, index, format, index_is_id=False):
'''
diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot
index bb43ff39be..c371179704 100644
--- a/src/calibre/translations/calibre.pot
+++ b/src/calibre/translations/calibre.pot
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre 0.8.6\n"
-"POT-Creation-Date: 2011-06-17 11:28+MDT\n"
-"PO-Revision-Date: 2011-06-17 11:28+MDT\n"
+"POT-Creation-Date: 2011-06-22 18:55+MDT\n"
+"PO-Revision-Date: 2011-06-22 18:55+MDT\n"
"Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
@@ -25,7 +25,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:74
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77
#: /home/kovid/work/calibre/src/calibre/devices/kobo/books.py:24
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:488
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:518
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:71
#: /home/kovid/work/calibre/src/calibre/devices/prs500/books.py:267
@@ -93,7 +93,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:101
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1001
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1006
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1072
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1078
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:144
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/reader.py:151
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:65
@@ -126,8 +126,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:362
#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:370
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:156
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:364
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:367
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:376
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:379
#: /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/book_details.py:519
@@ -135,21 +135,21 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:122
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:151
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:153
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1131
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1134
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1168
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1171
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/add_empty_book.py:68
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:127
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:47
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:366
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:184
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:199
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:408
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1023
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1203
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1206
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1209
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1294
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:185
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:200
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:403
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1010
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1190
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1193
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1196
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1281
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:82
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:212
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:231
@@ -162,14 +162,16 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:200
#: /home/kovid/work/calibre/src/calibre/library/cli.py:217
#: /home/kovid/work/calibre/src/calibre/library/database.py:914
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:534
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:542
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:553
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1839
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1976
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2983
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2985
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3118
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:532
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:540
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:551
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1932
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2078
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3085
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3087
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3220
+#: /home/kovid/work/calibre/src/calibre/library/server/content.py:212
+#: /home/kovid/work/calibre/src/calibre/library/server/content.py:213
#: /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
@@ -303,191 +305,296 @@ msgstr ""
msgid "Set metadata from %s files"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:892
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:765
+msgid "Add books to calibre or the connected device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:770
+msgid "Fetch annotations from a connected Kindle (experimental)"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:775
+msgid "Generate a catalog of the books in your calibre library"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:780
+msgid "Convert books to various ebook formats"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:785
+msgid "Delete books from your calibre library or connected device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:790
+msgid "Edit the metadata of books in your calibre library"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:795
+msgid "Read books in your calibre library"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:800
+msgid "Download news from the internet in ebook form"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:805
+msgid "Show a list of related books quickly"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:810
+msgid "Export books from your calibre library to the hard disk"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:815
+msgid "Show book details in a separate popup"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:820
+msgid "Restart calibre"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:825
+msgid "Open the folder that contains the book files in your calibre library"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:831
+msgid "Send books to the connected device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:836
+msgid "Send books via email or the web also connect to iTunes or folders on your computer as if they are devices"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:842
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16
+msgid "Browse the calibre User Manual"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:847
+msgid "Customize calibre"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:852
+msgid "Easily find books similar to the currently selected one"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:857
+msgid "Switch between different calibre libraries and perform maintenance on them"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:863
+msgid "Copy books from the devce to your calibre library"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:868
+msgid "Edit the collections in which books are placed on your device"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:873
+msgid "Copy a book from one calibre library to another"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:878
+msgid "Make small twekas to epub files in your calibre library"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:883
+msgid "Find the next or previous match when searching in your calibre library in highlight mode"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:890
+msgid "Search for books from different book sellers"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:906
+msgid "Get new calibre plugins or update your existing ones"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:925
msgid "Look and Feel"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:894
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:906
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:917
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:928
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:940
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:927
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:939
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:950
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:961
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:973
msgid "Interface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:898
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:931
msgid "Adjust the look and feel of the calibre interface to suit your tastes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:904
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:937
msgid "Behavior"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:910
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:943
msgid "Change the way calibre behaves"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:915
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:948
#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:225
msgid "Add your own columns"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:921
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:954
msgid "Add/remove your own columns to the calibre book list"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:926
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:959
msgid "Toolbar"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:932
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:965
msgid "Customize the toolbars and context menus, changing which actions are available in each"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:938
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:971
msgid "Searching"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:944
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:977
msgid "Customize the way searching for books works in calibre"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:949
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:982
msgid "Input Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:951
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:962
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:973
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:984
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:995
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1006
msgid "Conversion"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:955
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:988
msgid "Set conversion options specific to each input format"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:960
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:993
msgid "Common Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:966
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:999
msgid "Set conversion options common to all formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:971
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1004
msgid "Output Options"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:977
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1010
msgid "Set conversion options specific to each output format"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:982
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1015
msgid "Adding books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:984
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:996
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1008
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1020
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1017
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1029
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1041
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1053
msgid "Import/Export"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:988
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1021
msgid "Control how calibre reads metadata from files when adding books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:994
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1027
msgid "Saving books to disk"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1000
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1033
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:1006
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1039
msgid "Sending books to devices"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1012
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1045
msgid "Control how calibre transfers files to your ebook reader"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1018
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1051
msgid "Metadata plugboards"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1024
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1057
msgid "Change metadata fields before saving/sending"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1029
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1062
msgid "Template Functions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1031
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1078
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1090
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1101
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1064
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1111
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1123
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1134
msgid "Advanced"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1035
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1068
msgid "Create your own template functions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1040
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1073
msgid "Sharing books by email"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1042
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1054
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1067
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1075
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1087
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1100
msgid "Sharing"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1046
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1079
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:1052
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1085
msgid "Sharing over the net"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1058
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1091
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:1065
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1098
msgid "Metadata download"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1071
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1104
msgid "Control how calibre downloads ebook metadata from the net"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1076
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1109
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:275
msgid "Plugins"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1082
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1115
msgid "Add/remove/customize various bits of calibre functionality"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1088
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1121
msgid "Tweaks"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1094
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1127
msgid "Fine tune how calibre behaves in various contexts"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1099
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1132
msgid "Miscellaneous"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1105
+#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:1138
msgid "Miscellaneous advanced configuration"
msgstr ""
@@ -507,6 +614,10 @@ msgstr ""
msgid "If specified, the output plugin will try to create output that is as human readable as possible. May not have any effect for some output plugins."
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/customize/conversion.py:264
+msgid "Convert ebooks to the %s format"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/customize/profiles.py:49
msgid "Input profile"
msgstr ""
@@ -696,6 +807,16 @@ msgstr ""
msgid "Disable the named plugin"
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/db/backend.py:195
+#: /home/kovid/work/calibre/src/calibre/db/backend.py:204
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:236
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:662
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:127
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:136
+msgid "Path to library too long. Must be less than %d characters."
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/debug.py:154
msgid "Debug log"
msgstr ""
@@ -724,73 +845,73 @@ msgstr ""
msgid "Enable Apple driver"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:117
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118
msgid "Use Series as Category in iTunes/iBooks"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:118
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:119
msgid "Enable to use the series name as the iTunes Genre, iBooks Category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:120
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:121
msgid "Cache covers from iTunes/iBooks"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:122
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:123
msgid "Enable to cache and display covers from iTunes/iBooks"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:179
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:180
msgid "Apple device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:181
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:182
msgid "Communicate with iTunes/iBooks."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:193
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:194
msgid "Apple device detected, launching iTunes, please wait ..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:195
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:196
msgid "Cannot copy books directly from iDevice. Drag from iTunes Library to desktop, then add to calibre's Library window."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:358
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:361
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:359
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:362
msgid "Updating device metadata listing..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:437
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:476
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1058
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1102
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3108
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3148
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:438
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:477
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1059
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1103
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3109
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3149
msgid "%d of %d"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:483
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1107
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3154
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:484
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1108
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3155
#: /home/kovid/work/calibre/src/calibre/gui2/ebook_download.py:106
msgid "finished"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:668
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:669
msgid ""
"Some books not found in iTunes database.\n"
"Delete using the iBooks app.\n"
"Click 'Show Details' for a list."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1019
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:1020
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:2679
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2680
#: /home/kovid/work/calibre/src/calibre/devices/nook/driver.py:102
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:447
#: /home/kovid/work/calibre/src/calibre/devices/prs505/sony_cache.py:470
@@ -799,22 +920,24 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:951
#: /home/kovid/work/calibre/src/calibre/gui2/actions/fetch_news.py:73
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:445
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:330
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:343
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2847
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1657
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1659
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:328
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:341
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2949
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:170
msgid "News"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2680
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:2681
#: /home/kovid/work/calibre/src/calibre/gui2/catalog/catalog_epub_mobi.py:65
#: /home/kovid/work/calibre/src/calibre/library/catalog.py:652
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2807
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:2825
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2909
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:2927
msgid "Catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3010
+#: /home/kovid/work/calibre/src/calibre/devices/apple/driver.py:3011
msgid "Communicate with iTunes."
msgstr ""
@@ -853,7 +976,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:67
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:70
#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:73
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:232
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:255
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:122
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:125
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:128
@@ -873,8 +996,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:285
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:299
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:349
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:384
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:376
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:411
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:279
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:310
msgid "Adding books to device metadata listing..."
@@ -884,8 +1007,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:309
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:114
#: /home/kovid/work/calibre/src/calibre/devices/hanvon/driver.py:125
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:301
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:333
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:328
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:360
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:316
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:334
msgid "Removing books from device..."
@@ -893,8 +1016,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:324
#: /home/kovid/work/calibre/src/calibre/devices/bambook/driver.py:329
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:337
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:344
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:364
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:371
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:341
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:346
msgid "Removing books from device metadata listing..."
@@ -1112,12 +1235,12 @@ msgstr ""
msgid "The Kobo supports only one collection currently: the \"Im_Reading\" list. Create a tag called \"Im_Reading\" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:468
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:498
#: /home/kovid/work/calibre/src/calibre/gui2/actions/add.py:388
msgid "Not Implemented"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:469
+#: /home/kovid/work/calibre/src/calibre/devices/kobo/driver.py:499
msgid "\".kobo\" files do not exist on the device as books instead, they are rows in the sqlite database. Currently they cannot be exported or viewed."
msgstr ""
@@ -1950,7 +2073,7 @@ msgstr ""
msgid "Fix unmanifested files. epub-fix can either add them to the manifest or delete them as specified by the delete unmanifested option."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/unmanifested.py:32
+#: /home/kovid/work/calibre/src/calibre/ebooks/epub/fix/unmanifested.py:36
msgid "Delete unmanifested files instead of adding them to the manifest"
msgstr ""
@@ -2328,8 +2451,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:733
#: /home/kovid/work/calibre/src/calibre/ebooks/pdf/manipulate/info.py:45
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/delete_matching_from_device.py:75
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1028
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:68
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1015
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:133
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:152
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/models.py:23
@@ -2340,14 +2464,14 @@ msgid "Title"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:734
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:67
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1029
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:58
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1016
#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/models.py:23
msgid "Author(s)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:735
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:72
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:63
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:149
msgid "Publisher"
msgstr ""
@@ -2367,7 +2491,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:739
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:170
#: /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:64
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:151
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:184
@@ -2377,8 +2501,9 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:741
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:168
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:72
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:74
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:70
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:153
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:123
@@ -2396,7 +2521,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/book/base.py:746
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:167
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:70
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:133
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:288
msgid "Published"
@@ -2497,7 +2622,7 @@ msgid ""
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:1363
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1493
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1499
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single.py:891
#: /home/kovid/work/calibre/src/calibre/gui2/store/search/models.py:36
msgid "Cover"
@@ -2629,70 +2754,70 @@ msgstr ""
msgid "This is an Amazon Topaz book. It cannot be processed."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1494
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1500
msgid "Title Page"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1495
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1501
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/htmltoc.py:15
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:56
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:199
msgid "Table of Contents"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1496
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1502
msgid "Index"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1497
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1503
msgid "Glossary"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1498
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1504
msgid "Acknowledgements"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1499
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1505
msgid "Bibliography"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1500
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1506
msgid "Colophon"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1501
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1507
msgid "Copyright"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1502
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1508
msgid "Dedication"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1503
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1509
msgid "Epigraph"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1504
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1510
msgid "Foreword"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1505
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1511
msgid "List of Illustrations"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1506
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1512
msgid "List of Tables"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1507
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1513
msgid "Notes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1508
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1514
msgid "Preface"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1509
+#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:1515
msgid "Main Text"
msgstr ""
@@ -2702,7 +2827,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/cover.py:98
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:176
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:805
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:806
msgid "Book %s of %s"
msgstr ""
@@ -2711,7 +2836,7 @@ msgid "HTML TOC generation options."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/transforms/jacket.py:169
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:71
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:150
#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:759
@@ -3373,7 +3498,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:83
#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:102
#: /home/kovid/work/calibre/src/calibre/gui2/actions/store.py:111
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:28
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:30
#: /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"
@@ -3396,7 +3521,7 @@ msgid "Add books to your calibre library from the connected device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:20
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:553
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:591
msgid "Fetch annotations (experimental)"
msgstr ""
@@ -3421,11 +3546,11 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/annotate.py:69
#: /home/kovid/work/calibre/src/calibre/gui2/actions/catalog.py:33
#: /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:72
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:156
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:220
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:257
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:137
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:73
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:157
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:221
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:258
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:91
msgid "No books selected"
msgstr ""
@@ -3567,14 +3692,6 @@ msgstr ""
msgid "Too long"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:236
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/choose_library.py:71
-#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:662
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:127
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:136
-msgid "Path to library too long. Must be less than %d characters."
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:243
msgid "Rename failed"
msgstr ""
@@ -3589,8 +3706,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/plugin_updater.py:674
#: /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:459
-#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:465
+#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:463
+#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:469
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/columns.py:102
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:281
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email.py:242
@@ -3639,9 +3756,9 @@ msgid "Found no errors in your calibre library database. Do you want calibre to
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:336
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:150
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:703
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:965
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:160
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:741
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:966
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:101
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:277
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/tweaks.py:317
@@ -3670,7 +3787,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:419
#: /home/kovid/work/calibre/src/calibre/gui2/actions/choose_library.py:424
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:167
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:177
#: /home/kovid/work/calibre/src/calibre/gui2/actions/save_to_disk.py:100
#: /home/kovid/work/calibre/src/calibre/gui2/library/views.py:862
msgid "Not allowed"
@@ -3713,44 +3830,44 @@ msgstr ""
msgid "Empty output file, probably the conversion process crashed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:83
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:93
msgid "Copy to library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:84
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:94
msgid "Copy selected books to the specified library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:117
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:127
msgid "(delete after copy)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:126
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:136
msgid "Cannot copy"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:131
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:141
msgid "No library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:132
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:142
msgid "No library found at %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:135
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:139
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:145
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:149
msgid "Copying"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:150
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:160
msgid "Could not copy books: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:153
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:163
msgid "Copied %d books to %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:168
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/copy_to_library.py:178
msgid "You cannot use other libraries while using the environment variable CALIBRE_OVERRIDE_DATABASE_PATH."
msgstr ""
@@ -3835,14 +3952,14 @@ msgid "Main memory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:216
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:478
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:487
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:516
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:525
msgid "Storage Card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/actions/delete.py:217
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:480
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:489
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:518
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:527
msgid "Storage Card B"
msgstr ""
@@ -3939,133 +4056,133 @@ msgstr ""
msgid "Manage the collections on this device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:24
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:25
msgid "E"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:24
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:25
msgid "Edit metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:28
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:29
msgid "Merge book records"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:29
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:30
msgid "M"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:31
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:32
msgid "Edit metadata individually"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:34
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:35
msgid "Edit metadata in bulk"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:37
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:38
msgid "Download metadata and covers"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:42
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:43
msgid "Merge into first selected book - delete others"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:45
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:46
msgid "Merge into first selected book - keep others"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:49
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:50
msgid "Merge only formats into first selected book - delete others"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:71
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:72
msgid "Cannot download metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:81
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:82
msgid "Failed to download metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:87
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:88
#: /home/kovid/work/calibre/src/calibre/gui2/dnd.py:84
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:468
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:716
msgid "Download failed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:88
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:89
msgid "Failed to download metadata or covers for any of the %d book(s)."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:91
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:92
msgid "Metadata download completed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:93
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:94
msgid "Finished downloading metadata for %d book(s). Proceed with updating the metadata in your library?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:100
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:101
msgid "Could not download metadata and/or covers for %d of the books. Click \"Show details\" to see which books."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:107
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:108
msgid "Download complete"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:107
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:108
#: /home/kovid/work/calibre/src/calibre/gui2/metadata/single_download.py:777
msgid "Download log"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:136
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:137
msgid "Some books changed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:137
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:138
msgid "The metadata for some books in your library has changed since you started the download. If you proceed, some of those changes may be overwritten. Click \"Show details\" to see the list of changed books. Do you want to proceed?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:155
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:219
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:156
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:220
msgid "Cannot edit metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:256
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:259
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:257
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:260
msgid "Cannot merge books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:260
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:261
msgid "At least two books must be selected for merging"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:263
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:264
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:271
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:272
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:283
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:284
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:299
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:300
msgid "Book formats and metadata from the selected books will be merged into the first selected book (%s). ISBN will not be merged.
After merger the second and subsequently selected books will be deleted.
All book formats of the first selected book will be kept and any duplicate formats in the second and subsequently selected books will be permanently deleted from your calibre library.
Are you sure you want to proceed?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:456
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:472
msgid "Applying changed metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:529
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:545
msgid "Some failures"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:530
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/edit_metadata.py:546
msgid "Failed to apply updated metadata for some books in your library. Click \"Show Details\" to see details."
msgstr ""
@@ -4085,10 +4202,6 @@ msgstr ""
msgid " fetched."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16
-msgid "Browse the calibre User Manual"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/actions/help.py:16
msgid "F1"
msgstr ""
@@ -4256,6 +4369,22 @@ msgstr ""
msgid "No detailed information is available for books on the device."
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_quickview.py:16
+msgid "Q"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_quickview.py:16
+msgid "Show quickview"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_quickview.py:31
+msgid "No quickview available"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/show_quickview.py:32
+msgid "Quickview is not available for books on the device."
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/actions/similar_books.py:17
msgid "Similar books..."
msgstr ""
@@ -4350,25 +4479,25 @@ msgstr ""
msgid "About Get Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:15
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:17
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tweak_epub_ui.py:60
msgid "Tweak ePub"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:16
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:18
msgid "Make small changes to ePub format books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:17
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:19
msgid "T"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:27
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:39
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:29
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:41
msgid "Cannot tweak ePub"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:40
+#: /home/kovid/work/calibre/src/calibre/gui2/actions/tweak_epub.py:42
msgid "No ePub available. First convert the book to ePub."
msgstr ""
@@ -4457,7 +4586,7 @@ msgid "The specified directory could not be processed."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:274
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:856
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:895
msgid "No books"
msgstr ""
@@ -4493,7 +4622,11 @@ msgstr ""
msgid "Saving..."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/add.py:516
+#: /home/kovid/work/calibre/src/calibre/gui2/add.py:448
+msgid "Collecting data, please wait..."
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/add.py:517
msgid "Saved"
msgstr ""
@@ -4651,7 +4784,7 @@ msgid "Book %s of %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/book_details.py:144
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1032
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1019
msgid "Collections"
msgstr ""
@@ -4765,7 +4898,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/email_ui.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/look_feel_ui.py:197
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:115
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:61
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:65
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugboard_ui.py:113
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins_ui.py:105
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/save_template_ui.py:46
@@ -5203,7 +5336,7 @@ msgid "Bulk Convert"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/bulk.py:89
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:189
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:185
msgid "Options specific to the output format."
msgstr ""
@@ -5659,33 +5792,33 @@ msgid "Set the metadata. The output file will contain as much of this metadata a
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:180
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:748
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:749
msgid "Choose cover for "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:187
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:756
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:757
msgid "Cannot read"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:188
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:757
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:758
msgid "You do not have permission to read the file: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:196
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:203
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:765
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:766
msgid "Error reading file"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:197
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:766
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:767
msgid "There was an error reading from file:
"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata.py:204
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:776
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:777
msgid " is not a valid picture"
msgstr ""
@@ -5738,7 +5871,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/metadata/basic_widgets.py:931
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:932
msgid "Tags categorize the book. This is particularly useful while searching.
They can be any words or phrases, separated by commas."
msgstr ""
@@ -5921,7 +6054,7 @@ msgstr ""
msgid "Cannot build regex using the GUI builder without a book."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:153
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:158
msgid "Open book"
msgstr ""
@@ -6019,11 +6152,11 @@ msgstr ""
msgid "
Search and replace uses regular expressions. See the regular expressions tutorial to get started with regular expressions. Also clicking the wizard buttons below will allow you to test your regular expression against the current input document."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:173
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:169
msgid "Convert"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:200
+#: /home/kovid/work/calibre/src/calibre/gui2/convert/single.py:196
msgid "Options specific to the input format."
msgstr ""
@@ -6353,14 +6486,14 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:606
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:629
#: /home/kovid/work/calibre/src/calibre/gui2/custom_column_widgets.py:680
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:306
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:311
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:307
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:312
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:128
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:148
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:230
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:279
#: /home/kovid/work/calibre/src/calibre/gui2/library/delegates.py:283
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1197
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1198
msgid "Undefined"
msgstr ""
@@ -6429,177 +6562,177 @@ msgstr ""
msgid "No details available."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:177
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:188
msgid "Device no longer connected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:301
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:325
msgid "Get device information"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:315
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:340
msgid "Get list of books on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:325
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:350
msgid "Get annotations from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:337
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:362
msgid "Send metadata to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:342
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:367
msgid "Send collections to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:378
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:413
msgid "Upload %d books to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:393
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:429
msgid "Delete books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:410
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:447
msgid "Download books from device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:420
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:458
msgid "View book on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:461
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:499
msgid "Set default send to device action"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:467
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:505
msgid "Send to main memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:469
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:507
msgid "Send to storage card A"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:471
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:509
msgid "Send to storage card B"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:476
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:485
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:514
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:523
msgid "Main Memory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:497
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:535
msgid "Send specific format to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:498
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:536
msgid "Send and delete from library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:541
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:579
msgid "Eject device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:622
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:55
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:660
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:63
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:315
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:54
msgid "Error"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:623
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:661
msgid "Error communicating with device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:642
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1181
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:253
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:680
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1218
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:254
msgid "No suitable formats"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:658
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:696
msgid "Select folder to open as device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:709
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:747
msgid "Error talking to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:710
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:748
msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:791
msgid "Device: "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:755
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:793
msgid " detected."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:857
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:896
msgid "selected to send"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:876
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:915
msgid "%i of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:879
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:918
msgid "0 of %i Books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:880
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:919
msgid "Choose format to send to device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:888
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:927
msgid "No device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:889
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:928
msgid "Cannot send: No device is connected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:892
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:896
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:931
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:935
msgid "No card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:893
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:897
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:932
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:936
msgid "Cannot send: Device has no storage card"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:958
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1041
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1175
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:997
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1080
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1212
msgid "Auto convert the following books before uploading to the device?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:987
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1026
msgid "Sending catalogs to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1088
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1125
msgid "Sending news to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1142
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1179
msgid "Sending books to device."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1182
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1219
msgid "Could not upload the following books to the device, as no suitable formats were found. Convert the book(s) to a format supported by your device first."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1254
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1292
msgid "No space on device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1255
+#: /home/kovid/work/calibre/src/calibre/gui2/device.py:1293
msgid "
Cannot upload books to device there is no more free space available "
msgstr ""
@@ -6699,7 +6832,7 @@ msgid "My Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/catalog_ui.py:92
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:314
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:320
msgid "Generate catalog"
msgstr ""
@@ -7057,8 +7190,8 @@ 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:69
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1030
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:60
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1017
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:35
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/create_custom_column.py:76
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:338
@@ -7102,14 +7235,14 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:121
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:261
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:262
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:429
msgid "Upper Case"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:122
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:260
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:261
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:430
msgid "Lower Case"
msgstr ""
@@ -7122,14 +7255,14 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:124
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:262
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:263
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:432
msgid "Title Case"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:125
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:263
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:264
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:433
msgid "Capitalize"
msgstr ""
@@ -7146,13 +7279,13 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:271
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1439
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1449
msgid "Invalid author name"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog.py:272
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1440
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1450
msgid "Author names cannot contain & characters."
msgstr ""
@@ -7170,7 +7303,7 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/edit_authors_dialog_ui.py:90
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2111
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2130
msgid "F&ind"
msgstr ""
@@ -7285,109 +7418,109 @@ msgstr ""
msgid "Working"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:266
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:267
msgid "Character match"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:267
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:268
msgid "Regular Expression"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:270
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:271
msgid "Replace field"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:271
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:272
msgid "Prepend to field"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:272
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:273
msgid "Append to field"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:282
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:283
msgid "Editing meta information for %d books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:323
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:324
msgid "Immediately make all changes without closing the dialog. This operation cannot be canceled or undone"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:382
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:383
msgid "Book %d:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:400
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:401
msgid "Enter an identifier type"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:405
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:406
msgid "You can destroy your library using this feature. Changes are permanent. There is no undo function. You are strongly encouraged to back up your library before proceeding.
Search and replace in text fields using character matching or regular expressions. "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:413
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:414
msgid "In character mode, the field is searched for the entered search text. The text is replaced by the specified replacement text everywhere it is found in the specified field. After replacement is finished, the text can be changed to upper-case, lower-case, or title-case. If the case-sensitive check box is checked, the search text must match exactly. If it is unchecked, the search text will match both upper- and lower-case letters"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:424
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:425
msgid "In regular expression mode, the search text is an arbitrary python-compatible regular expression. The replacement text can contain backreferences to parenthesized expressions in the pattern. The search is not anchored, and can match and replace multiple times on the same string. The modification functions (lower-case etc) are applied to the matched text, not to the field as a whole. The destination box specifies the field where the result after matching and replacement is to be assigned. You can replace the text in the field, or prepend or append the matched text. See this reference for more information on python's regular expressions, and in particular the 'sub' function."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:502
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:503
msgid "S/R TEMPLATE ERROR"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:648
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:649
msgid "You must specify a destination when source is a composite field"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:654
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:655
msgid "You must specify a destination identifier type"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:752
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:771
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:898
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:772
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:899
msgid "Search/replace invalid"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:753
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:754
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:772
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:773
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:899
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:900
msgid "Search pattern is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:951
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:952
msgid ""
"Applying changes to %d books.\n"
"Phase {0} {1}%%."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:981
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:982
#: /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:982
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:983
msgid "The selected saved search/replace will be deleted. Are you sure?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:999
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1007
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1000
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1008
msgid "Save search/replace"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1000
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1001
msgid "Search/replace name:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1008
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk.py:1009
msgid "That saved search/replace already exists and will be overwritten. Are you sure?"
msgstr ""
@@ -7412,13 +7545,13 @@ msgid "Specify how the author(s) of this book should be sorted. For example Char
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:530
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:889
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:890
msgid "&Rating:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:531
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:532
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:890
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:891
msgid "Rating of this book. 0-5 stars"
msgstr ""
@@ -7488,7 +7621,7 @@ msgid "&Force numbers to start with:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:558
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1181
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1182
msgid "&Date:"
msgstr ""
@@ -8034,6 +8167,41 @@ msgstr ""
msgid "Aborting..."
msgstr ""
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:70
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources.py:146
+#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111
+msgid "Authors"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview.py:161
+msgid "Books with selected item: {0}"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview_ui.py:75
+msgid "Quickview"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview_ui.py:76
+msgid "Items"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview_ui.py:77
+#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:95
+#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:279
+#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80
+#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:76
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:134
+#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:109
+#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:670
+#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280
+msgid "Search"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/quickview_ui.py:78
+msgid "Search in the library view for the selected item"
+msgstr ""
+
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/restore_library.py:23
msgid "Restoring database from backups, do not interrupt, this will happen in three stages"
msgstr ""
@@ -8460,7 +8628,7 @@ msgid "&Author:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_ui.py:215
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:930
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:931
msgid "Ta&gs:"
msgstr ""
@@ -8499,12 +8667,6 @@ msgstr ""
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:146
-#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:111
-msgid "Authors"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_categories.py:60
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:147
msgid "Publishers"
@@ -8645,12 +8807,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:1385
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1395
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:1386
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1396
msgid "An item cannot be set to nothing. Delete it instead."
msgstr ""
@@ -8724,7 +8886,7 @@ msgid "The template box cannot be empty"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/template_dialog_ui.py:97
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:244
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:252
msgid "Set the color of the column:"
msgstr ""
@@ -9034,44 +9196,44 @@ msgstr ""
msgid "Attached is the %s periodical downloaded by calibre."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:192
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:193
msgid "E-book:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:200
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:201
msgid "Attached, you will find the e-book"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:201
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:202
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/plugins.py:189
msgid "by"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:202
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:203
msgid "in the %s format."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:216
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:217
msgid "Sending email to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:247
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:248
msgid "Auto convert the following books before sending via email?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:254
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:255
msgid "Could not email the following books as no suitable formats were found:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:260
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:261
msgid "Failed to email book"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:263
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:264
msgid "sent"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/email.py:286
+#: /home/kovid/work/calibre/src/calibre/gui2/email.py:287
msgid "Sent news to"
msgstr ""
@@ -9139,7 +9301,7 @@ msgid "Regular expression (?P)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:149
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1086
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1087
msgid "ISBN:"
msgstr ""
@@ -9273,11 +9435,11 @@ msgstr ""
msgid " - Jobs"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:459
+#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:463
msgid "Do you really want to stop the selected job?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:465
+#: /home/kovid/work/calibre/src/calibre/gui2/jobs.py:469
msgid "Do you really want to stop all non-device jobs?"
msgstr ""
@@ -9294,7 +9456,7 @@ msgid "Show books in the main memory of the device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:72
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1055
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1077
msgid "Card A"
msgstr ""
@@ -9303,7 +9465,7 @@ msgid "Show books in storage card A"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/layout.py:74
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1057
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1079
msgid "Card B"
msgstr ""
@@ -9347,45 +9509,45 @@ msgstr ""
msgid "Y"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:57
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:268
msgid "On Device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:68
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:59
msgid "Size (MB)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:75
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:66
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:258
msgid "Modified"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:771
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1330
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:797
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:758
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1317
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:806
msgid "The lookup/search name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:777
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1332
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:764
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1319
msgid "This book's UUID is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1027
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1014
msgid "In Library"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1031
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1018
#: /home/kovid/work/calibre/src/calibre/library/field_metadata.py:328
msgid "Size"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1312
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1299
msgid "Marked for deletion"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1315
+#: /home/kovid/work/calibre/src/calibre/gui2/library/models.py:1302
msgid "Double click to edit me
"
msgstr ""
@@ -9737,117 +9899,117 @@ msgstr ""
msgid "No format selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:694
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:695
msgid "Could not read metadata"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:695
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:696
msgid "Could not read metadata from %s format"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:714
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:715
msgid "&Browse"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:716
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:717
msgid "T&rim"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:718
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:719
msgid "&Remove"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:724
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:725
msgid "Download co&ver"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:725
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:726
msgid "&Generate cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:775
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:776
msgid "Not a valid picture"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:799
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:800
msgid "Specify title and author"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:800
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:801
msgid "You must specify a title and author before generating a cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:818
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:819
msgid "Invalid cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:819
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:820
msgid "Could not change cover as the image is invalid."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:846
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:847
msgid "This book has no cover"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:848
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:849
msgid "Cover size: %dx%d pixels"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:897
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:898
msgid "stars"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:966
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967
msgid "Tags changed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:967
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:968
msgid "You have changed the tags. In order to use the tags editor, you must either discard or apply these changes. Apply changes?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:993
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:994
msgid "I&ds:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:994
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:995
msgid ""
"Edit the identifiers for this book. For example: \n"
"\n"
"%s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1055
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1117
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1056
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1118
msgid "This ISBN number is valid"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1058
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1120
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1059
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1121
msgid "This ISBN number is invalid"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1083
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1105
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1084
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1106
msgid "Invalid ISBN"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1084
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1085
msgid "Enter an ISBN"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1106
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1107
msgid "The ISBN you entered is not valid. Try again."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1130
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1131
msgid "&Publisher:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1200
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1201
msgid "Clear date"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1232
+#: /home/kovid/work/calibre/src/calibre/gui2/metadata/basic_widgets.py:1233
msgid "Publishe&d:"
msgstr ""
@@ -10347,82 +10509,74 @@ msgid "does not match pattern"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:75
-msgid "If the "
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:81
-msgid " column "
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:87
-msgid " value "
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:202
-msgid "Enter either an identifier type or an identifier type and value of the form identifier:value"
-msgstr ""
-
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:205
-msgid "Enter a number"
+msgid "If the ___ column ___ values"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:210
+msgid "Enter either an identifier type or an identifier type and value of the form identifier:value"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:213
+msgid "Enter a number"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:218
msgid "Enter a date in the format YYYY-MM-DD"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:212
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:220
msgid "Enter a string."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:214
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:222
msgid "Enter a regular expression"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:216
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:224
msgid "You can match multiple values by separating them with %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:231
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:239
msgid "Create/edit a column coloring rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:236
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:244
msgid "Create a coloring rule by filling in the boxes below"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:250
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258
msgid "to"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:258
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:266
msgid "Only if the following conditions are all satisfied:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:268
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:276
msgid "Add another condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:272
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:280
msgid "You can disable a condition by blanking all of its boxes"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:344
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:352
msgid "Invalid condition"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:345
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:353
msgid "One of the conditions for this rule is invalid: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:350
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:358
msgid "No conditions"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:351
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:359
msgid "You must specify at least one non-empty condition for this rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:439
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:447
msgid ""
"\n"
" Advanced Rule for column %s:\n"
@@ -10430,7 +10584,7 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:444
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:452
msgid ""
"
Set the color of %s to %s if the following\n"
" conditions are met:
\n"
@@ -10438,43 +10592,43 @@ msgid ""
" "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:459
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:467
msgid "If the %s column %s value: %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:474
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:482
msgid "You can control the color of columns in the book list by creating \"rules\" that tell calibre what color to use. Click the Add Rule button below to get started.You can change an existing rule by double clicking it."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:483
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:491
msgid "Add Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:486
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:494
msgid "Remove Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:503
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:511
msgid "Move the selected rule up"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:508
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:516
msgid "Move the selected rule down"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:516
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:524
msgid "Add Advanced Rule"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:564
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:572
msgid "No rule selected"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:565
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:573
msgid "No rule selected for %s."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:570
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/coloring.py:578
msgid "removal"
msgstr ""
@@ -11283,90 +11437,108 @@ msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:126
-msgid "&Set as default"
+msgid "Restore your own subset of checked fields that you define using the 'Set as default' button"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:127
-msgid "Convert all downloaded comments to plain &text"
+msgid "&Set as default"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:128
-msgid "Swap author names from FN LN to LN, FN"
+msgid "Store the currently checked fields as a default you can restore using the 'Select default' button"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:129
-msgid "Max. number of &tags to download:"
+msgid "Convert all downloaded comments to plain &text"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:130
-msgid "Max. &time to wait after first match is found:"
+msgid "Swap author names from FN LN to LN, FN"
msgstr ""
#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:131
+msgid "Max. number of &tags to download:"
+msgstr ""
+
+#:
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:132
+msgid "Max. &time to wait after first match is found:"
+msgstr ""
+
+#:
#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:133
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:135
#: /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:132
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:134
msgid "Max. time to wait after first &cover is found:"
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:134
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:136
msgid ""
"
Different metadata sources have different sets of tags for the same book. If this option is checked, then calibre will use the smaller tag sets. These tend to be more like genres, while the larger tag sets tend to describe the books content.\n"
"
Note that this option will only make a practical difference if one of the metadata sources has a genre like tag set for the book you are searching for. Most often, they all have large tag sets."
msgstr ""
#:
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:136
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/metadata_sources_ui.py:138
msgid "Prefer &fewer tags"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:56
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:38
+msgid "No proxies used"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:42
+msgid "Using proxies:"
+msgstr ""
+
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:64
msgid "Failed to install command line tools."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:59
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:67
msgid "Command line tools installed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:60
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:68
msgid "Command line tools installed in"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:61
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc.py:69
msgid "If you move calibre.app, you have to re-install the command line tools."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:62
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:66
msgid "Max. simultaneous conversion/news download jobs:"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:63
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:67
msgid "Limit the max. simultaneous jobs to the available CPU &cores"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:64
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:68
msgid "Debug &device detection"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:65
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:69
msgid "Get information to setup the &user defined device"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:66
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:70
msgid "Open calibre &configuration directory"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:67
+#: /home/kovid/work/calibre/src/calibre/gui2/preferences/misc_ui.py:71
msgid "&Install command line tools"
msgstr ""
@@ -12092,17 +12264,6 @@ msgstr ""
msgid "Apply any changes you made to this tweak"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:95
-#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:279
-#: /home/kovid/work/calibre/src/calibre/gui2/store/config/chooser/chooser_widget_ui.py:80
-#: /home/kovid/work/calibre/src/calibre/gui2/store/mobileread/store_dialog_ui.py:76
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search/search_ui.py:134
-#: /home/kovid/work/calibre/src/calibre/gui2/store/search_ui.py:109
-#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:670
-#: /home/kovid/work/calibre/src/calibre/library/server/browse.py:280
-msgid "Search"
-msgstr ""
-
#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:339
msgid "Delete current search"
msgstr ""
@@ -12678,13 +12839,13 @@ msgid "Manage %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:454
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1850
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1869
msgid "Manage Saved Searches"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:462
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:466
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1848
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1867
msgid "Manage User Categories"
msgstr ""
@@ -12696,108 +12857,108 @@ msgstr ""
msgid "Change sub-categorization scheme"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:792
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:801
msgid "The grouped search term name is \"{0}\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1065
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1074
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:1070
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1079
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:1157
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:449
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1166
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:447
msgid "Searches"
msgstr ""
-#: /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
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1401
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1421
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1430
msgid "Rename user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1392
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1402
msgid "You cannot use periods in the name when renaming user categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1412
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1421
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1422
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1431
msgid "The name %s is already used"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1444
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1454
msgid "Duplicate search name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1445
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1455
msgid "The saved search name %s is already used."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1840
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1859
msgid "Manage Authors"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1842
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1861
msgid "Manage Series"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1844
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1863
msgid "Manage Publishers"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1846
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1865
msgid "Manage Tags"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1858
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1877
msgid "Invalid search restriction"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1859
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1878
msgid "The current search restriction is invalid"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1875
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1894
msgid "New Category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1926
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1929
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1945
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1948
msgid "Delete user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1927
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1946
msgid "%s is not a user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1930
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1949
msgid "%s contains items. Do you really want to delete it?"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1951
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1970
msgid "Remove category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1952
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1971
msgid "User category %s does not exist"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1971
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1990
msgid "Add to user category"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1972
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:1991
msgid "A user category %s does not exist"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2095
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2114
msgid "Find item in tag browser"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2098
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2117
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"
@@ -12807,93 +12968,93 @@ msgid ""
"containing the text \"foo\""
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2107
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2126
msgid "ALT+f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2112
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2131
msgid "Find the first/next matching item"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2117
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2136
msgid "Collapse all categories"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2141
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2160
msgid "No More Matches.
Click Find again to go to first match"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2154
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2173
msgid "Sort by name"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2154
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2173
msgid "Sort by popularity"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2155
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2174
msgid "Sort by average rating"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2158
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2177
msgid "Set the sort order for entries in the Tag Browser"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2165
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2184
msgid "Match all"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2165
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2184
msgid "Match any"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2170
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2189
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:2177
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2196
msgid "Manage authors, tags, etc"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2178
+#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:2197
msgid "All of these category_managers are available by right-clicking on items in the tag browser above"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:65
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:68
msgid "Convert book %(num)d of %(total)d (%(title)s)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:93
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:205
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:96
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:211
msgid "Could not convert some books"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:94
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:206
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:97
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:212
msgid "Could not convert %d of %d books, because no suitable source format was found."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:125
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:128
msgid "Queueing books for bulk conversion"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:183
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:189
msgid "Queueing "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:184
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:190
msgid "Convert book %d of %d (%s)"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:254
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:260
msgid "Fetch news from "
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:327
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:333
msgid "Convert existing"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:328
+#: /home/kovid/work/calibre/src/calibre/gui2/tools.py:334
msgid "The following books have already been converted to %s format. Do you wish to reconvert them?"
msgstr ""
@@ -14087,7 +14248,7 @@ msgstr ""
msgid "No books available to include in catalog"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/catalog.py:5051
+#: /home/kovid/work/calibre/src/calibre/library/catalog.py:5063
msgid ""
"\n"
"*** Adding 'By Authors' Section required for MOBI output ***"
@@ -14598,19 +14759,19 @@ msgstr ""
msgid "%sAverage rating is %3.1f"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:1053
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:1075
msgid "Main"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3144
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3246
msgid "
Migrating old database to ebook library in %s
"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3173
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3275
msgid "Copying %s"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/database2.py:3190
+#: /home/kovid/work/calibre/src/calibre/library/database2.py:3292
msgid "Compacting database"
msgstr ""
@@ -14630,11 +14791,11 @@ msgstr ""
msgid "Title Sort"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/restore.py:126
+#: /home/kovid/work/calibre/src/calibre/library/restore.py:127
msgid "Processed"
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/restore.py:192
+#: /home/kovid/work/calibre/src/calibre/library/restore.py:193
msgid "creating custom column "
msgstr ""
@@ -14735,8 +14896,8 @@ msgstr ""
msgid "Replace whitespace with underscores."
msgstr ""
-#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:372
-#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:400
+#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:379
+#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:412
msgid "Requested formats not available"
msgstr ""
diff --git a/src/calibre/utils/date.py b/src/calibre/utils/date.py
index b368c0ed9b..c93e69874c 100644
--- a/src/calibre/utils/date.py
+++ b/src/calibre/utils/date.py
@@ -123,6 +123,14 @@ def isoformat(date_time, assume_utc=False, as_utc=True, sep='T'):
date_time = date_time.astimezone(_utc_tz if as_utc else _local_tz)
return unicode(date_time.isoformat(sep))
+def as_local_time(date_time, assume_utc=True):
+ if not hasattr(date_time, 'tzinfo'):
+ return date_time
+ if date_time.tzinfo is None:
+ date_time = date_time.replace(tzinfo=_utc_tz if assume_utc else
+ _local_tz)
+ return date_time.astimezone(_local_tz)
+
def now():
return datetime.now().replace(tzinfo=_local_tz)
diff --git a/src/calibre/utils/mem.py b/src/calibre/utils/mem.py
index c68badc709..7dad5e4d0d 100644
--- a/src/calibre/utils/mem.py
+++ b/src/calibre/utils/mem.py
@@ -8,61 +8,157 @@ __docformat__ = 'restructuredtext en'
'''
Measure memory usage of the current process.
-The key function is memory() which returns the current memory usage in bytes.
+The key function is memory() which returns the current memory usage in MB.
You can pass a number to memory and it will be subtracted from the returned
value.
'''
-import gc, os
+import gc, os, re
from calibre.constants import iswindows, islinux
if islinux:
- ## {{{ http://code.activestate.com/recipes/286222/ (r1)
+ # Taken, with thanks, from:
+ # http://wingolog.org/archives/2007/11/27/reducing-the-footprint-of-python-applications
- _proc_status = '/proc/%d/status' % os.getpid()
+ def permute(args):
+ ret = []
+ if args:
+ first = args.pop(0)
+ for y in permute(args):
+ for x in first:
+ ret.append(x + y)
+ else:
+ ret.append('')
+ return ret
- _scale = {'kB': 1024.0, 'mB': 1024.0*1024.0,
- 'KB': 1024.0, 'MB': 1024.0*1024.0}
+ def parsed_groups(match, *types):
+ groups = match.groups()
+ assert len(groups) == len(types)
+ return tuple([type(group) for group, type in zip(groups, types)])
- def _VmB(VmKey):
- '''Private.
- '''
- global _proc_status, _scale
- # get pseudo file /proc//status
- try:
- t = open(_proc_status)
- v = t.read()
- t.close()
- except:
- return 0.0 # non-Linux?
- # get VmKey line e.g. 'VmRSS: 9999 kB\n ...'
- i = v.index(VmKey)
- v = v[i:].split(None, 3) # whitespace
- if len(v) < 3:
- return 0.0 # invalid format?
- # convert Vm value to bytes
- return float(v[1]) * _scale[v[2]]
+ class VMA(dict):
+ def __init__(self, *args):
+ (self.start, self.end, self.perms, self.offset,
+ self.major, self.minor, self.inode, self.filename) = args
+ def parse_smaps(pid):
+ with open('/proc/%s/smaps'%pid, 'r') as maps:
+ hex = lambda s: int(s, 16)
+
+ ret = []
+ header = re.compile(r'^([0-9a-f]+)-([0-9a-f]+) (....) ([0-9a-f]+) '
+ r'(..):(..) (\d+) *(.*)$')
+ detail = re.compile(r'^(.*): +(\d+) kB')
+ for line in maps:
+ m = header.match(line)
+ if m:
+ vma = VMA(*parsed_groups(m, hex, hex, str, hex, str, str, int, str))
+ ret.append(vma)
+ else:
+ m = detail.match(line)
+ if m:
+ k, v = parsed_groups(m, str, int)
+ assert k not in vma
+ vma[k] = v
+ else:
+ print 'unparseable line:', line
+ return ret
+
+ perms = permute(['r-', 'w-', 'x-', 'ps'])
+
+ def make_summary_dicts(vmas):
+ mapped = {}
+ anon = {}
+ for d in mapped, anon:
+ # per-perm
+ for k in perms:
+ d[k] = {}
+ d[k]['Size'] = 0
+ for y in 'Shared', 'Private':
+ d[k][y] = {}
+ for z in 'Clean', 'Dirty':
+ d[k][y][z] = 0
+ # totals
+ for y in 'Shared', 'Private':
+ d[y] = {}
+ for z in 'Clean', 'Dirty':
+ d[y][z] = 0
+
+ for vma in vmas:
+ if vma.major == '00' and vma.minor == '00':
+ d = anon
+ else:
+ d = mapped
+ for y in 'Shared', 'Private':
+ for z in 'Clean', 'Dirty':
+ d[vma.perms][y][z] += vma.get(y + '_' + z, 0)
+ d[y][z] += vma.get(y + '_' + z, 0)
+ d[vma.perms]['Size'] += vma.get('Size', 0)
+ return mapped, anon
+
+ def values(d, args):
+ if args:
+ ret = ()
+ first = args[0]
+ for k in first:
+ ret += values(d[k], args[1:])
+ return ret
+ else:
+ return (d,)
+
+ def print_summary(dicts_and_titles):
+ def desc(title, perms):
+ ret = {('Anonymous', 'rw-p'): 'Data (malloc, mmap)',
+ ('Anonymous', 'rwxp'): 'Writable code (stack)',
+ ('Mapped', 'r-xp'): 'Code',
+ ('Mapped', 'rwxp'): 'Writable code (jump tables)',
+ ('Mapped', 'r--p'): 'Read-only data',
+ ('Mapped', 'rw-p'): 'Data'}.get((title, perms), None)
+ if ret:
+ return ' -- ' + ret
+ else:
+ return ''
+
+ for d, title in dicts_and_titles:
+ print title, 'memory:'
+ print ' Shared Private'
+ print ' Clean Dirty Clean Dirty'
+ for k in perms:
+ if d[k]['Size']:
+ print (' %s %7d %7d %7d %7d%s'
+ % ((k,)
+ + values(d[k], (('Shared', 'Private'),
+ ('Clean', 'Dirty')))
+ + (desc(title, k),)))
+ print (' total %7d %7d %7d %7d'
+ % values(d, (('Shared', 'Private'),
+ ('Clean', 'Dirty'))))
+
+ print ' ' + '-' * 40
+ print (' total %7d %7d %7d %7d'
+ % tuple(map(sum, zip(*[values(d, (('Shared', 'Private'),
+ ('Clean', 'Dirty')))
+ for d, title in dicts_and_titles]))))
+
+ def print_stats(pid=None):
+ if pid is None:
+ pid = os.getpid()
+ vmas = parse_smaps(pid)
+ mapped, anon = make_summary_dicts(vmas)
+ print_summary(((mapped, "Mapped"), (anon, "Anonymous")))
def linux_memory(since=0.0):
- '''Return memory usage in bytes.
- '''
- return _VmB('VmSize:') - since
+ vmas = parse_smaps(os.getpid())
+ mapped, anon = make_summary_dicts(vmas)
+ dicts_and_titles = ((mapped, "Mapped"), (anon, "Anonymous"))
+ totals = tuple(map(sum, zip(*[values(d, (('Shared', 'Private'),
+ ('Clean', 'Dirty')))
+ for d, title in dicts_and_titles])))
+ return (totals[-1]/1024.) - since
-
- def resident(since=0.0):
- '''Return resident memory usage in bytes.
- '''
- return _VmB('VmRSS:') - since
-
-
- def stacksize(since=0.0):
- '''Return stack size in bytes.
- '''
- return _VmB('VmStk:') - since
- ## end of http://code.activestate.com/recipes/286222/ }}}
memory = linux_memory
+
elif iswindows:
import win32process
import win32con
@@ -95,7 +191,7 @@ elif iswindows:
def win_memory(since=0.0):
info = meminfo(get_handle(os.getpid()))
- return info['WorkingSetSize'] - since
+ return (info['WorkingSetSize']/1024.**2) - since
memory = win_memory