version 0.4.81

This commit is contained in:
Kovid Goyal 2008-08-04 10:05:02 -07:00
parent a5e9ff6ab9
commit f0f2abf4ef
22 changed files with 6275 additions and 3435 deletions

View File

@ -20,7 +20,9 @@ SQLITE = '/usr/lib/libsqlite3.so.0'
DBUS = '/usr/lib/libdbus-1.so.3'
LIBMNG = '/usr/lib/libmng.so.1'
LIBZ = '/lib/libz.so.1'
LIBBZ2 = '/lib/libbz2.so.1'
LIBUSB = '/lib/libusb.so'
LIBPOPPLER = '/usr/lib/libpoppler.so.3'
CALIBRESRC = os.path.join(CALIBREPREFIX, 'src')
@ -119,7 +121,8 @@ binaries += [('clit', CLIT, 'BINARY'), ('pdftohtml', PDFTOHTML, 'BINARY'),
('libunrar.so', LIBUNRAR, 'BINARY')]
print 'Adding external libraries...'
binaries += [ (os.path.basename(x), x, 'BINARY') for x in (SQLITE, DBUS, LIBMNG, LIBZ, LIBUSB)]
binaries += [ (os.path.basename(x), x, 'BINARY') for x in (SQLITE, DBUS,
LIBMNG, LIBZ, LIBBZ2, LIBUSB, LIBPOPPLER)]
qt = []

View File

@ -1,7 +1,7 @@
''' E-book management software'''
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal <kovid at kovidgoyal.net>'
__version__ = '0.4.80'
__version__ = '0.4.81'
__docformat__ = "epytext"
__author__ = "Kovid Goyal <kovid at kovidgoyal.net>"
__appname__ = 'calibre'
@ -116,7 +116,14 @@ def my_join(a, *p):
res = res.decode(encoding)
return res
os.path.join = my_join
os.path.join = my_join
def unicode_path(path, abs=False):
if not isinstance(path, unicode):
path = path.decode(sys.getfilesystemencoding())
if abs:
path = os.path.abspath(path)
return path
def osx_version():
if isosx:

View File

@ -25,7 +25,7 @@ Run an embedded python interpreter.
def update_zipfile(zipfile, mod, path):
if 'win32' in sys.platform:
print 'WARNING: On Windows Vista you must run this from a console that has been started in Administrator mode.'
print 'Press Enter to continue or Ctrl-C to Cancel'
print 'Press Enter to continue if this is an Administrator console or Ctrl-C to Cancel'
raw_input()
pat = re.compile(mod.replace('.', '/')+r'\.py[co]*')
name = mod.replace('.', '/') + os.path.splitext(path)[-1]

View File

@ -135,7 +135,7 @@ class PRS505(Device):
if 'PRS-505/UC&' in device_id:
main = volumes[device_id]+':\\'
if not main:
DeviceError(_('Unable to detect the %s disk drive. Try rebooting.')%self.__class__.__name__)
raise DeviceError(_('Unable to detect the %s disk drive. Try rebooting.')%self.__class__.__name__)
self._main_prefix = main
card = self._card_prefix = None
win32api = __import__('win32api')

View File

@ -0,0 +1,8 @@
#!/usr/bin/env python
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
'''
Conversion to EPUB.
'''

View File

@ -0,0 +1,184 @@
from __future__ import with_statement
__license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
'''
Recursively parse HTML files to find all linked files.
'''
import sys, os, re
from urlparse import urlparse
from urllib import unquote
from calibre import unicode_path
from calibre.ebooks.chardet import xml_to_unicode
class Link(object):
'''
Represents a link in a HTML file.
'''
@classmethod
def url_to_local_path(cls, url, base):
path = url.path
if os.path.isabs(path):
return path
return os.path.abspath(os.path.join(base, url))
def __init__(self, url, base):
'''
:param url: The url this link points to. Must be an unquoted unicode string.
:param base: The base directory that relative URLs are with respect to.
Must be a unicode string.
'''
assert isinstance(url, unicode) and isinstance(base, unicode)
self.url = url
self.parsed_url = urlparse(unquote(self.url))
self.is_local = self.parsed_url.scheme in ('', 'file')
self.path = None
self.fragment = self.parsed_url.fragment
if self.is_local:
self.path = self.url_to_local_path(self.parsed_url, base)
def __hash__(self):
if self.path is None:
return hash(self.url)
return hash(self.path)
def __eq__(self, other):
if not (hasattr(other, 'url') and hasattr(other, 'path')):
return False
if self.path is None:
return self.url == other.url
return self.path == other.path
class IgnoreFile(Exception):
pass
class HTMLFile(object):
'''
Contains basic traversal information about an HTML file. This
includes a recursive list of links to other files as well as
the encoding of each file.
You can iterate over the tree of files rooted at this file
by calling either :method:`breadth_first` or :method:`depth_first`.
The encoding of the file is available as :member:`encoding`.
If the file is a binary file (i.e. if conversion to unicode fails)
:member:`is_binary` is set to `True`.
'''
LINK_PAT = re.compile(
r'<\s*a\s+.*?href\s*=\s*(?:(?:"(?P<url1>[^"]+)")|(?:\'(?P<url2>[^\']+)\')|(?P<url3>[^\s]+))',
re.DOTALL|re.IGNORECASE)
def __init__(self, path_to_html_file, level, max_levels=sys.maxint,
encoding=None, verbose=0):
'''
:param level: The level of this file. Should be 0 for the root file.
:param max_levels: `level >= max_levels` the links in this file
will not be followed.
:param encoding: Use `encoding` to decode HTML.
'''
self.path = unicode_path(path_to_html_file, abs=True)
self.base = os.path.dirname(self.path)
self.level = level
self.links = []
self.map = {}
self.is_binary = False
try:
with open(self.path, 'rb') as f:
src = f.read()
except IOError, err:
msg = 'Could not read from file: %s with error: %s'%
(self.path, unicode(err))
if level == 0:
raise IOError(msg)
if verbose:
print msg
raise IgnoreFile
if encoding is None:
encoding = xml_to_unicode(src[:4096], verbose=verbose)[-1]
self.encoding = encoding
try:
src = src.decode(encoding, 'replace')
except UnicodeDecodeError:
self.is_binary = True
if verbose > 1:
print self.path, 'is a binary file.'
else:
self.find_links(src)
if self.level < max_levels:
rejects = []
for link in self.links:
if link.path is not None:
try:
self.map[link.url] = HTMLFile(link.path, level+1,
max_levels, encoding=encoding, verbose=verbose)
except IgnoreFile:
rejects.append(link)
for link in rejects:
self.links.remove(link)
def find_links(self, src):
for match in self.LINK_PAT.finditer():
url = None
for i in ('url1', 'url2', 'url3'):
url = match.group(i)
if url:
break
link = Link(url, self.base)
if link not in self.links:
self.links.append(link)
def breadth_first(self, root=True):
'''
Walk over the tree of linked files (by `<a href>` links) breadth
first.
:param root: If `True` return `self` as the first file.
:return: A breadth-first iterator.
'''
if root:
yield self
for link in self.links:
if link.path is not None:
yield self.map[link.url]
for link in self.links:
if link.path is not None:
for hf in self.map[link.url].breadth_first(root=False):
yield hf
def depth_first(self, root=True):
'''
Walk over the tree of linked files (by `<a href>` links) depth
first.
:param root: If `True` return `self` as the first file.
:return: A depth-first iterator.
'''
if root:
yield self
for link in self.links:
if link.path is not None:
yield self.map[link.url]
for hf in self.map[link.url].depth_first(root=False):
yield hf
if __name__ == '__main__':
root = HTMLFile(sys.argv[1], 0, verbose=2)
print 'Depth first...'
for f in root.depth_first():
print f.path
print '\n\nBreadth first...'
for f in root.breadth_first():
print f.path

View File

@ -14,17 +14,13 @@ def set_conversion_defaults(window):
d.exec_()
def get_bulk_conversion_options(window):
c = config(None)
with open(c.config_file_path, 'rb') as f:
d = ComicConf(window, config_defaults=f.read())
d = ComicConf(window, config_defaults=config(None).as_string())
if d.exec_() == QDialog.Accepted:
return d.config.parse()
def get_conversion_options(window, defaults, title, author):
if defaults is None:
c = config(None)
with open(c.config_file_path, 'rb') as f:
defaults = f.read()
defaults = config(None).as_string()
defaults += '\ntitle=%s\nauthor=%s'%(repr(title), repr(author))
d = ComicConf(window, config_defaults=defaults, generic=False)
if d.exec_() == QDialog.Accepted:

View File

@ -110,7 +110,7 @@
<item row="8" column="0" >
<widget class="QCheckBox" name="opt_no_sort" >
<property name="text" >
<string>Dont so&amp;rt</string>
<string>Don't so&amp;rt</string>
</property>
</widget>
</item>

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

@ -6,36 +6,54 @@ msgid ""
msgstr ""
"Project-Id-Version: calibre 0.4.55\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2008-07-21 22:18+0000\n"
"PO-Revision-Date: 2008-07-22 05:27+0000\n"
"POT-Creation-Date: 2008-08-03 09:01+0000\n"
"PO-Revision-Date: 2008-07-22 05:50+0000\n"
"Last-Translator: Kovid Goyal <Unknown>\n"
"Language-Team: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Launchpad-Export-Date: 2008-07-22 05:44+0000\n"
"X-Launchpad-Export-Date: 2008-08-04 16:52+0000\n"
"X-Generator: Launchpad (build Unknown)\n"
"Generated-By: pygettext.py 1.5\n"
#: /home/kovid/work/calibre/src/calibre/__init__.py:138
#: /home/kovid/work/calibre/src/calibre/__init__.py:178
#, fuzzy
msgid "%sUsage%s: %s\n"
msgstr "%sИспользовано%s: %s\n"
#: /home/kovid/work/calibre/src/calibre/__init__.py:175
#: /home/kovid/work/calibre/src/calibre/__init__.py:215
msgid "Created by "
msgstr "Сделано "
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:112
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:146
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:174
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:113
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:147
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:175
msgid "Unable to detect the %s disk drive. Try rebooting."
msgstr "Не удалось определить диск %s. Попробуйте перезагрузиться."
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:355
#: /home/kovid/work/calibre/src/calibre/devices/prs505/driver.py:356
msgid "The reader has no storage card connected."
msgstr "К ридеру не подключена карта памяти."
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:780
msgid "%prog [options] LITFILE"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:783
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:404
msgid "Output directory. Defaults to current directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:786
msgid "Useful for debugging."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lit/reader.py:797
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:425
msgid "OEB ebook created in"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:71
msgid "Set the title. Default: filename."
msgstr "Укажите заголовок. По умолчанию: имя файла."
@ -50,14 +68,17 @@ msgstr ""
"умолчанию: %default"
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/__init__.py:74
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:239
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:174
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:314
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:429
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:52
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:278
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:685
#: /home/kovid/work/calibre/src/calibre/library/database.py:879
#: /home/kovid/work/calibre/src/calibre/library/database.py:1387
#: /home/kovid/work/calibre/src/calibre/library/database.py:1517
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:926
#: /home/kovid/work/calibre/src/calibre/library/database.py:904
#: /home/kovid/work/calibre/src/calibre/library/database.py:1412
#: /home/kovid/work/calibre/src/calibre/library/database.py:1542
msgid "Unknown"
msgstr "Неизвестно"
@ -414,6 +435,88 @@ msgstr ""
msgid "No file to convert specified."
msgstr "Не указан файл для преобразования."
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:200
msgid "Rendered %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:230
msgid ""
"Options to control the conversion of comics (CBR, CBZ) files into ebooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:236
msgid "Title for generated ebook. Default is to use the filename."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:238
msgid ""
"Set the author in the metadata of the generated ebook. Default is %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:241
msgid ""
"Path to output LRF file. By default a file is created in the current "
"directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:243
msgid "Number of colors for Grayscale image conversion. Default: %default"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:245
msgid ""
"Disable normalize (improve contrast) color range for pictures. Default: False"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:247
msgid "Maintain picture aspect ratio. Default is to fill the screen."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:249
msgid "Disable sharpening."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:251
msgid "Don't split landscape images into two portrait images"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:253
msgid ""
"Don't sort the files found in the comic alphabetically by name. Instead use "
"the order they were added to the comic."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:255
msgid ""
"Choose a profile for the device you are generating this LRF for. The default "
"is the SONY PRS-500 with a screen size of 584x754 pixels. Choices are %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:257
msgid ""
"Be verbose, useful for debugging. Can be specified multiple times for "
"greater verbosity."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:259
msgid "Don't show progress bar."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:264
msgid ""
"%prog [options] comic.cb[z|r]\n"
"\n"
"Convert a comic in a CBZ or CBR file to an LRF ebook. \n"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:328
msgid "Rendering comic pages..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/comic/convert_from.py:334
msgid "Output written to"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/epub/convert_from.py:17
msgid ""
"Usage: %prog [options] mybook.epub\n"
@ -515,40 +618,40 @@ msgid ""
"%s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1749
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1752
msgid ""
"An error occurred while processing a table: %s. Ignoring table markup."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1751
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1754
msgid ""
"Bad table:\n"
"%s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1773
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1776
msgid "Table has cell that is too large"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1803
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1806
msgid ""
"You have to save the website %s as an html file first and then run html2lrf "
"on it."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1846
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1849
msgid "Could not read cover image: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1849
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1852
msgid "Cannot read from: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1984
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1987
msgid "Failed to process opf file"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1990
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/html/convert_from.py:1993
msgid ""
"Usage: %prog [options] mybook.html\n"
"\n"
@ -559,7 +662,7 @@ msgid ""
"convert a whole tree of HTML files."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lit/convert_from.py:21
#: /home/kovid/work/calibre/src/calibre/ebooks/lrf/lit/convert_from.py:22
msgid ""
"Usage: %prog [options] mybook.lit\n"
"\n"
@ -741,11 +844,10 @@ msgstr ""
msgid "Set the comment"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:100
msgid "mybook.epub"
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:117
msgid "A comma separated list of tags to set"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/epub.py:100
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/fb2.py:50
msgid "Usage:"
msgstr ""
@ -803,11 +905,11 @@ msgid ""
"Fetch a cover image for the book identified by ISBN from LibraryThing.com\n"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:751
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:40
msgid "Usage: %s file.lit"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:758
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/lit.py:50
msgid "Cover saved to"
msgstr ""
@ -819,22 +921,14 @@ msgstr ""
msgid "No filename specified."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:391
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:402
msgid "%prog [options] myebook.mobi"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:393
msgid "Output directory. Defaults to current directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:412
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:423
msgid "Raw MOBI HTML saved in"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:414
msgid "OEB ebook created in"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:22
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:26
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:36
@ -855,6 +949,7 @@ msgid "Comments"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info_ui.py:55
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:79
msgid "Dialog"
msgstr ""
@ -869,6 +964,51 @@ msgstr ""
msgid "Choose Format"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:38
msgid "Set defaults for conversion of comics (CBR/CBZ files)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf.py:53
msgid "Set options for converting %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:80
msgid "&Title:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:81
msgid "&Author(s):"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:82
msgid "&Number of Colors:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:83
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552
msgid "&Profile:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:84
msgid "Disable &normalize"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:85
msgid "Keep &aspect ratio"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:86
msgid "Disable &Sharpening"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:87
msgid "&Landscape"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/comicconf_ui.py:88
msgid "Dont so&rt"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:23
msgid "Basic"
msgstr ""
@ -877,47 +1017,47 @@ msgstr ""
msgid "Advanced"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107
msgid "<br>Must be a directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107
msgid "Invalid database location "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:105
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:108
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:107
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:110
msgid "Invalid database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:108
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:110
msgid "Invalid database location.<br>Cannot write to "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:122
msgid "Compacting database. This may take a while."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:120
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:122
msgid "Compacting..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:216
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219
#: /home/kovid/work/calibre/src/calibre/gui2/main_ui.py:265
msgid "Configuration"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:217
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220
msgid "&Location of books database (library1.db)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:218
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221
msgid "Browse for the new database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:219
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:237
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:239
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:241
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:243
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:513
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:266
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single_ui.py:285
@ -937,89 +1077,93 @@ msgstr ""
msgid "..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:220
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223
msgid "Use &Roman numerals for series number"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:221
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224
msgid "&Number of covers to show in browse mode (after restart):"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:222
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225
msgid "Show notification when &new version is available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:223
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226
msgid "Ask for &confirmation before deleting files"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:227
msgid "Format for &single file save:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:224
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228
msgid "&Priority for conversion jobs:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:225
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229
msgid "Default network &timeout:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:226
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230
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_ui.py:227
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231
msgid " seconds"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:228
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:232
msgid "Toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:229
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:233
msgid "Large"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:230
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:234
msgid "Medium"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:231
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:235
msgid "Small"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:232
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:236
msgid "&Button size in toolbar"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:233
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:237
msgid "Show &text in toolbar buttons"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:234
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:238
msgid "Select visible &columns in library view"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:235
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:239
msgid "Frequently used directories"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:236
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:240
msgid "Add a directory to the frequently used directories list"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:238
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:242
msgid "Remove a directory from the frequently used directories list"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:240
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:244
msgid "Free unused diskspace from the database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:241
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:245
msgid "&Compact database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:242
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config_ui.py:246
msgid "&Metadata from file name"
msgstr ""
@ -1151,7 +1295,6 @@ msgid "Convert %s to LRF"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single.py:108
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177
msgid "Set conversion defaults"
msgstr ""
@ -1415,10 +1558,6 @@ msgstr ""
msgid "Override<br>CSS"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:552
msgid "&Profile:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/lrf_single_ui.py:553
msgid "&Left Margin:"
msgstr ""
@ -2261,23 +2400,31 @@ msgstr ""
msgid "Bulk convert"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:177
msgid "Set defaults for conversion to LRF"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:178
msgid "Set defaults for conversion of comics"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:311
msgid " detected."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:309
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:311
msgid "Device: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:334
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:336
msgid "Connected "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:346
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:348
msgid "Device database corrupted"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:347
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:349
msgid ""
"\n"
" <p>The database of books on the reader is corrupted. Try the "
@ -2293,190 +2440,222 @@ msgid ""
" "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:399
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:473
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:401
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:475
msgid ""
"<p>Books with the same title as the following already exist in the database. "
"Add them anyway?<ul>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:402
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:476
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:404
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:478
msgid "Duplicates found!"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:435
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:448
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:437
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:450
msgid "Uploading books to device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:507
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:509
msgid "No space on device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:508
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:510
msgid ""
"<p>Cannot upload books to device there is no more free space available "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:546
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:541
msgid "Confirm delete"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:542
msgid "Are you sure you want to delete these %d books?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554
msgid "Deleting books from device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:586
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:607
msgid "Cannot edit metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:578
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:599
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:586
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:607
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:702
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:772
msgid "No books selected"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:674
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:682
msgid "Sending books to device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:677
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:685
msgid "No suitable formats"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:678
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:686
msgid ""
"Could not upload the following books to the device, as no suitable formats "
"were found:<br><ul>%s</ul>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:694
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:702
msgid "Cannot save to disk"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:705
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:713
msgid ""
"<p>Could not save the following books to disk, because the %s format is not "
"available for them:<ul>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:709
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:717
msgid "Could not save some ebooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:742
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:750
msgid "Fetch news from "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:744
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:752
msgid "Fetching news from "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:754
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:762
msgid "News fetched. Uploading to device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:764
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:772
msgid "Cannot convert"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:773
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:794
msgid "Starting Bulk conversion of %d books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832
msgid "Convert book %d of %d (%s)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:842
msgid ""
"<p>Could not convert %d of %d books, because no suitable source format was "
"found.<ul>%s</ul>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:843
msgid "Could not convert some books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:878
msgid "Convert comic %d of %d (%s)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:908
msgid "Convert book: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:953
msgid "Convert comic: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1001
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1019
msgid "No book selected"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:905
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:923
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:937
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1001
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1019
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1033
msgid "Cannot view"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:911
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:942
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1007
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1038
msgid "Choose the format to view"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:938
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1034
msgid "%s has no available formats."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1072
msgid "Cannot configure"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:976
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1072
msgid "Cannot configure while there are running jobs."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:999
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1095
msgid "Copying database to "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1014
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1110
msgid "Invalid database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1015
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1111
msgid ""
"<p>An invalid database already exists at %s, delete it before trying to move "
"the existing database.<br>Error: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1023
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1119
msgid "Could not move database"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1044
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1140
msgid "No detailed info available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1045
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1141
msgid "No detailed information is available for books on the device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1087
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1183
msgid "Error talking to device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1088
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1184
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:1139
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1235
msgid "Conversion Error"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1254
msgid "Database does not exist"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1158
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1254
msgid ""
"The directory in which the database should be: %s no longer exists. Please "
"choose a new database location."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1209
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1305
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:1215
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1311
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:1215
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1311
msgid "Update available"
msgstr ""
@ -2589,23 +2768,23 @@ msgstr ""
msgid "Custom news sources"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:95
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:99
msgid "Jobs:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:104
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:108
msgid "Click to see list of active jobs."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:133
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:137
msgid "Click to browse books by their covers"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:133
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:137
msgid "Click to turn off Cover Browsing"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:138
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:142
msgid ""
"<p>Browsing books by their covers is disabled.<br>Import of pictureflow "
"module failed:<br>"
@ -2851,11 +3030,11 @@ msgid ""
"For help on an individual command: %%prog command --help\n"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/parallel.py:344
#: /home/kovid/work/calibre/src/calibre/parallel.py:347
msgid "Could not launch worker process."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:157
#: /home/kovid/work/calibre/src/calibre/utils/fontconfig.py:169
msgid "Could not initialize the fontconfig library"
msgstr ""
@ -2964,9 +3143,8 @@ msgid ""
"downloads at most 2 feeds."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:84
#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:88
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:577
#: /home/kovid/work/calibre/src/calibre/web/feeds/main.py:70
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:580
msgid "Fetching feeds..."
msgstr ""
@ -2995,58 +3173,58 @@ msgstr ""
msgid "\tFailed links:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:559
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:562
msgid "Could not fetch article. Run with --debug to see the reason"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:581
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:584
msgid "Got feeds from index page"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:585
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:588
msgid "Trying to download cover..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:637
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:640
msgid "Starting download [%d thread(s)]..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:650
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:653
msgid "Feeds downloaded to %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:660
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:663
msgid "Could not download cover: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:665
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:668
msgid "Downloading cover from %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:699
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:702
msgid "Untitled Article"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:745
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:748
msgid ""
"\n"
"Downloaded article %s from %s\n"
"%s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:751
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:754
msgid "Article downloaded: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:757
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:760
msgid "Failed to download article: %s from %s\n"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:762
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:765
msgid "Article download failed: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:777
#: /home/kovid/work/calibre/src/calibre/web/feeds/news.py:780
msgid "Fetching feed"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -202,6 +202,15 @@ class Config(object):
raise IOError('Could not lock config file: %s'%self.config_file_path)
return self.option_set.parse_string(src)
def as_string(self):
if not os.path.exists(self.config_file_path):
return ''
try:
with ExclusiveFile(self.config_file_path) as f:
return f.read()
except LockError:
raise IOError('Could not lock config file: %s'%self.config_file_path)
def set(self, name, val):
if not self.option_set.has_option(name):
raise ValueError('The option %s is not defined.'%name)