def setup_desktop_integration(self): # {{{ try: self.info('Setting up desktop integration...') env = os.environ.copy() cc = check_call if getattr(sys, 'frozen_path', False) and 'LD_LIBRARY_PATH' in env: paths = env.get('LD_LIBRARY_PATH', '').split(os.pathsep) paths = [x for x in paths if x] npaths = [x for x in paths if x != sys.frozen_path + '/lib'] env['LD_LIBRARY_PATH'] = os.pathsep.join(npaths) cc = partial(check_call, env=env) with TemporaryDirectory() as tdir, CurrentDir(tdir), \ PreserveMIMEDefaults(): render_img('mimetypes/lrf.png', 'calibre-lrf.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-lrf.png application-lrf', shell=True) self.icon_resources.append( ('mimetypes', 'application-lrf', '128')) cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-lrf.png text-lrs', shell=True) self.icon_resources.append( ('mimetypes', 'application-lrs', '128')) render_img('mimetypes/mobi.png', 'calibre-mobi.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-mobi.png application-x-mobipocket-ebook', shell=True) self.icon_resources.append( ('mimetypes', 'application-x-mobipocket-ebook', '128')) render_img('mimetypes/tpz.png', 'calibre-tpz.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-tpz.png application-x-topaz-ebook', shell=True) self.icon_resources.append( ('mimetypes', 'application-x-topaz-ebook', '128')) render_img('mimetypes/azw2.png', 'calibre-azw2.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-azw2.png application-x-kindle-application', shell=True) self.icon_resources.append( ('mimetypes', 'application-x-kindle-application', '128')) render_img('mimetypes/azw3.png', 'calibre-azw3.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-azw3.png application-x-mobi8-ebook', shell=True) self.icon_resources.append( ('mimetypes', 'application-x-mobi8-ebook', '128')) render_img('lt.png', 'calibre-gui.png', width=256, height=256) cc('xdg-icon-resource install --noupdate --size 256 calibre-gui.png calibre-gui', shell=True) self.icon_resources.append(('apps', 'calibre-gui', '256')) render_img('viewer.png', 'calibre-viewer.png', width=256, height=256) cc('xdg-icon-resource install --size 256 calibre-viewer.png calibre-viewer', shell=True) self.icon_resources.append(('apps', 'calibre-viewer', '256')) render_img('tweak.png', 'calibre-ebook-edit.png', width=256, height=256) cc('xdg-icon-resource install --size 256 calibre-ebook-edit.png calibre-ebook-edit', shell=True) self.icon_resources.append( ('apps', 'calibre-ebook-edit', '256')) mimetypes = set([]) for x in all_input_formats(): mt = guess_type('dummy.' + x)[0] if mt and 'chemical' not in mt and 'ctc-posml' not in mt: mimetypes.add(mt) def write_mimetypes(f): f.write('MimeType=%s;\n' % ';'.join(mimetypes)) from calibre.ebooks.oeb.polish.main import SUPPORTED f = open('calibre-lrfviewer.desktop', 'wb') f.write(VIEWER) f.close() f = open('calibre-ebook-viewer.desktop', 'wb') f.write(EVIEWER) write_mimetypes(f) f = open('calibre-ebook-edit.desktop', 'wb') f.write(ETWEAK) mt = [guess_type('a.' + x.lower())[0] for x in SUPPORTED] f.write('MimeType=%s;\n' % ';'.join(mt)) f.close() f = open('calibre-gui.desktop', 'wb') f.write(GUI) write_mimetypes(f) f.close() des = ('calibre-gui.desktop', 'calibre-lrfviewer.desktop', 'calibre-ebook-viewer.desktop', 'calibre-ebook-edit.desktop') appdata = os.path.join( os.path.dirname(self.opts.staging_sharedir), 'appdata') if not os.path.exists(appdata): try: os.mkdir(appdata) except: self.warning( 'Failed to create %s not installing appdata files' % appdata) if os.path.exists(appdata) and not os.access(appdata, os.W_OK): self.warning( 'Do not have write permissions for %s not installing appdata files' % appdata) else: from calibre.utils.localization import get_all_translators translators = dict(get_all_translators()) APPDATA = get_appdata() for x in des: cmd = [ 'xdg-desktop-menu', 'install', '--noupdate', './' + x ] cc(' '.join(cmd), shell=True) self.menu_resources.append(x) ak = x.partition('.')[0] if ak in APPDATA and os.access(appdata, os.W_OK): self.appdata_resources.append( write_appdata(ak, APPDATA[ak], appdata, translators)) cc(['xdg-desktop-menu', 'forceupdate']) MIME = P('calibre-mimetypes.xml') self.mime_resources.append(MIME) cc(['xdg-mime', 'install', MIME]) except Exception: if self.opts.fatal_errors: raise self.task_failed('Setting up desktop integration failed')
def setup_desktop_integration(self): # {{{ try: self.info('Setting up desktop integration...') env = os.environ.copy() cc = check_call if getattr(sys, 'frozen_path', False) and 'LD_LIBRARY_PATH' in env: paths = env.get('LD_LIBRARY_PATH', '').split(os.pathsep) paths = [x for x in paths if x] npaths = [x for x in paths if x != sys.frozen_path + '/lib'] env['LD_LIBRARY_PATH'] = os.pathsep.join(npaths) cc = partial(check_call, env=env) with TemporaryDirectory() as tdir, CurrentDir( tdir), PreserveMIMEDefaults(): def install_single_icon(iconsrc, basename, size, context, is_last_icon=False): filename = '%s-%s.png' % (basename, size) render_img(iconsrc, filename, width=int(size), height=int(size)) cmd = [ 'xdg-icon-resource', 'install', '--noupdate', '--context', context, '--size', str(size), filename, basename ] if is_last_icon: del cmd[2] cc(cmd) self.icon_resources.append((context, basename, str(size))) def install_icons(iconsrc, basename, context, is_last_icon=False): sizes = (16, 32, 48, 64, 128, 256) for size in sizes: install_single_icon(iconsrc, basename, size, context, is_last_icon and size is sizes[-1]) icons = list( filter(None, [ x.strip() for x in '''\ mimetypes/lrf.png application-lrf mimetypes mimetypes/lrf.png text-lrs mimetypes mimetypes/mobi.png application-x-mobipocket-ebook mimetypes mimetypes/tpz.png application-x-topaz-ebook mimetypes mimetypes/azw2.png application-x-kindle-application mimetypes mimetypes/azw3.png application-x-mobi8-ebook mimetypes lt.png calibre-gui apps viewer.png calibre-viewer apps tweak.png calibre-ebook-edit apps '''.splitlines() ])) for line in icons: iconsrc, basename, context = line.split() install_icons(iconsrc, basename, context, is_last_icon=line is icons[-1]) mimetypes = set() for x in all_input_formats(): mt = guess_type('dummy.' + x)[0] if mt and 'chemical' not in mt and 'ctc-posml' not in mt: mimetypes.add(mt) mimetypes.discard('application/octet-stream') def write_mimetypes(f): polyglot_write(f)('MimeType=%s;\n' % ';'.join(mimetypes)) from calibre.ebooks.oeb.polish.main import SUPPORTED from calibre.ebooks.oeb.polish.import_book import IMPORTABLE with open('calibre-lrfviewer.desktop', 'wb') as f: polyglot_write(f)(VIEWER) with open('calibre-ebook-viewer.desktop', 'wb') as f: polyglot_write(f)(EVIEWER) write_mimetypes(f) with open('calibre-ebook-edit.desktop', 'wb') as f: polyglot_write(f)(ETWEAK) mt = { guess_type('a.' + x.lower())[0] for x in (SUPPORTED | IMPORTABLE) } - {None, 'application/octet-stream'} polyglot_write(f)('MimeType=%s;\n' % ';'.join(mt)) with open('calibre-gui.desktop', 'wb') as f: polyglot_write(f)(GUI) write_mimetypes(f) des = ('calibre-gui.desktop', 'calibre-lrfviewer.desktop', 'calibre-ebook-viewer.desktop', 'calibre-ebook-edit.desktop') appdata = os.path.join( os.path.dirname(self.opts.staging_sharedir), 'metainfo') if not os.path.exists(appdata): try: os.mkdir(appdata) except: self.warning( 'Failed to create %s not installing appdata files' % appdata) if os.path.exists(appdata) and not os.access(appdata, os.W_OK): self.warning( 'Do not have write permissions for %s not installing appdata files' % appdata) else: from calibre.utils.localization import get_all_translators translators = dict(get_all_translators()) APPDATA = get_appdata() for x in des: cmd = [ 'xdg-desktop-menu', 'install', '--noupdate', './' + x ] cc(' '.join(cmd), shell=True) self.menu_resources.append(x) ak = x.partition('.')[0] if ak in APPDATA and os.access(appdata, os.W_OK): self.appdata_resources.append( write_appdata(ak, APPDATA[ak], appdata, translators)) cc(['xdg-desktop-menu', 'forceupdate']) MIME = P('calibre-mimetypes.xml') self.mime_resources.append(MIME) cc(['xdg-mime', 'install', MIME]) except Exception: if self.opts.fatal_errors: raise self.task_failed('Setting up desktop integration failed')
def setup_desktop_integration(self): # {{{ try: self.info('Setting up desktop integration...') env = os.environ.copy() cc = check_call if getattr(sys, 'frozen_path', False) and 'LD_LIBRARY_PATH' in env: paths = env.get('LD_LIBRARY_PATH', '').split(os.pathsep) paths = [x for x in paths if x] npaths = [x for x in paths if x != sys.frozen_path+'/lib'] env['LD_LIBRARY_PATH'] = os.pathsep.join(npaths) cc = partial(check_call, env=env) with TemporaryDirectory() as tdir, CurrentDir(tdir), PreserveMIMEDefaults(): def install_single_icon(iconsrc, basename, size, context, is_last_icon=False): filename = '%s-%s.png' % (basename, size) render_img(iconsrc, filename, width=int(size), height=int(size)) cmd = ['xdg-icon-resource', 'install', '--noupdate', '--context', context, '--size', str(size), filename, basename] if is_last_icon: del cmd[2] cc(cmd) self.icon_resources.append((context, basename, str(size))) def install_icons(iconsrc, basename, context, is_last_icon=False): sizes = (16, 32, 48, 64, 128, 256) for size in sizes: install_single_icon(iconsrc, basename, size, context, is_last_icon and size is sizes[-1]) icons = filter(None, [x.strip() for x in '''\ mimetypes/lrf.png application-lrf mimetypes mimetypes/lrf.png text-lrs mimetypes mimetypes/mobi.png application-x-mobipocket-ebook mimetypes mimetypes/tpz.png application-x-topaz-ebook mimetypes mimetypes/azw2.png application-x-kindle-application mimetypes mimetypes/azw3.png application-x-mobi8-ebook mimetypes lt.png calibre-gui apps viewer.png calibre-viewer apps tweak.png calibre-ebook-edit apps '''.splitlines()]) for line in icons: iconsrc, basename, context = line.split() install_icons(iconsrc, basename, context, is_last_icon=line is icons[-1]) mimetypes = set() for x in all_input_formats(): mt = guess_type('dummy.'+x)[0] if mt and 'chemical' not in mt and 'ctc-posml' not in mt: mimetypes.add(mt) mimetypes.discard('application/octet-stream') def write_mimetypes(f): f.write('MimeType=%s;\n'%';'.join(mimetypes)) from calibre.ebooks.oeb.polish.main import SUPPORTED from calibre.ebooks.oeb.polish.import_book import IMPORTABLE f = open('calibre-lrfviewer.desktop', 'wb') f.write(VIEWER) f.close() f = open('calibre-ebook-viewer.desktop', 'wb') f.write(EVIEWER) write_mimetypes(f) f = open('calibre-ebook-edit.desktop', 'wb') f.write(ETWEAK) mt = {guess_type('a.' + x.lower())[0] for x in (SUPPORTED|IMPORTABLE)} - {None, 'application/octet-stream'} f.write('MimeType=%s;\n'%';'.join(mt)) f.close() f = open('calibre-gui.desktop', 'wb') f.write(GUI) write_mimetypes(f) f.close() des = ('calibre-gui.desktop', 'calibre-lrfviewer.desktop', 'calibre-ebook-viewer.desktop', 'calibre-ebook-edit.desktop') appdata = os.path.join(os.path.dirname(self.opts.staging_sharedir), 'metainfo') if not os.path.exists(appdata): try: os.mkdir(appdata) except: self.warning('Failed to create %s not installing appdata files' % appdata) if os.path.exists(appdata) and not os.access(appdata, os.W_OK): self.warning('Do not have write permissions for %s not installing appdata files' % appdata) else: from calibre.utils.localization import get_all_translators translators = dict(get_all_translators()) APPDATA = get_appdata() for x in des: cmd = ['xdg-desktop-menu', 'install', '--noupdate', './'+x] cc(' '.join(cmd), shell=True) self.menu_resources.append(x) ak = x.partition('.')[0] if ak in APPDATA and os.access(appdata, os.W_OK): self.appdata_resources.append(write_appdata(ak, APPDATA[ak], appdata, translators)) cc(['xdg-desktop-menu', 'forceupdate']) MIME = P('calibre-mimetypes.xml') self.mime_resources.append(MIME) cc(['xdg-mime', 'install', MIME]) except Exception: if self.opts.fatal_errors: raise self.task_failed('Setting up desktop integration failed')
def setup_desktop_integration(self): # {{{ try: self.info('Setting up desktop integration...') env = os.environ.copy() cc = check_call if getattr(sys, 'frozen_path', False) and 'LD_LIBRARY_PATH' in env: paths = env.get('LD_LIBRARY_PATH', '').split(os.pathsep) paths = [x for x in paths if x] npaths = [x for x in paths if x != sys.frozen_path+'/lib'] env['LD_LIBRARY_PATH'] = os.pathsep.join(npaths) cc = partial(check_call, env=env) with TemporaryDirectory() as tdir, CurrentDir(tdir), \ PreserveMIMEDefaults(): render_img('mimetypes/lrf.png', 'calibre-lrf.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-lrf.png application-lrf', shell=True) self.icon_resources.append(('mimetypes', 'application-lrf', '128')) cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-lrf.png text-lrs', shell=True) self.icon_resources.append(('mimetypes', 'application-lrs', '128')) render_img('mimetypes/mobi.png', 'calibre-mobi.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-mobi.png application-x-mobipocket-ebook', shell=True) self.icon_resources.append(('mimetypes', 'application-x-mobipocket-ebook', '128')) render_img('mimetypes/tpz.png', 'calibre-tpz.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-tpz.png application-x-topaz-ebook', shell=True) self.icon_resources.append(('mimetypes', 'application-x-topaz-ebook', '128')) render_img('mimetypes/azw2.png', 'calibre-azw2.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-azw2.png application-x-kindle-application', shell=True) self.icon_resources.append(('mimetypes', 'application-x-kindle-application', '128')) render_img('mimetypes/azw3.png', 'calibre-azw3.png') cc('xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-azw3.png application-x-mobi8-ebook', shell=True) self.icon_resources.append(('mimetypes', 'application-x-mobi8-ebook', '128')) render_img('lt.png', 'calibre-gui.png', width=256, height=256) cc('xdg-icon-resource install --noupdate --size 256 calibre-gui.png calibre-gui', shell=True) self.icon_resources.append(('apps', 'calibre-gui', '256')) render_img('viewer.png', 'calibre-viewer.png', width=256, height=256) cc('xdg-icon-resource install --size 256 calibre-viewer.png calibre-viewer', shell=True) self.icon_resources.append(('apps', 'calibre-viewer', '256')) render_img('tweak.png', 'calibre-ebook-edit.png', width=256, height=256) cc('xdg-icon-resource install --size 256 calibre-ebook-edit.png calibre-ebook-edit', shell=True) self.icon_resources.append(('apps', 'calibre-ebook-edit', '256')) mimetypes = set([]) for x in all_input_formats(): mt = guess_type('dummy.'+x)[0] if mt and 'chemical' not in mt and 'ctc-posml' not in mt: mimetypes.add(mt) def write_mimetypes(f): f.write('MimeType=%s;\n'%';'.join(mimetypes)) from calibre.ebooks.oeb.polish.main import SUPPORTED f = open('calibre-lrfviewer.desktop', 'wb') f.write(VIEWER) f.close() f = open('calibre-ebook-viewer.desktop', 'wb') f.write(EVIEWER) write_mimetypes(f) f = open('calibre-ebook-edit.desktop', 'wb') f.write(ETWEAK) mt = [guess_type('a.' + x.lower())[0] for x in SUPPORTED] f.write('MimeType=%s;\n'%';'.join(mt)) f.close() f = open('calibre-gui.desktop', 'wb') f.write(GUI) write_mimetypes(f) f.close() des = ('calibre-gui.desktop', 'calibre-lrfviewer.desktop', 'calibre-ebook-viewer.desktop', 'calibre-ebook-edit.desktop') appdata = os.path.join(os.path.dirname(self.opts.staging_sharedir), 'appdata') if not os.path.exists(appdata): try: os.mkdir(appdata) except: self.warning('Failed to create %s not installing appdata files' % appdata) if os.path.exists(appdata) and not os.access(appdata, os.W_OK): self.warning('Do not have write permissions for %s not installing appdata files' % appdata) else: from calibre.utils.localization import get_all_translators translators = dict(get_all_translators()) APPDATA = get_appdata() for x in des: cmd = ['xdg-desktop-menu', 'install', '--noupdate', './'+x] cc(' '.join(cmd), shell=True) self.menu_resources.append(x) ak = x.partition('.')[0] if ak in APPDATA and os.access(appdata, os.W_OK): self.appdata_resources.append(write_appdata(ak, APPDATA[ak], appdata, translators)) cc(['xdg-desktop-menu', 'forceupdate']) MIME = P('calibre-mimetypes.xml') self.mime_resources.append(MIME) cc(['xdg-mime', 'install', MIME]) except Exception: if self.opts.fatal_errors: raise self.task_failed('Setting up desktop integration failed')
def setup_desktop_integration(self): # {{{ try: self.info("Setting up desktop integration...") env = os.environ.copy() cc = check_call if getattr(sys, "frozen_path", False) and "LD_LIBRARY_PATH" in env: paths = env.get("LD_LIBRARY_PATH", "").split(os.pathsep) paths = [x for x in paths if x] npaths = [x for x in paths if x != sys.frozen_path + "/lib"] env["LD_LIBRARY_PATH"] = os.pathsep.join(npaths) cc = partial(check_call, env=env) with TemporaryDirectory() as tdir, CurrentDir(tdir), PreserveMIMEDefaults(): render_img("mimetypes/lrf.png", "calibre-lrf.png") cc( "xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-lrf.png application-lrf", shell=True, ) self.icon_resources.append(("mimetypes", "application-lrf", "128")) cc( "xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-lrf.png text-lrs", shell=True, ) self.icon_resources.append(("mimetypes", "application-lrs", "128")) render_img("mimetypes/mobi.png", "calibre-mobi.png") cc( "xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-mobi.png application-x-mobipocket-ebook", shell=True, ) self.icon_resources.append(("mimetypes", "application-x-mobipocket-ebook", "128")) render_img("mimetypes/tpz.png", "calibre-tpz.png") cc( "xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-tpz.png application-x-topaz-ebook", shell=True, ) self.icon_resources.append(("mimetypes", "application-x-topaz-ebook", "128")) render_img("mimetypes/azw2.png", "calibre-azw2.png") cc( "xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-azw2.png application-x-kindle-application", shell=True, ) self.icon_resources.append(("mimetypes", "application-x-kindle-application", "128")) render_img("mimetypes/azw3.png", "calibre-azw3.png") cc( "xdg-icon-resource install --noupdate --context mimetypes --size 128 calibre-azw3.png application-x-mobi8-ebook", shell=True, ) self.icon_resources.append(("mimetypes", "application-x-mobi8-ebook", "128")) render_img("lt.png", "calibre-gui.png", width=256, height=256) cc("xdg-icon-resource install --noupdate --size 256 calibre-gui.png calibre-gui", shell=True) self.icon_resources.append(("apps", "calibre-gui", "256")) render_img("viewer.png", "calibre-viewer.png", width=256, height=256) cc("xdg-icon-resource install --size 256 calibre-viewer.png calibre-viewer", shell=True) self.icon_resources.append(("apps", "calibre-viewer", "256")) render_img("tweak.png", "calibre-ebook-edit.png", width=256, height=256) cc("xdg-icon-resource install --size 256 calibre-ebook-edit.png calibre-ebook-edit", shell=True) self.icon_resources.append(("apps", "calibre-ebook-edit", "256")) mimetypes = set([]) for x in all_input_formats(): mt = guess_type("dummy." + x)[0] if mt and "chemical" not in mt and "ctc-posml" not in mt: mimetypes.add(mt) def write_mimetypes(f): f.write("MimeType=%s;\n" % ";".join(mimetypes)) from calibre.ebooks.oeb.polish.main import SUPPORTED f = open("calibre-lrfviewer.desktop", "wb") f.write(VIEWER) f.close() f = open("calibre-ebook-viewer.desktop", "wb") f.write(EVIEWER) write_mimetypes(f) f = open("calibre-ebook-edit.desktop", "wb") f.write(ETWEAK) mt = [guess_type("a." + x.lower())[0] for x in SUPPORTED] f.write("MimeType=%s;\n" % ";".join(mt)) f.close() f = open("calibre-gui.desktop", "wb") f.write(GUI) write_mimetypes(f) f.close() des = ( "calibre-gui.desktop", "calibre-lrfviewer.desktop", "calibre-ebook-viewer.desktop", "calibre-ebook-edit.desktop", ) appdata = os.path.join(os.path.dirname(self.opts.staging_sharedir), "appdata") if not os.path.exists(appdata): try: os.mkdir(appdata) except: self.warning("Failed to create %s not installing appdata files" % appdata) if os.path.exists(appdata) and not os.access(appdata, os.W_OK): self.warning("Do not have write permissions for %s not installing appdata files" % appdata) else: from calibre.utils.localization import get_all_translators translators = dict(get_all_translators()) APPDATA = get_appdata() for x in des: cmd = ["xdg-desktop-menu", "install", "--noupdate", "./" + x] cc(" ".join(cmd), shell=True) self.menu_resources.append(x) ak = x.partition(".")[0] if ak in APPDATA and os.access(appdata, os.W_OK): self.appdata_resources.append(write_appdata(ak, APPDATA[ak], appdata, translators)) cc(["xdg-desktop-menu", "forceupdate"]) MIME = P("calibre-mimetypes.xml") self.mime_resources.append(MIME) cc(["xdg-mime", "install", MIME]) except Exception: if self.opts.fatal_errors: raise self.task_failed("Setting up desktop integration failed")
def __init__(self, db, opts, embedded=False, show_tracebacks=True, wsgi=False): self.is_wsgi = bool(wsgi) self.opts = opts self.embedded = embedded self.state_callback = None self.start_failure_callback = None try: self.max_cover_width, self.max_cover_height = \ map(int, self.opts.max_cover.split('x')) except: self.max_cover_width = 1200 self.max_cover_height = 1600 path = P('content_server') self.build_time = fromtimestamp(os.stat(path).st_mtime) self.default_cover = open(P('content_server/m/img/default_cover.jpg'), 'rb').read() if not opts.url_prefix: opts.url_prefix = '' cherrypy.engine.bonjour.ip_address = listen_on cherrypy.engine.bonjour.port = opts.port cherrypy.engine.bonjour.prefix = opts.url_prefix self.last_lang = "en" self.all_langs = dict(get_all_translators()) cherrypy.request.hooks.attach('before_handler', self.update_lang) cherrypy.request.hooks.attach('before_handler', self.load_user) #cherrypy.request.hooks.attach('on_end_resource', self.save_session) #cherrypy.tools.authenticate = cherrypy.Tool('before_handler', self.load_user) #cherrypy.tools.session = cherrypy.Tool('on_end_resource', self.save_session) Cache.__init__(self) self.set_database(db) st = 1 if opts.develop else 1 cherrypy.config.update({ 'log.screen': opts.develop, 'engine.autoreload_on': getattr(opts, 'auto_reload', False), 'tools.log_headers.on': opts.develop, 'tools.encode.encoding': 'UTF-8', 'checker.on': opts.develop, 'request.show_tracebacks': show_tracebacks, 'server.socket_host': listen_on, 'server.socket_port': opts.port, 'server.socket_timeout': opts.timeout, # seconds 'server.thread_pool': opts.thread_pool, # number of threads 'server.shutdown_timeout': st, # minutes 'tools.sessions.on': True, #'tools.sessions.storage_type': 'ram', 'tools.sessions.timeout': 60000, # Session times out after 60 minutes 'tools.sessions.storage_type': "file", 'tools.sessions.storage_path': "/data/tmp/cherrypy/", 'SOCIAL_AUTH_USER_MODEL': 'calibre.library.server.auth.FuckUser', 'SOCIAL_AUTH_LOGIN_URL': '/auth/', 'SOCIAL_AUTH_LOGIN_REDIRECT_URL': '/', 'SOCIAL_AUTH_AUTHENTICATION_BACKENDS': ( 'social.backends.douban.DoubanOAuth', 'social.backends.douban.DoubanOAuth2', ), 'SOCIAL_AUTH_DOUBAN_OAUTH2_KEY': '052c9ac15e9870500f85d0441bc950f0', 'SOCIAL_AUTH_DOUBAN_OAUTH2_SECRET': '3b524f1487999fc6', }) cherrypy.tools.jinja2env = build_jinja2_env() if embedded or wsgi: cherrypy.config.update({ 'engine.SIGHUP': None, 'engine.SIGTERM': None, }) self.config = {} self.is_running = False self.exception = None auth_controller = None self.users_dict = {} if not wsgi: self.setup_loggers() cherrypy.engine.bonjour.subscribe() self.config['global'] = { 'tools.gzip.on': True, 'tools.gzip.mime_types': [ 'text/html', 'text/plain', 'text/xml', 'text/javascript', 'text/css' ], } if opts.username and opts.password: self.users_dict[opts.username.strip()] = opts.password.strip() auth_controller = AuthController('Your calibre library', self.users_dict) self.__dispatcher__ = DispatchController( self.opts.url_prefix, wsgi=wsgi, auth_controller=auth_controller) for x in self.__class__.__bases__: if hasattr(x, 'add_routes'): x.__init__(self) x.add_routes(self, self.__dispatcher__) root_conf = self.config.get('/', {}) root_conf['request.dispatch'] = self.__dispatcher__.dispatcher self.config['/'] = root_conf
def __init__(self, db, opts, embedded=False, show_tracebacks=True, wsgi=False): self.is_wsgi = bool(wsgi) self.opts = opts self.embedded = embedded self.state_callback = None self.start_failure_callback = None try: self.max_cover_width, self.max_cover_height = \ map(int, self.opts.max_cover.split('x')) except: self.max_cover_width = 1200 self.max_cover_height = 1600 path = P('content_server') self.build_time = fromtimestamp(os.stat(path).st_mtime) self.default_cover = open(P('content_server/m/img/default_cover.jpg'), 'rb').read() if not opts.url_prefix: opts.url_prefix = '' cherrypy.engine.bonjour.ip_address = listen_on cherrypy.engine.bonjour.port = opts.port cherrypy.engine.bonjour.prefix = opts.url_prefix self.last_lang = "en" self.all_langs = dict(get_all_translators()) cherrypy.request.hooks.attach('before_handler', self.update_lang) cherrypy.request.hooks.attach('before_handler', self.load_user) #cherrypy.request.hooks.attach('on_end_resource', self.save_session) #cherrypy.tools.authenticate = cherrypy.Tool('before_handler', self.load_user) #cherrypy.tools.session = cherrypy.Tool('on_end_resource', self.save_session) Cache.__init__(self) self.set_database(db) st = 1 if opts.develop else 1 cherrypy.config.update({ 'log.screen' : opts.develop, 'engine.autoreload_on' : getattr(opts, 'auto_reload', False), 'tools.log_headers.on' : opts.develop, 'tools.encode.encoding' : 'UTF-8', 'checker.on' : opts.develop, 'request.show_tracebacks': show_tracebacks, 'server.socket_host' : listen_on, 'server.socket_port' : opts.port, 'server.socket_timeout' : opts.timeout, # seconds 'server.thread_pool' : opts.thread_pool, # number of threads 'server.shutdown_timeout': st, # minutes 'tools.sessions.on' : True, #'tools.sessions.storage_type': 'ram', 'tools.sessions.timeout': 60000, # Session times out after 60 minutes 'tools.sessions.storage_type': "file", 'tools.sessions.storage_path': "/data/tmp/cherrypy/", 'SOCIAL_AUTH_USER_MODEL': 'calibre.library.server.auth.FuckUser', 'SOCIAL_AUTH_LOGIN_URL': '/auth/', 'SOCIAL_AUTH_LOGIN_REDIRECT_URL': '/', 'SOCIAL_AUTH_AUTHENTICATION_BACKENDS': ( 'social.backends.douban.DoubanOAuth', 'social.backends.douban.DoubanOAuth2', ), 'SOCIAL_AUTH_DOUBAN_OAUTH2_KEY': '052c9ac15e9870500f85d0441bc950f0', 'SOCIAL_AUTH_DOUBAN_OAUTH2_SECRET': '3b524f1487999fc6', }); cherrypy.tools.jinja2env = build_jinja2_env() if embedded or wsgi: cherrypy.config.update({'engine.SIGHUP' : None, 'engine.SIGTERM' : None,}) self.config = {} self.is_running = False self.exception = None auth_controller = None self.users_dict = {} if not wsgi: self.setup_loggers() cherrypy.engine.bonjour.subscribe() self.config['global'] = { 'tools.gzip.on' : True, 'tools.gzip.mime_types': ['text/html', 'text/plain', 'text/xml', 'text/javascript', 'text/css'], } if opts.username and opts.password: self.users_dict[opts.username.strip()] = opts.password.strip() auth_controller = AuthController('Your calibre library', self.users_dict) self.__dispatcher__ = DispatchController(self.opts.url_prefix, wsgi=wsgi, auth_controller=auth_controller) for x in self.__class__.__bases__: if hasattr(x, 'add_routes'): x.__init__(self) x.add_routes(self, self.__dispatcher__) root_conf = self.config.get('/', {}) root_conf['request.dispatch'] = self.__dispatcher__.dispatcher self.config['/'] = root_conf