Sync to trunk.

This commit is contained in:
John Schember 2009-10-20 17:15:27 -04:00
commit 4fe89589e3
29 changed files with 5147 additions and 4818 deletions

View File

@ -21,9 +21,12 @@ class TheAtlantic(BasicNewsRecipe):
dict(name='div', id=['seealso','storybottom', 'footer', 'ad_banner_top', 'sidebar','articletoolstop','subcontent',]),
dict(name='p', attrs={'id':["pagination"]}),
dict(name='table',attrs={'class':"tools"}),
dict(name='style'),
dict(name='a', href='/a/newsletters.mhtml')
]
remove_attributes = ['icap', 'callout', 'style']
no_stylesheets = True
conversion_options = { 'linearize_tables':True }
extra_css = '''
#timestamp{font-family:Arial,Helvetica,sans-serif; color:#666666 ;font-size:x-small}
@ -50,10 +53,14 @@ class TheAtlantic(BasicNewsRecipe):
for item in soup.findAll('div', attrs={'class':'item'}):
a = item.find('a')
if a and a.has_key('href'):
url = a['href']#.replace('/doc', 'doc/print')
url = a['href']
if not url.startswith('http://'):
url = 'http://www.theatlantic.com/'+url
url = url.replace('/doc/', '/doc/print/')
title = self.tag_to_string(a)
if title in ('VIDEO', 'AUDIO', 'INTERACTIVE MAP', 'SIDEBAR', 'RECIPES'):
continue
title = title.replace('&', '&')
byline = item.find(attrs={'class':'byline'})
date = self.tag_to_string(byline) if byline else ''
description = ''

View File

@ -10,7 +10,7 @@ from calibre.ebooks.BeautifulSoup import Tag
class HLN_be(BasicNewsRecipe):
title = 'Het Belang Van Limburg'
__author__ = 'Darko Miletic'
__author__ = 'Darko Miletic and Sujata Raman'
description = 'News from Belgium in Dutch'
publisher = 'Het Belang Van Limburg'
category = 'news, politics, Belgium'
@ -32,6 +32,14 @@ class HLN_be(BasicNewsRecipe):
html2epub_options = 'publisher="' + publisher + '"\ncomments="' + description + '"\ntags="' + category + '"\noverride_css=" p {text-indent: 0cm; margin-top: 0em; margin-bottom: 0.5em} "'
extra_css = '''
body{font-family:"Verdana",sans-serif; font-size:80%;}
.h1{font-family:"Verdana",sans-serif; font-size:large; font-weight:bold;}
.captionEmbeddedMasterObject{font-style:italic; font-size:80%;}
.gen_footnote3{font-size:80%; color: #666666;}
'''
keep_only_tags = [dict(name='div', attrs={'class':'art_box2'})]
remove_tags = [
dict(name=['embed','object'])

View File

@ -6,7 +6,7 @@ __license__ = 'GPL v3'
__copyright__ = '2009, Kovid Goyal <kovid@kovidgoyal.net>'
__docformat__ = 'restructuredtext en'
import sys, os, textwrap, subprocess, shutil, tempfile, atexit, stat
import sys, os, textwrap, subprocess, shutil, tempfile, atexit, stat, shlex
from setup import Command, islinux, basenames, modules, functions, \
__appname__, __version__
@ -149,7 +149,9 @@ class Develop(Command):
src = os.path.join(self.SRC, 'calibre', 'devices', 'linux_mount_helper.c')
dest = os.path.join(self.staging_bindir, 'calibre-mount-helper')
self.info('Installing mount helper to '+ dest)
p = subprocess.Popen(['gcc', '-Wall', '-pedantic', src, '-o', dest])
cflags = os.environ.get('OVERRIDE_CFLAGS', '-Wall -pedantic')
cflags = shlex.split(cflags)
p = subprocess.Popen(['gcc']+cflags+[src, '-o', dest])
ret = p.wait()
if ret != 0:
return warn()

View File

@ -6,7 +6,13 @@ __copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
import sys, re, os, shutil, subprocess, stat, glob, zipfile, plistlib
from setup import __version__ as VERSION, __appname__ as APPNAME, SRC, Command, \
scripts, basenames, functions as main_functions, modules as main_modules
from setuptools import setup
try:
from setuptools import setup
except:
setup
class setup:
pass
try:
from py2app.build_app import py2app

View File

@ -36,4 +36,12 @@ class ESLICK(USBMS):
SUPPORTS_SUB_DIRS = True
def windows_sort_drives(self, drives):
main = drives.get('main', None)
card = drives.get('carda', None)
if card and main and card < main:
drives['main'] = card
drives['carda'] = main
return drives

View File

@ -489,6 +489,9 @@ class MobiReader(object):
mobi_version = self.book_header.mobi_version
for i, tag in enumerate(root.iter(etree.Element)):
tag.attrib.pop('xmlns', '')
for x in tag.attrib:
if ':' in x:
del tag.attrib[x]
if tag.tag in ('country-region', 'place', 'placetype', 'placename',
'state', 'city', 'street', 'address', 'content'):
tag.tag = 'div' if tag.tag == 'content' else 'span'

View File

@ -188,6 +188,16 @@ class Stylizer(object):
%(text, item.href))
for elem in matches:
self.style(elem)._update_cssdict(cssdict)
for elem in xpath(tree, '//h:img[@width or @height]'):
base = elem.get('style', '').strip()
if base:
base += ';'
for prop in ('width', 'height'):
val = elem.get(prop, False)
if val:
base += '%s: %s;'%(prop, val)
del elem.attrib[prop]
elem.set('style', base)
for elem in xpath(tree, '//h:*[@style]'):
self.style(elem)._apply_style_attr()

View File

@ -72,7 +72,7 @@ class Tokenize:
return line
def __compile_expressions(self):
self.__ms_hex_exp = re.compile(r"\\\'(..)")
self.__utf_exp = re.compile(r"\\u(-?\d{3,6})")
self.__utf_exp = re.compile(r"\\u(-?\d{3,6}) {0,1}")
self.__splitexp = re.compile(r"(\\[\\{}]|{|}|\\[^\s\\{}&]+(?:\s)?)")
self.__par_exp = re.compile(r'\\$')
self.__mixed_exp = re.compile(r"(\\[a-zA-Z]+\d+)(\D+)")

View File

@ -453,6 +453,12 @@ class ConfigDialog(QDialog, Ui_Dialog):
self.delete_news.setEnabled)
self.setup_conversion_options()
self.opt_worker_limit.setValue(config['worker_limit'])
self.connect(self.button_open_config_dir, SIGNAL('clicked()'),
self.open_config_dir)
def open_config_dir(self):
from calibre.utils.config import config_dir
QDesktopServices.openUrl(QUrl.fromLocalFile(config_dir))
def create_symlinks(self):
from calibre.utils.osx_symlinks import create_symlinks

View File

@ -616,13 +616,20 @@
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<item row="3" column="0" colspan="2">
<widget class="QPushButton" name="button_osx_symlinks">
<property name="text">
<string>&amp;Install command line tools</string>
</property>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QPushButton" name="button_open_config_dir">
<property name="text">
<string>Open calibre &amp;configuration directory</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_4">

View File

@ -14,7 +14,7 @@ from PyQt4.Qt import QDialog, QApplication, SIGNAL, Qt, QTime, QObject, QMenu, \
from calibre.gui2.dialogs.scheduler_ui import Ui_Dialog
from calibre.gui2.search_box import SearchBox2
from calibre.gui2 import config as gconf
from calibre.gui2 import config as gconf, error_dialog
from calibre.web.feeds.recipes.model import RecipeModel
from calibre.ptempfile import PersistentTemporaryFile
@ -36,6 +36,7 @@ class SchedulerDialog(QDialog, Ui_Dialog):
self.connect(self.recipe_model, SIGNAL('searched(PyQt_PyObject)'),
self.search_done)
self.search.setFocus(Qt.OtherFocusReason)
self.commit_on_change = True
self.recipes.setModel(self.recipe_model)
self.detail_box.setVisible(False)
@ -55,6 +56,10 @@ class SchedulerDialog(QDialog, Ui_Dialog):
self.old_news.setValue(gconf['oldest_news'])
def break_cycles(self):
self.disconnect(self.recipe_model, SIGNAL('searched(PyQt_PyObject)'),
self.search_done)
self.disconnect(self.recipe_model, SIGNAL('searched(PyQt_PyObject)'),
self.search.search_done)
self.recipe_model = None
def search_done(self, *args):
@ -68,25 +73,32 @@ class SchedulerDialog(QDialog, Ui_Dialog):
self.last_downloaded.setVisible(enabled)
def current_changed(self, current, previous):
if previous.isValid():
self.commit(urn=getattr(previous.internalPointer(), 'urn', None))
if self.commit_on_change:
if previous.isValid():
if not self.commit(urn=getattr(previous.internalPointer(),
'urn', None)):
self.commit_on_change = False
self.recipes.setCurrentIndex(previous)
else:
self.commit_on_change = True
urn = self.current_urn
if urn is not None:
self.initialize_detail_box(urn)
def accept(self):
self.commit()
if not self.commit():
return False
return QDialog.accept(self)
def download_clicked(self):
self.commit()
if self.current_urn:
if self.commit() and self.current_urn:
self.emit(SIGNAL('download(PyQt_PyObject)'), self.current_urn)
def download_all_clicked(self):
self.commit()
self.emit(SIGNAL('download(PyQt_PyObject)'), None)
if self.commit() and self.commit():
self.emit(SIGNAL('download(PyQt_PyObject)'), None)
@property
def current_urn(self):
@ -97,10 +109,15 @@ class SchedulerDialog(QDialog, Ui_Dialog):
def commit(self, urn=None):
urn = self.current_urn if urn is None else urn
if not self.detail_box.isVisible() or urn is None:
return
return True
if self.account.isVisible():
un, pw = map(unicode, (self.username.text(), self.password.text()))
if not un and not pw and self.schedule.isChecked():
error_dialog(self, _('Need username and password'),
_('You must provide a username and/or password to '
'use this news source.'), show=True)
return False
self.recipe_model.set_account_info(urn, un.strip(), pw.strip())
if self.schedule.isChecked():
@ -122,6 +139,7 @@ class SchedulerDialog(QDialog, Ui_Dialog):
custom_tags = unicode(self.custom_tags.text()).strip()
custom_tags = [x.strip() for x in custom_tags.split(',')]
self.recipe_model.customize_recipe(urn, add_title_tag, custom_tags)
return True
def initialize_detail_box(self, urn):
self.detail_box.setVisible(True)

View File

@ -1621,12 +1621,13 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
try:
os.makedirs(self.library_path)
except:
self.library_path = os.path.expanduser('~/Library')
self.library_path = os.path.expanduser('~/CalibreLibrary')
error_dialog(self, _('Invalid library location'),
_('Could not access %s. Using %s as the library.')%
(repr(self.library_path), repr(self.library_path))
).exec_()
os.makedirs(self.library_path)
if not os.path.exists(self.library_path):
os.makedirs(self.library_path)
def read_settings(self):

View File

@ -140,8 +140,8 @@ class PostInstall:
for f in os.listdir('.'):
if os.stat(f).st_uid == 0:
os.rmdir(f) if os.path.isdir(f) else os.unlink(f)
if os.stat(config_dir).st_uid == 0:
os.rmdir(config_dir)
if os.stat(config_dir).st_uid == 0:
os.rmdir(config_dir)
if warn is None and self.warnings:
self.info('There were %d warnings'%len(self.warnings))

View File

@ -21,7 +21,7 @@ What formats does |app| support conversion to/from?
It can convert every input format in the following list, to every output format.
*Input Formats:* CBZ, CBR, CBC, EPUB, FB2, HTML, LIT, LRF, MOBI, ODT, PDF, PRC**, PDB, PML, RB, RTF, TCR, TXT
*Output Formats:* EPUB, FB2, OEB, LIT, LRF, MOBI, PDB, PML, RB, PDF, TXT
*Output Formats:* EPUB, FB2, OEB, LIT, LRF, MOBI, PDB, PML, RB, PDF, TCR, TXT
** PRC is a generic format, |app| supports PRC files with TextRead and MOBIBook headers

File diff suppressed because it is too large Load Diff

View File

@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: calibre 0.6.18\n"
"POT-Creation-Date: 2009-10-17 10:21+MDT\n"
"PO-Revision-Date: 2009-10-17 10:21+MDT\n"
"POT-Creation-Date: 2009-10-19 18:10+MDT\n"
"PO-Revision-Date: 2009-10-19 18:10+MDT\n"
"Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
@ -60,8 +60,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:79
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:121
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:154
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:588
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:775
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:591
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:778
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:49
#: /home/kovid/work/calibre/src/calibre/ebooks/odt/input.py:51
#: /home/kovid/work/calibre/src/calibre/ebooks/oeb/base.py:886
@ -110,7 +110,7 @@ msgstr ""
#: /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:431
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:152
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:156
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:391
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:404
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:876
@ -521,7 +521,7 @@ msgid "There is insufficient free space on the storage card"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:713
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:214
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:218
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:122
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1006
#: /home/kovid/work/calibre/src/calibre/library/database2.py:1010
@ -1601,13 +1601,13 @@ msgid "Sidebar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:22
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:22
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:23
#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:22
msgid "Normally calibre treats blank lines as paragraph markers. With this option it will assume that every line represents a paragraph instead."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/pdb/input.py:26
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:26
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/input.py:27
#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:26
msgid "Normally calibre treats blank lines as paragraph markers. With this option it will assume that every line starting with an indent (either a tab or 2+ spaces) represents a paragraph. Paragraphs end when the next line that starts with an indent is reached."
msgstr ""
@ -1826,6 +1826,14 @@ msgstr ""
msgid "This RTF file has a feature calibre does not support. Convert it to HTML first and then try it."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:23
msgid "Specify the character encoding of the output document. The default is utf-8."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/tcr/output.py:27
msgid "Speciy the compression level to use. Scale 1 - 10. 1 being the lowest compression but the fastest and 10 being the highest compression but the slowest."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/txt/input.py:32
msgid "Run the text input through the markdown pre-processor. To learn more about markdown see"
msgstr ""
@ -2176,12 +2184,12 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xexp_edit_ui.py:44
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:61
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:62
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:471
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:483
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:484
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:474
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:486
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:487
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:537
#: /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:361
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:375
@ -3206,126 +3214,126 @@ msgstr ""
msgid "new email address"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:461
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:791
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:467
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:797
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:140
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
msgid "Error"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:462
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:468
msgid "Failed to install command line tools."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:465
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:471
msgid "Command line tools installed"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:466
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:472
msgid "Command line tools installed in"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:467
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:473
msgid "If you move calibre.app, you have to re-install the command line tools."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:518
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:524
msgid "No valid plugin path"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:519
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:525
msgid "%s is not a valid plugin path"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:522
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:528
msgid "Choose plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:534
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:540
msgid "Plugin cannot be disabled"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:535
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:541
msgid "The plugin: %s cannot be disabled"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:544
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:550
msgid "Plugin not customizable"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:545
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:551
msgid "Plugin: %s does not need customization"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:569
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:575
msgid "Customize %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:579
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:585
msgid "Cannot remove builtin plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:580
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:586
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:613
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:619
msgid "Error log:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:620
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:626
msgid "Access log:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:648
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:654
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:589
msgid "Failed to start content server"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:672
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:678
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:503
msgid "Select location for books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:680
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:686
msgid "Invalid size"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:681
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:687
msgid "The size %s is invalid. must be of the form widthxheight"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:732
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:737
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:738
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:743
msgid "Invalid database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:733
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:739
msgid "Invalid database location "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:734
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:740
msgid "<br>Must be a directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:738
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:744
msgid "Invalid database location.<br>Cannot write to "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:772
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:778
msgid "Checking database integrity"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:792
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:798
msgid "Failed to check database integrity"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:797
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:803
msgid "Some inconsistencies found"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:798
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:804
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 ""
@ -3409,256 +3417,260 @@ msgstr ""
msgid "&Saving books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:468
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:471
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:368
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main_ui.py:173
msgid "Preferences"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:469
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:472
msgid "&Location of ebooks (The ebooks are stored in folders sorted by author and metadata is stored in the file metadata.db)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:470
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:473
msgid "Browse for the new database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:472
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:475
msgid "Show notification when &new version is available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:473
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:476
msgid "Default network &timeout:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:474
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:477
msgid "Set the default timeout for network fetches (i.e. anytime we go out to the internet to get information)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:475
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:478
msgid " seconds"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:476
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:479
msgid "Choose &language (requires restart):"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:477
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:480
msgid "Normal"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:478
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:481
msgid "High"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:479
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:482
msgid "Low"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:480
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:483
msgid "Job &priority:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:481
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:484
msgid "Preferred &output format:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:482
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:485
msgid "Preferred &input format order:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:485
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:488
msgid "Use &Roman numerals for series number"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:486
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:489
msgid "Enable system &tray icon (needs restart)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:487
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:490
msgid "Show &notifications in system tray"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:488
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491
msgid "Show cover &browser in a separate window (needs restart)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:489
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492
msgid "Search as you type"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:490
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493
msgid "Automatically send downloaded &news to ebook reader"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:491
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494
msgid "&Delete news from library when it is automatically sent to reader"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:492
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495
msgid "&Number of covers to show in browse mode (needs restart):"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:493
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496
msgid "Toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:494
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497
msgid "Large"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:495
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498
msgid "Medium"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:496
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499
msgid "Small"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:497
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:500
msgid "&Button size in toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:498
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:501
msgid "Show &text in toolbar buttons"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:499
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502
msgid "Select visible &columns in library view"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:502
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
msgid "Use internal &viewer for:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:503
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
msgid "Add an email address to which to send books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:504
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
msgid "&Add email"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:505
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
msgid "Make &default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:506
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
msgid "&Remove email"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:507
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
msgid "calibre can send your books to you (or your reader) by email"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:508
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511
msgid "&Maximum number of waiting worker processes (needs restart):"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:509
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512
msgid "&Check database integrity"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:510
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
msgid "&Install command line tools"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:511
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
msgid "Open calibre &configuration directory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
msgid "calibre contains a network server that allows you to access your book collection using a browser from anywhere in the world. Any changes to the settings will only take effect after a server restart."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:512
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
msgid "Server &port:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:513
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:58
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:210
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:117
msgid "&Username:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:514
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:59
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:211
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:119
msgid "&Password:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:515
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519
msgid "If you leave the password blank, anyone will be able to access your book collection using the web interface."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:516
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
msgid "The maximum size (widthxheight) for displayed covers. Larger covers are resized. "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:517
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521
msgid "Max. &cover size:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:518
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:522
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/password_ui.py:60
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:212
msgid "&Show password"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:519
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:523
msgid "Max. &OPDS items per query:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:520
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524
msgid "&Start Server"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:521
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
msgid "St&op Server"
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:526
msgid "&Test Server"
msgstr ""
#: /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:527
msgid "Run server &automatically on startup"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:524
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528
msgid "View &server logs"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:525
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/stanza_ui.py:46
msgid ""
"<p>Remember to leave calibre running as the server only runs as long as calibre is running.\n"
"<p>Stanza should see your calibre collection automatically. If not, try adding the URL http://myhostname:8080 as a new catalog in the Stanza reader on your iPhone. Here myhostname should be the fully qualified hostname or the IP address of the computer calibre is running on."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:527
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
msgid "Here you can customize the behavior of Calibre by controlling what plugins it uses."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:528
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
msgid "Enable/&Disable plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:529
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:533
msgid "&Customize plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:530
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
msgid "&Remove plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:531
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:535
msgid "Add new plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:532
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:536
msgid "Plugin &file:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:534
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/config_ui.py:538
msgid "&Add"
msgstr ""
@ -3990,28 +4002,28 @@ msgstr ""
msgid "Aborting..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:151
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:155
msgid "Created by: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:158
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:162
msgid "Last downloaded: never"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:173
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:177
msgid "%d days, %d hours and %d minutes ago"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:175
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:179
msgid "Last downloaded"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:195
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:199
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler_ui.py:190
msgid "Schedule news download"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:198
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:202
msgid "Add a custom news source"
msgstr ""
@ -4993,87 +5005,87 @@ msgstr ""
msgid "Could not access %s. Using %s as the library."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1673
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1674
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:1697
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1698
msgid "There are active jobs. Are you sure you want to quit?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1700
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1701
msgid ""
" is communicating with the device!<br>\n"
" Quitting may cause corruption on the device.<br>\n"
" Are you sure you want to quit?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1704
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1705
msgid "WARNING: Active jobs"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1755
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1756
msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1774
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1775
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1782
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1783
msgid "Update available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1783
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1784
msgid "%s has been updated to version %s. See the <a href=\"http://calibre.kovidgoyal.net/wiki/Changelog\">new features</a>. Visit the download page?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1801
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1802
msgid "Use the library located at the specified path."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1803
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1804
msgid "Start minimized to system tray."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1805
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1806
msgid "Log debugging information to console"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1807
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1808
msgid "Do not check for updates"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1855
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1856
msgid "If you are sure it is not running"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1857
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1858
msgid "Cannot Start "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1858
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1859
msgid "%s is already running."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1861
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1862
msgid "may be running in the system tray, in the"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1863
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1864
msgid "upper right region of the screen."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1865
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1866
msgid "lower right region of the screen."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1868
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1869
msgid "try rebooting your computer."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1870
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1882
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1871
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1883
msgid "try deleting the file"
msgstr ""
@ -6421,71 +6433,75 @@ msgstr ""
msgid "Unknown News Source"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:588
msgid "Download finished"
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:507
msgid "The \"%s\" recipe needs a username and password."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:590
msgid "Download finished"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:592
msgid "Failed to download the following articles:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:596
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
msgid "Failed to download parts of the following articles:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:598
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
msgid " from "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:600
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:602
msgid "\tFailed links:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:681
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:683
msgid "Could not fetch article. Run with -vv to see the reason"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:704
msgid "Fetching feeds..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:706
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:708
msgid "Got feeds from index page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:712
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:714
msgid "Trying to download cover..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:766
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:768
msgid "Starting download [%d thread(s)]..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:782
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:784
msgid "Feeds downloaded to %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:792
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:794
msgid "Could not download cover: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:799
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:801
msgid "Downloading cover from %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:925
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:927
msgid "Untitled Article"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:996
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:998
msgid "Article downloaded: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1007
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1009
msgid "Article download failed: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1024
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:1026
msgid "Fetching feed"
msgstr ""
@ -6495,12 +6511,12 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:73
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:82
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:170
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:172
msgid "Scheduled"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:84
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:171
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/model.py:173
msgid "Custom"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -164,6 +164,8 @@ class RecipeModel(QAbstractItemModel, SearchQueryParser):
return cls(*args)
def ok(urn):
if restrict_to_urns is None:
return False
return not restrict_to_urns or urn in restrict_to_urns
new_root = factory(NewsTreeItem, None)
@ -230,6 +232,8 @@ class RecipeModel(QAbstractItemModel, SearchQueryParser):
def search(self, query, refinement):
try:
results = self.parse(unicode(query))
if not results:
results = None
except ParseException:
results = []
self.do_refresh(restrict_to_urns=results)