#!bin/python
import logging
import optparse
import sys
from typing import cast
import gi
from light9.run_local import log
from rdflib import URIRef
from twisted.internet import reactor
from twisted.internet.interfaces import IReactorCore
gi.require_version('Gst', '1.0')
gi.require_version('Gtk', '3.0')
from gi.repository import Gst # type: ignore
from light9 import networking, showconfig
from light9.ascoltami.player import Player
from light9.ascoltami.playlist import NoSuchSong, Playlist
from light9.ascoltami.webapp import makeWebApp, songLocation, songUri
reactor = cast(IReactorCore, reactor)
class App(object):
def __init__(self, graph, show):
self.graph = graph
self.player = Player(onEOS=self.onEOS, autoStopOffset=0)
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__":
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")
parser.add_option("--twistedlog", action="store_true", help="twisted logging")
(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))
if options.twistedlog:
from twisted.python import log as twlog
twlog.startLogging(sys.stderr)
reactor.listenTCP(networking.musicPlayer.port, makeWebApp(app))
log.info("listening on %s" % networking.musicPlayer.port)
reactor.run()