jsbc.py 8.5 KB

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