Example #1
0
    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')
Example #2
0
    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')
Example #3
0
    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')
Example #4
0
    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')
Example #5
0
    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")
Example #6
0
    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
Example #7
0
    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