mirror of
				https://github.com/kovidgoyal/calibre.git
				synced 2025-11-03 19:17:02 -05: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'
 | 
					__copyright__ = '2008, Kovid Goyal kovid@kovidgoyal.net'
 | 
				
			||||||
__docformat__ = 'restructuredtext en'
 | 
					__docformat__ = 'restructuredtext en'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from calibre.web.feeds.news import BasicNewsRecipe
 | 
					from calibre.web.feeds.news import BasicNewsRecipe
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# http://online.wsj.com/page/us_in_todays_paper.html
 | 
					# http://online.wsj.com/page/us_in_todays_paper.html
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class WallStreetJournal(BasicNewsRecipe):
 | 
					class WallStreetJournal(BasicNewsRecipe):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        title = 'The Wall Street Journal'
 | 
					        title = 'The Wall Street Journal (US)'
 | 
				
			||||||
        __author__ = 'Kovid Goyal and Sujata Raman'
 | 
					        __author__ = 'Kovid Goyal and Sujata Raman'
 | 
				
			||||||
        description = 'News and current affairs.'
 | 
					        description = 'News and current affairs'
 | 
				
			||||||
        needs_subscription = True
 | 
					        needs_subscription = True
 | 
				
			||||||
        language = 'en'
 | 
					        language = 'en'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -60,60 +61,54 @@ class WallStreetJournal(BasicNewsRecipe):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            return soup
 | 
					            return soup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        def get_article_url(self, article):
 | 
					        def wsj_get_index(self):
 | 
				
			||||||
            try:
 | 
					            return self.index_to_soup('http://online.wsj.com/page/us_in_todays_paper.html')
 | 
				
			||||||
                return article.feedburner_origlink.split('?')[0]
 | 
					
 | 
				
			||||||
            except AttributeError:
 | 
					        def parse_index(self):
 | 
				
			||||||
                return article.link.split('?')[0]
 | 
					            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):
 | 
					        def cleanup(self):
 | 
				
			||||||
            self.browser.open('http://online.wsj.com/logout?url=http://online.wsj.com')
 | 
					            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
 | 
					from setup import isosx, iswindows, islinux
 | 
				
			||||||
 | 
					
 | 
				
			||||||
OSX_SDK = '/Developer/SDKs/MacOSX10.5.sdk'
 | 
					OSX_SDK = '/Developer/SDKs/MacOSX10.4u.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
 | 
					NMAKE = RC = msvc = MT = win_inc = win_lib = None
 | 
				
			||||||
if iswindows:
 | 
					if iswindows:
 | 
				
			||||||
@ -117,24 +114,24 @@ if iswindows:
 | 
				
			|||||||
    podofo_inc = os.path.join(sw_inc_dir, 'podofo')
 | 
					    podofo_inc = os.path.join(sw_inc_dir, 'podofo')
 | 
				
			||||||
    podofo_lib = sw_lib_dir
 | 
					    podofo_lib = sw_lib_dir
 | 
				
			||||||
elif isosx:
 | 
					elif isosx:
 | 
				
			||||||
    fc_inc = '/Users/kovid/fontconfig/include/fontconfig'
 | 
					    fc_inc = '/sw/include/fontconfig'
 | 
				
			||||||
    fc_lib = '/Users/kovid/fontconfig/lib'
 | 
					    fc_lib = '/sw/lib'
 | 
				
			||||||
    poppler_inc_dirs = consolidate('POPPLER_INC_DIR',
 | 
					    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']
 | 
					    popplerqt4_inc_dirs = poppler_inc_dirs + [poppler_inc_dirs[0]+'/qt4']
 | 
				
			||||||
    poppler_lib_dirs = consolidate('POPPLER_LIB_DIR',
 | 
					    poppler_lib_dirs = consolidate('POPPLER_LIB_DIR',
 | 
				
			||||||
            '/Volumes/sw/lib')
 | 
					            '/sw/lib')
 | 
				
			||||||
    popplerqt4_lib_dirs = poppler_lib_dirs
 | 
					    popplerqt4_lib_dirs = poppler_lib_dirs
 | 
				
			||||||
    poppler_libs     = popplerqt4_libs = ['poppler']
 | 
					    poppler_libs     = popplerqt4_libs = ['poppler']
 | 
				
			||||||
    podofo_inc = '/usr/local/include/podofo'
 | 
					    podofo_inc = '/sw/podofo'
 | 
				
			||||||
    podofo_lib = '/usr/local/lib'
 | 
					    podofo_lib = '/sw/lib'
 | 
				
			||||||
    magick_inc_dirs = consolidate('MAGICK_INC',
 | 
					    magick_inc_dirs = consolidate('MAGICK_INC',
 | 
				
			||||||
        '/Users/kovid/ImageMagick/include/ImageMagick')
 | 
					        '/sw/include/ImageMagick')
 | 
				
			||||||
    magick_lib_dirs = consolidate('MAGICK_LIB',
 | 
					    magick_lib_dirs = consolidate('MAGICK_LIB',
 | 
				
			||||||
        '/Users/kovid/ImageMagick/lib')
 | 
					        '/sw/lib')
 | 
				
			||||||
    magick_libs = ['MagickWand', 'MagickCore']
 | 
					    magick_libs = ['MagickWand', 'MagickCore']
 | 
				
			||||||
    png_inc_dirs = consolidate('PNG_INC_DIR', '/usr/local/include')
 | 
					    png_inc_dirs = consolidate('PNG_INC_DIR', '/sw/include')
 | 
				
			||||||
    png_lib_dirs = consolidate('PNG_LIB_DIR', '/usr/local/lib')
 | 
					    png_lib_dirs = consolidate('PNG_LIB_DIR', '/sw/lib')
 | 
				
			||||||
    png_libs = ['png12']
 | 
					    png_libs = ['png12']
 | 
				
			||||||
else:
 | 
					else:
 | 
				
			||||||
    # Include directories
 | 
					    # Include directories
 | 
				
			||||||
 | 
				
			|||||||
@ -83,7 +83,7 @@ linux_freeze2 = LinuxFreeze2()
 | 
				
			|||||||
from setup.installer.osx import OSX, OSX32
 | 
					from setup.installer.osx import OSX, OSX32
 | 
				
			||||||
osx = OSX()
 | 
					osx = OSX()
 | 
				
			||||||
osx32 = OSX32()
 | 
					osx32 = OSX32()
 | 
				
			||||||
from setup.installer.osx.freeze import OSX32_Freeze
 | 
					from setup.installer.osx.app.main import OSX32_Freeze
 | 
				
			||||||
osx32_freeze = OSX32_Freeze()
 | 
					osx32_freeze = OSX32_Freeze()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from setup.installer.windows import Win, Win32
 | 
					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, \
 | 
					from setup.build_environment import fc_inc, fc_lib, \
 | 
				
			||||||
        fc_error, poppler_libs, poppler_lib_dirs, poppler_inc_dirs, podofo_inc, \
 | 
					        fc_error, poppler_libs, poppler_lib_dirs, poppler_inc_dirs, podofo_inc, \
 | 
				
			||||||
        podofo_lib, podofo_error, poppler_error, pyqt, OSX_SDK, NMAKE, \
 | 
					        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_inc_dirs, magick_lib_dirs, png_lib_dirs, png_libs, \
 | 
				
			||||||
        magick_error, magick_libs, ft_lib_dirs, ft_libs, jpg_libs, jpg_lib_dirs
 | 
					        magick_error, magick_libs, ft_lib_dirs, ft_libs, jpg_libs, jpg_lib_dirs
 | 
				
			||||||
MT
 | 
					MT
 | 
				
			||||||
@ -156,7 +156,7 @@ if islinux:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if isosx:
 | 
					if isosx:
 | 
				
			||||||
    x, p = ('x86_64', 'ppc64') if leopard_build else ('i386', 'ppc')
 | 
					    x, p = ('i386', 'ppc')
 | 
				
			||||||
    archs = ['-arch', x, '-arch', p, '-isysroot',
 | 
					    archs = ['-arch', x, '-arch', p, '-isysroot',
 | 
				
			||||||
                OSX_SDK]
 | 
					                OSX_SDK]
 | 
				
			||||||
    cflags.append('-D_OSX')
 | 
					    cflags.append('-D_OSX')
 | 
				
			||||||
@ -305,7 +305,7 @@ class Build(Command):
 | 
				
			|||||||
        obj_pat = 'release\\*.obj' if iswindows else '*.o'
 | 
					        obj_pat = 'release\\*.obj' if iswindows else '*.o'
 | 
				
			||||||
        objects = glob.glob(obj_pat)
 | 
					        objects = glob.glob(obj_pat)
 | 
				
			||||||
        if not objects or self.newer(objects, ext.sources+ext.headers):
 | 
					        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('''\
 | 
					            pro = textwrap.dedent('''\
 | 
				
			||||||
                TARGET   = %s
 | 
					                TARGET   = %s
 | 
				
			||||||
                TEMPLATE = lib
 | 
					                TEMPLATE = lib
 | 
				
			||||||
@ -316,9 +316,6 @@ class Build(Command):
 | 
				
			|||||||
            ''')%(ext.name, ' '.join(ext.headers), ' '.join(ext.sources), archs)
 | 
					            ''')%(ext.name, ' '.join(ext.headers), ' '.join(ext.sources), archs)
 | 
				
			||||||
            open(ext.name+'.pro', 'wb').write(pro)
 | 
					            open(ext.name+'.pro', 'wb').write(pro)
 | 
				
			||||||
            subprocess.check_call([QMAKE, '-o', 'Makefile', ext.name+'.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'])
 | 
					            subprocess.check_call([make, '-f', 'Makefile'])
 | 
				
			||||||
            objects = glob.glob(obj_pat)
 | 
					            objects = glob.glob(obj_pat)
 | 
				
			||||||
        return list(map(self.a, objects))
 | 
					        return list(map(self.a, objects))
 | 
				
			||||||
@ -354,12 +351,6 @@ class Build(Command):
 | 
				
			|||||||
            makefile.extra_lflags = qt_objects
 | 
					            makefile.extra_lflags = qt_objects
 | 
				
			||||||
            makefile.extra_include_dirs = ext.inc_dirs
 | 
					            makefile.extra_include_dirs = ext.inc_dirs
 | 
				
			||||||
            makefile.generate()
 | 
					            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)
 | 
					            subprocess.check_call([make, '-f', mf], cwd=src_dir)
 | 
				
			||||||
            shutil.copy2(module, dest)
 | 
					            shutil.copy2(module, dest)
 | 
				
			||||||
 | 
				
			|||||||
@ -25,8 +25,9 @@ class OSX32(VMInstaller):
 | 
				
			|||||||
    description = 'Build 32 bit OS X binary installer'
 | 
					    description = 'Build 32 bit OS X binary installer'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    INSTALLER_EXT = 'dmg'
 | 
					    INSTALLER_EXT = 'dmg'
 | 
				
			||||||
    VM_NAME = 'tiger_build'
 | 
					    VM_NAME = 'leopard_build'
 | 
				
			||||||
    VM = '/vmware/bin/%s'%VM_NAME
 | 
					    VM = '/vmware/bin/%s'%VM_NAME
 | 
				
			||||||
 | 
					    FREEZE_TEMPLATE = 'python -OO setup.py {freeze_command}'
 | 
				
			||||||
    FREEZE_COMMAND = 'osx32_freeze'
 | 
					    FREEZE_COMMAND = 'osx32_freeze'
 | 
				
			||||||
    BUILD_PREFIX = VMInstaller.BUILD_PREFIX + ['source ~/.profile']
 | 
					    BUILD_PREFIX = VMInstaller.BUILD_PREFIX + ['source ~/.profile']
 | 
				
			||||||
    SHUTDOWN_CMD = ['sudo', 'halt']
 | 
					    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, \
 | 
					from setup import __version__ as VERSION, __appname__ as APPNAME, basenames, \
 | 
				
			||||||
        modules as main_modules, Command, SRC, functions as main_functions
 | 
					        modules as main_modules, Command, SRC, functions as main_functions
 | 
				
			||||||
LICENSE = open('LICENSE', 'rb').read()
 | 
					LICENSE = open('LICENSE', 'rb').read()
 | 
				
			||||||
 | 
					MAGICK_HOME='@executable_path/../Frameworks/ImageMagick'
 | 
				
			||||||
ENV = dict(
 | 
					ENV = dict(
 | 
				
			||||||
        FC_CONFIG_DIR='@executable_path/../Resources/fonts',
 | 
					        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',
 | 
					        QT_PLUGIN_PATH='@executable_path/../MacOS',
 | 
				
			||||||
        PYTHONIOENCODING='UTF-8',
 | 
					        PYTHONIOENCODING='UTF-8',
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@ -46,9 +50,9 @@ def compile_launcher_lib(contents_dir, gcc, base):
 | 
				
			|||||||
    src = join(base, 'util.c')
 | 
					    src = join(base, 'util.c')
 | 
				
			||||||
    cmd = [gcc] + '-Wall -arch i386 -arch ppc -dynamiclib -std=gnu99'.split() + [src] + \
 | 
					    cmd = [gcc] + '-Wall -arch i386 -arch ppc -dynamiclib -std=gnu99'.split() + [src] + \
 | 
				
			||||||
            ['-I'+base] + \
 | 
					            ['-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() + \
 | 
					            '-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',
 | 
					            ['-install_name',
 | 
				
			||||||
                '@executable_path/../Frameworks/'+os.path.basename(dest)] + \
 | 
					                '@executable_path/../Frameworks/'+os.path.basename(dest)] + \
 | 
				
			||||||
            ['-framework', 'Python', '-framework', 'CoreFoundation', '-headerpad_max_install_names']
 | 
					            ['-framework', 'Python', '-framework', 'CoreFoundation', '-headerpad_max_install_names']
 | 
				
			||||||
@ -176,6 +180,8 @@ class Py2App(object):
 | 
				
			|||||||
            self.create_plist()
 | 
					            self.create_plist()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.add_python_framework()
 | 
					            self.add_python_framework()
 | 
				
			||||||
 | 
					            self.add_site_packages()
 | 
				
			||||||
 | 
					            self.add_stdlib()
 | 
				
			||||||
            self.add_qt_frameworks()
 | 
					            self.add_qt_frameworks()
 | 
				
			||||||
            self.add_calibre_plugins()
 | 
					            self.add_calibre_plugins()
 | 
				
			||||||
            self.add_podofo()
 | 
					            self.add_podofo()
 | 
				
			||||||
@ -186,8 +192,6 @@ class Py2App(object):
 | 
				
			|||||||
            self.add_imagemagick()
 | 
					            self.add_imagemagick()
 | 
				
			||||||
            self.add_misc_libraries()
 | 
					            self.add_misc_libraries()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.add_site_packages()
 | 
					 | 
				
			||||||
            self.add_stdlib()
 | 
					 | 
				
			||||||
            self.add_resources()
 | 
					            self.add_resources()
 | 
				
			||||||
            self.compile_py_modules()
 | 
					            self.compile_py_modules()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -262,8 +266,10 @@ class Py2App(object):
 | 
				
			|||||||
    def get_local_dependencies(self, path_to_lib):
 | 
					    def get_local_dependencies(self, path_to_lib):
 | 
				
			||||||
        for x in self.get_dependencies(path_to_lib):
 | 
					        for x in self.get_dependencies(path_to_lib):
 | 
				
			||||||
            for y in (SW+'/lib/', '/usr/local/lib/', SW+'/qt/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 x.startswith(y):
 | 
				
			||||||
 | 
					                    if y == '/Library/Frameworks/Python.framework/':
 | 
				
			||||||
 | 
					                        y = '/Library/Frameworks/'
 | 
				
			||||||
                    yield x, x[len(y):]
 | 
					                    yield x, x[len(y):]
 | 
				
			||||||
                    break
 | 
					                    break
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -289,7 +295,7 @@ class Py2App(object):
 | 
				
			|||||||
    @flush
 | 
					    @flush
 | 
				
			||||||
    def add_python_framework(self):
 | 
					    def add_python_framework(self):
 | 
				
			||||||
        info('\nAdding Python framework')
 | 
					        info('\nAdding Python framework')
 | 
				
			||||||
        src = join(SW, 'python', 'Python.framework')
 | 
					        src = join('/Library/Frameworks', 'Python.framework')
 | 
				
			||||||
        x = join(self.frameworks_dir, 'Python.framework')
 | 
					        x = join(self.frameworks_dir, 'Python.framework')
 | 
				
			||||||
        curr = os.path.realpath(join(src, 'Versions', 'Current'))
 | 
					        curr = os.path.realpath(join(src, 'Versions', 'Current'))
 | 
				
			||||||
        currd = join(x, 'Versions', basename(curr))
 | 
					        currd = join(x, 'Versions', basename(curr))
 | 
				
			||||||
@ -302,6 +308,7 @@ class Py2App(object):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @flush
 | 
					    @flush
 | 
				
			||||||
    def add_qt_frameworks(self):
 | 
					    def add_qt_frameworks(self):
 | 
				
			||||||
 | 
					        info('\nAdding Qt Framework')
 | 
				
			||||||
        for f in ('QtCore', 'QtGui', 'QtXml', 'QtNetwork', 'QtSvg', 'QtWebkit',
 | 
					        for f in ('QtCore', 'QtGui', 'QtXml', 'QtNetwork', 'QtSvg', 'QtWebkit',
 | 
				
			||||||
                'QtXmlPatterns', 'phonon'):
 | 
					                'QtXmlPatterns', 'phonon'):
 | 
				
			||||||
            self.add_qt_framework(f)
 | 
					            self.add_qt_framework(f)
 | 
				
			||||||
@ -360,7 +367,7 @@ class Py2App(object):
 | 
				
			|||||||
                CFBundlePackageType='APPL',
 | 
					                CFBundlePackageType='APPL',
 | 
				
			||||||
                CFBundleSignature='????',
 | 
					                CFBundleSignature='????',
 | 
				
			||||||
                CFBundleExecutable='calibre',
 | 
					                CFBundleExecutable='calibre',
 | 
				
			||||||
                LSMinimumSystemVersion='10.5.2',
 | 
					                LSMinimumSystemVersion='10.4.2',
 | 
				
			||||||
                LSRequiresNativeExecution=True,
 | 
					                LSRequiresNativeExecution=True,
 | 
				
			||||||
                NSAppleScriptEnabled=False,
 | 
					                NSAppleScriptEnabled=False,
 | 
				
			||||||
                NSHumanReadableCopyright='Copyright 2008, Kovid Goyal',
 | 
					                NSHumanReadableCopyright='Copyright 2008, Kovid Goyal',
 | 
				
			||||||
@ -433,10 +440,7 @@ class Py2App(object):
 | 
				
			|||||||
        for x in ('Wand', 'Core'):
 | 
					        for x in ('Wand', 'Core'):
 | 
				
			||||||
            self.install_dylib(os.path.join(SW, 'lib', 'libMagick%s.2.dylib'%x))
 | 
					            self.install_dylib(os.path.join(SW, 'lib', 'libMagick%s.2.dylib'%x))
 | 
				
			||||||
        idir = glob.glob(os.path.join(SW, 'lib', 'ImageMagick-*'))[-1]
 | 
					        idir = glob.glob(os.path.join(SW, 'lib', 'ImageMagick-*'))[-1]
 | 
				
			||||||
        dest = os.path.join(self.frameworks_dir, 'ImageMagick', 'lib')
 | 
					        dest = os.path.join(self.frameworks_dir, 'ImageMagick')
 | 
				
			||||||
        if not os.path.exists(dest):
 | 
					 | 
				
			||||||
            os.makedirs(dest)
 | 
					 | 
				
			||||||
        dest = os.path.join(dest, os.path.basename(idir))
 | 
					 | 
				
			||||||
        if os.path.exists(dest):
 | 
					        if os.path.exists(dest):
 | 
				
			||||||
            shutil.rmtree(dest)
 | 
					            shutil.rmtree(dest)
 | 
				
			||||||
        shutil.copytree(idir, dest, True)
 | 
					        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('/')]))
 | 
					        paths = reversed(map(abspath, [x for x in sys.path if x.startswith('/')]))
 | 
				
			||||||
        upaths = []
 | 
					        upaths = []
 | 
				
			||||||
        for x in paths:
 | 
					        for x in paths:
 | 
				
			||||||
            if x.endswith('/PIL') or 'site-packages' not in x:
 | 
					            if x not in upaths and (x.endswith('.egg') or
 | 
				
			||||||
                continue
 | 
					                    x.endswith('/site-packages')):
 | 
				
			||||||
            if x not in upaths:
 | 
					 | 
				
			||||||
                upaths.append(x)
 | 
					                upaths.append(x)
 | 
				
			||||||
        upaths.append(os.path.expanduser('~/build/calibre/src'))
 | 
					        upaths.append(os.path.expanduser('~/build/calibre/src'))
 | 
				
			||||||
        for x in upaths:
 | 
					        for x in upaths:
 | 
				
			||||||
 | 
					            info('\t', x)
 | 
				
			||||||
            tdir = None
 | 
					            tdir = None
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                if not os.path.isdir(x):
 | 
					                if not os.path.isdir(x):
 | 
				
			||||||
@ -536,7 +540,7 @@ class Py2App(object):
 | 
				
			|||||||
    @flush
 | 
					    @flush
 | 
				
			||||||
    def add_stdlib(self):
 | 
					    def add_stdlib(self):
 | 
				
			||||||
        info('\nAdding python stdlib')
 | 
					        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
 | 
					        src += self.version_info
 | 
				
			||||||
        dest = join(self.resources_dir, 'Python', 'lib', 'python')
 | 
					        dest = join(self.resources_dir, 'Python', 'lib', 'python')
 | 
				
			||||||
        dest += self.version_info
 | 
					        dest += self.version_info
 | 
				
			||||||
 | 
				
			|||||||
@ -363,7 +363,7 @@ class NookOutput(OutputProfile):
 | 
				
			|||||||
    description = _('This profile is intended for the B&N Nook.')
 | 
					    description = _('This profile is intended for the B&N Nook.')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Screen size is a best guess
 | 
					    # Screen size is a best guess
 | 
				
			||||||
    screen_size               = (600, 800)
 | 
					    screen_size               = (600, 770)
 | 
				
			||||||
    dpi                       = 167
 | 
					    dpi                       = 167
 | 
				
			||||||
    fbase                     = 16
 | 
					    fbase                     = 16
 | 
				
			||||||
    fsizes                    = [12, 12, 14, 16, 18, 20, 22, 24]
 | 
					    fsizes                    = [12, 12, 14, 16, 18, 20, 22, 24]
 | 
				
			||||||
 | 
				
			|||||||
@ -9,7 +9,6 @@ Device driver for Bookeen's Cybook Gen 3
 | 
				
			|||||||
'''
 | 
					'''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import os
 | 
					import os
 | 
				
			||||||
from itertools import cycle
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
from calibre import islinux
 | 
					from calibre import islinux
 | 
				
			||||||
from calibre.devices.usbms.driver import USBMS
 | 
					from calibre.devices.usbms.driver import USBMS
 | 
				
			||||||
 | 
				
			|||||||
@ -8,10 +8,7 @@ __docformat__ = 'restructuredtext en'
 | 
				
			|||||||
Device driver for Barns and Nobel's Nook
 | 
					Device driver for Barns and Nobel's Nook
 | 
				
			||||||
'''
 | 
					'''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					import os
 | 
				
			||||||
    from PIL import Image, ImageDraw
 | 
					 | 
				
			||||||
except ImportError:
 | 
					 | 
				
			||||||
    import Image, ImageDraw
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
import cStringIO
 | 
					import cStringIO
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -47,6 +44,13 @@ class NOOK(USBMS):
 | 
				
			|||||||
    SUPPORTS_SUB_DIRS = True
 | 
					    SUPPORTS_SUB_DIRS = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def upload_cover(self, path, filename, metadata):
 | 
					    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)
 | 
					        coverdata = metadata.get('cover', None)
 | 
				
			||||||
        if coverdata:
 | 
					        if coverdata:
 | 
				
			||||||
            cover = Image.open(cStringIO.StringIO(coverdata[2]))
 | 
					            cover = Image.open(cStringIO.StringIO(coverdata[2]))
 | 
				
			||||||
 | 
				
			|||||||
@ -111,7 +111,11 @@ class USBMS(CLI, Device):
 | 
				
			|||||||
            paths.append(filepath)
 | 
					            paths.append(filepath)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            self.put_file(infile, filepath, replace_file=True)
 | 
					            self.put_file(infile, filepath, replace_file=True)
 | 
				
			||||||
            self.upload_cover(os.path.dirname(filepath), os.path.splitext(os.path.basename(filepath))[0], mdata)
 | 
					            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...'))
 | 
					            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__)
 | 
					        log('Created by:', __author__)
 | 
				
			||||||
        raise SystemExit(0)
 | 
					        raise SystemExit(0)
 | 
				
			||||||
    if '--list-recipes' in args:
 | 
					    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:')
 | 
					        log('Available recipes:')
 | 
				
			||||||
        for title in sorted(titles):
 | 
					        titles = sorted(get_builtin_recipe_titles())
 | 
				
			||||||
 | 
					        for title in titles:
 | 
				
			||||||
            try:
 | 
					            try:
 | 
				
			||||||
                log('\t'+title)
 | 
					                log('\t'+title)
 | 
				
			||||||
            except:
 | 
					            except:
 | 
				
			||||||
 | 
				
			|||||||
@ -155,17 +155,19 @@ class EPUBOutput(OutputFormatPlugin):
 | 
				
			|||||||
    def convert(self, oeb, output_path, input_plugin, opts, log):
 | 
					    def convert(self, oeb, output_path, input_plugin, opts, log):
 | 
				
			||||||
        self.log, self.opts, self.oeb = log, opts, oeb
 | 
					        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
 | 
					        from calibre.ebooks.oeb.transforms.split import Split
 | 
				
			||||||
        split = Split(not self.opts.dont_split_on_page_breaks,
 | 
					        split = Split(not self.opts.dont_split_on_page_breaks,
 | 
				
			||||||
                max_flow_size=self.opts.flow_size*1024
 | 
					                max_flow_size=self.opts.flow_size*1024
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
        split(self.oeb, self.opts)
 | 
					        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()
 | 
					        self.insert_cover()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        with TemporaryDirectory('_epub_output') as tdir:
 | 
					        with TemporaryDirectory('_epub_output') as tdir:
 | 
				
			||||||
 | 
				
			|||||||
@ -381,9 +381,9 @@ class FlowSplitter(object):
 | 
				
			|||||||
                p[i:i+1] = new_pres
 | 
					                p[i:i+1] = new_pres
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        split_point, before = self.find_split_point(root)
 | 
					        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:
 | 
					        if split_point is None:
 | 
				
			||||||
            raise SplitError(self.item.href, root)
 | 
					            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):
 | 
					        for t in self.do_split(tree, split_point, before):
 | 
				
			||||||
            r = t.getroot()
 | 
					            r = t.getroot()
 | 
				
			||||||
 | 
				
			|||||||
@ -693,6 +693,9 @@ class BooksView(TableView):
 | 
				
			|||||||
                        self._model.current_changed)
 | 
					                        self._model.current_changed)
 | 
				
			||||||
        self.connect(self._model, SIGNAL('columns_sorted()'),
 | 
					        self.connect(self._model, SIGNAL('columns_sorted()'),
 | 
				
			||||||
                self.columns_sorted, Qt.QueuedConnection)
 | 
					                self.columns_sorted, Qt.QueuedConnection)
 | 
				
			||||||
 | 
					        hv = self.verticalHeader()
 | 
				
			||||||
 | 
					        hv.setClickable(True)
 | 
				
			||||||
 | 
					        hv.setCursor(Qt.PointingHandCursor)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def columns_sorted(self):
 | 
					    def columns_sorted(self):
 | 
				
			||||||
        for i in range(self.model().columnCount(None)):
 | 
					        for i in range(self.model().columnCount(None)):
 | 
				
			||||||
 | 
				
			|||||||
@ -552,6 +552,11 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
				
			|||||||
        self.connect(self.scheduler,
 | 
					        self.connect(self.scheduler,
 | 
				
			||||||
                SIGNAL('start_recipe_fetch(PyQt_PyObject)'),
 | 
					                SIGNAL('start_recipe_fetch(PyQt_PyObject)'),
 | 
				
			||||||
                self.download_scheduled_recipe, Qt.QueuedConnection)
 | 
					                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))
 | 
					        self.location_view.setCurrentIndex(self.location_view.model().index(0))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -921,8 +926,7 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
				
			|||||||
        '''
 | 
					        '''
 | 
				
			||||||
        Add books from the local filesystem to either the library or the device.
 | 
					        Add books from the local filesystem to either the library or the device.
 | 
				
			||||||
        '''
 | 
					        '''
 | 
				
			||||||
        books = choose_files(self, 'add books dialog dir', 'Select books',
 | 
					        filters = [
 | 
				
			||||||
                             filters=[
 | 
					 | 
				
			||||||
                        (_('Books'), BOOK_EXTENSIONS),
 | 
					                        (_('Books'), BOOK_EXTENSIONS),
 | 
				
			||||||
                        (_('EPUB Books'), ['epub']),
 | 
					                        (_('EPUB Books'), ['epub']),
 | 
				
			||||||
                        (_('LRF Books'), ['lrf']),
 | 
					                        (_('LRF Books'), ['lrf']),
 | 
				
			||||||
@ -933,10 +937,15 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
				
			|||||||
                        (_('PDF Books'), ['pdf']),
 | 
					                        (_('PDF Books'), ['pdf']),
 | 
				
			||||||
                        (_('Comics'), ['cbz', 'cbr', 'cbc']),
 | 
					                        (_('Comics'), ['cbz', 'cbr', 'cbc']),
 | 
				
			||||||
                        (_('Archives'), ['zip', 'rar']),
 | 
					                        (_('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:
 | 
					        if not books:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        to_device = self.stack.currentIndex() != 0
 | 
					 | 
				
			||||||
        self._add_books(books, to_device)
 | 
					        self._add_books(books, to_device)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1442,7 +1451,12 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    def view_book(self, triggered):
 | 
					    def view_book(self, triggered):
 | 
				
			||||||
        rows = self.current_view().selectionModel().selectedRows()
 | 
					        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:
 | 
					        if not rows or len(rows) == 0:
 | 
				
			||||||
            self._launch_viewer()
 | 
					            self._launch_viewer()
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
@ -1458,7 +1472,8 @@ class Main(MainWindow, Ui_MainWindow, DeviceGUI):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if self.current_view() is self.library_view:
 | 
					        if self.current_view() is self.library_view:
 | 
				
			||||||
            for row in rows:
 | 
					            for row in rows:
 | 
				
			||||||
                row = row.row()
 | 
					                if hasattr(row, 'row'):
 | 
				
			||||||
 | 
					                    row = row.row()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                formats = self.library_view.model().db.formats(row)
 | 
					                formats = self.library_view.model().db.formats(row)
 | 
				
			||||||
                title   = self.library_view.model().db.title(row)
 | 
					                title   = self.library_view.model().db.title(row)
 | 
				
			||||||
 | 
				
			|||||||
@ -96,6 +96,7 @@ class Nook(Sony505):
 | 
				
			|||||||
    id = 'nook'
 | 
					    id = 'nook'
 | 
				
			||||||
    name = 'Nook'
 | 
					    name = 'Nook'
 | 
				
			||||||
    manufacturer = 'Barnes & Noble'
 | 
					    manufacturer = 'Barnes & Noble'
 | 
				
			||||||
 | 
					    output_profile = 'nook'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CybookG3(Device):
 | 
					class CybookG3(Device):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -473,7 +473,7 @@ class LibraryDatabase2(LibraryDatabase):
 | 
				
			|||||||
    def upgrade_version_2(self):
 | 
					    def upgrade_version_2(self):
 | 
				
			||||||
        ''' Fix Foreign key constraints for deleting from link tables. '''
 | 
					        ''' Fix Foreign key constraints for deleting from link tables. '''
 | 
				
			||||||
        script = textwrap.dedent('''\
 | 
					        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
 | 
					        CREATE TRIGGER fkc_delete_on_%(table)s
 | 
				
			||||||
        BEFORE DELETE ON %(table)s
 | 
					        BEFORE DELETE ON %(table)s
 | 
				
			||||||
        BEGIN
 | 
					        BEGIN
 | 
				
			||||||
 | 
				
			|||||||
@ -5,8 +5,8 @@
 | 
				
			|||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
"Project-Id-Version: calibre 0.6.29\n"
 | 
					"Project-Id-Version: calibre 0.6.29\n"
 | 
				
			||||||
"POT-Creation-Date: 2009-12-18 12:30+MST\n"
 | 
					"POT-Creation-Date: 2009-12-21 21:13+MST\n"
 | 
				
			||||||
"PO-Revision-Date: 2009-12-18 12:30+MST\n"
 | 
					"PO-Revision-Date: 2009-12-21 21:13+MST\n"
 | 
				
			||||||
"Last-Translator: Automatically generated\n"
 | 
					"Last-Translator: Automatically generated\n"
 | 
				
			||||||
"Language-Team: LANGUAGE\n"
 | 
					"Language-Team: LANGUAGE\n"
 | 
				
			||||||
"MIME-Version: 1.0\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/customize/__init__.py:44
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:94
 | 
					#: /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:58
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs505/books.py:199
 | 
					#: /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:767
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/usbms/device.py:770
 | 
					#: /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/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:67
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
 | 
					#: /home/kovid/work/calibre/src/calibre/ebooks/fb2/input.py:69
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/html/input.py:319
 | 
					#: /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/dialogs/scheduler.py:170
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:392
 | 
					#: /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:405
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:877
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/library.py:880
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1003
 | 
					#: /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/gui2/viewer/main.py:179
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/library/cli.py:281
 | 
					#: /home/kovid/work/calibre/src/calibre/library/cli.py:281
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/library/database.py:913
 | 
					#: /home/kovid/work/calibre/src/calibre/library/database.py:913
 | 
				
			||||||
@ -380,12 +380,15 @@ msgid "Communicate with the Blackberry smart phone."
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/blackberry/driver.py:13
 | 
					#: /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/nuut2/driver.py:18
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:88
 | 
					#: /home/kovid/work/calibre/src/calibre/devices/prs500/driver.py:88
 | 
				
			||||||
msgid "Kovid Goyal"
 | 
					msgid "Kovid Goyal"
 | 
				
			||||||
msgstr ""
 | 
					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
 | 
					#: /home/kovid/work/calibre/src/calibre/devices/cybookg3/driver.py:22
 | 
				
			||||||
msgid "Communicate with the Cybook Gen 3 eBook reader."
 | 
					msgid "Communicate with the Cybook Gen 3 eBook reader."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@ -439,19 +442,15 @@ msgstr ""
 | 
				
			|||||||
msgid "Communicate with the JetBook eBook reader."
 | 
					msgid "Communicate with the JetBook eBook reader."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/jetbook/driver.py:23
 | 
					#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:22
 | 
				
			||||||
msgid "James Ralston"
 | 
					 | 
				
			||||||
msgstr ""
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/devices/kindle/driver.py:21
 | 
					 | 
				
			||||||
msgid "Communicate with the Kindle eBook reader."
 | 
					msgid "Communicate with the Kindle eBook reader."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Communicate with the Kindle 2 eBook reader."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Communicate with the Kindle DX eBook reader."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -605,71 +604,71 @@ msgstr ""
 | 
				
			|||||||
msgid "Removing books from device metadata listing..."
 | 
					msgid "Removing books from device metadata listing..."
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Rendered %s"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Failed %s"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:256
 | 
					#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:260
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"Failed to process comic: \n"
 | 
					"Failed to process comic: \n"
 | 
				
			||||||
"\n"
 | 
					"\n"
 | 
				
			||||||
"%s"
 | 
					"%s"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					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 ""
 | 
					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"
 | 
					msgid "Disable normalize (improve contrast) color range for pictures. Default: False"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Maintain picture aspect ratio. Default is to fill the screen."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Disable sharpening."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Disable trimming of comic pages. For some comics, trimming might remove content as well as borders."
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Don't split landscape images into two portrait images"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Keep aspect ratio and scale image using screen height as image width for viewing in landscape mode."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Used for right-to-left publications like manga. Causes landscape pages to be split into portrait pages from right to left."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Enable Despeckle. Reduces speckle noise. May greatly increase processing time."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Don't sort the files found in the comic alphabetically by name. Instead use the order they were added to the comic."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					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 ""
 | 
					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"
 | 
					msgid "Apply no processing to the image"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:434
 | 
					#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:438
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:445
 | 
					#: /home/kovid/work/calibre/src/calibre/ebooks/comic/input.py:449
 | 
				
			||||||
msgid "Page"
 | 
					msgid "Page"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -728,7 +727,7 @@ msgstr ""
 | 
				
			|||||||
msgid "List builtin recipes"
 | 
					msgid "List builtin recipes"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Output saved to"
 | 
				
			||||||
msgstr ""
 | 
					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/dialogs/fetch_metadata.py:56
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:159
 | 
					#: /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:389
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1069
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1072
 | 
				
			||||||
msgid "Title"
 | 
					msgid "Title"
 | 
				
			||||||
msgstr ""
 | 
					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/dialogs/fetch_metadata.py:57
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:160
 | 
					#: /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:394
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1070
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1073
 | 
				
			||||||
msgid "Author(s)"
 | 
					msgid "Author(s)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1319,8 +1318,8 @@ msgstr ""
 | 
				
			|||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:370
 | 
					#: /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:166
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:339
 | 
					#: /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:1016
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1073
 | 
					#: /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/status.py:96
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:125
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/tag_view.py:125
 | 
				
			||||||
msgid "Tags"
 | 
					msgid "Tags"
 | 
				
			||||||
@ -1339,7 +1338,7 @@ msgid "Language"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/ebooks/metadata/__init__.py:375
 | 
					#: /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"
 | 
					msgid "Timestamp"
 | 
				
			||||||
msgstr ""
 | 
					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/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/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/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
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/wizard/send_email_ui.py:107
 | 
				
			||||||
msgid "Form"
 | 
					msgid "Form"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@ -2773,7 +2772,7 @@ msgid "RB Output"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/convert/regex_builder.py:77
 | 
					#: /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"
 | 
					msgid "Choose the format to view"
 | 
				
			||||||
msgstr ""
 | 
					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:85
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/book_info.py:86
 | 
					#: /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: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
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/status.py:92
 | 
				
			||||||
msgid "Path"
 | 
					msgid "Path"
 | 
				
			||||||
msgstr ""
 | 
					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:475
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:819
 | 
					#: /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: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
 | 
					#: /home/kovid/work/calibre/src/calibre/utils/ipc/job.py:53
 | 
				
			||||||
msgid "Error"
 | 
					msgid "Error"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
@ -3451,7 +3450,7 @@ msgid "Access log:"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/config/__init__.py:674
 | 
					#: /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"
 | 
					msgid "Failed to start content server"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4037,7 +4036,7 @@ msgid "Choose formats for "
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/metadata_single.py:136
 | 
					#: /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"
 | 
					msgid "Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4456,7 +4455,7 @@ msgid "Send test mail from %s to:"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/dialogs/test_email_ui.py:52
 | 
					#: /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"
 | 
					msgid "&Test"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4632,7 +4631,7 @@ msgstr ""
 | 
				
			|||||||
msgid "Recipe source code (python)"
 | 
					msgid "Recipe source code (python)"
 | 
				
			||||||
msgstr ""
 | 
					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 ""
 | 
					msgid ""
 | 
				
			||||||
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
 | 
					"<!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"
 | 
					"<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>"
 | 
					"<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 ""
 | 
					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"
 | 
					msgid "Regular &expression"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "File &name:"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Test"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "Title:"
 | 
				
			||||||
msgstr ""
 | 
					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>)"
 | 
					msgid "Regular expression (?P<title>)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:110
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:120
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:113
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:123
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:116
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:126
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:119
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:129
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/filename_pattern_ui.py:122
 | 
					#: /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:78
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:82
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:87
 | 
				
			||||||
@ -4676,35 +4675,35 @@ msgstr ""
 | 
				
			|||||||
msgid "No match"
 | 
					msgid "No match"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "Authors:"
 | 
				
			||||||
msgstr ""
 | 
					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>)"
 | 
					msgid "Regular expression (?P<author>)"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "Series:"
 | 
				
			||||||
msgstr ""
 | 
					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>)"
 | 
					msgid "Regular expression (?P<series>)"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "Series index:"
 | 
				
			||||||
msgstr ""
 | 
					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>)"
 | 
					msgid "Regular expression (?P<series_index>)"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "ISBN:"
 | 
				
			||||||
msgstr ""
 | 
					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>)"
 | 
					msgid "Regular expression (?P<isbn>)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4760,12 +4759,12 @@ msgid " - Jobs"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:161
 | 
					#: /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)"
 | 
					msgid "Size (MB)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:162
 | 
					#: /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"
 | 
					msgid "Date"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4779,7 +4778,7 @@ msgstr ""
 | 
				
			|||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts.py:46
 | 
					#: /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:72
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/shortcuts_ui.py:77
 | 
					#: /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"
 | 
					msgid "None"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -4787,19 +4786,19 @@ msgstr ""
 | 
				
			|||||||
msgid "Book <font face=\"serif\">%s</font> of %s."
 | 
					msgid "Book <font face=\"serif\">%s</font> of %s."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:835
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/library.py:838
 | 
				
			||||||
msgid "Not allowed"
 | 
					msgid "Not allowed"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Dropping onto a device is not supported. First add the book to the calibre library."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1007
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/library.py:1010
 | 
				
			||||||
msgid "Format"
 | 
					msgid "Format"
 | 
				
			||||||
msgstr ""
 | 
					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>"
 | 
					msgid "Double click to <b>edit</b> me<br><br>"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5284,7 +5283,7 @@ msgid "Save to disk in a single directory"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:306
 | 
					#: /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"
 | 
					msgid "Save only %s format to disk"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -5319,31 +5318,31 @@ msgid "Calibre Library"
 | 
				
			|||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:464
 | 
					#: /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."
 | 
					msgid "Choose a location for your ebook library."
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Browse by covers"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:773
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:778
 | 
				
			||||||
msgid "Device: "
 | 
					msgid "Device: "
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:775
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:780
 | 
				
			||||||
msgid " detected."
 | 
					msgid " detected."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:798
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:804
 | 
				
			||||||
msgid "Connected "
 | 
					msgid "Connected "
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Device database corrupted"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:811
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:817
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"\n"
 | 
					"\n"
 | 
				
			||||||
"                <p>The database of books on the reader is corrupted. Try the following:\n"
 | 
					"                <p>The database of books on the reader is corrupted. Try the following:\n"
 | 
				
			||||||
@ -5354,260 +5353,264 @@ msgid ""
 | 
				
			|||||||
"                "
 | 
					"                "
 | 
				
			||||||
msgstr ""
 | 
					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?"
 | 
					msgid "How many empty books?"
 | 
				
			||||||
msgstr ""
 | 
					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?"
 | 
					msgid "How many empty books should be added?"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:917
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:923
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:960
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:970
 | 
				
			||||||
msgid "Uploading books to device."
 | 
					msgid "Uploading books to device."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:926
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931
 | 
				
			||||||
msgid "EPUB Books"
 | 
					msgid "EPUB Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:927
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:932
 | 
				
			||||||
msgid "LRF Books"
 | 
					msgid "LRF Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:928
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:933
 | 
				
			||||||
msgid "HTML Books"
 | 
					msgid "HTML Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:929
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:934
 | 
				
			||||||
msgid "LIT Books"
 | 
					msgid "LIT Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:930
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:935
 | 
				
			||||||
msgid "MOBI Books"
 | 
					msgid "MOBI Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:931
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:936
 | 
				
			||||||
msgid "Text books"
 | 
					msgid "Text books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:932
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:937
 | 
				
			||||||
msgid "PDF Books"
 | 
					msgid "PDF Books"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:933
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:938
 | 
				
			||||||
msgid "Comics"
 | 
					msgid "Comics"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:934
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:939
 | 
				
			||||||
msgid "Archives"
 | 
					msgid "Archives"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Failed to read metadata"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Failed to read metadata from the following"
 | 
				
			||||||
msgstr ""
 | 
					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?"
 | 
					msgid "The selected books will be <b>permanently deleted</b> and the files removed from your computer. Are you sure?"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Deleting books from device."
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Cannot download metadata"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1048
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1058
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1105
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1115
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1138
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1148
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1163
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1173
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1276
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1286
 | 
				
			||||||
msgid "No books selected"
 | 
					msgid "No books selected"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1063
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1073
 | 
				
			||||||
msgid "social metadata"
 | 
					msgid "social metadata"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
 | 
				
			||||||
msgid "covers"
 | 
					msgid "covers"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1065
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1075
 | 
				
			||||||
msgid "metadata"
 | 
					msgid "metadata"
 | 
				
			||||||
msgstr ""
 | 
					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)"
 | 
					msgid "Downloading %s for %d book(s)"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Failed to download some metadata"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "Failed to download metadata for the following:"
 | 
				
			||||||
msgstr ""
 | 
					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:"
 | 
					msgid "Failed to download metadata:"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1104
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1114
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1137
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1147
 | 
				
			||||||
msgid "Cannot edit metadata"
 | 
					msgid "Cannot edit metadata"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Cannot save to disk"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Choose destination directory"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Error while saving"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "There was an error while saving."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1200
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1210
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1201
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1211
 | 
				
			||||||
msgid "Could not save some books"
 | 
					msgid "Could not save some books"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Click the show details button to see which ones."
 | 
				
			||||||
msgstr ""
 | 
					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 "
 | 
					msgid "Fetching news from "
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1235
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1245
 | 
				
			||||||
msgid " fetched."
 | 
					msgid " fetched."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1275
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1285
 | 
				
			||||||
msgid "Cannot convert"
 | 
					msgid "Cannot convert"
 | 
				
			||||||
msgstr ""
 | 
					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)"
 | 
					msgid "Starting conversion of %d book(s)"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1434
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1444
 | 
				
			||||||
msgid "No book selected"
 | 
					msgid "No book selected"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1415
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1425
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1465
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1481
 | 
				
			||||||
msgid "Cannot view"
 | 
					msgid "Cannot view"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Cannot open folder"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Multiple Books Selected"
 | 
				
			||||||
msgstr ""
 | 
					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?"
 | 
					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 ""
 | 
					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."
 | 
					msgid "%s has no available formats."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1507
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1523
 | 
				
			||||||
msgid "Cannot configure"
 | 
					msgid "Cannot configure"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Cannot configure while there are running jobs."
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "No detailed info available"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "No detailed information is available for books on the device."
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Error talking to device"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "There was a temporary error talking to the device. Please unplug and reconnect the device and or reboot."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1628
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1644
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1646
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1662
 | 
				
			||||||
msgid "Conversion Error"
 | 
					msgid "Conversion Error"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					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 ""
 | 
					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>"
 | 
					msgid "<b>Failed</b>"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "Invalid library location"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Could not access %s. Using %s as the library."
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					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 ""
 | 
					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?"
 | 
					msgid "There are active jobs. Are you sure you want to quit?"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1752
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1768
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
" is communicating with the device!<br>\n"
 | 
					" is communicating with the device!<br>\n"
 | 
				
			||||||
"                      Quitting may cause corruption on the device.<br>\n"
 | 
					"                      Quitting may cause corruption on the device.<br>\n"
 | 
				
			||||||
"                      Are you sure you want to quit?"
 | 
					"                      Are you sure you want to quit?"
 | 
				
			||||||
msgstr ""
 | 
					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"
 | 
					msgid "WARNING: Active jobs"
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "will keep running in the system tray. To close it, choose <b>Quit</b> in the context menu of the system tray."
 | 
				
			||||||
msgstr ""
 | 
					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>"
 | 
					msgid "<span style=\"color:red; font-weight:bold\">Latest version: <a href=\"%s\">%s</a></span>"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1835
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/ui.py:1851
 | 
				
			||||||
msgid "Update available"
 | 
					msgid "Update available"
 | 
				
			||||||
msgstr ""
 | 
					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?"
 | 
					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 ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -6042,23 +6045,23 @@ msgstr ""
 | 
				
			|||||||
msgid "Click to see the books on storage card B in your reader"
 | 
					msgid "Click to see the books on storage card B in your reader"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:496
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:500
 | 
				
			||||||
msgid "Change Case"
 | 
					msgid "Change Case"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:497
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:501
 | 
				
			||||||
msgid "Upper Case"
 | 
					msgid "Upper Case"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:498
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:502
 | 
				
			||||||
msgid "Lower Case"
 | 
					msgid "Lower Case"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:499
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:503
 | 
				
			||||||
msgid "Swap Case"
 | 
					msgid "Swap Case"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:500
 | 
					#: /home/kovid/work/calibre/src/calibre/gui2/widgets.py:504
 | 
				
			||||||
msgid "Title Case"
 | 
					msgid "Title Case"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -6643,16 +6646,16 @@ msgid ""
 | 
				
			|||||||
"Start the calibre content server."
 | 
					"Start the calibre content server."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:49
 | 
					#: /home/kovid/work/calibre/src/calibre/utils/config.py:48
 | 
				
			||||||
msgid ""
 | 
					msgid ""
 | 
				
			||||||
"%sUsage%s: %s\n"
 | 
					"%sUsage%s: %s\n"
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#: /home/kovid/work/calibre/src/calibre/utils/config.py:93
 | 
					#: /home/kovid/work/calibre/src/calibre/utils/config.py:92
 | 
				
			||||||
msgid "Created by "
 | 
					msgid "Created by "
 | 
				
			||||||
msgstr ""
 | 
					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."
 | 
					msgid "Whenever you pass arguments to %prog that have spaces in them, enclose the arguments in quotation marks."
 | 
				
			||||||
msgstr ""
 | 
					msgstr ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,6 @@ from copy import deepcopy
 | 
				
			|||||||
from functools import partial
 | 
					from functools import partial
 | 
				
			||||||
from optparse import OptionParser as _OptionParser
 | 
					from optparse import OptionParser as _OptionParser
 | 
				
			||||||
from optparse import IndentedHelpFormatter
 | 
					from optparse import IndentedHelpFormatter
 | 
				
			||||||
from PyQt4.QtCore import QString
 | 
					 | 
				
			||||||
from calibre.constants import terminal_controller, iswindows, isosx, \
 | 
					from calibre.constants import terminal_controller, iswindows, isosx, \
 | 
				
			||||||
                              __appname__, __version__, __author__, plugins
 | 
					                              __appname__, __version__, __author__, plugins
 | 
				
			||||||
from calibre.utils.lock import LockError, ExclusiveFile
 | 
					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 \
 | 
					        if val is val is True or val is False or val is None or \
 | 
				
			||||||
           isinstance(val, (int, float, long, basestring)):
 | 
					           isinstance(val, (int, float, long, basestring)):
 | 
				
			||||||
            return repr(val)
 | 
					            return repr(val)
 | 
				
			||||||
 | 
					        from PyQt4.QtCore import QString
 | 
				
			||||||
        if isinstance(val, QString):
 | 
					        if isinstance(val, QString):
 | 
				
			||||||
            return repr(unicode(val))
 | 
					            return repr(unicode(val))
 | 
				
			||||||
        pickle = cPickle.dumps(val, -1)
 | 
					        pickle = cPickle.dumps(val, -1)
 | 
				
			||||||
@ -722,26 +722,4 @@ def migrate():
 | 
				
			|||||||
    p.set('migrated', True)
 | 
					    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
 | 
					        return parsed_feeds
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @classmethod
 | 
					    @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
 | 
					        Convenience method to take a
 | 
				
			||||||
        `BeautifulSoup <http://www.crummy.com/software/BeautifulSoup/documentation.html>`_
 | 
					        `BeautifulSoup <http://www.crummy.com/software/BeautifulSoup/documentation.html>`_
 | 
				
			||||||
@ -1090,7 +1090,10 @@ class BasicNewsRecipe(Recipe):
 | 
				
			|||||||
                    strings.append(res)
 | 
					                    strings.append(res)
 | 
				
			||||||
                elif use_alt and item.has_key('alt'):
 | 
					                elif use_alt and item.has_key('alt'):
 | 
				
			||||||
                    strings.append(item['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
 | 
					    @classmethod
 | 
				
			||||||
    def soup(cls, raw):
 | 
					    def soup(cls, raw):
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user