jsbc.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. #!/usr/bin/python3
  2. import time
  3. import traceback
  4. import json
  5. import _thread as thread
  6. from collections import OrderedDict
  7. import __main__ as MAIN
  8. from lib.cprint import *
  9. import lib.fixlib as fixlib
  10. GLOBAL_old_exec_nr = -1
  11. def JSCB(x,sock=None):
  12. global GLOBAL_old_exec_nr
  13. print("JSCB ...",x)
  14. # REMOTE KEY EVENT's
  15. i = ""
  16. msg = ""
  17. msgs = []
  18. FX3 = []
  19. try:
  20. for i in x:
  21. msgs = json.loads(i)
  22. if type(msgs) is not list:
  23. continue
  24. for msg in msgs:
  25. OK = 0
  26. EXEC_REFRESH = 0
  27. val = -1
  28. exec_nr = -1
  29. fix_nr = -1
  30. attr = ""
  31. if "event" not in msg:
  32. continue
  33. if "EXEC" in msg:
  34. try:
  35. exec_nr = int(msg["EXEC"])
  36. except:
  37. exec_nr = -2
  38. if "VAL" in msg:
  39. val = msg["VAL"] # fix int MIDI
  40. try:
  41. val = int(msg["VAL"]) # fix int MIDI
  42. except:pass
  43. if "FIX" in msg:
  44. fix_nr=msg["FIX"]
  45. if "ATTR" in msg:
  46. attr=msg["ATTR"]
  47. print(" MAIN.tk_event","fix:",fix_nr,"exec_nr:",exec_nr,"val:",val,"attr",attr)
  48. if "FIXTURES" == msg["event"]:
  49. fixlib.encoder(MAIN.FIXTURES.fixtures,str(fix_nr),attr,xval=val,xfade=0,xdelay=0)#,blind=0)
  50. OK = 1
  51. elif "FX3" == msg["event"]:
  52. cprint("FX3 OK",color="yellow")
  53. i=0
  54. msg2 ={}
  55. for v in ['MODE', 'WING', 'VALUE', 'FIX', 'DMX', 'ATTR', 'FX2']:
  56. print("*'*'",v)
  57. if v in msg:
  58. msg2[v] = msg[v]
  59. i+=1
  60. msg = msg2
  61. FX3.append(msg2)
  62. OK = 1
  63. elif "CLEAR" == msg["event"]:
  64. fixlib.clear(MAIN.FIXTURES.fixtures)
  65. OK = 1
  66. elif "ESC" == msg["event"]:
  67. fixlib.clear(MAIN.FIXTURES.fixtures)
  68. MAIN.modes.clear() # FIX
  69. MAIN.master.button_clear() # REC,CFG-BTN ...
  70. OK = 1
  71. elif msg["event"] in ["REC","REC-FX","EDIT","BLIND","FLASH","CFG-BTN","LABEL","MOVE","GO","SELECT","DEL","COPY"]:
  72. if msg["event"] in ["REC-FX"]:
  73. MAIN.modes.clear(protect=["REC-FX","REC",msg["event"]]) # FIX
  74. MAIN.master.button_clear() # REC,CFG-BTN ...
  75. MAIN.modes.val(msg["event"],1)
  76. OK = 1
  77. elif "FX-OFF" == msg["event"]:
  78. MAIN.FIXTURES.fx_off("all")
  79. MAIN.CONSOLE.fx_off("all")
  80. MAIN.CONSOLE.flash_off("all")
  81. OK = 1
  82. elif "SAVE\nSHOW" == msg["event"]:
  83. MAIN.save_show()
  84. OK = 1
  85. elif "RESTART" == msg["event"]:
  86. print("jsbc.RESTART")
  87. MAIN.LOAD_SHOW_AND_RESTART("").cb(force=1)
  88. OK = 1
  89. elif "EXEC-LABEL" == msg["event"]:
  90. print("LABEL",msg)
  91. if 1:#val >= 1: # only Press
  92. if "DATA" in msg:
  93. sdata = msg["DATA"]
  94. print("EXEC-CFG",sdata)
  95. if sdata:
  96. MAIN.master.dialog_cfg_return(exec_nr-1)(sdata)
  97. #MAIN.EXEC.set_cfg(exec_nr-1,sdata)
  98. EXEC_REFRESH = 1
  99. msg["OK"] = "EXEC-LABEL"
  100. OK = 1
  101. elif "EXEC-CFG" == msg["event"]:
  102. print("EXEC-CFG",msg)
  103. if 1:#val >= 1: # only Press
  104. if "DATA" in msg:
  105. sdata = msg["DATA"]
  106. print("EXEC-CFG",sdata)
  107. if sdata:
  108. MAIN.master.dialog_cfg_return(exec_nr-1)(sdata)
  109. #MAIN.EXEC.set_cfg(exec_nr-1,sdata)
  110. EXEC_REFRESH = 1
  111. msg["OK"] = "SET-CFG"
  112. OK = 1
  113. elif "EXEC" == msg["event"]:
  114. print("jscb.JSCB:",msg["event"])
  115. try:
  116. if exec_nr > 0:
  117. if MAIN.modes.val("REC"):
  118. if val >= 1: # only Press
  119. MAIN.master.exec_rec(exec_nr-1)
  120. EXEC_REFRESH = 1
  121. msg["OK"] = "REC"
  122. OK = 1
  123. elif MAIN.modes.val("EDIT"):
  124. if val >= 1: # only Press
  125. MAIN.master.exec_edit(exec_nr-1)
  126. EXEC_REFRESH = 1
  127. msg["OK"] = "EDIT"
  128. OK = 1
  129. elif MAIN.modes.val("COPY"):
  130. if val >= 1: # only Press
  131. MAIN.EXEC.copy(exec_nr-1)
  132. if MAIN.modes.val("COPY") > 2:
  133. MAIN.modes.val("COPY",0)
  134. EXEC_REFRESH = 1
  135. msg["OK"] = "COPY"
  136. OK = 1
  137. elif MAIN.modes.val("MOVE"):
  138. if val >= 1: # only Press
  139. MAIN.EXEC.move(exec_nr-1)
  140. EXEC_REFRESH = 1
  141. msg["OK"] = "MOVE"
  142. OK = 1
  143. elif MAIN.modes.val("DEL"):
  144. if val >= 1: # only Press
  145. MAIN.EXEC.delete(exec_nr-1)
  146. MAIN.modes.val("DEL",0)
  147. EXEC_REFRESH = 1
  148. msg["OK"] = "DEL"
  149. OK = 1
  150. if not OK:
  151. print("MIDI?",val)
  152. if val >= 0: #Press/Release
  153. if "MOUSE" in msg and msg["MOUSE"] == "RIGHT":
  154. MAIN.master.exec_go(exec_nr-1,xfade=0,val=val)
  155. else:
  156. MAIN.master.exec_go(exec_nr-1,xfade=None,val=val)
  157. OK = 1
  158. #EXEC_REFRESH = 1
  159. msg["MODES"]=MAIN.modes.list("active")
  160. except Exception as e:
  161. print("EXEC ERR:",e)
  162. raise e
  163. if OK:
  164. cprint(" jsbc.remote-key:",msg ,color="green")
  165. print()
  166. if EXEC_REFRESH:
  167. def xx():
  168. #MAIN.execlib.exec_set_mc(MAIN.EXEC.label_exec,MAIN.EXEC.val_exec)
  169. nr = exec_nr-1
  170. label = MAIN.EXEC.label_exec[nr] #l[nr]
  171. data = MAIN.EXEC.val_exec[nr] #d[k]
  172. print(" EXEC_REFRESH ? ",nr,label,"==================")
  173. MAIN.execlib.exec_set_mc_single(nr,label,data)
  174. print(time.time())
  175. global GLOBAL_old_exec_nr
  176. nr2 = GLOBAL_old_exec_nr
  177. if nr2 != nr and nr2 >= 0:
  178. label = MAIN.EXEC.label_exec[nr2] #l[nr]
  179. cprint(" GLOBAL_OLD_EXEC_NR",nr2,nr,label,"==================")
  180. data = MAIN.EXEC.val_exec[nr2] #d[k]
  181. MAIN.execlib.exec_set_mc_single(nr2,label,data)
  182. GLOBAL_old_exec_nr = nr
  183. thread.start_new_thread(xx,())
  184. else:
  185. cprint(" jsbc.remote-key:",msg ,color="red")
  186. print()
  187. if FX3:
  188. MAIN.jclient_send(FX3)
  189. for i in FX3:
  190. if "FIX" in i and "ATTR" in i:
  191. fix = i["FIX"]
  192. attr = i["ATTR"]
  193. if attr.startswith("_"):
  194. continue
  195. if fix in MAIN.FIXTURES.fixtures:
  196. if attr in MAIN.FIXTURES.fixtures[fix]["ATTRIBUT"]:
  197. # insert FX3 into fixture.attr.FX2
  198. MAIN.FIXTURES.fixtures[fix]["ATTRIBUT"][attr]["FX2"] = OrderedDict(i["FX2"])
  199. FX3 = []
  200. except Exception as e:
  201. cprint("exception JSCB:",e,color="red")
  202. cprint("- i:",i,color="red")
  203. cprint("- msg:",msgs,color="red")
  204. cprint(traceback.format_exc(),color="red")
  205. if sock:
  206. msg = ["Notice: Exception on JSCB-SERVER: ",str(e)]
  207. msg = json.dumps(msg)
  208. msg = bytes(msg,"utf8")
  209. cprint(msg,color="red")
  210. #chat._send(sock,msg)
  211. #time.sleep(1/60)