%PDF- %PDF-
Direktori : /lib/calibre/calibre/srv/ |
Current File : //lib/calibre/calibre/srv/bonjour.py |
#!/usr/bin/env python3 __license__ = 'GPL v3' __copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>' from threading import Event class BonJour: # {{{ def __init__(self, name='Books in calibre', service_type='_calibre._tcp', path='/opds', add_hostname=True, wait_for_stop=True): self.service_name = name self.wait_for_stop = wait_for_stop self.service_type = service_type self.add_hostname = add_hostname self.path = path self.shutdown = Event() self.stop = self.shutdown.set self.started = Event() self.stopped = Event() self.services = [] def start(self, loop): from calibre.utils.mdns import publish, unpublish, get_external_ip, verify_ipV4_address ip_address, port = loop.bound_address[:2] self.zeroconf_ip_address = zipa = verify_ipV4_address(ip_address) or get_external_ip() prefix = loop.opts.url_prefix or '' mdns_services = ( (self.service_name, self.service_type, port, {'path':prefix + self.path}), ) if self.shutdown.is_set(): return self.services = [] for s in mdns_services: self.services.append(publish(*s, use_ip_address=zipa, add_hostname=self.add_hostname)) loop.log(f'OPDS feeds advertised via BonJour at: {zipa} port: {port}') self.advertised_port = port self.started.set() self.shutdown.wait() for s in mdns_services: unpublish(*s, add_hostname=self.add_hostname, wait_for_stop=self.wait_for_stop) self.stopped.set() # }}}