further refactoring to separate comment macro parsing from OSC
This commit is contained in:
parent
778f06d84a
commit
48290d77c2
|
@ -21,7 +21,6 @@ from CommentMacroListener import CommentMacroListener
|
|||
from OscMacroDefinitions import *
|
||||
from pythonosc import osc_message_builder
|
||||
from pythonosc import udp_client
|
||||
from time import sleep
|
||||
|
||||
|
||||
def num(string):
|
||||
|
@ -55,33 +54,9 @@ def beautify_lisp_string(in_string):
|
|||
|
||||
|
||||
class OscCommentMacroListener(CommentMacroListener):
|
||||
|
||||
def __init__(self, parser, server):
|
||||
def __init__(self, parser, servers):
|
||||
self.parser = parser
|
||||
self.server = server
|
||||
|
||||
def button_press(self, device, path, delay=0.05):
|
||||
self.send_message(device, path, 1) # button down
|
||||
sleep(delay)
|
||||
self.send_message(device, path, 0) # button up
|
||||
|
||||
def send_message(self, device, path, arg):
|
||||
if device is None:
|
||||
osc = list(self.server.values())[0]
|
||||
else:
|
||||
if (device.type.getText() != 'h'):
|
||||
print("Only Hog type devices are curently supported.")
|
||||
print("WARNIN: macro discarded!")
|
||||
return -1
|
||||
else:
|
||||
try:
|
||||
osc = self.server[device.number.value]
|
||||
except KeyError:
|
||||
print("Net# "+str(device.number.value)+" not configured.")
|
||||
print("WARNING: macro discarded!")
|
||||
return -1
|
||||
osc.send_message(path, arg)
|
||||
return 1
|
||||
self.osc = HogDevice(servers)
|
||||
|
||||
def exitDevice(self, ctx: CommentMacroParser.DeviceContext):
|
||||
if isinstance(ctx.parentCtx, CommentMacroParser.MacroContext):
|
||||
|
@ -103,7 +78,7 @@ class OscCommentMacroListener(CommentMacroListener):
|
|||
ret = -1
|
||||
name = ctx.children[0].getText()
|
||||
try:
|
||||
ret = command[name](self, ctx)
|
||||
ret = self.osc.command[name](self, ctx)
|
||||
except KeyError:
|
||||
print(name + " macro is not compatable with OSC.")
|
||||
return -1
|
||||
|
@ -144,8 +119,8 @@ class OscCommentMacroListener(CommentMacroListener):
|
|||
ctx.targets = []
|
||||
|
||||
def exitTarget(self, ctx: CommentMacroParser.TargetContext):
|
||||
ctx.target = set(ctx.targets) # no duplicates
|
||||
ctx.parentCtx.targets.extend(ctx.targets)
|
||||
ctx.target = set(ctx.targets) # no duplicates
|
||||
ctx.parentCtx.targets.extend(ctx.targets) # add to parent targets
|
||||
|
||||
def exitNodeType(self, ctx: CommentMacroParser.NodeTypeContext):
|
||||
if isinstance(ctx.parentCtx, CommentMacroParser.DeviceContext):
|
||||
|
|
|
@ -15,149 +15,175 @@ __email__ = "kevin@company235.com"
|
|||
__status__ = "Prototype"
|
||||
|
||||
|
||||
def _master_go(self, ctx):
|
||||
if ctx.number is not None:
|
||||
print("GO MASTER doesn't support goto. "
|
||||
+ "Cue number " + str(ctx.number.value) + " will be ignored.")
|
||||
from time import sleep
|
||||
|
||||
if (len(ctx.master.targets) == 0):
|
||||
print("Main GO")
|
||||
self.button_press(ctx.device, "/hog/hardware/maingo")
|
||||
|
||||
class HogDevice():
|
||||
def __init__(self, servers):
|
||||
self.servers = servers
|
||||
|
||||
def button_press(self, device, path, delay=0.05):
|
||||
self.send_message(device, path, 1) # button down
|
||||
sleep(delay)
|
||||
self.send_message(device, path, 0) # button up
|
||||
|
||||
def send_message(self, device, path, arg):
|
||||
if device is None:
|
||||
osc = list(self.servers.values())[0]
|
||||
else:
|
||||
if (device.type.getText() != 'h'):
|
||||
print("Only Hog type devices are curently supported.")
|
||||
print("WARNIN: macro discarded!")
|
||||
return -1
|
||||
else:
|
||||
try:
|
||||
osc = self.servers[device.number.value]
|
||||
except KeyError:
|
||||
print("Net# "+str(device.number.value)+" not configured.")
|
||||
print("WARNING: macro discarded!")
|
||||
return -1
|
||||
osc.send_message(path, arg)
|
||||
return 1
|
||||
else:
|
||||
for i in ctx.master.targets:
|
||||
if isinstance(i, int) is not True:
|
||||
print("GO MASTER macro targets must be intigers. "
|
||||
+ str(i) + " is not an intigers.")
|
||||
continue
|
||||
if (i < 0):
|
||||
print("Master " + str(i) + " should have been greater than 0.")
|
||||
continue
|
||||
master = str(i)
|
||||
print("GO on master " + master)
|
||||
self.button_press(ctx.device, "/hog/hardware/go/" + master)
|
||||
return 1
|
||||
|
||||
|
||||
def _master_halt(self, ctx):
|
||||
if (len(ctx.master.targets) == 0):
|
||||
print("Main HALT")
|
||||
self.button_press(ctx.device, "/hog/hardware/mainhalt")
|
||||
return 1
|
||||
else:
|
||||
for i in ctx.master.targets:
|
||||
if isinstance(i, int) is not True:
|
||||
print("GO MASTER macro targets must be intigers. "
|
||||
+ str(i) + " is not an intigers.")
|
||||
continue
|
||||
if (i < 0):
|
||||
print("Master " + str(i) + " should have been greater than 0.")
|
||||
continue
|
||||
master = str(i)
|
||||
print("HALT on master " + master)
|
||||
self.button_press(ctx.device, "/hog/hardware/pause/" + master)
|
||||
return 1
|
||||
|
||||
|
||||
def _master_fade(self, ctx):
|
||||
level = ctx.number.value
|
||||
if (level < 0 or level > 100):
|
||||
print("Level must be between 0 and 100.")
|
||||
return -1
|
||||
if (len(ctx.master.targets) == 0):
|
||||
print("MASTER FADE doesn't support unspecified current master.")
|
||||
return -1
|
||||
else:
|
||||
for i in ctx.master.targets:
|
||||
if isinstance(i, int) is not True:
|
||||
print("FADE MASTER macro targets must be intigers. "
|
||||
+ str(i) + " is not an intigers.")
|
||||
continue
|
||||
if (i < 0):
|
||||
print("Master " + str(i) + " should have been greater than 0.")
|
||||
continue
|
||||
master = str(i)
|
||||
print("Fade Master "+master+" to "+str(level)+"%")
|
||||
level *= 255 / 100 # percent in Macro, 0>255 in OSC
|
||||
self.send_message(ctx.device, "/hog/hardware/fader/"+master, level)
|
||||
return 1
|
||||
|
||||
|
||||
def _master_fade_grand(self, ctx):
|
||||
level = ctx.number.value
|
||||
if (level < 0 or level > 100):
|
||||
print("Level must be between 0 and 100.")
|
||||
return -1
|
||||
print("Fading Grand Master to " + str(level) + "%")
|
||||
level *= 255 / 100 # percent in Macro, 0>255 in OSC
|
||||
self.send_message(ctx.device, "/hog/hardware/fader/0", level)
|
||||
return 1
|
||||
|
||||
|
||||
def _master_choose(self, ctx):
|
||||
if (ctx.number.value < 0):
|
||||
print("Master must be greater than 0.")
|
||||
return -1
|
||||
master = str(ctx.number.value)
|
||||
print("Choose Master " + master)
|
||||
self.button_press(ctx.device, "/hog/hardware/choose/" + master)
|
||||
return 1
|
||||
|
||||
|
||||
def _list_go(self, ctx):
|
||||
for i in ctx.targets:
|
||||
list = str(i)
|
||||
def _master_go(self, ctx):
|
||||
if ctx.number is not None:
|
||||
list += "." + str(ctx.number.value)
|
||||
print("Go on List " + list)
|
||||
self.send_message(ctx.device, "/hog/playback/go/0", list)
|
||||
return 1
|
||||
print("GO MASTER doesn't support goto. "
|
||||
+ "Cue number "+str(ctx.number.value)+" will be ignored.")
|
||||
|
||||
if (len(ctx.master.targets) == 0):
|
||||
print("Main GO")
|
||||
self.osc.button_press(ctx.device, "/hog/hardware/maingo")
|
||||
return 1
|
||||
else:
|
||||
for i in ctx.master.targets:
|
||||
if isinstance(i, int) is not True:
|
||||
print("GO MASTER macro targets must be intigers. "
|
||||
+ str(i) + " is not an intigers.")
|
||||
continue
|
||||
if (i < 0):
|
||||
print("Master "+str(i)+" should have been greater than 0.")
|
||||
continue
|
||||
master = str(i)
|
||||
print("GO on master " + master)
|
||||
self.osc.button_press(ctx.device, "/hog/hardware/go/" + master)
|
||||
return 1
|
||||
|
||||
def _list_halt(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Halting List " + str(i))
|
||||
self.send_message(ctx.device, "/hog/playback/halt/0", i)
|
||||
return 1
|
||||
def _master_halt(self, ctx):
|
||||
if (len(ctx.master.targets) == 0):
|
||||
print("Main HALT")
|
||||
self.osc.button_press(ctx.device, "/hog/hardware/mainhalt")
|
||||
return 1
|
||||
else:
|
||||
for i in ctx.master.targets:
|
||||
if isinstance(i, int) is not True:
|
||||
print("GO MASTER macro targets must be intigers. "
|
||||
+ str(i) + " is not an intigers.")
|
||||
continue
|
||||
if (i < 0):
|
||||
print("Master "+str(i)+" should have been greater than 0.")
|
||||
continue
|
||||
master = str(i)
|
||||
print("HALT on master " + master)
|
||||
self.osc.button_press(ctx.device,
|
||||
"/hog/hardware/pause/" + master)
|
||||
return 1
|
||||
|
||||
def _master_fade(self, ctx):
|
||||
if (ctx.number) is None:
|
||||
print("ERROR: Missing required argument for LEVEL")
|
||||
return -1
|
||||
else:
|
||||
level = ctx.number.value
|
||||
if (level < 0 or level > 100):
|
||||
print("Level must be between 0 and 100.")
|
||||
return -1
|
||||
if (len(ctx.master.targets) == 0):
|
||||
print("MASTER FADE doesn't support unspecified current master.")
|
||||
return -1
|
||||
else:
|
||||
for i in ctx.master.targets:
|
||||
if isinstance(i, int) is not True:
|
||||
print("FADE MASTER macro targets must be intigers. "
|
||||
+ str(i) + " is not an intigers.")
|
||||
continue
|
||||
if (i < 0):
|
||||
print("Master "+str(i)+" should have been greater than 0.")
|
||||
continue
|
||||
master = str(i)
|
||||
print("Fade Master "+master+" to "+str(level)+"%")
|
||||
level *= 255 / 100 # percent in Macro, 0>255 in OSC
|
||||
self.osc.send_message(ctx.device,
|
||||
"/hog/hardware/fader/" + master,
|
||||
level)
|
||||
return 1
|
||||
|
||||
def _list_release(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Releasing List " + str(i))
|
||||
self.send_message(ctx.device, "/hog/playback/release/0", i)
|
||||
return 1
|
||||
def _master_fade_grand(self, ctx):
|
||||
level = ctx.number.value
|
||||
if (level < 0 or level > 100):
|
||||
print("Level must be between 0 and 100.")
|
||||
return -1
|
||||
print("Fading Grand Master to " + str(level) + "%")
|
||||
level *= 255 / 100 # percent in Macro, 0>255 in OSC
|
||||
self.osc.send_message(ctx.device, "/hog/hardware/fader/0", level)
|
||||
return 1
|
||||
|
||||
def _master_choose(self, ctx):
|
||||
if (ctx.number.value < 0):
|
||||
print("Master must be greater than 0.")
|
||||
return -1
|
||||
master = str(ctx.number.value)
|
||||
print("Choose Master " + master)
|
||||
self.osc.button_press(ctx.device, "/hog/hardware/choose/" + master)
|
||||
return 1
|
||||
|
||||
def _scene_go(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Go on Scene " + str(i))
|
||||
self.send_message(ctx.device, "/hog/playback/go/1", i)
|
||||
return 1
|
||||
def _list_go(self, ctx):
|
||||
for i in ctx.targets:
|
||||
list = str(i)
|
||||
if ctx.number is not None:
|
||||
list += "." + str(ctx.number.value)
|
||||
print("Go on List " + list)
|
||||
self.osc.send_message(ctx.device, "/hog/playback/go/0", list)
|
||||
return 1
|
||||
|
||||
def _list_halt(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Halting List " + str(i))
|
||||
self.osc.send_message(ctx.device, "/hog/playback/halt/0", i)
|
||||
return 1
|
||||
|
||||
def _scene_halt(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Halt Scene " + str(i))
|
||||
self.send_message(ctx.device, "/hog/playback/halt/1", i)
|
||||
return 1
|
||||
def _list_release(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Releasing List " + str(i))
|
||||
self.osc.send_message(ctx.device, "/hog/playback/release/0", i)
|
||||
return 1
|
||||
|
||||
def _scene_go(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Go on Scene " + str(i))
|
||||
self.osc.send_message(ctx.device, "/hog/playback/go/1", i)
|
||||
return 1
|
||||
|
||||
def _scene_release(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Release Scene " + str(i))
|
||||
self.send_message(ctx.device, "/hog/playback/release/1", i)
|
||||
return 1
|
||||
def _scene_halt(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Halt Scene " + str(i))
|
||||
self.osc.send_message(ctx.device, "/hog/playback/halt/1", i)
|
||||
return 1
|
||||
|
||||
def _scene_release(self, ctx):
|
||||
for i in ctx.targets:
|
||||
print("Release Scene " + str(i))
|
||||
self.osc.send_message(ctx.device, "/hog/playback/release/1", i)
|
||||
return 1
|
||||
|
||||
command = {"GM": _master_go,
|
||||
"HM": _master_halt,
|
||||
"FM": _master_fade,
|
||||
"FGM": _master_fade_grand,
|
||||
"CM": _master_choose,
|
||||
"GL": _list_go,
|
||||
"HL": _list_halt,
|
||||
"RL": _list_release,
|
||||
"GS": _scene_go,
|
||||
"HS": _scene_halt,
|
||||
"RS": _scene_release
|
||||
}
|
||||
command = {"GM": _master_go,
|
||||
"HM": _master_halt,
|
||||
"FM": _master_fade,
|
||||
"FGM": _master_fade_grand,
|
||||
"CM": _master_choose,
|
||||
"GL": _list_go,
|
||||
"HL": _list_halt,
|
||||
"RL": _list_release,
|
||||
"GS": _scene_go,
|
||||
"HS": _scene_halt,
|
||||
"RS": _scene_release
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue