diff --git a/src/calibre/gui2/actions/device.py b/src/calibre/gui2/actions/device.py index f0cb487eaf..da4117c913 100644 --- a/src/calibre/gui2/actions/device.py +++ b/src/calibre/gui2/actions/device.py @@ -224,7 +224,7 @@ class ConnectShareAction(InterfaceAction): if self.gui.content_server is None: self.gui.start_content_server() else: - self.gui.content_server.threaded_exit() + self.gui.content_server.stop() self.stopping_msg = info_dialog(self.gui, _('Stopping'), _('Stopping server, this could take up to a minute, please wait...'), show_copy_button=False) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index cb7f277cf7..ea3c561d02 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -470,15 +470,14 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ self.iactions['Connect Share'].set_smartdevice_action_state() def start_content_server(self, check_started=True): - from calibre.library.server.main import start_threaded_server - from calibre.library.server import server_config - self.content_server = start_threaded_server( - self.library_view.model().db, server_config().parse()) + from calibre.srv.embedded import Server + self.content_server = Server(self.library_broker) self.content_server.state_callback = Dispatcher( self.iactions['Connect Share'].content_server_state_changed) if check_started: self.content_server.start_failure_callback = \ Dispatcher(self.content_server_start_failed) + self.content_server.start() def content_server_start_failed(self, msg): error_dialog(self, _('Failed to start Content server'), diff --git a/src/calibre/srv/embedded.py b/src/calibre/srv/embedded.py index 986ce68e3a..d120f0e6c3 100644 --- a/src/calibre/srv/embedded.py +++ b/src/calibre/srv/embedded.py @@ -13,6 +13,7 @@ from calibre.srv.handler import Handler from calibre.srv.http_response import create_http_handler from calibre.srv.loop import ServerLoop from calibre.srv.utils import RotatingLog +from calibre.srv.opts import server_config def log_paths(): @@ -26,12 +27,13 @@ class Server(object): loop = current_thread = exception = None state_callback = start_failure_callback = None - def __init__(self, opts): + def __init__(self, library_broker): + opts = server_config() lp, lap = log_paths() log_size = opts.max_log_size * 1024 * 1024 log = RotatingLog(lp, max_size=log_size) access_log = RotatingLog(lap, max_size=log_size) - self.handler = Handler(libraries, opts) + self.handler = Handler(library_broker, opts) plugins = self.plugins = [] if opts.use_bonjour: plugins.append(BonJour()) @@ -70,6 +72,7 @@ class Server(object): t.start() def serve_forever(self): + self.exception = None if self.state_callback is not None: try: self.state_callback(True) diff --git a/src/calibre/srv/handler.py b/src/calibre/srv/handler.py index b451b5ab6e..2b403a36da 100644 --- a/src/calibre/srv/handler.py +++ b/src/calibre/srv/handler.py @@ -27,7 +27,7 @@ class Context(object): def __init__(self, libraries, opts, testing=False): self.opts = opts - self.library_broker = LibraryBroker(libraries) + self.library_broker = libraries if isinstance(libraries, LibraryBroker) else LibraryBroker(libraries) self.testing = testing self.lock = Lock() self.user_manager = UserManager(opts.userdb)