%PDF- %PDF-
| Direktori : /lib/calibre/calibre/ |
| Current File : //lib/calibre/calibre/gui_launch.py |
#!/usr/bin/env python3
__license__ = 'GPL v3'
__copyright__ = '2014, Kovid Goyal <kovid at kovidgoyal.net>'
import os, sys
# For some reason Qt 5 crashes on some linux systems if the fork() is done
# after the Qt modules are loaded in calibre.gui2. We also cannot do a fork()
# while python is importing a module. So we use this simple launcher module to
# launch all the GUI apps, forking before Qt is loaded and not during a
# python import.
is_detached = False
def do_detach(fork=True, setsid=True, redirect=True):
global is_detached
if fork:
# Detach from the controlling process.
if os.fork() != 0:
raise SystemExit(0)
if setsid:
os.setsid()
if redirect:
from calibre_extensions.speedup import detach
detach(os.devnull)
is_detached = True
def detach_gui():
from calibre.constants import islinux, isbsd, DEBUG
if (islinux or isbsd) and not DEBUG and '--detach' in sys.argv:
do_detach()
def register_with_default_programs():
from calibre.constants import iswindows
if iswindows:
from calibre.utils.winreg.default_programs import Register
from calibre.gui2 import gprefs
return Register(gprefs)
else:
class Dummy:
def __enter__(self):
return self
def __exit__(self, *args):
pass
return Dummy()
def calibre(args=sys.argv):
from calibre.constants import DEBUG
if DEBUG:
from calibre.debug import print_basic_debug_info
print_basic_debug_info()
detach_gui()
with register_with_default_programs():
from calibre.gui2.main import main
main(args)
def ebook_viewer(args=sys.argv):
detach_gui()
with register_with_default_programs():
from calibre.gui2.viewer.main import main
main(args)
def store_dialog(args=sys.argv):
detach_gui()
from calibre.gui2.store.web_store import main
main(args)
def webengine_dialog(**kw):
detach_gui()
from calibre.debug import load_user_plugins
load_user_plugins()
import importlib
m = importlib.import_module(kw.pop('module'))
getattr(m, kw.pop('entry_func', 'main'))(**kw)
def toc_dialog(**kw):
detach_gui()
from calibre.gui2.toc.main import main
main(**kw)
def gui_ebook_edit(path=None, notify=None):
' For launching the editor from inside calibre '
from calibre.gui2.tweak_book.main import gui_main
gui_main(path, notify)
def ebook_edit(args=sys.argv):
detach_gui()
with register_with_default_programs():
from calibre.gui2.tweak_book.main import main
main(args)
def option_parser(basename):
if basename == 'calibre':
from calibre.gui2.main import option_parser
elif basename == 'ebook-viewer':
from calibre.gui2.viewer.main import option_parser
elif basename == 'ebook-edit':
from calibre.gui2.tweak_book.main import option_parser
return option_parser()