Review: Needs Fixing Please see inline comments.
Diff comments: > === added file 'openlp/core/api/zeroconf.py' > --- openlp/core/api/zeroconf.py 1970-01-01 00:00:00 +0000 > +++ openlp/core/api/zeroconf.py 2019-07-01 22:53:54 +0000 > @@ -0,0 +1,101 @@ > +# -*- coding: utf-8 -*- > +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 > softtabstop=4 > + > +########################################################################## > +# OpenLP - Open Source Lyrics Projection # > +# ---------------------------------------------------------------------- # > +# Copyright (c) 2008-2019 OpenLP Developers # > +# ---------------------------------------------------------------------- # > +# This program is free software: you can redistribute it and/or modify # > +# it under the terms of the GNU General Public License as published by # > +# the Free Software Foundation, either version 3 of the License, or # > +# (at your option) any later version. # > +# # > +# This program is distributed in the hope that it will be useful, # > +# but WITHOUT ANY WARRANTY; without even the implied warranty of # > +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # > +# GNU General Public License for more details. # > +# # > +# You should have received a copy of the GNU General Public License # > +# along with this program. If not, see <https://www.gnu.org/licenses/>. # > +########################################################################## > +""" > +The :mod:`~openlp.core.api.zeroconf` module runs a Zerconf server so that > OpenLP can advertise the > +RESTful API for devices on the network to discover. > +""" > +import socket > +from time import sleep > + > +from zeroconf import ServiceInfo, Zeroconf > + > +from openlp.core.common import get_local_ip4 > +from openlp.core.common.registry import Registry > +from openlp.core.common.settings import Settings > +from openlp.core.threading import ThreadWorker, run_thread > + > + > +class ZeroconfWorker(ThreadWorker): > + """ > + This thread worker runs a Zeroconf service > + """ > + address = None > + http_port = 4316 > + ws_port = 4317 > + _can_run = False > + > + def __init__(self, ip_address, http_port=4316, ws_port=4317): > + """ > + Create the worker for the Zeroconf service > + """ > + super().__init__() > + self.address = socket.inet_aton(ip_address) > + self.http_port = http_port > + self.ws_port = ws_port > + > + def can_run(self): > + """ > + Check if the worker can continue to run. This is mostly so that we > can override this method > + and test the class. > + """ > + return self._can_run > + > + def start(self): > + """ > + Start the service > + """ > + http_info = ServiceInfo('_http._tcp.local.', > 'OpenLP._http._tcp.local.', > + address=self.address, port=self.http_port, > properties={}) > + ws_info = ServiceInfo('_ws._tcp.local.', 'OpenLP._ws._tcp.local.', > + address=self.address, port=self.ws_port, > properties={}) > + zc = Zeroconf() > + zc.register_service(http_info) > + zc.register_service(ws_info) > + self._can_run = True > + while self.can_run(): > + sleep(0.1) > + zc.unregister_service(http_info) > + zc.unregister_service(ws_info) > + zc.close() > + > + def stop(self): > + """ > + Stop the service > + """ > + self._can_run = False > + > + > +def start_zeroconf(): > + """ > + Start the Zeroconf service > + """ > + # When we're running tests, just skip this set up if this flag is set > + if Registry().get_flag('no_web_server'): > + return > + ifaces = get_local_ip4() > + for key in iter(ifaces): > + address = ifaces.get(key)['ip'] > + break So if you have active connections on both LAN and WLAN (or other multiple connections scenarios), only the first is used? Why not start a worker per active connection? > + http_port = Settings().value('api/port') > + ws_port = Settings().value('api/websocket port') > + worker = ZeroconfWorker(address, http_port, ws_port) > + run_thread(worker, 'api_zeroconf') > > === modified file 'scripts/check_dependencies.py' > --- scripts/check_dependencies.py 2019-06-11 05:01:02 +0000 > +++ scripts/check_dependencies.py 2019-07-01 22:53:54 +0000 > @@ -90,7 +90,8 @@ > 'requests', > 'qtawesome', > 'pymediainfo', > - 'vlc' > + 'vlc', > + 'zeroconf' > ] Please also add install of zeroconf to appveyor.yml > > -- https://code.launchpad.net/~raoul-snyman/openlp/zeroconf/+merge/369554 Your team OpenLP Core is subscribed to branch lp:openlp. _______________________________________________ Mailing list: https://launchpad.net/~openlp-core Post to : [email protected] Unsubscribe : https://launchpad.net/~openlp-core More help : https://help.launchpad.net/ListHelp

