Skip to content
This repository was archived by the owner on Jan 9, 2023. It is now read-only.

Commit 3192837

Browse files
committed
support multiple payloads in an event
complete the TestEvents data
1 parent ba50eb1 commit 3192837

File tree

7 files changed

+298
-113
lines changed

7 files changed

+298
-113
lines changed

Source/Gui.py

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ def _CreateBottomBar(self, parent):
9595
bottomBarContainer, textvariable=self.testEventValue, width=10)
9696
self.testEventValueInput.pack(side=TK.LEFT)
9797

98+
self.testEventQuantityLabel = TK.Label(
99+
bottomBarContainer, text="quantity:")
100+
self.testEventQuantityLabel.pack(side=TK.LEFT)
101+
self.testEventQuantity = TK.StringVar()
102+
self.testEventQuantityInput = TK.Entry(
103+
bottomBarContainer, textvariable=self.testEventQuantity, width=10)
104+
self.testEventQuantityInput.pack(side=TK.LEFT)
105+
98106
self.testEventPayloadCountLabel = TK.Label(
99107
bottomBarContainer, text="payload count:")
100108
self.testEventPayloadCountLabel.pack(side=TK.LEFT)
@@ -117,6 +125,8 @@ def _CreateBottomBar(self, parent):
117125
self.testEventTypeList.config(state=TK.DISABLED)
118126
self.testEventValueLabel.config(state=TK.DISABLED)
119127
self.testEventValueInput.config(state=TK.DISABLED)
128+
self.testEventQuantityLabel.config(state=TK.DISABLED)
129+
self.testEventQuantityInput.config(state=TK.DISABLED)
120130
self.testEventPayloadCountLabel.config(state=TK.DISABLED)
121131
self.testEventPayloadCountInput.config(state=TK.DISABLED)
122132
self.testEventButton.config(state=TK.DISABLED)
@@ -156,23 +166,32 @@ def OnTestEventPlatformChanged(self, *args):
156166
self.testEventTypeList.config(state=TK.NORMAL)
157167
self.testEventValueLabel.config(state=TK.DISABLED)
158168
self.testEventValueInput.config(state=TK.DISABLED)
169+
self.testEventQuantityLabel.config(state=TK.DISABLED)
170+
self.testEventQuantityInput.config(state=TK.DISABLED)
159171
self.testEventPayloadCountLabel.config(state=TK.DISABLED)
160172
self.testEventPayloadCountInput.config(state=TK.DISABLED)
161173
self.testEventButton.config(state=TK.DISABLED)
162174

163175
def OnTestEventTypeChanged(self, *args):
164176
amountEnabled = False
177+
quantityEnabled = False
165178
if self.selectedTestEventType.get() != self.translations.GetTranslation("Gui SelectTestEventType"):
166179
amountEnabled = self.state.testEvents.GetAttribute(self.selectedTestEventPlatform.get(
167180
), self.selectedTestEventType.get(), "valueInput")
181+
quantityEnabled = self.state.testEvents.GetAttribute(self.selectedTestEventPlatform.get(
182+
), self.selectedTestEventType.get(), "quantityInput")
168183
if amountEnabled:
169184
self.testEventValueLabel.config(state=TK.NORMAL)
170185
self.testEventValueInput.config(state=TK.NORMAL)
171-
self.testEventPayloadCountLabel.config(state=TK.NORMAL)
172-
self.testEventPayloadCountInput.config(state=TK.NORMAL)
173186
else:
174187
self.testEventValueLabel.config(state=TK.DISABLED)
175188
self.testEventValueInput.config(state=TK.DISABLED)
176-
self.testEventPayloadCountLabel.config(state=TK.DISABLED)
177-
self.testEventPayloadCountInput.config(state=TK.DISABLED)
189+
if quantityEnabled:
190+
self.testEventQuantityLabel.config(state=TK.NORMAL)
191+
self.testEventQuantityInput.config(state=TK.NORMAL)
192+
else:
193+
self.testEventQuantityLabel.config(state=TK.DISABLED)
194+
self.testEventQuantityInput.config(state=TK.DISABLED)
195+
self.testEventPayloadCountLabel.config(state=TK.NORMAL)
196+
self.testEventPayloadCountInput.config(state=TK.NORMAL)
178197
self.testEventButton.config(state=TK.NORMAL)

Source/Streamlabs Rcon Integration.py

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -109,57 +109,60 @@ def RecordActivity(self, text):
109109

110110
def OnStreamlabsEventHandler(self, data):
111111
try:
112-
event = StreamlabsEvent(self, data)
113-
if event.errored:
114-
self.logging.DebugLog(
115-
"Streamlabs event errored during initial handling: " + str(event))
116-
return
117-
if event.ignored:
118-
self.logging.DebugLog(
119-
"Streamlabs event being ignored: " + event.GetEventRawTitlesAsPrettyString())
120-
return
121112
self.logging.DebugLog(
122113
"Streamlabs raw event data: " + str(data))
123-
if not event.IsHandledEvent():
124-
self.RecordActivity(
125-
self.translations.GetTranslation("StreamlabsEvent UnrecognisedEvent") + event.GetEventRawTitlesAsPrettyString())
126-
return
127-
if not event.PopulateNormalisedData():
128-
self.RecordActivity(
129-
self.translations.GetTranslation("StreamlabsEvent ErrorProcessingEvent") + event.GetEventRawTitlesAsPrettyString())
114+
events = StreamlabsEventUtils.GenerateEventPerPayload(self, data)
115+
if events == None:
130116
return
131-
self.logging.DebugLog(
132-
"Streamlabs processed event: " + str(event))
133-
134-
actionText = self.profiles.currentProfile.GetActionTextForEvent(
135-
event)
136-
if actionText == None:
137-
self.RecordActivity(
138-
self.translations.GetTranslation("StreamlabsEvent NoProfileAction") + event.GetEventRawTitlesAsPrettyString())
139-
self.logging.DebugLog(
140-
"No profile action for: " + event.GetEventRawTitlesAsPrettyString())
141-
return
142-
actionType = ""
143-
response = ""
144-
if actionText == "":
145-
actionType = "Ignore event"
117+
for event in events:
118+
if event.errored:
119+
self.logging.DebugLog(
120+
"Streamlabs event errored during initial handling: " + str(event))
121+
return
122+
if event.ignored:
123+
self.logging.DebugLog(
124+
"Streamlabs event being ignored: " + event.GetEventRawTitlesAsPrettyString())
125+
return
126+
if not event.IsHandledEvent():
127+
self.RecordActivity(
128+
self.translations.GetTranslation("StreamlabsEvent UnrecognisedEvent") + event.GetEventRawTitlesAsPrettyString())
129+
return
130+
if not event.PopulateNormalisedData():
131+
self.RecordActivity(
132+
self.translations.GetTranslation("StreamlabsEvent ErrorProcessingEvent") + event.GetEventRawTitlesAsPrettyString())
133+
return
146134
self.logging.DebugLog(
147-
"NOTHING action specified for: " + event.GetEventRawTitlesAsPrettyString())
148-
else:
149-
actionType = "Rcon command"
150-
try:
151-
response = self.rcon.SendCommand(actionText)
152-
except Exception as ex:
153-
self.logging.RecordException(ex, "Rcon event failed")
135+
"Streamlabs processed event: " + str(event))
136+
137+
actionText = self.profiles.currentProfile.GetActionTextForEvent(
138+
event)
139+
if actionText == None:
154140
self.RecordActivity(
155-
self.translations.GetTranslation("Rcon CommandError") + actionText)
141+
self.translations.GetTranslation("StreamlabsEvent NoProfileAction") + event.GetEventRawTitlesAsPrettyString())
142+
self.logging.DebugLog(
143+
"No profile action for: " + event.GetEventRawTitlesAsPrettyString())
156144
return
157-
self.RecordActivity(
158-
self.translations.GetTranslation("StreamlabsEvent EventHandled") + event.GetEventRawTitlesAsPrettyString() + " : " + event.bestName + " : value " + str(event.value) + " : " + actionType)
159-
if response != "":
145+
actionType = ""
146+
response = ""
147+
if actionText == "":
148+
actionType = "Ignore event"
149+
self.logging.DebugLog(
150+
"NOTHING action specified for: " + event.GetEventRawTitlesAsPrettyString())
151+
else:
152+
actionType = "Rcon command"
153+
try:
154+
response = self.rcon.SendCommand(actionText)
155+
except Exception as ex:
156+
self.logging.RecordException(ex, "Rcon event failed")
157+
self.RecordActivity(
158+
self.translations.GetTranslation("Rcon CommandError") + actionText)
159+
return
160160
self.RecordActivity(
161-
self.translations.GetTranslation("Rcon CommandResponseWarning") + response)
162-
self.logging.DebugLog("Action done: " + actionText)
161+
self.translations.GetTranslation("StreamlabsEvent EventHandled") + event.GetEventRawTitlesAsPrettyString() + " : " + event.bestName + " : value " + str(event.value) + " : " + actionType)
162+
if response != "":
163+
self.RecordActivity(
164+
self.translations.GetTranslation("Rcon CommandResponseWarning") + response)
165+
self.logging.DebugLog("Action done: " + actionText)
163166
except Exception as ex:
164167
self.logging.RecordException(
165168
ex, "OBS Event Handler Critical Error - This event won't be processed")
@@ -176,6 +179,14 @@ def OnTestEventButtonHandler(self):
176179
self.RecordActivity(
177180
self.translations.GetTranslation("TestEvent ValueNotFloat") + str(testEventValue))
178181
return
182+
testEventQuantity = self.gui.testEventQuantity.get()
183+
if TestEvents.GetAttribute(testEventPlatform, testEventType, "quantityInput"):
184+
try:
185+
testEventQuantity = int(testEventQuantity)
186+
except:
187+
self.RecordActivity(
188+
self.translations.GetTranslation("TestEvent QuantityCountNotInt") + str(testEventQuantity))
189+
return
179190
testEventPayloadCount = self.gui.testEventPayloadCount.get()
180191
try:
181192
testEventPayloadCount = int(testEventPayloadCount)
@@ -186,7 +197,7 @@ def OnTestEventButtonHandler(self):
186197
self.translations.GetTranslation("TestEvent PayloadCountNotInt") + str(testEventPayloadCount))
187198
return
188199
testEvent = self.testEvents.GenerateTestEvent(
189-
testEventPlatform, testEventType, testEventValue, testEventPayloadCount)
200+
testEventPlatform, testEventType, testEventValue, testEventQuantity, testEventPayloadCount)
190201
if testEvent != None:
191202
self.OnStreamlabsEventHandler(testEvent)
192203
else:

Source/StreamlabsEvent.py

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,12 @@
44

55

66
class StreamlabsEvent():
7-
def __init__(self, state, data):
7+
def __init__(self, state, platformString, typeString, payload):
88
self.state = state
99
self.logging = state.logging
1010

11-
if "for" in data:
12-
self.platform = data["for"]
13-
else:
14-
self.platform = ""
15-
if "type" in data:
16-
self.type = data["type"]
17-
else:
18-
self.type = ""
19-
20-
self.rawData = data
11+
self.platform = platformString
12+
self.type = typeString
2113
self.id = ""
2214
self.handlerName = ""
2315
self.value = 0
@@ -32,19 +24,7 @@ def __init__(self, state, data):
3224
self.ignored = True
3325
return
3426

35-
if "message" not in data:
36-
self.state.RecordActivity(
37-
self.state.translations.GetTranslation("StreamlabsEvent MissingEventPayloadCount"))
38-
self.errored = True
39-
return
40-
if len(data["message"]) != 1:
41-
self.state.RecordActivity(
42-
self.state.translations.GetTranslation("StreamlabsEvent BadEventPayloadCount") + str(
43-
len(data["message"])))
44-
self.errored = True
45-
return
46-
rawMessage = data["message"][0]
47-
self.rawMessage = rawMessage
27+
self.rawMessage = payload
4828

4929
self.id = self.rawMessage["_id"]
5030
if "display_name" in self.rawMessage.keys():
@@ -89,7 +69,6 @@ def __str__(self):
8969
str_list.append("valueType: '" + self.valueType + "', ")
9070
str_list.append("value: '" + str(self.value) + "', ")
9171
str_list.append("bestName: '" + self.bestName + "', ")
92-
str_list.append("rawData: " + str(self.rawData))
9372
str_list.append("}")
9473
return ''.join(str_list)
9574

@@ -283,3 +262,23 @@ def GetTwitchSubscriptionValue(subPlan):
283262
return 25
284263
else:
285264
return None
265+
266+
@staticmethod
267+
def GenerateEventPerPayload(state, data):
268+
if "message" not in data:
269+
state.RecordActivity(
270+
state.translations.GetTranslation("StreamlabsEvent MissingEventPayloadCount"))
271+
return None
272+
events = []
273+
if "for" in data:
274+
platformString = data["for"]
275+
else:
276+
platformString = ""
277+
if "type" in data:
278+
typeString = data["type"]
279+
else:
280+
typeString = ""
281+
for payload in data["message"]:
282+
events.append(StreamlabsEvent(
283+
state, platformString, typeString, payload))
284+
return events

0 commit comments

Comments
 (0)