Windows: When running on windows 8 and newer register with default programs so that users can more easily select calibre or its viewer/editor as the default program to launch ebook files. See #1422248 (calibre does not show up in win 8.1 default programs)

This commit is contained in:
Kovid Goyal 2015-02-18 19:10:38 +05:30
parent e07fc77a52
commit e962bd3e24
2 changed files with 35 additions and 7 deletions

View File

@ -41,17 +41,33 @@ def init_dbus():
threads_init()
DBusGMainLoop(set_as_default=True)
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(object):
def __enter__(self):
return self
def __exit__(self, *args):
pass
return Dummy()
def calibre(args=sys.argv):
detach_gui()
init_dbus()
from calibre.gui2.main import main
main(args)
with register_with_default_programs():
from calibre.gui2.main import main
main(args)
def ebook_viewer(args=sys.argv):
detach_gui()
init_dbus()
from calibre.gui2.viewer.main import main
main(args)
with register_with_default_programs():
from calibre.gui2.viewer.main import main
main(args)
def gui_ebook_edit(path=None, notify=None):
' For launching the editor from inside calibre '
@ -62,8 +78,9 @@ def gui_ebook_edit(path=None, notify=None):
def ebook_edit(args=sys.argv):
detach_gui()
init_dbus()
from calibre.gui2.tweak_book.main import main
main(args)
with register_with_default_programs():
from calibre.gui2.tweak_book.main import main
main(args)
def option_parser(basename):
if basename == 'calibre':

View File

@ -6,7 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import,
__license__ = 'GPL v3'
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
import os, sys
import os, sys, time
from threading import Thread
from calibre import guess_type, prints
@ -157,5 +157,16 @@ class Register(Thread):
if self.prefs.get('windows_register_default_programs', None) != __version__:
self.prefs['windows_register_default_programs'] = __version__
if DEBUG:
st = time.time()
prints('Registering with default programs...')
register()
if DEBUG:
prints('Registered with default programs in %.1f seconds' % (time.time() - st))
def __enter__(self):
return self
def __exit__(self, *args):
# Give the thread some time to finish in case the user quit the
# application very quickly
self.join(4.0)