view bin/ascoltami2 @ 929:c20c2eea6fce

another hack to stop graphfile from thinking its own new empty file means it should delete all the statements in that context Ignore-this: 94639afbbe8d3a0abd8a06e16922394f
author Drew Perttula <drewp@bigasterisk.com>
date Tue, 11 Jun 2013 20:25:02 +0000
parents cca75951554a
children c2faa69099e6
line wrap: on
line source

#!bin/python
from run_local import log
from twisted.internet import gireactor, reactor
import web, thread, 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

import gi
gi.require_version('Gst', '1.0')
from gi.repository import GObject, Gst, Gtk

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

    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()
    Gst.init(None)

    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))
    reactor.listenTCP(networking.musicPlayer.port, makeWebApp(app))
    log.info("listening on %s" % networking.musicPlayer.port)
    reactor.run()