diff --git a/bin/subcomposer b/bin/subcomposer --- a/bin/subcomposer +++ b/bin/subcomposer @@ -39,6 +39,7 @@ from light9.namespaces import L9 from light9.rdfdb.patch import Patch from light9.observable import Observable from light9.editchoice import EditChoice, Local +from light9.subcomposer import subcomposerweb class Subcomposer(tk.Frame): @@ -235,8 +236,11 @@ def launch(opts, args, root, graph, sess if not opts.no_geometry: toplevelat("subcomposer - %s" % opts.session, root, graph, session) + sc = Subcomposer(root, graph, session) sc.pack() + + subcomposerweb.init(graph, session, sc.currentSub) tk.Label(root,text="Bindings: B1 adjust level; B2 set full; B3 instant bump", font="Helvetica -12 italic",anchor='w').pack(side='top',fill='x') diff --git a/light9/networking.py b/light9/networking.py --- a/light9/networking.py +++ b/light9/networking.py @@ -44,5 +44,6 @@ vidref = ServiceAddress(L9['vidref']) effectEval = ServiceAddress(L9['effectEval']) picamserve = ServiceAddress(L9['picamserve']) rdfdb = ServiceAddress(L9['rdfdb']) +subComposer = ServiceAddress(L9['subComposer']) patchReceiverUpdateHost = ServiceAddress(L9['patchReceiverUpdateHost']) diff --git a/light9/subcomposer/__init__.py b/light9/subcomposer/__init__.py new file mode 100644 diff --git a/light9/subcomposer/index.html b/light9/subcomposer/index.html new file mode 100644 --- /dev/null +++ b/light9/subcomposer/index.html @@ -0,0 +1,42 @@ + + + + subcomposer + + + + +
Toggle channel in current sub
+ + + + + + + + + + + + + + + + + + diff --git a/light9/subcomposer/subcomposerweb.py b/light9/subcomposer/subcomposerweb.py new file mode 100644 --- /dev/null +++ b/light9/subcomposer/subcomposerweb.py @@ -0,0 +1,29 @@ +import logging +import cyclone.web, cyclone.websocket, cyclone.httpclient +from lib.cycloneerr import PrettyErrorHandler +from light9 import networking +from rdflib import URIRef, Literal +from twisted.internet import reactor +log = logging.getLogger('web') + +def init(graph, session, currentSub): + SFH = cyclone.web.StaticFileHandler + app = cyclone.web.Application(handlers=[ + (r'/()', SFH, + {'path': 'light9/subcomposer', 'default_filename': 'index.html'}), + (r'/static/(.*)', SFH, {'path': 'static/'}), + (r'/toggle', Toggle), + ], debug=True, graph=graph, currentSub=currentSub) + reactor.listenTCP(networking.subComposer.port, app) + log.info("listening on %s" % networking.subComposer.port) + +class Toggle(PrettyErrorHandler, cyclone.web.RequestHandler): + def post(self): + chan = URIRef(self.get_argument('chan')) + log.info("toggle %r", chan) + sub = self.settings.currentSub() + + chanKey = Literal(chan.rsplit('/', 1)[1]) + old = sub.get_levels().get(chanKey, 0) + + sub.editLevel(chan, 0 if old else 1)