Sync to trunk.

This commit is contained in:
John Schember 2009-07-29 18:50:39 -04:00
commit 1286a5e600
51 changed files with 10963 additions and 9484 deletions

View File

@ -2,7 +2,7 @@ __license__ = 'GPL v3'
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
__docformat__ = 'restructuredtext en'
__appname__ = 'calibre'
__version__ = '0.6.2'
__version__ = '0.6.3'
__author__ = "Kovid Goyal <kovid@kovidgoyal.net>"
import re

View File

@ -27,8 +27,11 @@ every time you add an HTML file to the library.\
from calibre.ebooks.epub import initialize_container
with TemporaryDirectory('_plugin_html2zip') as tdir:
gui_convert(htmlfile, tdir, [('debug_input', tdir,
OptionRecommendation.HIGH)])
recs =[('debug_input', tdir, OptionRecommendation.HIGH)]
if self.site_customization and self.site_customization.strip():
recs.append(['input_encoding', self.site_customization.strip(),
OptionRecommendation.HIGH])
gui_convert(htmlfile, tdir, recs)
of = self.temporary_file('_plugin_html2zip.zip')
opf = glob.glob(os.path.join(tdir, '*.opf'))[0]
ncx = glob.glob(os.path.join(tdir, '*.ncx'))
@ -40,6 +43,10 @@ every time you add an HTML file to the library.\
return of.name
def customization_help(self, gui=False):
return _('Character encoding for the input HTML files. Common choices '
'include: cp1252, latin1, iso-8859-1 and utf-8.')
class ComicMetadataReader(MetadataReaderPlugin):

View File

@ -37,6 +37,9 @@ class CLI(object):
path = os.path.join(path, infile.name)
if not replace_file and os.path.exists(path):
raise PathError('File already exists: ' + path)
d = os.path.dirname(path)
if not os.path.exists(d):
os.makedirs(d)
dest = open(path, 'wb')
shutil.copyfileobj(infile, dest, 10*1024*1024)
dest.flush()

View File

@ -14,7 +14,7 @@ from calibre.utils.config import OptionParser
from calibre.utils.logging import Log
from calibre.constants import preferred_encoding
from calibre.customize.conversion import OptionRecommendation
from calibre import patheq
USAGE = '%prog ' + _('''\
input_file output_file [options]
@ -220,6 +220,9 @@ def create_option_parser(args, log):
from calibre.ebooks.conversion.plumber import Plumber
reporter = ProgressBar(log)
if patheq(input, output):
raise ValueError('Input file is the same as the output file')
plumber = Plumber(input, output, log, reporter)
add_input_output_options(parser, plumber)
add_pipeline_options(parser, plumber)

View File

@ -351,7 +351,7 @@ OptionRecommendation(name='read_metadata_from_opf',
OptionRecommendation(name='asciiize',
recommended_value=False, level=OptionRecommendation.LOW,
help=(_('Transliterate unicode characters to an ASCII '
'representation. Use with care because this will remove replace '
'representation. Use with care because this will replace '
'unicode characters with ASCII. For instance it will replace "%s" '
'with "Mikhail Gorbachiov". Also, note that in '
'cases where there are multiple representations of a character '

View File

@ -21,6 +21,7 @@ from calibre.utils.podofo import get_metadata as podofo_get_metadata, \
set_metadata as podofo_set_metadata, Unavailable, get_metadata_quick
def get_quick_metadata(stream):
return get_metadata_pypdf(stream)
raw = stream.read()
mi = get_metadata_quick(raw)
if mi.title == '_':

View File

@ -411,6 +411,8 @@ class Style(object):
result = size
else:
result = self._unit_convert(value, base=base, font=base)
if not isinstance(result, (int, float, long)):
return base
if result < 0:
result = normalize_fontsize("smaller", base)
if factor:

View File

@ -275,7 +275,7 @@ class CSSFlattener(object):
items = cssdict.items()
items.sort()
css = u';\n'.join(u'%s: %s' % (key, val) for key, val in items)
classes = node.get('class', None) or 'calibre'
classes = node.get('class', '').strip() or 'calibre'
klass = STRIPNUM.sub('', classes.split()[0].replace('_', ''))
if css in styles:
match = styles[css]

View File

@ -1,7 +1,7 @@
'''
UI for adding books to the database and saving books to disk
'''
import os
import os, shutil
from Queue import Queue, Empty
from PyQt4.Qt import QThread, SIGNAL, QObject, QTimer, Qt
@ -167,6 +167,15 @@ class Adder(QObject):
self.add_formats(id, formats)
self.number_of_books_added += 1
def cleanup(self):
if hasattr(self, 'worker') and hasattr(self.worker, 'tdir') and \
self.worker.tdir is not None:
if os.path.exists(self.worker.tdir):
try:
shutil.rmtree(self.worker.tdir)
except:
pass
class Saver(QObject):
def __init__(self, parent, db, callback, rows, path,

View File

@ -7,7 +7,7 @@ from PyQt4.Qt import QDialog, QMessageBox, QListWidgetItem, QIcon, \
QStringListModel, QAbstractItemModel, QFont, \
SIGNAL, QTimer, Qt, QSize, QVariant, QUrl, \
QModelIndex, QInputDialog, QAbstractTableModel, \
QDialogButtonBox, QTabWidget, QBrush
QDialogButtonBox, QTabWidget, QBrush, QLineEdit
from calibre.constants import islinux, iswindows
from calibre.gui2.dialogs.config_ui import Ui_Dialog
@ -553,10 +553,14 @@ class ConfigDialog(QDialog, Ui_Dialog):
self._plugin_model.refresh_plugin(plugin)
else:
help = plugin.customization_help()
sc = plugin_customization(plugin)
if not sc:
sc = ''
sc = sc.strip()
text, ok = QInputDialog.getText(self, _('Customize %s')%plugin.name,
help)
help, QLineEdit.Normal, sc)
if ok:
customize_plugin(plugin, unicode(text))
customize_plugin(plugin, unicode(text).strip())
self._plugin_model.refresh_plugin(plugin)
if op == 'remove':
if remove_plugin(plugin):

View File

@ -418,13 +418,16 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
try:
db = LibraryDatabase2(self.library_path)
except Exception, err:
import traceback
error_dialog(self, _('Bad database location'),
unicode(err)).exec_()
_('Bad database location')+':'+self.library_path,
det_msg=traceback.format_exc()).exec_()
dir = unicode(QFileDialog.getExistingDirectory(self,
_('Choose a location for your ebook library.'),
os.path.expanduser('~')))
if not dir:
QCoreApplication.exit(1)
raise SystemExit(1)
else:
self.library_path = dir
db = LibraryDatabase2(self.library_path)
@ -520,6 +523,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
@property
def spare_server(self):
# Because of the use of the property decorator, we're called one
# extra time. Ignore.
if not hasattr(self, '__spare_server_property_limiter'):
self.__spare_server_property_limiter = True
return None
try:
QTimer.singleShot(1000, self.add_spare_server)
return self.spare_servers.pop()
@ -870,6 +878,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
_('Failed to read metadata from the following')+':',
det_msg='\n\n'.join(det_msg), show=True)
self._adder.cleanup()
self._adder = None

View File

@ -287,6 +287,7 @@ class EbookViewer(MainWindow, Ui_EbookViewer):
self.set_max_width()
ca = self.view.copy_action
ca.setShortcut(QKeySequence.Copy)
self.addAction(ca)
def set_max_width(self):

View File

@ -219,7 +219,7 @@ class KindlePage(QWizardPage, KindleUI):
if self.send_email_widget.set_email_settings(True):
conf = smtp_prefs()
accounts = conf.get('accounts', {})
accounts = conf.parse().accounts
if not accounts: accounts = {}
for y in accounts.values():
y[2] = False
@ -494,6 +494,9 @@ class FinishPage(QWizardPage, FinishUI):
def nextId(self):
return -1
def commit(self):
pass
class Wizard(QWizard):
@ -536,7 +539,11 @@ class Wizard(QWizard):
def accept(self):
self.device_page.commit()
pages = map(self.page, self.visitedPages())
for page in pages:
if page is not self.library_page:
page.commit()
if not self.library_page.commit(self.completed):
self.completed(None)

View File

@ -147,10 +147,10 @@ def setup_completion(fatal_errors):
from calibre.utils.smtp import option_parser as smtp_op
any_formats = ['epub', 'htm', 'html', 'xhtml', 'xhtm', 'rar', 'zip',
'txt', 'lit', 'rtf', 'pdf', 'prc', 'mobi', 'fb2', 'odt']
f = open_file('/etc/bash_completion.d/libprs500')
f.close()
os.remove(f.name)
f = open_file('/etc/bash_completion.d/calibre')
if os.path.exists('/usr/share/bash-completion'):
f = open_file('/usr/share/bash-completion/calibre')
else:
f = open_file('/etc/bash_completion.d/calibre')
manifest.append(f.name)
f.write('# calibre Bash Shell Completion\n')

View File

@ -57,8 +57,9 @@ Then just add this HTML file to the GUI and use the convert button to create you
How do I convert my file containing non-English characters?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
There are two aspects to this problem:
1. Knowing the encoding of the source file: |app| tries to guess what character encoding your source files use, but often, this is impossible, so you need to tell it what encoding to use. This can be done in the GUI via the :guilabel:`Source encoding` field in the :guilabel:`Look & Feel` section. The command-line tools all have an :option:`--encoding` option.
2. Embedding fonts: If you are generating an LRF file to read on your SONY Reader, you are limited by the fact that the Reader only supports a few non-English characters in the fonts it comes pre-loaded with. You can work around this problem by embedding a unicode-aware font that supports the character set your file uses into the LRF file. You should embed atleast a serif and a sans-serif font. Be aware that embedding fonts significantly slows down page-turn speed on the reader.
1. Knowing the encoding of the source file: |app| tries to guess what character encoding your source files use, but often, this is impossible, so you need to tell it what encoding to use. This can be done in the GUI via the :guilabel:`Input character encoding` field in the :guilabel:`Look & Feel` section. The command-line tools all have an :option:`--input-encoding` option.
2. When adding HTML files to |app|, you may need to tell |app| what encoding the files are in. To do this go to Preferences->Plugins->File Type plugins and customize the HTML2Zip plugin, telling it what encoding your HTML files are in. |app| will then automatically convert the HTML files into the UTF-8 encoding when adding them.
3. Embedding fonts: If you are generating an LRF file to read on your SONY Reader, you are limited by the fact that the Reader only supports a few non-English characters in the fonts it comes pre-loaded with. You can work around this problem by embedding a unicode-aware font that supports the character set your file uses into the LRF file. You should embed atleast a serif and a sans-serif font. Be aware that embedding fonts significantly slows down page-turn speed on the reader.
How do I use some of the advanced features of the conversion tools?

View File

@ -91,6 +91,10 @@ sudo python -c "import urllib2; exec urllib2.urlopen('http://calibre.kovidgoyal.
You must have xdg-utils installed
on your system before running the installer.
</li>
<li>
For device automounting to work, you must have the pmount
package installed on your system.
</li>
<li>
On a 64bit machine, you must have 32-bit versions
of common libraries like X11, freetype, fontconfig,

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

@ -4,9 +4,9 @@
#
msgid ""
msgstr ""
"Project-Id-Version: calibre 0.6.2\n"
"POT-Creation-Date: 2009-07-27 15:35+MDT\n"
"PO-Revision-Date: 2009-07-27 15:35+MDT\n"
"Project-Id-Version: calibre 0.6.3\n"
"POT-Creation-Date: 2009-07-29 16:21+MDT\n"
"PO-Revision-Date: 2009-07-29 16:21+MDT\n"
"Last-Translator: Automatically generated\n"
"Language-Team: LANGUAGE\n"
"MIME-Version: 1.0\n"
@ -52,8 +52,8 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf.py:444
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/opf2.py:870
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdb.py:39
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:27
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:65
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:28
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/pdf.py:66
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/topaz.py:29
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/txt.py:14
#: /home/kovid/work/calibre/src/calibre/ebooks/mobi/reader.py:44
@ -159,46 +159,50 @@ msgstr ""
msgid "Follow all local links in an HTML file and create a ZIP file containing all linked files. This plugin is run every time you add an HTML file to the library."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:48
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:47
msgid "Character encoding for the input HTML files. Common choices include: cp1252, latin1, iso-8859-1 and utf-8."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:55
msgid "Extract cover from comic files"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:69
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:79
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:89
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:99
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:110
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:120
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:130
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:140
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:150
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:160
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:171
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:182
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:204
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:215
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:225
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:235
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:76
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:86
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:96
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:106
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:117
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:127
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:137
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:147
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:157
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:167
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:178
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:189
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:211
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:222
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:232
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:242
msgid "Read metadata from %s files"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:194
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:201
msgid "Read metadata from ebooks in RAR archives"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:246
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:253
msgid "Read metadata from ebooks in ZIP archives"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:257
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:267
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:277
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:299
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:310
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:264
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:274
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:284
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:306
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:317
msgid "Set metadata in %s files"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:288
#: /home/kovid/work/calibre/src/calibre/customize/builtins.py:295
msgid "Set metadata from %s files"
msgstr ""
@ -688,7 +692,7 @@ msgstr ""
msgid "List builtin recipes"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:246
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:249
msgid "Output saved to"
msgstr ""
@ -837,7 +841,7 @@ msgid "Read metadata from the specified OPF file. Metadata read from this file w
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:353
msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will remove replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation used by the largest number of people will be used (Chinese in the previous example)."
msgid "Transliterate unicode characters to an ASCII representation. Use with care because this will replace unicode characters with ASCII. For instance it will replace \"%s\" with \"Mikhail Gorbachiov\". Also, note that in cases where there are multiple representations of a character (characters shared by Chinese and Japanese for instance) the representation used by the largest number of people will be used (Chinese in the previous example)."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/plumber.py:368
@ -1904,11 +1908,11 @@ msgstr ""
msgid "Books with the same title as the following already exist in the database. Add them anyway?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:176
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:185
msgid "Saving..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:228
#: /home/kovid/work/calibre/src/calibre/gui2/add.py:237
msgid "Saved"
msgstr ""
@ -3030,66 +3034,66 @@ msgstr ""
msgid "Plugin: %s does not need customization"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:556
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:560
msgid "Customize %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:566
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:570
msgid "Cannot remove builtin plugin"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:567
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:571
msgid " cannot be removed. It is a builtin plugin. Try disabling it instead."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:600
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:604
msgid "Error log:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:607
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:611
msgid "Access log:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:632
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:554
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:636
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:562
msgid "Failed to start content server"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:656
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:660
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:460
msgid "Select location for books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:673
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:677
msgid "Invalid size"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:674
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:678
msgid "The size %s is invalid. must be of the form widthxheight"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:719
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:724
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:723
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:728
msgid "Invalid database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:720
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:724
msgid "Invalid database location "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:721
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:725
msgid "<br>Must be a directory."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:725
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:729
msgid "Invalid database location.<br>Cannot write to "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:739
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:743
msgid "Compacting..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:740
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config.py:744
msgid "Compacting database. This may take a while."
msgstr ""
@ -4442,7 +4446,7 @@ msgid "<b>No matches</b> for the search phrase <i>%s</i> 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:416
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:417
msgid "No matches found"
msgstr ""
@ -4494,7 +4498,7 @@ 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:984
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:993
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:49
msgid "Error"
msgstr ""
@ -4569,7 +4573,7 @@ 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:1457
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1466
msgid "Save only %s format to disk"
msgstr ""
@ -4598,36 +4602,37 @@ msgstr ""
msgid "Similar books..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:421
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:422
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:423
msgid "Bad database location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:424
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1585
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:426
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1594
msgid "Choose a location for your ebook library."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:597
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:605
msgid "Browse by covers"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:704
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:712
msgid "Device: "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:706
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:714
msgid " detected."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:728
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:736
msgid "Connected "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:740
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:748
msgid "Device database corrupted"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:741
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:749
msgid ""
"\n"
" <p>The database of books on the reader is corrupted. Try the following:\n"
@ -4638,301 +4643,301 @@ msgid ""
" "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:817
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:860
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:825
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:868
msgid "Uploading books to device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:825
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833
msgid "Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:826
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834
msgid "EPUB Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:827
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:835
msgid "LRF Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:828
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:836
msgid "HTML Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:829
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:837
msgid "LIT Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:830
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:838
msgid "MOBI Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:831
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:839
msgid "Text books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:832
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:840
msgid "PDF Books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:833
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:841
msgid "Comics"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:834
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:842
msgid "Archives"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:869
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:877
msgid "Failed to read metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:870
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:878
msgid "Failed to read metadata from the following"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:888
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:897
msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:915
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:924
msgid "Deleting books from device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:946
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:955
msgid "Cannot download metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:947
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:995
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1025
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1050
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1181
#: /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:1190
msgid "No books selected"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:956
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:965
msgid "covers"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:956
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:965
msgid "metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:958
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:967
msgid "Downloading %s for %d book(s)"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:979
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:988
msgid "Failed to download some metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:980
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:989
msgid "Failed to download metadata for the following:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:983
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:992
msgid "Failed to download metadata:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:994
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1024
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1003
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1033
msgid "Cannot edit metadata"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1049
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1058
msgid "Cannot save to disk"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1052
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1061
msgid "Choose destination directory"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1075
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1084
msgid "Error while saving"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1076
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1085
msgid "There was an error while saving."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1080
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1081
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1089
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1090
msgid "Could not save some books"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1082
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1091
msgid "as the %s format is not available for them."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1083
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1092
msgid "Click the show details button to see which ones."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1102
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1111
msgid "Fetching news from "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1115
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1124
msgid " fetched."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1180
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1189
msgid "Cannot convert"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1350
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1369
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1359
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1378
msgid "No book selected"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1350
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1402
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1359
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1411
msgid "Cannot view"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1356
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1365
msgid "Choose the format to view"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1368
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1377
msgid "Cannot open folder"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1385
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1394
msgid "Multiple Books Selected"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1386
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1395
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:1403
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1412
msgid "%s has no available formats."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1441
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1450
msgid "Cannot configure"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1442
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1451
msgid "Cannot configure while there are running jobs."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1486
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1495
msgid "No detailed info available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1487
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1496
msgid "No detailed information is available for books on the device."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1535
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1544
msgid "Error talking to device"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1536
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1545
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:1553
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1568
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1562
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1577
msgid "Conversion Error"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1554
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1563
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using 3rd party tools."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1569
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1578
msgid "<b>Failed</b>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1594
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1603
msgid "Invalid library location"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1595
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1604
msgid "Could not access %s. Using %s as the library."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1643
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1652
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:1667
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1676
msgid "There are active jobs. Are you sure you want to quit?"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1670
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1679
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:1674
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1683
msgid "WARNING: Active jobs"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1725
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1734
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:1744
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753
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:1752
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1761
msgid "Update available"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1753
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1762
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:1771
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1780
msgid "Use the library located at the specified path."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1773
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1782
msgid "Start minimized to system tray."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1775
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1784
msgid "Log debugging information to console"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1823
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1832
msgid "If you are sure it is not running"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1825
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1834
msgid "Cannot Start "
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1826
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1835
msgid "%s is already running."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1829
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1838
msgid "may be running in the system tray, in the"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1831
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1840
msgid "upper right region of the screen."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1833
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1842
msgid "lower right region of the screen."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1836
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1845
msgid "try rebooting your computer."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1838
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1858
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1847
#: /home/kovid/work/calibre/src/calibre/gui2/main.py:1867
msgid "try deleting the file"
msgstr ""
@ -5274,7 +5279,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:645
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:646
msgid "Remember last used window size"
msgstr ""
@ -5351,67 +5356,67 @@ msgstr ""
msgid "Print Preview"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:376
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:377
msgid "Choose ebook"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:377
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:378
msgid "Ebooks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:396
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:397
msgid "Add bookmark"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:396
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:397
msgid "Enter title for bookmark:"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:417
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:418
msgid "No matches found for: %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:457
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:458
msgid "Loading flow..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:484
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:485
msgid "Laying out %s"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:513
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:514
msgid "Manage Bookmarks"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:548
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:549
msgid "Loading ebook..."
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:556
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:557
msgid "DRM Error"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:557
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:558
msgid "<p>This book is protected by <a href=\"%s\">DRM</a>"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:561
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:562
msgid "Could not open ebook"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:635
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:636
msgid "Options to control the ebook viewer"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:642
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:643
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:647
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:648
msgid "Print javascript alert and console messages to the console"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:653
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:654
msgid ""
"%prog [options] file\n"
"\n"
@ -5578,7 +5583,7 @@ msgstr ""
msgid "Could not move library"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:503
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/__init__.py:506
msgid "welcome wizard"
msgstr ""
@ -6458,7 +6463,7 @@ msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_jb_online.py:47
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_o_globo.py:69
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_publico.py:20
msgid "Portugese"
msgid "Portuguese"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_h1.py:15
@ -6484,7 +6489,7 @@ msgstr ""
msgid "Kovid Goyal and Sujata Raman"
msgstr ""
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:19
#: /home/kovid/work/calibre/src/calibre/web/feeds/recipes/recipe_zaobao.py:17
msgid "Chinese"
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

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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,6 @@ class ESPN(BasicNewsRecipe):
remove_tags = [dict(name='font', attrs={'class':'footer'}), dict(name='hr', noshade='noshade')]
remove_tags_before = dict(name='font', attrs={'class':'date'})
center_navbar = False
html2lrf_options = ['--base-font-size', '0']
feeds = [('Top Headlines', 'http://sports.espn.go.com/espn/rss/news'),
'http://sports.espn.go.com/espn/rss/nfl/news',
@ -45,7 +44,7 @@ class ESPN(BasicNewsRecipe):
br.set_handle_refresh(False)
if self.username is not None and self.password is not None:
br.open('http://espn.com')
br.select_form(nr=0)
br.select_form(nr=1)
br.form.find_control(name='username', type='text').value = self.username
br.form['password'] = self.password
br.submit()

View File

@ -11,7 +11,7 @@ from calibre.web.feeds.news import BasicNewsRecipe
class Estadao(BasicNewsRecipe):
title = 'O Estado de S. Paulo'
__author__ = 'Darko Miletic'
description = 'News from Brasil in Portugese'
description = 'News from Brasil in Portuguese'
publisher = 'O Estado de S. Paulo'
category = 'news, politics, Brasil'
oldest_article = 2
@ -59,4 +59,4 @@ class Estadao(BasicNewsRecipe):
del item['style']
return soup
language = _('Portugese')
language = _('Portuguese')

View File

@ -44,4 +44,4 @@ class JBOnline(BasicNewsRecipe):
del item['style']
return soup
language = _('Portugese')
language = _('Portuguese')

View File

@ -30,6 +30,7 @@ class Newsweek(BasicNewsRecipe):
remove_tags = [
{'class':['fwArticle noHr','fwArticle','subinfo','hdlBulletItem','head-content','navbar','link', 'ad', 'sponsorLinksArticle', 'mm-content',
'inline-social-links-wrapper', 'email-article',
'inlineComponentRight',
'comments-and-social-links-wrapper', 'EmailArticleBlock']},
{'id' : ['footer', 'ticker-data', 'topTenVertical',
'digg-top-five', 'mesothorax', 'nw-comments',

View File

@ -66,4 +66,4 @@ class OGlobo(BasicNewsRecipe):
del item['style']
return soup
language = _('Portugese')
language = _('Portuguese')

View File

@ -11,23 +11,23 @@ from calibre.web.feeds.news import BasicNewsRecipe
import re
class Publico(BasicNewsRecipe):
title = u'P\xc3\xbablico'
title = u'P\xfablico'
__author__ = 'David Rodrigues'
oldest_article = 1
max_articles_per_feed = 30
encoding='utf-8'
no_stylesheets = True
language = _('Portugese')
language = _('Portuguese')
preprocess_regexps = [(re.compile(u"\uFFFD", re.DOTALL|re.IGNORECASE), lambda match: ''),]
feeds = [
(u'Geral', u'http://feeds.feedburner.com/PublicoUltimaHora'),
(u'Internacional', u'http://www.publico.clix.pt/rss.ashx?idCanal=11'),
(u'Pol\xc3\xadtica', u'http://www.publico.clix.pt/rss.ashx?idCanal=12'),
(u'Ci\xc3\xaancias', u'http://www.publico.clix.pt/rss.ashx?idCanal=13'),
(u'Pol\xedtica', u'http://www.publico.clix.pt/rss.ashx?idCanal=12'),
(u'Ci\xcencias', u'http://www.publico.clix.pt/rss.ashx?idCanal=13'),
(u'Desporto', u'http://desporto.publico.pt/rss.ashx'),
(u'Economia', u'http://www.publico.clix.pt/rss.ashx?idCanal=57'),
(u'Educa\xc3\xa7\xc3\xa3o', u'http://www.publico.clix.pt/rss.ashx?idCanal=58'),
(u'Educa\xe7\xe3o', u'http://www.publico.clix.pt/rss.ashx?idCanal=58'),
(u'Local', u'http://www.publico.clix.pt/rss.ashx?idCanal=59'),
(u'Media e Tecnologia', u'http://www.publico.clix.pt/rss.ashx?idCanal=61'),
(u'Sociedade', u'http://www.publico.clix.pt/rss.ashx?idCanal=62')

View File

@ -5,10 +5,8 @@ __copyright__ = '2009, Pu Bo <pubo at pubolab.com>'
'''
zaobao.com
'''
import time, os, traceback, sys
from calibre.web.feeds.news import BasicNewsRecipe
from calibre.web.feeds import feeds_from_index, Feed, Article
from BeautifulSoup import Tag
from calibre.web.feeds import feeds_from_index
class ZAOBAO(BasicNewsRecipe):
title = u'\u8054\u5408\u65e9\u62a5\u7f51 zaobao.com'
@ -72,7 +70,7 @@ class ZAOBAO(BasicNewsRecipe):
return soup
def parse_feeds(self):
self.log_debug('ZAOBAO overrided parse_feeds()')
self.log.debug('ZAOBAO overrided parse_feeds()')
parsed_feeds = BasicNewsRecipe.parse_feeds(self)
for id, obj in enumerate(self.INDEXES):
@ -89,7 +87,7 @@ class ZAOBAO(BasicNewsRecipe):
a_title = self.tag_to_string(a)
date = ''
description = ''
self.log_debug('adding %s at %s'%(a_title,a_url))
self.log.debug('adding %s at %s'%(a_title,a_url))
articles.append({
'title':a_title,
'date':date,
@ -100,23 +98,23 @@ class ZAOBAO(BasicNewsRecipe):
pfeeds = feeds_from_index([(title, articles)], oldest_article=self.oldest_article,
max_articles_per_feed=self.max_articles_per_feed)
self.log_debug('adding %s to feed'%(title))
self.log.debug('adding %s to feed'%(title))
for feed in pfeeds:
self.log_debug('adding feed: %s'%(feed.title))
self.log.debug('adding feed: %s'%(feed.title))
feed.description = self.DESC_SENSE
parsed_feeds.append(feed)
for a, article in enumerate(feed):
self.log_debug('added article %s from %s'%(article.title, article.url))
self.log_debug('added feed %s'%(feed.title))
self.log.debug('added article %s from %s'%(article.title, article.url))
self.log.debug('added feed %s'%(feed.title))
for i, feed in enumerate(parsed_feeds):
# workaorund a strange problem: Somethimes the xml encoding is not apllied correctly by parse()
weired_encoding_detected = False
if not isinstance(feed.description, unicode) and self.encoding and feed.description:
self.log_debug('Feed %s is not encoded correctly, manually replace it'%(feed.title))
self.log.debug('Feed %s is not encoded correctly, manually replace it'%(feed.title))
feed.description = feed.description.decode(self.encoding, 'replace')
elif feed.description.find(self.DESC_SENSE) == -1 and self.encoding and feed.description:
self.log_debug('Feed %s is strangely encoded, manually redo all'%(feed.title))
self.log.debug('Feed %s is strangely encoded, manually redo all'%(feed.title))
feed.description = feed.description.encode('cp1252', 'replace').decode(self.encoding, 'replace')
weired_encoding_detected = True
@ -138,7 +136,7 @@ class ZAOBAO(BasicNewsRecipe):
article.text_summary = article.text_summary.encode('cp1252', 'replace').decode(self.encoding, 'replace')
if article.title == "Untitled article":
self.log_debug('Removing empty article %s from %s'%(article.title, article.url))
self.log.debug('Removing empty article %s from %s'%(article.title, article.url))
# remove the article
feed.articles[a:a+1] = []
return parsed_feeds