示例#1
0
    def do_activate(self):
        shell = self.object
        self.db = shell.props.db

        self.artcache = os.path.join(RB.user_cache_dir(), "album-art", "")
        self.art_store = RB.ExtDB(name="album-art")
        self.art_store.connect("added", self.art_added_cb)

        self.shell_player = shell.props.shell_player
        self.shell_player.connect("playing-song-changed",
                                  self.playing_song_changed_cb)
        self.shell_player.connect("playing-song-property-changed",
                                  self.playing_song_property_changed_cb)
        self.shell_player.connect("playing-changed", self.playing_changed_cb)
        self.shell_player.connect("elapsed-nano-changed",
                                  self.elapsed_nano_changed_cb)
        self.playing_song_changed_cb(self.shell_player,
                                     self.shell_player.get_playing_entry())

        self.http_server = Soup.Server()
        self.http_server.add_handler(path="/art/", callback=self.http_art_cb)
        self.http_server.add_handler(path="/icon/", callback=self.http_icon_cb)
        self.http_server.add_handler(path="/entry/current/stream",
                                     callback=self.http_track_cb)
        self.http_server.add_handler(path="/css/",
                                     callback=self.http_static_css_cb)
        self.http_server.add_handler(path="/js/",
                                     callback=self.http_static_js_cb)
        self.http_server.add_websocket_handler("/ws/player", None, None,
                                               self.player_websocket_cb)
        self.http_server.add_handler(path="/", callback=self.http_root_cb)

        self.http_listen()
def create_companion_app_webserver(application,
                                   cache,
                                   content_db_conn,
                                   middlewares=None):
    '''Create a HTTP server with companion app routes.'''
    def _on_request_aborted(server, msg, *args):
        '''Signal handler for when a request is aborted.

        We'll look at the msg here and if there is an attached cancellable
        put there by cancellability_middleware then we can cancel it now.
        '''
        del server
        del args

        cancellable = getattr(msg, 'cancellable', None)

        if cancellable is None:
            logging.debug('Message aborted without a cancellable')
            return

        cancellable.cancel()

    server = Soup.Server()
    for path, handler in create_companion_app_routes(content_db_conn).items():
        server.add_handler(
            path,
            compose_middlewares(cache_middleware(cache),
                                cancellability_middleware,
                                handle_404_middleware(path),
                                application_hold_middleware(application),
                                *(middlewares or []), handler))

    server.connect('request-aborted', _on_request_aborted)
    return server
示例#3
0
    def run(self, sessionbus=False):
        dbus.mainloop.glib.DBusGMainLoop(set_as_default=True)
        if not sessionbus:
            bus = dbus.SystemBus()
        else:
            bus = dbus.SessionBus()
        bus_name = dbus.service.BusName(DBUS_BUS_NAME, bus)
        dbus.service.Object.__init__(self, bus_name, DBUS_OBJECT_PATH)
        self._loop = GObject.MainLoop()

        # Prepare changes listener
        self.webservice = Soup.Server()
        try:
            address = Gio.InetSocketAddress.new_from_string(
                get_ip_address(self.webservice_host), self.webservice_port)
            self.webservice.listen(address, 0)
            if self.webservice_port == 0:
                listeners = self.webservice.get_listeners()
                inetsocket = listeners[0].get_local_address()
                self.webservice_port = inetsocket.get_port()
        except Exception, e:
            logging.error('Error starting webservice: %s' % e)
            sys.exit(1)
示例#4
0
 def __init__(self, ipaddr, port, ssl=False):
     self.serverObj = Soup.Server()
     self.serverObj.listen(
         Gio.InetSocketAddress.new_from_string(ipaddr, port), 0)