diff --git a/src/calibre/gui2/__init__.py b/src/calibre/gui2/__init__.py index b993b15e37..11b2d5674a 100644 --- a/src/calibre/gui2/__init__.py +++ b/src/calibre/gui2/__init__.py @@ -76,6 +76,12 @@ def _config(): 'only take place when the Enter or Return key is pressed.') c.add_opt('save_to_disk_template_history', default=[], help='Previously used Save to Disk templates') + c.add_opt('main_search_history', default=[], + help='Search history for the main GUI') + c.add_opt('viewer_search_history', default=[], + help='Search history for the ebook viewer') + c.add_opt('lrf_viewer_search_history', default=[], + help='Search history for the LRF viewer') return ConfigProxy(c) config = _config() diff --git a/src/calibre/gui2/library.py b/src/calibre/gui2/library.py index f3bb4c21d0..be846c17f7 100644 --- a/src/calibre/gui2/library.py +++ b/src/calibre/gui2/library.py @@ -8,10 +8,10 @@ from operator import attrgetter from math import cos, sin, pi from PyQt4.QtGui import QTableView, QAbstractItemView, QColor, \ QItemDelegate, QPainterPath, QLinearGradient, QBrush, \ - QPen, QStyle, QPainter, QLineEdit, \ - QPalette, QImage, QApplication, QMenu, \ + QPen, QStyle, QPainter, \ + QImage, QApplication, QMenu, \ QStyledItemDelegate, QCompleter -from PyQt4.QtCore import QAbstractTableModel, QVariant, Qt, QString, \ +from PyQt4.QtCore import QAbstractTableModel, QVariant, Qt, \ SIGNAL, QObject, QSize, QModelIndex, QDate from calibre import strftime @@ -1100,94 +1100,4 @@ class DeviceBooksModel(BooksModel): self.editable = editable -class SearchBox(QLineEdit): - - INTERVAL = 1000 #: Time to wait before emitting search signal - - def __init__(self, parent, help_text=_('Search (For Advanced Search click the button to the left)')): - QLineEdit.__init__(self, parent) - self.help_text = help_text - self.initial_state = True - self.as_you_type = True - self.default_palette = QApplication.palette(self) - self.gray = QPalette(self.default_palette) - self.gray.setBrush(QPalette.Text, QBrush(QColor('gray'))) - self.prev_search = '' - self.timer = None - self.clear_to_help() - QObject.connect(self, SIGNAL('textEdited(QString)'), self.text_edited_slot) - - - def normalize_state(self): - self.setText('') - self.setPalette(self.default_palette) - self.setStyleSheet('QLineEdit { background-color: white; }') - - def clear_to_help(self): - self.setPalette(self.gray) - self.setText(self.help_text) - self.home(False) - self.initial_state = True - self.setStyleSheet('QLineEdit { background-color: white; }') - self.emit(SIGNAL('cleared()')) - - def clear(self): - self.clear_to_help() - self.emit(SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), '', False) - - def search_done(self, ok): - col = 'rgba(0,255,0,20%)' if ok else 'rgb(255,0,0,20%)' - self.setStyleSheet('QLineEdit { background-color: %s; }' % col) - - def keyPressEvent(self, event): - if self.initial_state: - self.normalize_state() - self.initial_state = False - if not self.as_you_type: - if event.key() in (Qt.Key_Return, Qt.Key_Enter): - self.do_search() - QLineEdit.keyPressEvent(self, event) - - def mouseReleaseEvent(self, event): - if self.initial_state: - self.normalize_state() - self.initial_state = False - QLineEdit.mouseReleaseEvent(self, event) - - def text_edited_slot(self, text): - if self.as_you_type: - text = qstring_to_unicode(text) if isinstance(text, QString) else unicode(text) - self.prev_text = text - self.timer = self.startTimer(self.__class__.INTERVAL) - - def timerEvent(self, event): - self.killTimer(event.timerId()) - if event.timerId() == self.timer: - self.do_search() - - def do_search(self): - text = qstring_to_unicode(self.text()) - refinement = text.startswith(self.prev_search) and ':' not in text - self.prev_search = text - self.emit(SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), text, refinement) - - def search_from_tokens(self, tokens, all): - ans = u' '.join([u'%s:%s'%x for x in tokens]) - if not all: - ans = '[' + ans + ']' - self.set_search_string(ans) - - def search_from_tags(self, tags, all): - joiner = ' and ' if all else ' or ' - self.set_search_string(joiner.join(tags)) - - def set_search_string(self, txt): - self.normalize_state() - self.setText(txt) - self.emit(SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), txt, False) - self.end(False) - self.initial_state = False - - def search_as_you_type(self, enabled): - self.as_you_type = enabled diff --git a/src/calibre/gui2/lrf_renderer/main.py b/src/calibre/gui2/lrf_renderer/main.py index c223f51d2e..5afe54e95c 100644 --- a/src/calibre/gui2/lrf_renderer/main.py +++ b/src/calibre/gui2/lrf_renderer/main.py @@ -15,10 +15,10 @@ from calibre.gui2.lrf_renderer.main_ui import Ui_MainWindow from calibre.gui2.lrf_renderer.config_ui import Ui_ViewerConfig from calibre.gui2.main_window import MainWindow from calibre.gui2.lrf_renderer.document import Document -from calibre.gui2.library import SearchBox +from calibre.gui2.search_box import SearchBox2 class RenderWorker(QThread): - + def __init__(self, parent, lrf_stream, logger, opts): QThread.__init__(self, parent) self.stream, self.logger, self.opts = lrf_stream, logger, opts @@ -26,7 +26,7 @@ class RenderWorker(QThread): self.lrf = None self.document = None self.exception = None - + def run(self): try: self.lrf = LRFDocument(self.stream) @@ -34,35 +34,35 @@ class RenderWorker(QThread): self.stream.close() self.stream = None if self.aborted: - self.lrf = None + self.lrf = None except Exception, err: self.lrf, self.stream = None, None self.exception = err self.formatted_traceback = traceback.format_exc() - + def abort(self): if self.lrf is not None: self.aborted = True self.lrf.keep_parsing = False - + class Config(QDialog, Ui_ViewerConfig): - + def __init__(self, parent, opts): QDialog.__init__(self, parent) Ui_ViewerConfig.__init__(self) self.setupUi(self) self.white_background.setChecked(opts.white_background) self.hyphenate.setChecked(opts.hyphenate) - + class Main(MainWindow, Ui_MainWindow): - + def __init__(self, logger, opts, parent=None): MainWindow.__init__(self, opts, parent) - Ui_MainWindow.__init__(self) + Ui_MainWindow.__init__(self) self.setupUi(self) self.setAttribute(Qt.WA_DeleteOnClose) self.setWindowTitle(__appname__ + _(' - LRF Viewer')) - + self.logger = logger self.opts = opts self.document = None @@ -73,18 +73,19 @@ class Main(MainWindow, Ui_MainWindow): self.slider_action = self.slider = QSlider(Qt.Horizontal) self.tool_bar.addWidget(self.slider) self.tool_bar.addSeparator() - self.search = SearchBox(self) + self.search = SearchBox2(self) + self.search.initialize('lrf_viewer_search_history') self.search_action = self.tool_bar.addWidget(self.search) QObject.connect(self.document, SIGNAL('chapter_rendered(int)'), self.chapter_rendered) QObject.connect(self.document, SIGNAL('page_changed(PyQt_PyObject)'), self.page_changed) - + QObject.connect(self.search, SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), self.find) - + self.action_next_page.setShortcuts([QKeySequence.MoveToNextPage, QKeySequence(Qt.Key_Space)]) self.action_previous_page.setShortcuts([QKeySequence.MoveToPreviousPage, QKeySequence(Qt.Key_Backspace)]) self.action_next_match.setShortcuts(QKeySequence.FindNext) self.addAction(self.action_next_match) - QObject.connect(self.action_next_page, SIGNAL('triggered(bool)'), self.next) + QObject.connect(self.action_next_page, SIGNAL('triggered(bool)'), self.next) QObject.connect(self.action_previous_page, SIGNAL('triggered(bool)'), self.previous) QObject.connect(self.action_back, SIGNAL('triggered(bool)'), self.back) QObject.connect(self.action_forward, SIGNAL('triggered(bool)'), self.forward) @@ -93,15 +94,15 @@ class Main(MainWindow, Ui_MainWindow): QObject.connect(self.action_configure, SIGNAL('triggered(bool)'), self.configure) QObject.connect(self.spin_box, SIGNAL('valueChanged(int)'), self.go_to_page) QObject.connect(self.slider, SIGNAL('valueChanged(int)'), self.go_to_page) - - + + self.graphics_view.setRenderHint(QPainter.Antialiasing, True) self.graphics_view.setRenderHint(QPainter.TextAntialiasing, True) self.graphics_view.setRenderHint(QPainter.SmoothPixmapTransform, True) - + self.closed = False - - + + def configure(self, triggered): opts = config['LRF_ebook_viewer_options'] if not opts: @@ -112,65 +113,64 @@ class Main(MainWindow, Ui_MainWindow): opts.white_background = bool(d.white_background.isChecked()) opts.hyphenate = bool(d.hyphenate.isChecked()) config['LRF_ebook_viewer_options'] = opts - + def set_ebook(self, stream): self.progress_bar.setMinimum(0) self.progress_bar.setMaximum(0) self.progress_bar.setValue(0) - + if stream is not None: self.file_name = os.path.basename(stream.name) if hasattr(stream, 'name') else '' self.progress_label.setText('Parsing '+ self.file_name) self.renderer = RenderWorker(self, stream, self.logger, self.opts) QObject.connect(self.renderer, SIGNAL('finished()'), self.parsed, Qt.QueuedConnection) - self.search.help_text = 'Search' self.search.clear_to_help() self.last_search = None else: self.stack.setCurrentIndex(0) self.renderer = None - + def open_ebook(self, triggered): - files = choose_files(self, 'open ebook dialog', 'Choose ebook', - [('Ebooks', ['lrf'])], all_files=False, + files = choose_files(self, 'open ebook dialog', 'Choose ebook', + [('Ebooks', ['lrf'])], all_files=False, select_only_single_file=True) if files: file = files[0] self.set_ebook(open(file, 'rb')) self.render() - - + + def page_changed(self, num): self.slider.setValue(num) self.spin_box.setValue(num) - + def render(self): if self.renderer is not None: self.stack.setCurrentIndex(1) self.renderer.start() - + def find(self, search, refinement): self.last_search = search try: self.document.search(search) except StopIteration: error_dialog(self, _('No matches found'), _('No matches for the search phrase %s were found.')%(search,)).exec_() - + def parsed(self): if not self.renderer.aborted and self.renderer.lrf is not None: width, height = self.renderer.lrf.device_info.width, \ self.renderer.lrf.device_info.height hdelta = self.tool_bar.height()+3 - + from PyQt4.QtGui import QScrollBar s = QScrollBar(self) scrollbar_adjust = min(s.width(), s.height()) self.graphics_view.resize_for(width+scrollbar_adjust, height+scrollbar_adjust) - + desktop = QCoreApplication.instance().desktop() screen_height = desktop.availableGeometry(self).height() - 25 height = min(screen_height, height+hdelta+scrollbar_adjust) - self.resize(width+scrollbar_adjust, height) + self.resize(width+scrollbar_adjust, height) self.setWindowTitle(self.renderer.lrf.metadata.title + ' - ' + __appname__) self.document_title = self.renderer.lrf.metadata.title if self.opts.profile: @@ -183,7 +183,7 @@ class Main(MainWindow, Ui_MainWindow): self.document.render(self.renderer.lrf) print 'Layout time:', time.time()-start, 'seconds' self.renderer.lrf = None - + self.graphics_view.setScene(self.document) self.graphics_view.show() self.spin_box.setRange(1, self.document.num_of_pages) @@ -200,10 +200,10 @@ class Main(MainWindow, Ui_MainWindow): msg = u'

%s: '%(exception.__class__.__name__,) + unicode(str(exception), 'utf8', 'replace') + u'

' msg += u'

Failed to render document

' msg += u'

Detailed traceback:

'
-            msg += self.renderer.formatted_traceback + '
' + msg += self.renderer.formatted_traceback + '' d = ConversionErrorDialog(self, 'Error while rendering file', msg) d.exec_() - + def chapter_rendered(self, num): if num > 0: self.progress_bar.setMinimum(0) @@ -213,7 +213,7 @@ class Main(MainWindow, Ui_MainWindow): else: self.progress_bar.setValue(self.progress_bar.value()+1) QCoreApplication.processEvents() - + def next(self, triggered): self.document.next() @@ -222,19 +222,19 @@ class Main(MainWindow, Ui_MainWindow): self.document.next_match() except StopIteration: pass - + def previous(self, triggered): self.document.previous() - + def go_to_page(self, num): self.document.show_page(num) - + def forward(self, triggered): self.document.forward() - + def back(self, triggered): self.document.back() - + def wheelEvent(self, ev): if ev.delta() >= 0: self.document.previous() @@ -263,7 +263,7 @@ def file_renderer(stream, opts, parent=None, logger=None): m = Main(logger, opts, parent=parent) m.set_ebook(stream) return m - + def option_parser(): from calibre.gui2.main_window import option_parser @@ -295,7 +295,7 @@ def normalize_settings(parser, opts): continue setattr(saved_opts, opt.dest, getattr(opts, opt.dest)) return saved_opts - + def main(args=sys.argv, logger=None): parser = option_parser() @@ -310,17 +310,17 @@ def main(args=sys.argv, logger=None): QCoreApplication.setOrganizationName(ORG_NAME) QCoreApplication.setApplicationName(APP_UID) opts = normalize_settings(parser, opts) - stream = open(args[1], 'rb') if len(args) > 1 else None + stream = open(args[1], 'rb') if len(args) > 1 else None main = file_renderer(stream, opts, logger=logger) sys.excepthook = main.unhandled_exception main.show() main.render() main.activateWindow() main.raise_() - return app.exec_() + return app.exec_() return 0 if __name__ == '__main__': sys.exit(main()) - - + + diff --git a/src/calibre/gui2/main.py b/src/calibre/gui2/main.py index dc0cc0b2a9..df67842df6 100644 --- a/src/calibre/gui2/main.py +++ b/src/calibre/gui2/main.py @@ -121,6 +121,9 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): Ui_MainWindow.__init__(self) self.setupUi(self) self.setWindowTitle(__appname__) + self.search.initialize('main_search_history', colorize=True, + help_text=_('Search (For Advanced Search click the button to the left)')) + self.connect(self.clear_button, SIGNAL('clicked()'), self.search.clear) self.progress_indicator = ProgressIndicator(self) self.verbose = opts.verbose self.get_metadata = GetMetadata() @@ -148,7 +151,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI): self.system_tray_icon.hide() else: self.system_tray_icon.show() - self.search.search_as_you_type(config['search_as_you_type']) self.system_tray_menu = QMenu(self) self.restore_action = self.system_tray_menu.addAction( QIcon(':/images/page.svg'), _('&Restore')) diff --git a/src/calibre/gui2/main.ui b/src/calibre/gui2/main.ui index 9ad7dbcc49..0ad69a2f59 100644 --- a/src/calibre/gui2/main.ui +++ b/src/calibre/gui2/main.ui @@ -185,33 +185,18 @@ - - - true - + - 1 + 0 0 - - false - - Search the list of books by title or author<br><br>Words separated by spaces are ANDed + <p>Search the list of books by title, author, publisher, tags, comments, etc.<br><br>Words separated by spaces are ANDed - Search the list of books by title, author, publisher, tags and comments<br><br>Words separated by spaces are ANDed - - - false - - - - - - true + <p>Search the list of books by title, author, publisher, tags, comments, etc.<br><br>Words separated by spaces are ANDed @@ -673,11 +658,6 @@ - - SearchBox - QLineEdit -
library.h
-
BooksView QTableView @@ -698,26 +678,14 @@ QTreeView
calibre/gui2/tag_view.h
+ + SearchBox2 + QComboBox +
calibre.gui2.search_box
+
- - - clear_button - clicked() - search - clear() - - - 787 - 215 - - - 755 - 213 - - - - + diff --git a/src/calibre/gui2/search_box.py b/src/calibre/gui2/search_box.py new file mode 100644 index 0000000000..43487f2e8b --- /dev/null +++ b/src/calibre/gui2/search_box.py @@ -0,0 +1,148 @@ +#!/usr/bin/env python +# vim:fileencoding=UTF-8:ts=4:sw=4:sta:et:sts=4:ai +from __future__ import with_statement + +__license__ = 'GPL v3' +__copyright__ = '2009, Kovid Goyal ' +__docformat__ = 'restructuredtext en' + +from PyQt4.Qt import QComboBox, SIGNAL, Qt, QLineEdit, QStringList + +from calibre.gui2 import config + +class SearchLineEdit(QLineEdit): + + def keyPressEvent(self, event): + self.emit(SIGNAL('key_pressed(PyQt_PyObject)'), event) + QLineEdit.keyPressEvent(self, event) + + def mouseReleaseEvent(self, event): + self.emit(SIGNAL('mouse_released(PyQt_PyObject)'), event) + QLineEdit.mouseReleaseEvent(self, event) + +class SearchBox2(QComboBox): + + INTERVAL = 1500 #: Time to wait before emitting search signal + MAX_COUNT = 25 + + def __init__(self, parent=None): + QComboBox.__init__(self, parent) + self.line_edit = SearchLineEdit(self) + self.setLineEdit(self.line_edit) + self.connect(self.line_edit, SIGNAL('key_pressed(PyQt_PyObject)'), + self.key_pressed, Qt.DirectConnection) + self.connect(self.line_edit, SIGNAL('mouse_released(PyQt_PyObject)'), + self.key_pressed, Qt.DirectConnection) + self.setEditable(True) + self.help_state = True + self.as_you_type = True + self.prev_search = '' + self.timer = None + self.setInsertPolicy(self.NoInsert) + self.setMaxCount(self.MAX_COUNT) + + def initialize(self, opt_name, colorize=False, + help_text=_('Search')): + self.as_you_type = config['search_as_you_type'] + self.opt_name = opt_name + self.addItems(QStringList(list(set(config[opt_name])))) + self.help_text = help_text + self.colorize = colorize + self.clear_to_help() + self.connect(self, SIGNAL('editTextChanged(QString)'), self.text_edited_slot) + + def normalize_state(self): + self.setEditText('') + self.line_edit.setStyleSheet('QLineEdit { color: black; background-color: white; }') + self.help_state = False + + def clear_to_help(self): + self.setEditText(self.help_text) + self.line_edit.home(False) + self.help_state = True + self.line_edit.setStyleSheet('QLineEdit { color: gray; background-color: white; }') + self.emit(SIGNAL('cleared()')) + + def text(self): + return self.currentText() + + def clear(self): + self.clear_to_help() + self.emit(SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), '', False) + + def search_done(self, ok): + if not unicode(self.currentText()).strip(): + return self.clear_to_help() + col = 'rgba(0,255,0,20%)' if ok else 'rgb(255,0,0,20%)' + if not self.colorize: + col = 'white' + self.line_edit.setStyleSheet('QLineEdit { color: black; background-color: %s; }' % col) + + def key_pressed(self, event): + if self.help_state: + self.normalize_state() + if not self.as_you_type: + if event.key() in (Qt.Key_Return, Qt.Key_Enter): + self.do_search() + + def mouse_released(self, event): + if self.help_state: + self.normalize_state() + + def text_edited_slot(self, text): + if self.as_you_type: + text = unicode(text) + self.prev_text = text + self.timer = self.startTimer(self.__class__.INTERVAL) + + def timerEvent(self, event): + self.killTimer(event.timerId()) + if event.timerId() == self.timer: + self.do_search() + + def do_search(self): + text = unicode(self.currentText()).strip() + if not text or text == self.help_text: + return self.clear() + self.help_state = False + refinement = text.startswith(self.prev_search) and ':' not in text + self.prev_search = text + self.emit(SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), text, refinement) + + idx = self.findText(text, Qt.MatchFixedString) + self.block_signals(True) + if idx < 0: + self.insertItem(0, text) + else: + t = self.itemText(idx) + self.removeItem(idx) + self.insertItem(0, t) + self.setCurrentIndex(0) + self.block_signals(False) + config[self.opt_name] = [unicode(self.itemText(i)) for i in + range(self.count())] + + def block_signals(self, yes): + self.blockSignals(yes) + self.line_edit.blockSignals(yes) + + def search_from_tokens(self, tokens, all): + ans = u' '.join([u'%s:%s'%x for x in tokens]) + if not all: + ans = '[' + ans + ']' + self.set_search_string(ans) + + def search_from_tags(self, tags, all): + joiner = ' and ' if all else ' or ' + self.set_search_string(joiner.join(tags)) + + def set_search_string(self, txt): + self.normalize_state() + self.setEditText(txt) + self.emit(SIGNAL('search(PyQt_PyObject, PyQt_PyObject)'), txt, False) + self.line_edit.end(False) + self.initial_state = False + + def search_as_you_type(self, enabled): + self.as_you_type = enabled + diff --git a/src/calibre/gui2/viewer/main.py b/src/calibre/gui2/viewer/main.py index 6cf9f5c19f..684f3e1599 100644 --- a/src/calibre/gui2/viewer/main.py +++ b/src/calibre/gui2/viewer/main.py @@ -21,7 +21,7 @@ from calibre.ebooks.oeb.iterator import EbookIterator from calibre.ebooks import DRMError from calibre.constants import islinux from calibre.utils.config import Config, StringConfig, dynamic -from calibre.gui2.library import SearchBox +from calibre.gui2.search_box import SearchBox2 from calibre.ebooks.metadata import MetaInformation from calibre.customize.ui import available_input_formats @@ -218,7 +218,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer): self.tool_bar2.insertWidget(self.action_find_next, self.reference) self.tool_bar2.insertSeparator(self.action_find_next) self.setFocusPolicy(Qt.StrongFocus) - self.search = SearchBox(self, _('Search')) + self.search = SearchBox2(self) + self.search.initialize('viewer_search_history') self.search.setToolTip(_('Search for text in book')) self.tool_bar2.insertWidget(self.action_find_next, self.search) self.view.set_manager(self) @@ -408,10 +409,10 @@ class EbookViewer(MainWindow, Ui_EbookViewer): def find(self, text, refinement, repeat=False): if not text: - return + return self.search.search_done(False) if self.view.search(text): self.scrolled(self.view.scroll_fraction) - return + return self.search.search_done(True) index = self.iterator.search(text, self.current_index) if index is None: if self.current_index > 0: @@ -419,8 +420,8 @@ class EbookViewer(MainWindow, Ui_EbookViewer): if index is None: info_dialog(self, _('No matches found'), _('No matches found for: %s')%text).exec_() - return - return + return self.search.search_done(True) + return self.search.search_done(True) self.pending_search = text self.load_path(self.iterator.spine[index]) diff --git a/src/calibre/translations/calibre.pot b/src/calibre/translations/calibre.pot index 8ec3ead55c..651db81492 100644 --- a/src/calibre/translations/calibre.pot +++ b/src/calibre/translations/calibre.pot @@ -5,8 +5,8 @@ msgid "" msgstr "" "Project-Id-Version: calibre 0.6.7\n" -"POT-Creation-Date: 2009-08-18 12:04+MDT\n" -"PO-Revision-Date: 2009-08-18 12:04+MDT\n" +"POT-Creation-Date: 2009-08-18 20:55+MDT\n" +"PO-Revision-Date: 2009-08-18 20:55+MDT\n" "Last-Translator: Automatically generated\n" "Language-Team: LANGUAGE\n" "MIME-Version: 1.0\n" @@ -94,8 +94,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/ebooks/pdf/writer.py:29 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:139 #: /home/kovid/work/calibre/src/calibre/ebooks/rtf/input.py:141 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:253 -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:260 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:258 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:265 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:91 #: /home/kovid/work/calibre/src/calibre/gui2/add.py:98 #: /home/kovid/work/calibre/src/calibre/gui2/convert/__init__.py:19 @@ -109,7 +109,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:48 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:106 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:350 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:387 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:34 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:39 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:40 @@ -120,16 +120,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/library.py:1000 #: /home/kovid/work/calibre/src/calibre/library/cli.py:265 #: /home/kovid/work/calibre/src/calibre/library/database.py:917 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:655 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:667 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1062 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1099 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1429 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1431 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1516 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1607 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1635 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1686 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:652 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:664 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1056 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1093 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1423 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1425 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1510 #: /home/kovid/work/calibre/src/calibre/library/server.py:309 #: /home/kovid/work/calibre/src/calibre/library/server.py:373 #: /home/kovid/work/calibre/src/calibre/utils/podofo/__init__.py:45 @@ -528,9 +525,9 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:678 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:467 #: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:83 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1006 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1010 -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1333 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1000 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1004 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1327 msgid "News" msgstr "" @@ -1908,16 +1905,16 @@ msgstr "" msgid "Default action to perform when send to device button is clicked" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:115 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:120 #: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:397 msgid "Copied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:149 msgid "Copy" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:144 +#: /home/kovid/work/calibre/src/calibre/gui2/__init__.py:149 msgid "Copy to Clipboard" msgstr "" @@ -2283,7 +2280,7 @@ msgid " is not a valid picture" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:166 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 msgid "Book Cover" msgstr "" @@ -2292,12 +2289,12 @@ msgid "Use cover from &source file" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:168 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 msgid "Change &cover image:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:169 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:379 msgid "Browse for an image to use as the cover of this book." msgstr "" @@ -2313,14 +2310,14 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:553 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:339 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:344 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:358 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:362 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:373 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:377 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:380 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:382 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:126 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:128 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/tag_editor_ui.py:131 @@ -2328,25 +2325,25 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:267 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:269 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/user_profiles_ui.py:270 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:340 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:333 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:335 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:341 msgid "..." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:171 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:336 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:340 msgid "&Title: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:172 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:341 msgid "Change the title of this book" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:173 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:140 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:340 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:344 msgid "&Author(s): " msgstr "" @@ -2360,24 +2357,24 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:176 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:147 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:349 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 msgid "&Publisher: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:177 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:350 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:354 msgid "Ta&gs: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:178 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:149 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:351 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:355 msgid "Tags categorize the book. This is particularly useful while searching.

They can be any words or phrases, separated by commas." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:179 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:154 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:358 msgid "&Series:" msgstr "" @@ -2385,13 +2382,13 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:181 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:155 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:156 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:355 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:360 msgid "List of known series. You can add new series." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/convert/metadata_ui.py:182 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 msgid "Book " msgstr "" @@ -3125,7 +3122,7 @@ msgid "Access log:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:632 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:562 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:564 msgid "Failed to start content server" msgstr "" @@ -3175,11 +3172,11 @@ msgstr "" msgid "The following books had formats listed in the database that are not actually available. The entries for the formats have been removed. You should check them manually. This can happen if you manipulate the files in the library folder directly." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save.py:70 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save.py:67 msgid "Invalid template" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save.py:71 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/add_save.py:68 msgid "The template %s is invalid:" msgstr "" @@ -3248,7 +3245,7 @@ msgid "&Saving books" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:485 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:372 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:367 #: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173 msgid "Preferences" msgstr "" @@ -3593,7 +3590,7 @@ msgid "Edit Meta information" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:139 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:335 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:339 msgid "Meta information" msgstr "" @@ -3602,24 +3599,24 @@ msgid "Author s&ort: " msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:142 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:346 msgid "Specify how the author(s) of this book should be sorted. For example Charles Dickens should be sorted as Dickens, Charles." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:143 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:345 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:349 msgid "&Rating:" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:144 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:145 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:346 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:350 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:351 msgid "Rating of this book. 0-5 stars" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:146 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352 msgid " stars" msgstr "" @@ -3629,8 +3626,8 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:150 #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_bulk_ui.py:151 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:352 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:357 msgid "Open Tag Editor" msgstr "" @@ -3659,131 +3656,135 @@ msgstr "" msgid "No format selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:177 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:178 msgid "Could not read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:178 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:179 msgid "Could not read metadata from %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:186 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:192 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:227 msgid "Could not read cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:187 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:222 msgid "Could not read cover from %s format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:193 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:228 msgid "The cover in the %s format is invalid" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:407 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:444 msgid "Downloading cover..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:419 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:424 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:430 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:456 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:467 msgid "Cannot fetch cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:420 -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:431 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:457 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:468 msgid "Could not fetch cover.
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:421 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:458 msgid "The download timed out." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:425 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:462 msgid "Could not find cover for this book. Try specifying the ISBN first." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:437 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:474 msgid "Bad cover" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:438 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:475 msgid "The cover is not a valid picture" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:477 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:514 msgid "Cannot fetch metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:478 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:515 msgid "You must specify at least one of ISBN, Title, Authors or Publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:504 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:541 msgid "Permission denied" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:505 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:542 msgid "Could not open %s. Is it being used by another program?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:334 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:338 msgid "Edit Meta Information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:342 msgid "Swap the author and title" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:345 msgid "Author S&ort: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:343 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:347 msgid "Automatically create the author sort entry based on the current author entry" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:361 msgid "Remove unused series (Series that have no books)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:363 msgid "IS&BN:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 msgid "Publishe&d:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:367 msgid "&Comments" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 msgid "&Fetch metadata from server" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:369 msgid "Available Formats" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 msgid "Add a new format for this book to the database" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:372 msgid "Remove the selected formats for this book from the database." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:374 msgid "Set the cover for the book from the selected format" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:376 +msgid "Update metadata from the metadata in the selected format" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:381 msgid "Reset cover to default" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:378 +#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:383 msgid "Download &cover" msgstr "" @@ -3812,7 +3813,7 @@ msgid "Scheduled" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:240 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:221 +#: /home/kovid/work/calibre/src/calibre/gui2/search_box.py:45 msgid "Search" msgstr "" @@ -4384,10 +4385,6 @@ msgstr "" msgid "Double click to edit me

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1107 -msgid "Search (For Advanced Search click the button to the left)" -msgstr "" - #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/config_ui.py:47 msgid "Configure Viewer" msgstr "" @@ -4413,7 +4410,7 @@ msgid "No matches for the search phrase %s were found." msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/lrf_renderer/main.py:157 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:420 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:421 msgid "No matches found" msgstr "" @@ -4464,142 +4461,146 @@ msgstr "" msgid "Save single format to disk..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:138 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:993 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:125 +msgid "Search (For Advanced Search click the button to the left)" +msgstr "" + +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:141 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:995 #: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:52 msgid "Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:139 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:142 msgid "Error communicating with device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:154 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 msgid "&Restore" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:156 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:158 msgid "&Donate to support calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:161 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:163 msgid "&Restart" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:200 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:202 msgid "

For help visit %s.kovidgoyal.net
" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:203 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:205 msgid "%s: %s by Kovid Goyal %%(version)s
%%(device)s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:223 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:225 msgid "Edit metadata individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:225 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:227 msgid "Edit metadata in bulk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:227 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:229 msgid "Download metadata and covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:228 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:230 msgid "Download only metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:229 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:231 msgid "Download only covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:232 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:234 msgid "Add books from a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:233 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:235 msgid "Add books from directories, including sub-directories (One book per directory, assumes every ebook file is the same book in a different format)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:236 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:238 msgid "Add books from directories, including sub directories (Multiple books per directory, assumes every ebook file is a different book)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:239 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:241 msgid "Add Empty book. (Book entry with no formats)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:276 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:358 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:353 msgid "Save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:277 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:279 msgid "Save to disk in a single directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:278 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1470 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:280 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1472 msgid "Save only %s format to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:286 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:364 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:288 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:359 msgid "View" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:287 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:289 msgid "View specific format" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:313 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:315 msgid "Convert individually" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:314 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:316 msgid "Bulk convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:329 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:331 msgid "Run welcome wizard" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:365 msgid "Similar books..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:422 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:423 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:424 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:425 msgid "Bad database location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:426 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1598 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:428 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1600 msgid "Choose a location for your ebook library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:605 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:607 msgid "Browse by covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:712 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 msgid "Device: " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:716 msgid " detected." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:738 msgid "Connected " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:748 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:750 msgid "Device database corrupted" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:749 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:751 msgid "" "\n" "

The database of books on the reader is corrupted. Try the following:\n" @@ -4610,422 +4611,419 @@ msgid "" " " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:825 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:868 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:827 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:870 msgid "Uploading books to device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 msgid "Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:836 msgid "EPUB Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:837 msgid "LRF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:836 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:838 msgid "HTML Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:837 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:839 msgid "LIT Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:838 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:840 msgid "MOBI Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:839 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:841 msgid "Text books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:840 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:842 msgid "PDF Books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:841 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:843 msgid "Comics" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:842 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:844 msgid "Archives" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:877 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:879 msgid "Failed to read metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:878 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:880 msgid "Failed to read metadata from the following" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:897 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:899 msgid "The selected books will be permanently deleted and the files removed from your computer. Are you sure?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:924 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:926 msgid "Deleting books from device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:955 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:957 msgid "Cannot download metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:956 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1004 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1034 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1059 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1194 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:958 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1006 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1036 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1196 msgid "No books selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:967 msgid "covers" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:965 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:967 msgid "metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:967 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:969 msgid "Downloading %s for %d book(s)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:988 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:990 msgid "Failed to download some metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:989 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:991 msgid "Failed to download metadata for the following:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:992 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:994 msgid "Failed to download metadata:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1003 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1033 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1005 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1035 msgid "Cannot edit metadata" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1060 msgid "Cannot save to disk" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1063 msgid "Choose destination directory" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1086 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088 msgid "Error while saving" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1089 msgid "There was an error while saving." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1094 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1095 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1096 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1097 msgid "Could not save some books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1096 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1098 msgid "Click the show details button to see which ones." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1115 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1117 msgid "Fetching news from " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1128 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1130 msgid " fetched." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1193 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1195 msgid "Cannot convert" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1363 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1382 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1365 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1384 msgid "No book selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1363 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1415 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1365 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1417 msgid "Cannot view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1369 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1371 msgid "Choose the format to view" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1381 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1383 msgid "Cannot open folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1398 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1400 msgid "Multiple Books Selected" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1399 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1401 msgid "You are attempting to open %d books. Opening too many books at once can be slow and have a negative effect on the responsiveness of your computer. Once started the process cannot be stopped until complete. Do you wish to continue?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1416 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1418 msgid "%s has no available formats." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1454 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1456 msgid "Cannot configure" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1455 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1457 msgid "Cannot configure while there are running jobs." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1499 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1501 msgid "No detailed info available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1500 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1502 msgid "No detailed information is available for books on the device." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1548 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1550 msgid "Error talking to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1549 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1551 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/main.py:1566 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1581 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1568 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1583 msgid "Conversion Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1567 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1569 msgid "

Could not convert: %s

It is a DRMed book. You must first remove the DRM using 3rd party tools." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1582 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1584 msgid "Failed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1607 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1609 msgid "Invalid library location" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1608 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1610 msgid "Could not access %s. Using %s as the library." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1656 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1658 msgid "is the result of the efforts of many volunteers from all over the world. If you find it useful, please consider donating to support its development." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1680 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1682 msgid "There are active jobs. Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1683 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1685 msgid "" " is communicating with the device!
\n" " Quitting may cause corruption on the device.
\n" " Are you sure you want to quit?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1687 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1689 msgid "WARNING: Active jobs" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1738 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1740 msgid "will keep running in the system tray. To close it, choose Quit in the context menu of the system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1757 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1759 msgid "Latest version: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1765 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1767 msgid "Update available" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1766 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1768 msgid "%s has been updated to version %s. See the new features. Visit the download page?" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1784 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1786 msgid "Use the library located at the specified path." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1786 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1788 msgid "Start minimized to system tray." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1788 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1790 msgid "Log debugging information to console" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1836 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1838 msgid "If you are sure it is not running" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1838 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1840 msgid "Cannot Start " msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1839 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1841 msgid "%s is already running." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1842 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1844 msgid "may be running in the system tray, in the" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1844 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1846 msgid "upper right region of the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1846 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1848 msgid "lower right region of the screen." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1849 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1851 msgid "try rebooting your computer." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1851 -#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1871 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1853 +#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1873 msgid "try deleting the file" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:332 msgid "calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:339 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:334 msgid "Advanced search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:341 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:336 msgid "Alt+S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:342 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:337 msgid "&Search:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:343 -msgid "Search the list of books by title or author

Words separated by spaces are ANDed" +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:338 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:339 +msgid "

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

Words separated by spaces are ANDed" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344 -msgid "Search the list of books by title, author, publisher, tags and comments

Words separated by spaces are ANDed" -msgstr "" - -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:340 msgid "Reset Quick Search" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:342 msgid "Match any" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:343 msgid "Match all" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:344 msgid "Sort by &popularity" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:345 msgid "Add books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:351 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:346 msgid "A" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:352 -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:353 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:347 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:348 msgid "Remove books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:354 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:349 msgid "Del" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:355 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:350 msgid "Edit meta information" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:356 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:351 msgid "E" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:352 msgid "Send to device" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:359 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:354 msgid "S" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:360 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:355 msgid "Fetch news" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:361 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:356 msgid "F" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:362 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:357 msgid "Convert E-books" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:363 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:358 msgid "C" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:365 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:360 msgid "V" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:361 msgid "Open containing folder" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:367 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:362 msgid "Show book details" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:363 msgid "Books by same author" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:369 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:364 msgid "Books in this series" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:370 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:365 msgid "Books by this publisher" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:371 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:366 msgid "Books with the same tags" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:373 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368 msgid "Configure calibre" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:374 +#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:369 msgid "Ctrl+P" msgstr "" @@ -5248,7 +5246,7 @@ msgid "Options to customize the ebook viewer" msgstr "" #: /home/kovid/work/calibre/src/calibre/gui2/viewer/documentview.py:59 -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:649 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:650 msgid "Remember last used window size" msgstr "" @@ -5317,75 +5315,75 @@ msgstr "" msgid "Go to a reference. To get reference numbers, use the reference mode." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:222 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:223 msgid "Search for text in book" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:285 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:286 msgid "Print Preview" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:380 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:381 msgid "Choose ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:381 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:382 msgid "Ebooks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:401 msgid "Add bookmark" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:400 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:401 msgid "Enter title for bookmark:" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:421 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:422 msgid "No matches found for: %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:461 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:462 msgid "Loading flow..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:488 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:489 msgid "Laying out %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:517 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:518 msgid "Manage Bookmarks" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:552 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:553 msgid "Loading ebook..." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:560 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:561 msgid "DRM Error" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:561 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:562 msgid "

This book is protected by DRM" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:565 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:566 msgid "Could not open ebook" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:639 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:640 msgid "Options to control the ebook viewer" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:646 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:647 msgid "If specified, viewer window will try to come to the front when started." msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:651 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:652 msgid "Print javascript alert and console messages to the console" msgstr "" -#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:657 +#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:658 msgid "" "%prog [options] file\n" "\n" @@ -5961,15 +5959,15 @@ msgid "" "For help on an individual command: %%prog command --help\n" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1542 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1536 msgid "

Migrating old database to ebook library in %s

" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1571 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1565 msgid "Copying %s" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/database2.py:1588 +#: /home/kovid/work/calibre/src/calibre/library/database2.py:1582 msgid "Compacting database" msgstr "" @@ -6053,7 +6051,7 @@ msgstr "" msgid "The format in which to display dates. %d - day, %b - month, %Y - year. Default is: %b, %Y" msgstr "" -#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:214 +#: /home/kovid/work/calibre/src/calibre/library/save_to_disk.py:215 msgid "Requested formats not available" msgstr "" @@ -6081,43 +6079,43 @@ msgstr "" msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:550 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:551 msgid "Path to the database in which books are stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:552 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:553 msgid "Pattern to guess metadata from filenames" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:554 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:555 msgid "Access key for isbndb.com" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:556 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:557 msgid "Default timeout for network operations (seconds)" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:558 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:559 msgid "Path to directory in which your library of books is stored" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:560 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:561 msgid "The language in which to display the user interface" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:562 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:563 msgid "The default output format for ebook conversions." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:566 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:567 msgid "Ordered list of formats to prefer for input." msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:568 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:569 msgid "Read metadata from files" msgstr "" -#: /home/kovid/work/calibre/src/calibre/utils/config.py:570 +#: /home/kovid/work/calibre/src/calibre/utils/config.py:571 msgid "The priority of worker processes" msgstr "" @@ -6368,7 +6366,7 @@ msgstr "" #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_fudzilla.py:15 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_glasgow_herald.py:10 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_globe_and_mail.py:15 -#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_guardian.py:16 +#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_guardian.py:17 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers.py:14 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_harpers_full.py:26 #: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_hindu.py:10