Changeset - 175a1cf36796
[Not reviewed]
default
0 1 0
drewp@bigasterisk.com - 3 years ago 2022-05-13 08:11:28
drewp@bigasterisk.com
vite serves index.html now
1 file changed with 13 insertions and 16 deletions:
0 comments (0 inline, 0 general)
light9/ascoltami/webapp.py
Show inline comments
 
import json, socket, subprocess, os, logging, time
 
import json
 
import logging
 
import socket
 
import subprocess
 
import time
 
from typing import cast
 

	
 
from cyclone import template
 
from rdflib import URIRef
 
import cyclone.web, cyclone.websocket
 

	
 
import cyclone.web
 
import cyclone.websocket
 
from cycloneerr import PrettyErrorHandler
 
from light9.metrics import metricsRoute
 
from light9.namespaces import L9
 
from light9.showconfig import getSongsFromShow, songOnDisk
 
from rdflib import URIRef
 
from twisted.internet import reactor
 
from twisted.internet.interfaces import IReactorTime
 

	
 
log = logging.getLogger()
 
_songUris = {}  # locationUri : song
 
log = logging.getLogger()
 
loader = template.Loader(os.path.dirname(__file__))
 

	
 

	
 
def songLocation(graph, songUri):
 
    loc = URIRef("file://%s" % songOnDisk(songUri))
 
    _songUris[loc] = songUri
 
    return loc
 

	
 

	
 
def songUri(graph, locationUri):
 
    return _songUris[locationUri]
 

	
 

	
 
class root(PrettyErrorHandler, cyclone.web.RequestHandler):
 

	
 
    def get(self):
 
        self.set_header("Content-Type", "text/html")
 
        self.write(loader.load('index.html').generate())
 

	
 

	
 
class config(cyclone.web.RequestHandler):
 

	
 
    def get(self):
 
        self.set_header("Content-Type", "application/json")
 
        self.write(json.dumps(dict(host=socket.gethostname(), times={'intro': 4, 'post': 4})))
 

	
 

	
 
def playerSongUri(graph, player):
 
    """or None"""
 

	
 
    playingLocation = player.getSong()
 
    if playingLocation:
 
@@ -100,25 +98,25 @@ class timeStreamResource(cyclone.websock
 
        self.lastSentTime = 0.
 
        self.loop()
 

	
 
    def loop(self):
 
        now = time.time()
 
        msg = currentState(self.settings.app.graph, self.settings.app.player)
 
        if msg != self.lastSent or now > self.lastSentTime + 2:
 
            self.sendMessage(json.dumps(msg))
 
            self.lastSent = msg
 
            self.lastSentTime = now
 

	
 
        if self.transport.connected:
 
            reactor.callLater(.2, self.loop)
 
            cast(IReactorTime, reactor).callLater(.2, self.loop)
 

	
 
    def connectionLost(self, reason):
 
        log.info("bye ws client %r: %s", self, reason)
 

	
 

	
 
class songs(PrettyErrorHandler, cyclone.web.RequestHandler):
 

	
 
    def get(self):
 
        graph = self.settings.app.graph
 

	
 
        songs = getSongsFromShow(graph, self.settings.app.show)
 

	
 
@@ -182,24 +180,23 @@ class goButton(PrettyErrorHandler, cyclo
 
            player.resume()
 
        elif player.isPlaying():
 
            pass
 
        else:
 
            player.resume()
 

	
 
        self.set_header("Content-Type", "text/plain")
 
        self.write("ok")
 

	
 

	
 
def makeWebApp(app):
 
    return cyclone.web.Application(handlers=[
 
        (r"/", root),
 
        (r"/config", config),
 
        (r"/time", timeResource),
 
        (r"/time/stream", timeStreamResource),
 
        (r"/song", songResource),
 
        (r"/songs", songs),
 
        (r"/seekPlayOrPause", seekPlayOrPause),
 
        (r"/output", output),
 
        (r"/go", goButton),
 
        metricsRoute(),
 
    ],
 
                                   app=app)
0 comments (0 inline, 0 general)