Advertise HTTP with Avahi
This commit is contained in:
parent
c4281339b6
commit
697bff81cd
@ -21,6 +21,8 @@ class Extension(ext.Extension):
|
||||
schema['hostname'] = config.Hostname()
|
||||
schema['port'] = config.Port()
|
||||
schema['static_dir'] = config.Path(optional=True)
|
||||
schema['zeroconf_enabled'] = config.Boolean()
|
||||
schema['zeroconf_name'] = config.String()
|
||||
return schema
|
||||
|
||||
def validate_environment(self):
|
||||
|
||||
@ -28,10 +28,13 @@ class HttpFrontend(pykka.ThreadingActor, CoreListener):
|
||||
self._setup_logging(app)
|
||||
|
||||
def _setup_server(self):
|
||||
self.config_section = self.config['http']
|
||||
self.hostname = self.config_section['hostname']
|
||||
self.port = self.config_section['port']
|
||||
cherrypy.config.update({
|
||||
'engine.autoreload_on': False,
|
||||
'server.socket_host': self.config['http']['hostname'],
|
||||
'server.socket_port': self.config['http']['port'],
|
||||
'server.socket_host': self.hostname,
|
||||
'server.socket_port': self.port,
|
||||
})
|
||||
|
||||
def _setup_websocket_plugin(self):
|
||||
@ -87,11 +90,30 @@ class HttpFrontend(pykka.ThreadingActor, CoreListener):
|
||||
logger.debug('Starting HTTP server')
|
||||
cherrypy.engine.start()
|
||||
logger.info('HTTP server running at %s', cherrypy.server.base())
|
||||
try:
|
||||
if self.config_section['zeroconf_enabled']:
|
||||
name = self.config_section['zeroconf_name']
|
||||
|
||||
from mopidy.utils.zeroconf import Zeroconf
|
||||
self.service = Zeroconf(
|
||||
stype="_http._tcp",
|
||||
name=name, port=self.port, host=self.hostname,
|
||||
text=["path=/"])
|
||||
self.service.publish()
|
||||
|
||||
logger.info('Registered with Avahi as %s', name)
|
||||
except Exception as e:
|
||||
logger.warning('Avahi registration failed (%s)', e)
|
||||
|
||||
def on_stop(self):
|
||||
logger.debug('Stopping HTTP server')
|
||||
cherrypy.engine.exit()
|
||||
logger.info('Stopped HTTP server')
|
||||
try:
|
||||
if self.service:
|
||||
self.service.unpublish()
|
||||
except Exception as e:
|
||||
logger.warning('Avahi unregistration failed (%s)', e)
|
||||
|
||||
def on_event(self, name, **data):
|
||||
event = data
|
||||
|
||||
@ -3,6 +3,8 @@ enabled = true
|
||||
hostname = 127.0.0.1
|
||||
port = 6680
|
||||
static_dir =
|
||||
zeroconf_enabled = true
|
||||
zeroconf_name = Mopidy
|
||||
|
||||
[loglevels]
|
||||
cherrypy = warning
|
||||
|
||||
@ -17,7 +17,7 @@ class MpdFrontend(pykka.ThreadingActor, CoreListener):
|
||||
super(MpdFrontend, self).__init__()
|
||||
hostname = network.format_hostname(config['mpd']['hostname'])
|
||||
port = config['mpd']['port']
|
||||
self.config = config
|
||||
self.config_section = config['mpd']
|
||||
self.hostname = hostname
|
||||
self.port = port
|
||||
|
||||
@ -41,8 +41,8 @@ class MpdFrontend(pykka.ThreadingActor, CoreListener):
|
||||
|
||||
def on_start(self):
|
||||
try:
|
||||
if self.config['mpd']['zeroconf_enabled']:
|
||||
name = self.config['mpd']['zeroconf_name']
|
||||
if self.config_section['zeroconf_enabled']:
|
||||
name = self.config_section['zeroconf_name']
|
||||
|
||||
from mopidy.utils.zeroconf import Zeroconf
|
||||
self.service = Zeroconf(
|
||||
|
||||
@ -6,4 +6,4 @@ password =
|
||||
max_connections = 20
|
||||
connection_timeout = 60
|
||||
zeroconf_enabled = true
|
||||
zeroconf_name = Mopidy
|
||||
zeroconf_name = Mopidy (MPD)
|
||||
|
||||
@ -14,7 +14,7 @@ class Zeroconf:
|
||||
"""
|
||||
|
||||
def __init__(self, name, port, stype="_http._tcp",
|
||||
domain="", host="", text=""):
|
||||
domain="", host="", text=[]):
|
||||
self.name = name
|
||||
self.stype = stype
|
||||
self.domain = domain
|
||||
@ -39,6 +39,9 @@ class Zeroconf:
|
||||
server.EntryGroupNew()),
|
||||
"org.freedesktop.Avahi.EntryGroup")
|
||||
|
||||
if self.text:
|
||||
self.text = [[dbus.Byte(ord(c)) for c in s] for s in self.text]
|
||||
|
||||
g.AddService(avahi_IF_UNSPEC, avahi_PROTO_UNSPEC,
|
||||
dbus.UInt32(avahi_PublishFlags_None),
|
||||
self.name, self.stype, self.domain, self.host,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user