view bin/ascoltami2 @ 880:e09e3d1d83d5

slightly better behavior when the graph is out of sync. add LocalSubmaster type Ignore-this: 11f7bc0ff3763685a847ded12bb02191
author drewp@bigasterisk.com
date Sat, 08 Jun 2013 01:57:30 +0000
parents 224d6cd7e1e4
children cca75951554a
line wrap: on
line source

#!bin/python
from run_local import log
from twisted.internet import gtk2reactor, reactor
import web, thread, gobject, sys, optparse, logging
from rdflib import URIRef
sys.path.append(".")
from light9.ascoltami.player import Player
from light9.ascoltami.playlist import Playlist, NoSuchSong
from light9.ascoltami.webapp import makeWebApp, songUri, songLocation
from light9 import networking, showconfig


class App:
    def __init__(self, graph, show):
        self.graph = graph
        self.player = Player(onEOS=self.onEOS)
        self.show = show
        self.playlist = Playlist.fromShow(graph, show)

    def run(self, musicPort):
        # the cherrypy server would wedge when vidref pounds on it; this
        # one seems to run
        #gtk2reactor.install(useGtk=False)
        reactor.listenTCP(musicPort, makeWebApp(self))
        log.info("listening on %s" % musicPort)
        reactor.run()

    def onEOS(self, song):
        self.player.pause()
        self.player.seek(0)

        thisSongUri = songUri(graph, URIRef(song))

        try:
            nextSong = self.playlist.nextSong(thisSongUri)
        except NoSuchSong: # we're at the end of the playlist
            return

        self.player.setSong(songLocation(graph, nextSong), play=False)

if __name__ == "__main__":
    gobject.threads_init() # this is in gtk2reactor too

    parser = optparse.OptionParser()
    parser.add_option('--show',
        help='show URI, like http://light9.bigasterisk.com/show/dance2008', default=showconfig.showUri())
    parser.add_option("-v", "--verbose", action="store_true",
                      help="logging.DEBUG")
    (options, args) = parser.parse_args()

    log.setLevel(logging.DEBUG if options.verbose else logging.INFO)

    if not options.show:
        raise ValueError("missing --show http://...")
            
    graph = showconfig.getGraph()
    app = App(graph, URIRef(options.show))
    app.run(networking.musicPlayer.port)