mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-07 18:24:30 -04:00
Sync to trunk.
This commit is contained in:
commit
a7de858de1
@ -3,15 +3,16 @@ __license__ = 'GPL v3'
|
||||
__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
|
||||
__docformat__ = 'restructuredtext en'
|
||||
|
||||
|
||||
from calibre.web.feeds.news import BasicNewsRecipe
|
||||
|
||||
# http://online.wsj.com/page/us_in_todays_paper.html
|
||||
|
||||
class WallStreetJournal(BasicNewsRecipe):
|
||||
|
||||
title = 'The Wall Street Journal'
|
||||
title = 'The Wall Street Journal (US)'
|
||||
__author__ = 'Kovid Goyal and Sujata Raman'
|
||||
description = 'News and current affairs.'
|
||||
description = 'News and current affairs'
|
||||
needs_subscription = True
|
||||
language = 'en'
|
||||
|
||||
@ -60,60 +61,54 @@ class WallStreetJournal(BasicNewsRecipe):
|
||||
|
||||
return soup
|
||||
|
||||
def get_article_url(self, article):
|
||||
try:
|
||||
return article.feedburner_origlink.split('?')[0]
|
||||
except AttributeError:
|
||||
return article.link.split('?')[0]
|
||||
def wsj_get_index(self):
|
||||
return self.index_to_soup('http://online.wsj.com/page/us_in_todays_paper.html')
|
||||
|
||||
def parse_index(self):
|
||||
soup = self.wsj_get_index()
|
||||
|
||||
left_column = soup.find(
|
||||
text=lambda t: 'begin ITP Left Column' in str(t))
|
||||
|
||||
table = left_column.findNext('table')
|
||||
|
||||
current_section = None
|
||||
current_articles = []
|
||||
feeds = []
|
||||
for x in table.findAllNext(True):
|
||||
if x.name == 'td' and x.get('class', None) == 'b13':
|
||||
if current_articles and current_section:
|
||||
feeds.append((current_section, current_articles))
|
||||
current_section = self.tag_to_string(x.a).strip()
|
||||
current_articles = []
|
||||
self.log('\tProcessing section:', current_section)
|
||||
if current_section is not None and x.name == 'a' and \
|
||||
x.get('class', None) == 'bold80':
|
||||
title = self.tag_to_string(x)
|
||||
url = x.get('href', False)
|
||||
if not url or not title:
|
||||
continue
|
||||
url = url.partition('#')[0]
|
||||
desc = ''
|
||||
d = x.findNextSibling(True)
|
||||
if d.get('class', None) == 'arialResize':
|
||||
desc = self.tag_to_string(d)
|
||||
desc = desc.partition(u'\u2022')[0]
|
||||
self.log('\t\tFound article:', title)
|
||||
self.log('\t\t\t', url)
|
||||
if url.startswith('/'):
|
||||
url = 'http://online.wsj.com'+url
|
||||
if desc:
|
||||
self.log('\t\t\t', desc)
|
||||
current_articles.append({'title': title, 'url':url,
|
||||
'description':desc, 'date':''})
|
||||
|
||||
if current_articles and current_section:
|
||||
feeds.append((current_section, current_articles))
|
||||
|
||||
return feeds
|
||||
|
||||
def cleanup(self):
|
||||
self.browser.open('http://online.wsj.com/logout?url=http://online.wsj.com')
|
||||
|
||||
feeds = [
|
||||
#('Most Emailed - Day', 'http://online.wsj.com/xml/rss/3_7030.xml'),
|
||||
#('Most Emailed - Week', 'http://online.wsj.com/xml/rss/3_7253.xml'),
|
||||
#('Most Emailed - Month', 'http://online.wsj.com/xml/rss/3_7254.xml'),
|
||||
(' Most Viewed - Day', 'http://online.wsj.com/xml/rss/3_7198.xml'),
|
||||
(' Most Viewed - Week', 'http://online.wsj.com/xml/rss/3_7251.xml'),
|
||||
#('Most Viewed - Month', 'http://online.wsj.com/xml/rss/3_7252.xml'),
|
||||
('Today\'s Newspaper - Page One', 'http://online.wsj.com/xml/rss/3_7205.xml'),
|
||||
('Today\'s Newspaper - Marketplace', 'http://online.wsj.com/xml/rss/3_7206.xml'),
|
||||
('Today\'s Newspaper - Money & Investing', 'http://online.wsj.com/xml/rss/3_7207.xml'),
|
||||
('Today\'s Newspaper - Personal Journal', 'http://online.wsj.com/xml/rss/3_7208.xml'),
|
||||
('Today\'s Newspaper - Weekend Journal', 'http://online.wsj.com/xml/rss/3_7209.xml'),
|
||||
('Opinion', 'http://online.wsj.com/xml/rss/3_7041.xml'),
|
||||
('News - U.S.: What\'s News', 'http://online.wsj.com/xml/rss/3_7011.xml'),
|
||||
('News - U.S. Business', 'http://online.wsj.com/xml/rss/3_7014.xml'),
|
||||
('News - Europe: What\'s News', 'http://online.wsj.com/xml/rss/3_7012.xml'),
|
||||
('News - Asia: What\'s News', 'http://online.wsj.com/xml/rss/3_7013.xml'),
|
||||
('News - World News', 'http://online.wsj.com/xml/rss/3_7085.xml'),
|
||||
('News - Economy', 'http://online.wsj.com/xml/rss/3_7086.xml'),
|
||||
('News - Earnings', 'http://online.wsj.com/xml/rss/3_7088.xml'),
|
||||
('News - Health', 'http://online.wsj.com/xml/rss/3_7089.xml'),
|
||||
('News - Law', 'http://online.wsj.com/xml/rss/3_7091.xml'),
|
||||
('News - Media & Marketing', 'http://online.wsj.com/xml/rss/3_7020.xml'),
|
||||
('Technology - What\'s News', 'http://online.wsj.com/xml/rss/3_7015.xml'),
|
||||
('Technology - Gadgets', 'http://online.wsj.com/xml/rss/3_7094.xml'),
|
||||
('Technology - Telecommunications', 'http://online.wsj.com/xml/rss/3_7095.xml'),
|
||||
('Technology - E-commerce/Media', 'http://online.wsj.com/xml/rss/3_7096.xml'),
|
||||
('Technology - Asia', 'http://online.wsj.com/xml/rss/3_7097.xml'),
|
||||
('Technology - Europe', 'http://online.wsj.com/xml/rss/3_7098.xml'),
|
||||
('Markets - News', 'http://online.wsj.com/xml/rss/3_7031.xml'),
|
||||
('Markets - Europe News', 'http://online.wsj.com/xml/rss/3_7101.xml'),
|
||||
('Markets - Asia News', 'http://online.wsj.com/xml/rss/3_7102.xml'),
|
||||
('Markets - Deals & Deal Makers', 'http://online.wsj.com/xml/rss/3_7099.xml'),
|
||||
('Markets - Hedge Funds', 'http://online.wsj.com/xml/rss/3_7199.xml'),
|
||||
('Personal Journal', 'http://online.wsj.com/xml/rss/3_7200.xml'),
|
||||
('Personal Journal - Money', 'http://online.wsj.com/xml/rss/3_7104.xml'),
|
||||
('Personal Journal - Health', 'http://online.wsj.com/xml/rss/3_7089.xml'),
|
||||
('Personal Journal - Autos', 'http://online.wsj.com/xml/rss/3_7092.xml'),
|
||||
('Personal Journal - Homes', 'http://online.wsj.com/xml/rss/3_7105.xml'),
|
||||
('Personal Journal - Travel', 'http://online.wsj.com/xml/rss/3_7106.xml'),
|
||||
('Personal Journal - Careers', 'http://online.wsj.com/xml/rss/3_7107.xml'),
|
||||
('Weekend & Leisure', 'http://online.wsj.com/xml/rss/3_7201.xml'),
|
||||
('Weekend & Leisure - Weekend Journal', 'http://online.wsj.com/xml/rss/3_7202.xml'),
|
||||
('Weekend & Leisure - Arts & Entertainment', 'http://online.wsj.com/xml/rss/3_7177.xml'),
|
||||
('Weekend & Leisure - Books', 'http://online.wsj.com/xml/rss/3_7203.xml'),
|
||||
('Weekend & Leisure - Sports', 'http://online.wsj.com/xml/rss/3_7204.xml'),
|
||||
]
|
||||
|
||||
|
@ -13,12 +13,9 @@ from PyQt4 import pyqtconfig
|
||||
|
||||
from setup import isosx, iswindows, islinux
|
||||
|
||||
OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk'
|
||||
if not os.path.exists(OSX_SDK):
|
||||
OSX_SDK = '/Developer/SDKs/MacOSX10.4u.sdk'
|
||||
leopard_build = '10.5' in OSX_SDK
|
||||
|
||||
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.5' if leopard_build else '10.4'
|
||||
os.environ['MACOSX_DEPLOYMENT_TARGET'] = '10.4'
|
||||
|
||||
NMAKE = RC = msvc = MT = win_inc = win_lib = None
|
||||
if iswindows:
|
||||
@ -117,24 +114,24 @@ if iswindows:
|
||||
podofo_inc = os.path.join(sw_inc_dir, 'podofo')
|
||||
podofo_lib = sw_lib_dir
|
||||
elif isosx:
|
||||
fc_inc = '/Users/kovid/fontconfig/include/fontconfig'
|
||||
fc_lib = '/Users/kovid/fontconfig/lib'
|
||||
fc_inc = '/sw/include/fontconfig'
|
||||
fc_lib = '/sw/lib'
|
||||
poppler_inc_dirs = consolidate('POPPLER_INC_DIR',
|
||||
'/Volumes/sw/build/poppler-0.12.0/poppler:/Volumes/sw/build/poppler-0.12.0')
|
||||
'/sw/build/poppler-0.12.2/poppler:/sw/build/poppler-0.12.2')
|
||||
popplerqt4_inc_dirs = poppler_inc_dirs + [poppler_inc_dirs[0]+'/qt4']
|
||||
poppler_lib_dirs = consolidate('POPPLER_LIB_DIR',
|
||||
'/Volumes/sw/lib')
|
||||
'/sw/lib')
|
||||
popplerqt4_lib_dirs = poppler_lib_dirs
|
||||
poppler_libs = popplerqt4_libs = ['poppler']
|
||||
podofo_inc = '/usr/local/include/podofo'
|
||||
podofo_lib = '/usr/local/lib'
|
||||
podofo_inc = '/sw/podofo'
|
||||
podofo_lib = '/sw/lib'
|
||||
magick_inc_dirs = consolidate('MAGICK_INC',
|
||||
'/Users/kovid/ImageMagick/include/ImageMagick')
|
||||
'/sw/include/ImageMagick')
|
||||
magick_lib_dirs = consolidate('MAGICK_LIB',
|
||||
'/Users/kovid/ImageMagick/lib')
|
||||
'/sw/lib')
|
||||
magick_libs = ['MagickWand', 'MagickCore']
|
||||
png_inc_dirs = consolidate('PNG_INC_DIR', '/usr/local/include')
|
||||
png_lib_dirs = consolidate('PNG_LIB_DIR', '/usr/local/lib')
|
||||
png_inc_dirs = consolidate('PNG_INC_DIR', '/sw/include')
|
||||
png_lib_dirs = consolidate('PNG_LIB_DIR', '/sw/lib')
|
||||
png_libs = ['png12']
|
||||
else:
|
||||
# Include directories
|
||||
|
@ -83,7 +83,7 @@ linux_freeze2 = LinuxFreeze2()
|
||||
from setup.installer.osx import OSX, OSX32
|
||||
osx = OSX()
|
||||
osx32 = OSX32()
|
||||
from setup.installer.osx.freeze import OSX32_Freeze
|
||||
from setup.installer.osx.app.main import OSX32_Freeze
|
||||
osx32_freeze = OSX32_Freeze()
|
||||
|
||||
from setup.installer.windows import Win, Win32
|
||||
|
@ -15,7 +15,7 @@ from setup import Command, islinux, isosx, SRC, iswindows
|
||||
from setup.build_environment import fc_inc, fc_lib, \
|
||||
fc_error, poppler_libs, poppler_lib_dirs, poppler_inc_dirs, podofo_inc, \
|
||||
podofo_lib, podofo_error, poppler_error, pyqt, OSX_SDK, NMAKE, \
|
||||
leopard_build, QMAKE, msvc, MT, win_inc, win_lib, png_inc_dirs, \
|
||||
QMAKE, msvc, MT, win_inc, win_lib, png_inc_dirs, \
|
||||
magick_inc_dirs, magick_lib_dirs, png_lib_dirs, png_libs, \
|
||||
magick_error, magick_libs, ft_lib_dirs, ft_libs, jpg_libs, jpg_lib_dirs
|
||||
MT
|
||||
@ -156,7 +156,7 @@ if islinux:
|
||||
|
||||
|
||||
if isosx:
|
||||
x, p = ('x86_64', 'ppc64') if leopard_build else ('i386', 'ppc')
|
||||
x, p = ('i386', 'ppc')
|
||||
archs = ['-arch', x, '-arch', p, '-isysroot',
|
||||
OSX_SDK]
|
||||
cflags.append('-D_OSX')
|
||||
@ -305,7 +305,7 @@ class Build(Command):
|
||||
obj_pat = 'release\\*.obj' if iswindows else '*.o'
|
||||
objects = glob.glob(obj_pat)
|
||||
if not objects or self.newer(objects, ext.sources+ext.headers):
|
||||
archs = 'x86_64 ppc64' if leopard_build else 'x86 ppc'
|
||||
archs = 'x86 ppc'
|
||||
pro = textwrap.dedent('''\
|
||||
TARGET = %s
|
||||
TEMPLATE = lib
|
||||
@ -316,9 +316,6 @@ class Build(Command):
|
||||
''')%(ext.name, ' '.join(ext.headers), ' '.join(ext.sources), archs)
|
||||
open(ext.name+'.pro', 'wb').write(pro)
|
||||
subprocess.check_call([QMAKE, '-o', 'Makefile', ext.name+'.pro'])
|
||||
if leopard_build:
|
||||
raw = open('Makefile', 'rb').read()
|
||||
open('Makefile', 'wb').write(raw.replace('ppc64', 'x86_64'))
|
||||
subprocess.check_call([make, '-f', 'Makefile'])
|
||||
objects = glob.glob(obj_pat)
|
||||
return list(map(self.a, objects))
|
||||
@ -354,12 +351,6 @@ class Build(Command):
|
||||
makefile.extra_lflags = qt_objects
|
||||
makefile.extra_include_dirs = ext.inc_dirs
|
||||
makefile.generate()
|
||||
if leopard_build:
|
||||
raw = open(mf, 'rb').read()
|
||||
raw = raw.replace('ppc64 x86_64', 'x86_64')
|
||||
for x in ('ppc64', 'ppc', 'i386'):
|
||||
raw = raw.replace(x, 'x86_64')
|
||||
open(mf, 'wb').write(raw)
|
||||
|
||||
subprocess.check_call([make, '-f', mf], cwd=src_dir)
|
||||
shutil.copy2(module, dest)
|
||||
|
@ -25,8 +25,9 @@ class OSX32(VMInstaller):
|
||||
description = 'Build 32 bit OS X binary installer'
|
||||
|
||||
INSTALLER_EXT = 'dmg'
|
||||
VM_NAME = 'tiger_build'
|
||||
VM_NAME = 'leopard_build'
|
||||
VM = '/vmware/bin/%s'%VM_NAME
|
||||
FREEZE_TEMPLATE = 'python -OO setup.py {freeze_command}'
|
||||
FREEZE_COMMAND = 'osx32_freeze'
|
||||
BUILD_PREFIX = VMInstaller.BUILD_PREFIX + ['source ~/.profile']
|
||||
SHUTDOWN_CMD = ['sudo', 'halt']
|
||||
|
@ -13,9 +13,13 @@ abspath, join, basename = os.path.abspath, os.path.join, os.path.basename
|
||||
from setup import __version__ as VERSION, __appname__ as APPNAME, basenames, \
|
||||
modules as main_modules, Command, SRC, functions as main_functions
|
||||
LICENSE = open('LICENSE', 'rb').read()
|
||||
MAGICK_HOME='@executable_path/../Frameworks/ImageMagick'
|
||||
ENV = dict(
|
||||
FC_CONFIG_DIR='@executable_path/../Resources/fonts',
|
||||
MAGICK_HOME='@executable_path/../Frameworks/ImageMagick',
|
||||
FC_CONFIG_FILE='@executable_path/../Resources/fonts/fonts.conf',
|
||||
MAGICK_CONFIGURE_PATH=MAGICK_HOME+'/config',
|
||||
MAGICK_CODER_MODULE_PATH=MAGICK_HOME+'/modules-Q16/coders',
|
||||
MAGICK_CODER_FILTER_PATH=MAGICK_HOME+'/modules-Q16/filter',
|
||||
QT_PLUGIN_PATH='@executable_path/../MacOS',
|
||||
PYTHONIOENCODING='UTF-8',
|
||||
)
|
||||
@ -46,9 +50,9 @@ def compile_launcher_lib(contents_dir, gcc, base):
|
||||
src = join(base, 'util.c')
|
||||
cmd = [gcc] + '-Wall -arch i386 -arch ppc -dynamiclib -std=gnu99'.split() + [src] + \
|
||||
['-I'+base] + \
|
||||
['-I%s/python/Python.framework/Headers'%SW] + \
|
||||
['-I/Library/Frameworks/Python.framework/Versions/Current/Headers'] + \
|
||||
'-current_version 1.0 -compatibility_version 1.0'.split() + \
|
||||
'-fvisibility=hidden -o'.split() + [dest, '-F%s/python'%SW] + \
|
||||
'-fvisibility=hidden -o'.split() + [dest] + \
|
||||
['-install_name',
|
||||
'@executable_path/../Frameworks/'+os.path.basename(dest)] + \
|
||||
['-framework', 'Python', '-framework', 'CoreFoundation', '-headerpad_max_install_names']
|
||||
@ -176,6 +180,8 @@ class Py2App(object):
|
||||
self.create_plist()
|
||||
|
||||
self.add_python_framework()
|
||||
self.add_site_packages()
|
||||
self.add_stdlib()
|
||||
self.add_qt_frameworks()
|
||||
self.add_calibre_plugins()
|
||||
self.add_podofo()
|
||||
@ -186,8 +192,6 @@ class Py2App(object):
|
||||
self.add_imagemagick()
|
||||
self.add_misc_libraries()
|
||||
|
||||
self.add_site_packages()
|
||||
self.add_stdlib()
|
||||
self.add_resources()
|
||||
self.compile_py_modules()
|
||||
|
||||
@ -262,8 +266,10 @@ class Py2App(object):
|
||||
def get_local_dependencies(self, path_to_lib):
|
||||
for x in self.get_dependencies(path_to_lib):
|
||||
for y in (SW+'/lib/', '/usr/local/lib/', SW+'/qt/lib/',
|
||||
SW+'/python/', SW+'/freetype/lib/'):
|
||||
'/Library/Frameworks/Python.framework/', SW+'/freetype/lib/'):
|
||||
if x.startswith(y):
|
||||
if y == '/Library/Frameworks/Python.framework/':
|
||||
y = '/Library/Frameworks/'
|
||||
yield x, x[len(y):]
|
||||
break
|
||||
|
||||
@ -289,7 +295,7 @@ class Py2App(object):
|
||||
@flush
|
||||
def add_python_framework(self):
|
||||
info('\nAdding Python framework')
|
||||
src = join(SW, 'python', 'Python.framework')
|
||||
src = join('/Library/Frameworks', 'Python.framework')
|
||||
x = join(self.frameworks_dir, 'Python.framework')
|
||||
curr = os.path.realpath(join(src, 'Versions', 'Current'))
|
||||
currd = join(x, 'Versions', basename(curr))
|
||||
@ -302,6 +308,7 @@ class Py2App(object):
|
||||
|
||||
@flush
|
||||
def add_qt_frameworks(self):
|
||||
info('\nAdding Qt Framework')
|
||||
for f in ('QtCore', 'QtGui', 'QtXml', 'QtNetwork', 'QtSvg', 'QtWebkit',
|
||||
'QtXmlPatterns', 'phonon'):
|
||||
self.add_qt_framework(f)
|
||||
@ -360,7 +367,7 @@ class Py2App(object):
|
||||
CFBundlePackageType='APPL',
|
||||
CFBundleSignature='????',
|
||||
CFBundleExecutable='calibre',
|
||||
LSMinimumSystemVersion='10.5.2',
|
||||
LSMinimumSystemVersion='10.4.2',
|
||||
LSRequiresNativeExecution=True,
|
||||
NSAppleScriptEnabled=False,
|
||||
NSHumanReadableCopyright='Copyright 2008, Kovid Goyal',
|
||||
@ -433,10 +440,7 @@ class Py2App(object):
|
||||
for x in ('Wand', 'Core'):
|
||||
self.install_dylib(os.path.join(SW, 'lib', 'libMagick%s.2.dylib'%x))
|
||||
idir = glob.glob(os.path.join(SW, 'lib', 'ImageMagick-*'))[-1]
|
||||
dest = os.path.join(self.frameworks_dir, 'ImageMagick', 'lib')
|
||||
if not os.path.exists(dest):
|
||||
os.makedirs(dest)
|
||||
dest = os.path.join(dest, os.path.basename(idir))
|
||||
dest = os.path.join(self.frameworks_dir, 'ImageMagick')
|
||||
if os.path.exists(dest):
|
||||
shutil.rmtree(dest)
|
||||
shutil.copytree(idir, dest, True)
|
||||
@ -461,12 +465,12 @@ class Py2App(object):
|
||||
paths = reversed(map(abspath, [x for x in sys.path if x.startswith('/')]))
|
||||
upaths = []
|
||||
for x in paths:
|
||||
if x.endswith('/PIL') or 'site-packages' not in x:
|
||||
continue
|
||||
if x not in upaths:
|
||||
if x not in upaths and (x.endswith('.egg') or
|
||||
x.endswith('/site-packages')):
|
||||
upaths.append(x)
|
||||
upaths.append(os.path.expanduser('~/build/calibre/src'))
|
||||
for x in upaths:
|
||||
info('\t', x)
|
||||
tdir = None
|
||||
try:
|
||||
if not os.path.isdir(x):
|
||||
@ -536,7 +540,7 @@ class Py2App(object):
|
||||
@flush
|
||||
def add_stdlib(self):
|
||||
info('\nAdding python stdlib')
|
||||
src = join(SW, 'python/Python.framework/Versions/Current/lib/python')
|
||||
src = '/Library/Frameworks/Python.framework/Versions/Current/lib/python'
|
||||
src += self.version_info
|
||||
dest = join(self.resources_dir, 'Python', 'lib', 'python')
|
||||
dest += self.version_info
|
||||
|
@ -363,7 +363,7 @@ class NookOutput(OutputProfile):
|
||||
description = _('This profile is intended for the B&N Nook.')
|
||||
|
||||
# Screen size is a best guess
|
||||
screen_size = (600, 800)
|
||||
screen_size = (600, 770)
|
||||
dpi = 167
|
||||
fbase = 16
|
||||
fsizes = [12, 12, 14, 16, 18, 20, 22, 24]
|
||||
|
@ -9,7 +9,6 @@ Device driver for Bookeen's Cybook Gen 3
|
||||
'''
|
||||
|
||||
import os
|
||||
from itertools import cycle
|
||||
|
||||
from calibre import islinux
|
||||
from calibre.devices.usbms.driver import USBMS
|
||||
|
@ -8,10 +8,7 @@ __docformat__ = 'restructuredtext en'
|
||||
Device driver for Barns and Nobel's Nook
|
||||
'''
|
||||
|
||||
try:
|
||||
from PIL import Image, ImageDraw
|
||||
except ImportError:
|
||||
import Image, ImageDraw
|
||||
import os
|
||||
|
||||
import cStringIO
|
||||
|
||||
@ -47,6 +44,13 @@ class NOOK(USBMS):
|
||||
SUPPORTS_SUB_DIRS = True
|
||||
|
||||
def upload_cover(self, path, filename, metadata):
|
||||
try:
|
||||
from PIL import Image, ImageDraw
|
||||
Image, ImageDraw
|
||||
except ImportError:
|
||||
import Image, ImageDraw
|
||||
|
||||
|
||||
coverdata = metadata.get('cover', None)
|
||||
if coverdata:
|
||||
cover = Image.open(cStringIO.StringIO(coverdata[2]))
|
||||
|
@ -111,7 +111,11 @@ class USBMS(CLI, Device):
|
||||
paths.append(filepath)
|
||||
|
||||
self.put_file(infile, filepath, replace_file=True)
|
||||
try:
|
||||
self.upload_cover(os.path.dirname(filepath), os.path.splitext(os.path.basename(filepath))[0], mdata)
|
||||
except: # Failure to upload cover is not catastrophic
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
|
||||
self.report_progress((i+1) / float(len(files)), _('Transferring books to device...'))
|
||||
|
||||
|
@ -203,9 +203,10 @@ def create_option_parser(args, log):
|
||||
log('Created by:', __author__)
|
||||
raise SystemExit(0)
|
||||
if '--list-recipes' in args:
|
||||
from calibre.web.feeds.recipes import titles
|
||||
from calibre.web.feeds.recipes.collection import get_builtin_recipe_titles
|
||||
log('Available recipes:')
|
||||
for title in sorted(titles):
|
||||
titles = sorted(get_builtin_recipe_titles())
|
||||
for title in titles:
|
||||
try:
|
||||
log('\t'+title)
|
||||
except:
|
||||
|
@ -155,17 +155,19 @@ class EPUBOutput(OutputFormatPlugin):
|
||||
def convert(self, oeb, output_path, input_plugin, opts, log):
|
||||
self.log, self.opts, self.oeb = log, opts, oeb
|
||||
|
||||
self.workaround_ade_quirks()
|
||||
self.workaround_webkit_quirks()
|
||||
self.workaround_sony_quirks()
|
||||
from calibre.ebooks.oeb.transforms.rescale import RescaleImages
|
||||
RescaleImages()(oeb, opts)
|
||||
|
||||
|
||||
from calibre.ebooks.oeb.transforms.split import Split
|
||||
split = Split(not self.opts.dont_split_on_page_breaks,
|
||||
max_flow_size=self.opts.flow_size*1024
|
||||
)
|
||||
split(self.oeb, self.opts)
|
||||
|
||||
self.workaround_ade_quirks()
|
||||
self.workaround_webkit_quirks()
|
||||
self.workaround_sony_quirks()
|
||||
from calibre.ebooks.oeb.transforms.rescale import RescaleImages
|
||||
RescaleImages()(oeb, opts)
|
||||
self.insert_cover()
|
||||
|
||||
with TemporaryDirectory('_epub_output') as tdir:
|
||||
|
@ -381,9 +381,9 @@ class FlowSplitter(object):
|
||||
p[i:i+1] = new_pres
|
||||
|
||||
split_point, before = self.find_split_point(root)
|
||||
self.log.debug('\t\t\tSplit point:', split_point.tag, tree.getpath(split_point))
|
||||
if split_point is None:
|
||||
raise SplitError(self.item.href, root)
|
||||
self.log.debug('\t\t\tSplit point:', split_point.tag, tree.getpath(split_point))
|
||||
|
||||
for t in self.do_split(tree, split_point, before):
|
||||
r = t.getroot()
|
||||
|
@ -693,6 +693,9 @@ class BooksView(TableView):
|
||||
self._model.current_changed)
|
||||
self.connect(self._model, SIGNAL('columns_sorted()'),
|
||||
self.columns_sorted, Qt.QueuedConnection)
|
||||
hv = self.verticalHeader()
|
||||
hv.setClickable(True)
|
||||
hv.setCursor(Qt.PointingHandCursor)
|
||||
|
||||
def columns_sorted(self):
|
||||
for i in range(self.model().columnCount(None)):
|
||||
|
@ -552,6 +552,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
||||
self.connect(self.scheduler,
|
||||
SIGNAL('start_recipe_fetch(PyQt_PyObject)'),
|
||||
self.download_scheduled_recipe, Qt.QueuedConnection)
|
||||
self.library_view.verticalHeader().sectionClicked.connect(self.view_specific_book)
|
||||
|
||||
for view in ('library', 'memory', 'card_a', 'card_b'):
|
||||
view = getattr(self, view+'_view')
|
||||
view.verticalHeader().sectionDoubleClicked.connect(self.view_specific_book)
|
||||
|
||||
self.location_view.setCurrentIndex(self.location_view.model().index(0))
|
||||
|
||||
@ -921,7 +926,6 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
||||
'''
|
||||
Add books from the local filesystem to either the library or the device.
|
||||
'''
|
||||
books = choose_files(self, 'add books dialog dir', 'Select books',
|
||||
filters = [
|
||||
(_('Books'), BOOK_EXTENSIONS),
|
||||
(_('EPUB Books'), ['epub']),
|
||||
@ -933,10 +937,15 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
||||
(_('PDF Books'), ['pdf']),
|
||||
(_('Comics'), ['cbz', 'cbr', 'cbc']),
|
||||
(_('Archives'), ['zip', 'rar']),
|
||||
])
|
||||
]
|
||||
to_device = self.stack.currentIndex() != 0
|
||||
if to_device:
|
||||
filters = [(_('Supported books'), self.device_manager.device.FORMATS)]
|
||||
|
||||
books = choose_files(self, 'add books dialog dir', 'Select books',
|
||||
filters=filters)
|
||||
if not books:
|
||||
return
|
||||
to_device = self.stack.currentIndex() != 0
|
||||
self._add_books(books, to_device)
|
||||
|
||||
|
||||
@ -1442,7 +1451,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
||||
|
||||
def view_book(self, triggered):
|
||||
rows = self.current_view().selectionModel().selectedRows()
|
||||
self._view_books(rows)
|
||||
|
||||
def view_specific_book(self, index):
|
||||
self._view_books([index])
|
||||
|
||||
def _view_books(self, rows):
|
||||
if not rows or len(rows) == 0:
|
||||
self._launch_viewer()
|
||||
return
|
||||
@ -1458,6 +1472,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
|
||||
|
||||
if self.current_view() is self.library_view:
|
||||
for row in rows:
|
||||
if hasattr(row, 'row'):
|
||||
row = row.row()
|
||||
|
||||
formats = self.library_view.model().db.formats(row)
|
||||
|
@ -96,6 +96,7 @@ class Nook(Sony505):
|
||||
id = 'nook'
|
||||
name = 'Nook'
|
||||
manufacturer = 'Barnes & Noble'
|
||||
output_profile = 'nook'
|
||||
|
||||
class CybookG3(Device):
|
||||
|
||||
|
@ -473,7 +473,7 @@ class LibraryDatabase2(LibraryDatabase):
|
||||
def upgrade_version_2(self):
|
||||
''' Fix Foreign key constraints for deleting from link tables. '''
|
||||
script = textwrap.dedent('''\
|
||||
DROP TRIGGER fkc_delete_books_%(ltable)s_link;
|
||||
DROP TRIGGER IF EXISTS fkc_delete_books_%(ltable)s_link;
|
||||
CREATE TRIGGER fkc_delete_on_%(table)s
|
||||
BEFORE DELETE ON %(table)s
|
||||
BEGIN
|
||||
|
@ -5,8 +5,8 @@
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: calibre 0.6.29\n"
|
||||
"POT-Creation-Date: 2009-12-18 12:30+MST\n"
|
||||
"PO-Revision-Date: 2009-12-18 12:30+MST\n"
|
||||
"POT-Creation-Date: 2009-12-21 21:13+MST\n"
|
||||
"PO-Revision-Date: 2009-12-21 21:13+MST\n"
|
||||
"Last-Translator: Automatically generated\n"
|
||||
"Language-Team: LANGUAGE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -21,13 +21,13 @@ msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/customize/__init__.py:44
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:53
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:54
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:58
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:767
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:770
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/driver.py:193
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:410
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:414
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
|
||||
@ -115,8 +115,8 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/scheduler.py:170
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:392
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:405
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:877
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1003
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:880
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1006
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/viewer/main.py:179
|
||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:281
|
||||
#: /home/kovid/work/calibre/src/calibre/library/database.py:913
|
||||
@ -380,12 +380,15 @@ msgid "Communicate with the Blackberry smart phone."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/iriver/driver.py:16
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/nuut2/driver.py:18
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:88
|
||||
msgid "Kovid Goyal"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/boox/driver.py:17
|
||||
msgid "Communicate with the BOOX eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:22
|
||||
msgid "Communicate with the Cybook Gen 3 eBook reader."
|
||||
msgstr ""
|
||||
@ -439,19 +442,15 @@ msgstr ""
|
||||
msgid "Communicate with the JetBook eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:23
|
||||
msgid "James Ralston"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:21
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:22
|
||||
msgid "Communicate with the Kindle eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:66
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:67
|
||||
msgid "Communicate with the Kindle 2 eBook reader."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:76
|
||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:77
|
||||
msgid "Communicate with the Kindle DX eBook reader."
|
||||
msgstr ""
|
||||
|
||||
@ -605,71 +604,71 @@ msgstr ""
|
||||
msgid "Removing books from device metadata listing..."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:196
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:200
|
||||
msgid "Rendered %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:199
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:203
|
||||
msgid "Failed %s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:256
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:260
|
||||
msgid ""
|
||||
"Failed to process comic: \n"
|
||||
"\n"
|
||||
"%s"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:274
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:278
|
||||
msgid "Number of colors for grayscale image conversion. Default: %default. Values of less than 256 may result in blurred text on your device if you are creating your comics in EPUB format."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:278
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:282
|
||||
msgid "Disable normalize (improve contrast) color range for pictures. Default: False"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:281
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:285
|
||||
msgid "Maintain picture aspect ratio. Default is to fill the screen."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:283
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:287
|
||||
msgid "Disable sharpening."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:285
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:289
|
||||
msgid "Disable trimming of comic pages. For some comics, trimming might remove content as well as borders."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:288
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:292
|
||||
msgid "Don't split landscape images into two portrait images"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:290
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:294
|
||||
msgid "Keep aspect ratio and scale image using screen height as image width for viewing in landscape mode."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:293
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:297
|
||||
msgid "Used for right-to-left publications like manga. Causes landscape pages to be split into portrait pages from right to left."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:297
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:301
|
||||
msgid "Enable Despeckle. Reduces speckle noise. May greatly increase processing time."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:300
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:304
|
||||
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/comic/input.py:304
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308
|
||||
msgid "The format that images in the created ebook are converted to. You can experiment to see which format gives you optimal size and look on your device."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:308
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:312
|
||||
msgid "Apply no processing to the image"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:434
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:445
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
|
||||
msgid "Page"
|
||||
msgstr ""
|
||||
|
||||
@ -728,7 +727,7 @@ msgstr ""
|
||||
msgid "List builtin recipes"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:251
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/conversion/cli.py:252
|
||||
msgid "Output saved to"
|
||||
msgstr ""
|
||||
|
||||
@ -1284,7 +1283,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:56
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:159
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:389
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1069
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1072
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
@ -1292,7 +1291,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/fetch_metadata.py:57
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:160
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:394
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1070
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1073
|
||||
msgid "Author(s)"
|
||||
msgstr ""
|
||||
|
||||
@ -1319,8 +1318,8 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:370
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:166
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:339
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1013
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1073
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1016
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1076
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:96
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:125
|
||||
msgid "Tags"
|
||||
@ -1339,7 +1338,7 @@ msgid "Language"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1012
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1015
|
||||
msgid "Timestamp"
|
||||
msgstr ""
|
||||
|
||||
@ -2186,7 +2185,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/xpath_wizard_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/device_drivers/configwidget_ui.py:67
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/search_item_ui.py:35
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:96
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
|
||||
msgid "Form"
|
||||
msgstr ""
|
||||
@ -2773,7 +2772,7 @@ msgid "RB Output"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1421
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1431
|
||||
msgid "Choose the format to view"
|
||||
msgstr ""
|
||||
|
||||
@ -3266,7 +3265,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:85
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:346
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1008
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1011
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/status.py:92
|
||||
msgid "Path"
|
||||
msgstr ""
|
||||
@ -3381,7 +3380,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:475
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:819
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:158
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1094
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1104
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
@ -3451,7 +3450,7 @@ msgid "Access log:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:674
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:613
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:618
|
||||
msgid "Failed to start content server"
|
||||
msgstr ""
|
||||
|
||||
@ -4037,7 +4036,7 @@ msgid "Choose formats for "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:925
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:930
|
||||
msgid "Books"
|
||||
msgstr ""
|
||||
|
||||
@ -4456,7 +4455,7 @@ msgid "Send test mail from %s to:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115
|
||||
msgid "&Test"
|
||||
msgstr ""
|
||||
|
||||
@ -4632,7 +4631,7 @@ msgstr ""
|
||||
msgid "Recipe source code (python)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:97
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107
|
||||
msgid ""
|
||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
|
||||
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
|
||||
@ -4643,31 +4642,31 @@ msgid ""
|
||||
"<p style=\" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Use the <span style=\" font-weight:600;\">Test</span> functionality below to test your regular expression on a few sample filenames. The group names for the various metadata entries are documented in tooltips.</p></body></html>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
|
||||
msgid "Regular &expression"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:106
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
|
||||
msgid "File &name:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:107
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
||||
msgid "Test"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:108
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
||||
msgid "Title:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:109
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
|
||||
msgid "Regular expression (?P<title>)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:110
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:113
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:123
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:126
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:129
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:132
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:78
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87
|
||||
@ -4676,35 +4675,35 @@ msgstr ""
|
||||
msgid "No match"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:111
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
|
||||
msgid "Authors:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:112
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
|
||||
msgid "Regular expression (?P<author>)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:114
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:124
|
||||
msgid "Series:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:115
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:125
|
||||
msgid "Regular expression (?P<series>)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:117
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:127
|
||||
msgid "Series index:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:118
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:128
|
||||
msgid "Regular expression (?P<series_index>)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:130
|
||||
msgid "ISBN:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:121
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:131
|
||||
msgid "Regular expression (?P<isbn>)"
|
||||
msgstr ""
|
||||
|
||||
@ -4760,12 +4759,12 @@ msgid " - Jobs"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:161
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1071
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1074
|
||||
msgid "Size (MB)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:162
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1072
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1075
|
||||
msgid "Date"
|
||||
msgstr ""
|
||||
|
||||
@ -4779,7 +4778,7 @@ msgstr ""
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:46
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:72
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:406
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:410
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
@ -4787,19 +4786,19 @@ msgstr ""
|
||||
msgid "Book <font face=\"serif\">%s</font> of %s."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:838
|
||||
msgid "Not allowed"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:836
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:839
|
||||
msgid "Dropping onto a device is not supported. First add the book to the calibre library."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1007
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1010
|
||||
msgid "Format"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1061
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1064
|
||||
msgid "Double click to <b>edit</b> me<br><br>"
|
||||
msgstr ""
|
||||
|
||||
@ -5284,7 +5283,7 @@ msgid "Save to disk in a single directory"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1523
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1539
|
||||
msgid "Save only %s format to disk"
|
||||
msgstr ""
|
||||
|
||||
@ -5319,31 +5318,31 @@ msgid "Calibre Library"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:464
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1666
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1682
|
||||
msgid "Choose a location for your ebook library."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:656
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:661
|
||||
msgid "Browse by covers"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:773
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:778
|
||||
msgid "Device: "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:775
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:780
|
||||
msgid " detected."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:798
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:804
|
||||
msgid "Connected "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:810
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:816
|
||||
msgid "Device database corrupted"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:811
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:817
|
||||
msgid ""
|
||||
"\n"
|
||||
" <p>The database of books on the reader is corrupted. Try the following:\n"
|
||||
@ -5354,260 +5353,264 @@ msgid ""
|
||||
" "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:872
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:878
|
||||
msgid "How many empty books?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:873
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:879
|
||||
msgid "How many empty books should be added?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:917
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:960
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:923
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:970
|
||||
msgid "Uploading books to device."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:926
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931
|
||||
msgid "EPUB Books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:927
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:932
|
||||
msgid "LRF Books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:928
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:933
|
||||
msgid "HTML Books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:929
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:934
|
||||
msgid "LIT Books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:930
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:935
|
||||
msgid "MOBI Books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:936
|
||||
msgid "Text books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:932
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:937
|
||||
msgid "PDF Books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:933
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:938
|
||||
msgid "Comics"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:934
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:939
|
||||
msgid "Archives"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:969
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:943
|
||||
msgid "Supported books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:979
|
||||
msgid "Failed to read metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:970
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:980
|
||||
msgid "Failed to read metadata from the following"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:989
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:999
|
||||
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/ui.py:1016
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1026
|
||||
msgid "Deleting books from device."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1047
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1057
|
||||
msgid "Cannot download metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1048
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1105
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1138
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1163
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1276
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1058
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1115
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1148
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1173
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286
|
||||
msgid "No books selected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1063
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1073
|
||||
msgid "social metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
|
||||
msgid "covers"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
|
||||
msgid "metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1067
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1077
|
||||
msgid "Downloading %s for %d book(s)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1089
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1099
|
||||
msgid "Failed to download some metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1090
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1100
|
||||
msgid "Failed to download metadata for the following:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1093
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1103
|
||||
msgid "Failed to download metadata:"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1104
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1114
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1147
|
||||
msgid "Cannot edit metadata"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1162
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1172
|
||||
msgid "Cannot save to disk"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1165
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1175
|
||||
msgid "Choose destination directory"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1192
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
||||
msgid "Error while saving"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1193
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1203
|
||||
msgid "There was an error while saving."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1201
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1210
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
|
||||
msgid "Could not save some books"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1202
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1212
|
||||
msgid "Click the show details button to see which ones."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1221
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1231
|
||||
msgid "Fetching news from "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1235
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
|
||||
msgid " fetched."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1275
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
|
||||
msgid "Cannot convert"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1304
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1314
|
||||
msgid "Starting conversion of %d book(s)"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1434
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1444
|
||||
msgid "No book selected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1465
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1481
|
||||
msgid "Cannot view"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1433
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1443
|
||||
msgid "Cannot open folder"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1450
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1465
|
||||
msgid "Multiple Books Selected"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1451
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1466
|
||||
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/ui.py:1466
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1482
|
||||
msgid "%s has no available formats."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1507
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1523
|
||||
msgid "Cannot configure"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1508
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1524
|
||||
msgid "Cannot configure while there are running jobs."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1551
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1567
|
||||
msgid "No detailed info available"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1552
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1568
|
||||
msgid "No detailed information is available for books on the device."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1604
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1620
|
||||
msgid "Error talking to device"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1605
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1621
|
||||
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/ui.py:1628
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1644
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1662
|
||||
msgid "Conversion Error"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1629
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1645
|
||||
msgid "<p>Could not convert: %s<p>It is a <a href=\"%s\">DRM</a>ed book. You must first remove the DRM using third party tools."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1647
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1663
|
||||
msgid "<b>Failed</b>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1675
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1691
|
||||
msgid "Invalid library location"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1676
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1692
|
||||
msgid "Could not access %s. Using %s as the library."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1724
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1740
|
||||
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/ui.py:1749
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1765
|
||||
msgid "There are active jobs. Are you sure you want to quit?"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1752
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1768
|
||||
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/ui.py:1756
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1772
|
||||
msgid "WARNING: Active jobs"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1808
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1824
|
||||
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/ui.py:1827
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1843
|
||||
msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1835
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1851
|
||||
msgid "Update available"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1836
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1852
|
||||
msgid "%s has been updated to version %s. See the <a href=\"http://calibre-ebook.com/whats-new\">new features</a>. Visit the download page?"
|
||||
msgstr ""
|
||||
|
||||
@ -6042,23 +6045,23 @@ msgstr ""
|
||||
msgid "Click to see the books on storage card B in your reader"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:496
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:500
|
||||
msgid "Change Case"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:497
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:501
|
||||
msgid "Upper Case"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:498
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:502
|
||||
msgid "Lower Case"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:499
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:503
|
||||
msgid "Swap Case"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:500
|
||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504
|
||||
msgid "Title Case"
|
||||
msgstr ""
|
||||
|
||||
@ -6643,16 +6646,16 @@ msgid ""
|
||||
"Start the calibre content server."
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:49
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:48
|
||||
msgid ""
|
||||
"%sUsage%s: %s\n"
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:93
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:92
|
||||
msgid "Created by "
|
||||
msgstr ""
|
||||
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:94
|
||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:93
|
||||
msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks."
|
||||
msgstr ""
|
||||
|
||||
|
@ -11,7 +11,6 @@ from copy import deepcopy
|
||||
from functools import partial
|
||||
from optparse import OptionParser as _OptionParser
|
||||
from optparse import IndentedHelpFormatter
|
||||
from PyQt4.QtCore import QString
|
||||
from calibre.constants import terminal_controller, iswindows, isosx, \
|
||||
__appname__, __version__, __author__, plugins
|
||||
from calibre.utils.lock import LockError, ExclusiveFile
|
||||
@ -365,6 +364,7 @@ class OptionSet(object):
|
||||
if val is val is True or val is False or val is None or \
|
||||
isinstance(val, (int, float, long, basestring)):
|
||||
return repr(val)
|
||||
from PyQt4.QtCore import QString
|
||||
if isinstance(val, QString):
|
||||
return repr(unicode(val))
|
||||
pickle = cPickle.dumps(val, -1)
|
||||
@ -722,26 +722,4 @@ def migrate():
|
||||
p.set('migrated', True)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
import subprocess
|
||||
from PyQt4.Qt import QByteArray
|
||||
c = Config('test', 'test config')
|
||||
|
||||
c.add_opt('one', ['-1', '--one'], help="This is option #1")
|
||||
c.set('one', u'345')
|
||||
|
||||
c.add_opt('two', help="This is option #2")
|
||||
c.set('two', 345)
|
||||
|
||||
c.add_opt('three', help="This is option #3")
|
||||
c.set('three', QString(u'aflatoon'))
|
||||
|
||||
c.add_opt('four', help="This is option #4")
|
||||
c.set('four', QByteArray('binary aflatoon'))
|
||||
|
||||
subprocess.call(['pygmentize', os.path.expanduser('~/.config/calibre/test.py')])
|
||||
|
||||
opts = c.parse()
|
||||
for i in ('one', 'two', 'three', 'four'):
|
||||
print i, repr(getattr(opts, i))
|
||||
|
||||
|
@ -1063,7 +1063,7 @@ class BasicNewsRecipe(Recipe):
|
||||
return parsed_feeds
|
||||
|
||||
@classmethod
|
||||
def tag_to_string(self, tag, use_alt=True):
|
||||
def tag_to_string(self, tag, use_alt=True, normalize_whitespace=True):
|
||||
'''
|
||||
Convenience method to take a
|
||||
`BeautifulSoup <http://www.crummy.com/software/BeautifulSoup/documentation.html>`_
|
||||
@ -1090,7 +1090,10 @@ class BasicNewsRecipe(Recipe):
|
||||
strings.append(res)
|
||||
elif use_alt and item.has_key('alt'):
|
||||
strings.append(item['alt'])
|
||||
return u''.join(strings)
|
||||
ans = u''.join(strings)
|
||||
if normalize_whitespace:
|
||||
ans = re.sub(r'\s+', ' ', ans)
|
||||
return ans
|
||||
|
||||
@classmethod
|
||||
def soup(cls, raw):
|
||||
|
Loading…
x
Reference in New Issue
Block a user