Exemplo n.º 1
0
 def activate(self, shell):
     self.db = shell.props.db
     self.shell = shell
     self.player = shell.get_player()
     self.prefs = RhythmwebPrefs()
     self.prefs_dialog = RhythmwebPrefsDialog(self)
     self.server = RhythmwebServer("", self.prefs["port"].get(), self)
     self._mdns_publish()
Exemplo n.º 2
0
class RhythmwebPlugin(rb.Plugin):
    def __init__(self):
        super(RhythmwebPlugin, self).__init__()

    def activate(self, shell):
        self.db = shell.props.db
        self.shell = shell
        self.player = shell.get_player()
        self.prefs = RhythmwebPrefs()
        self.prefs_dialog = RhythmwebPrefsDialog(self)
        self.server = RhythmwebServer("", self.prefs["port"].get(), self)
        self._mdns_publish()

    def deactivate(self, shell):
        self._mdns_withdraw()
        self.server.shutdown()
        self.prefs.shutdown()
        self.prefs_dialog.shutdown()
        del self.server
        del self.prefs
        del self.prefs_dialog
        del self.player
        del self.shell
        del self.db

    def create_configure_dialog(self, dialog=None):
        if not dialog:
            dialog = self.prefs_dialog.get_dialog()
        dialog.present()
        return dialog

    def _mdns_publish(self):
        if use_mdns:
            bus = dbus.SystemBus()
            avahi_bus = bus.get_object(avahi.DBUS_NAME, avahi.DBUS_PATH_SERVER)
            avahi_svr = dbus.Interface(avahi_bus, avahi.DBUS_INTERFACE_SERVER)

            servicetype = "_http._tcp"
            servicename = "Rhythmweb on %s" % (socket.gethostname())

            eg_path = avahi_svr.EntryGroupNew()
            eg_obj = bus.get_object(avahi.DBUS_NAME, eg_path)
            self.entrygroup = dbus.Interface(eg_obj, avahi.DBUS_INTERFACE_ENTRY_GROUP)
            self.entrygroup.AddService(
                avahi.IF_UNSPEC,
                avahi.PROTO_UNSPEC,
                0,
                servicename,
                servicetype,
                "",
                "",
                dbus.UInt16(self.prefs["port"].get()),
                (),
            )
            self.entrygroup.Commit()

    def _mdns_withdraw(self):
        if use_mdns and self.entrygroup != None:
            self.entrygroup.Reset()
            self.entrygroup.Free()
            self.entrygroup = None