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

Commit ba50eb1

Browse files
committed
expand TestEvent Framework
tody up GUI logic for TestEvents
1 parent e38ee46 commit ba50eb1

File tree

5 files changed

+134
-64
lines changed

5 files changed

+134
-64
lines changed

Source/Gui.py

Lines changed: 37 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import tkinter as TK
2-
from TestEvents import TestEventTypes
32

43

54
class GuiWindow():
@@ -75,7 +74,7 @@ def _CreateBottomBar(self, parent):
7574
self.selectedTestEventPlatform = TK.StringVar()
7675
self.selectedTestEventPlatform.trace_variable(
7776
TK.W, self.OnTestEventPlatformChanged)
78-
orderedTestEventPlatforms = list(TestEventTypes.platforms.keys())
77+
orderedTestEventPlatforms = self.state.testEvents.GetPlatforms()
7978
self.testEventPlatformList = TK.OptionMenu(
8079
bottomBarContainer, self.selectedTestEventPlatform, *orderedTestEventPlatforms)
8180
self.testEventPlatformList.pack(side=TK.LEFT)
@@ -88,13 +87,22 @@ def _CreateBottomBar(self, parent):
8887
bottomBarContainer, self.selectedTestEventType, *self.orderedTestEventTypes)
8988
self.testEventTypeList.pack(side=TK.LEFT)
9089

91-
self.testEventInputLabel = TK.Label(
92-
bottomBarContainer, text="amount:")
93-
self.testEventInputLabel.pack(side=TK.LEFT)
94-
self.testEventAmount = TK.StringVar()
95-
self.testEventInput = TK.Entry(
96-
bottomBarContainer, textvariable=self.testEventAmount, width=10)
97-
self.testEventInput.pack(side=TK.LEFT)
90+
self.testEventValueLabel = TK.Label(
91+
bottomBarContainer, text="event value:")
92+
self.testEventValueLabel.pack(side=TK.LEFT)
93+
self.testEventValue = TK.StringVar()
94+
self.testEventValueInput = TK.Entry(
95+
bottomBarContainer, textvariable=self.testEventValue, width=10)
96+
self.testEventValueInput.pack(side=TK.LEFT)
97+
98+
self.testEventPayloadCountLabel = TK.Label(
99+
bottomBarContainer, text="payload count:")
100+
self.testEventPayloadCountLabel.pack(side=TK.LEFT)
101+
self.testEventPayloadCount = TK.StringVar()
102+
self.testEventPayloadCount.set("1")
103+
self.testEventPayloadCountInput = TK.Entry(
104+
bottomBarContainer, textvariable=self.testEventPayloadCount, width=10)
105+
self.testEventPayloadCountInput.pack(side=TK.LEFT)
98106

99107
self.testEventButton = TK.Button(bottomBarContainer, text=self.translations.GetTranslation(
100108
"Gui TestEventButton"), command=self.state.OnTestEventButtonHandler)
@@ -107,8 +115,10 @@ def _CreateBottomBar(self, parent):
107115

108116
self.testEventPlatformList.config(state=TK.DISABLED)
109117
self.testEventTypeList.config(state=TK.DISABLED)
110-
self.testEventInputLabel.config(state=TK.DISABLED)
111-
self.testEventInput.config(state=TK.DISABLED)
118+
self.testEventValueLabel.config(state=TK.DISABLED)
119+
self.testEventValueInput.config(state=TK.DISABLED)
120+
self.testEventPayloadCountLabel.config(state=TK.DISABLED)
121+
self.testEventPayloadCountInput.config(state=TK.DISABLED)
112122
self.testEventButton.config(state=TK.DISABLED)
113123

114124
def UpdateStatusText(self, text):
@@ -136,27 +146,33 @@ def OnTestEventPlatformChanged(self, *args):
136146
self.testEventTypeList["menu"].delete(0, TK.END)
137147
orderedTestEventTypes = []
138148
if self.selectedTestEventPlatform.get() != self.translations.GetTranslation("Gui SelectTestEventPlatform"):
139-
orderedTestEventTypes = list(
140-
TestEventTypes.platforms[self.selectedTestEventPlatform.get()].keys())
149+
orderedTestEventTypes = self.state.testEvents.GetPlatformTypes(
150+
self.selectedTestEventPlatform.get())
141151
for testEventType in orderedTestEventTypes:
142152
self.testEventTypeList["menu"].add_command(
143153
label=testEventType, command=TK._setit(self.selectedTestEventType, testEventType))
144154
self.selectedTestEventType.set(
145155
self.translations.GetTranslation("Gui SelectTestEventType"))
146156
self.testEventTypeList.config(state=TK.NORMAL)
147-
self.testEventInputLabel.config(state=TK.DISABLED)
148-
self.testEventInput.config(state=TK.DISABLED)
157+
self.testEventValueLabel.config(state=TK.DISABLED)
158+
self.testEventValueInput.config(state=TK.DISABLED)
159+
self.testEventPayloadCountLabel.config(state=TK.DISABLED)
160+
self.testEventPayloadCountInput.config(state=TK.DISABLED)
149161
self.testEventButton.config(state=TK.DISABLED)
150162

151163
def OnTestEventTypeChanged(self, *args):
152164
amountEnabled = False
153165
if self.selectedTestEventType.get() != self.translations.GetTranslation("Gui SelectTestEventType"):
154-
amountEnabled = TestEventTypes.platforms[self.selectedTestEventPlatform.get(
155-
)][self.selectedTestEventType.get()]["valueInput"]
166+
amountEnabled = self.state.testEvents.GetAttribute(self.selectedTestEventPlatform.get(
167+
), self.selectedTestEventType.get(), "valueInput")
156168
if amountEnabled:
157-
self.testEventInputLabel.config(state=TK.NORMAL)
158-
self.testEventInput.config(state=TK.NORMAL)
169+
self.testEventValueLabel.config(state=TK.NORMAL)
170+
self.testEventValueInput.config(state=TK.NORMAL)
171+
self.testEventPayloadCountLabel.config(state=TK.NORMAL)
172+
self.testEventPayloadCountInput.config(state=TK.NORMAL)
159173
else:
160-
self.testEventInputLabel.config(state=TK.DISABLED)
161-
self.testEventInput.config(state=TK.DISABLED)
174+
self.testEventValueLabel.config(state=TK.DISABLED)
175+
self.testEventValueInput.config(state=TK.DISABLED)
176+
self.testEventPayloadCountLabel.config(state=TK.DISABLED)
177+
self.testEventPayloadCountInput.config(state=TK.DISABLED)
162178
self.testEventButton.config(state=TK.NORMAL)

Source/Rcon.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ def __init__(self, state):
1313

1414
def TestConnection(self):
1515
if self.state.config.GetSetting("Rcon No Commands"):
16+
self.state.RecordActivity(
17+
self.state.translations.GetTranslation("Rcon StartupNoCommandMode"))
1618
return True
1719
try:
1820
self.SendCommand(self.testCommand)

Source/Streamlabs Rcon Integration.py

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def Setup(self):
2626
self.profiles = Profiles(self)
2727
self.streamlabs = Streamlabs(self)
2828
self.rcon = Rcon(self)
29-
self.testEvents = TestEvents(self)
29+
self.testEvents = TestEvents()
3030
self.guiWindow = GuiWindow(self)
3131
self.gui = self.guiWindow.gui
3232
self.gui.Setup()
@@ -168,9 +168,25 @@ def OnTestEventButtonHandler(self):
168168
try:
169169
testEventPlatform = self.gui.selectedTestEventPlatform.get()
170170
testEventType = self.gui.selectedTestEventType.get()
171-
testEventAmount = self.gui.testEventAmount.get()
171+
testEventValue = self.gui.testEventValue.get()
172+
if TestEvents.GetAttribute(testEventPlatform, testEventType, "valueInput"):
173+
try:
174+
testEventValue = float(testEventValue)
175+
except:
176+
self.RecordActivity(
177+
self.translations.GetTranslation("TestEvent ValueNotFloat") + str(testEventValue))
178+
return
179+
testEventPayloadCount = self.gui.testEventPayloadCount.get()
180+
try:
181+
testEventPayloadCount = int(testEventPayloadCount)
182+
if testEventPayloadCount <= 0:
183+
raise ValueError()
184+
except:
185+
self.RecordActivity(
186+
self.translations.GetTranslation("TestEvent PayloadCountNotInt") + str(testEventPayloadCount))
187+
return
172188
testEvent = self.testEvents.GenerateTestEvent(
173-
testEventPlatform, testEventType, testEventAmount)
189+
testEventPlatform, testEventType, testEventValue, testEventPayloadCount)
174190
if testEvent != None:
175191
self.OnStreamlabsEventHandler(testEvent)
176192
else:

Source/TestEvents.py

Lines changed: 72 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,41 @@
11
class TestEvents:
2-
def __init__(self, state):
3-
self.state = state
4-
5-
def GenerateTestEvent(self, eventPlatform, eventType, amount):
6-
if eventPlatform == "Twitch":
7-
if eventType == "Subscribe":
8-
return {
9-
'type': 'subscription',
10-
'message': [
11-
{
12-
'name': 'user',
13-
'display_name': 'UsEr',
14-
'months': '4',
15-
'message': 'a test subscription',
16-
'emotes': '1:25-26',
17-
'sub_plan': '1000',
18-
'sub_plan_name': 'Channel\\sSubscription\\s(streamer)',
19-
'sub_type': 'resub',
20-
'gifter': None,
21-
'subscriber_twitch_id': '12345678',
22-
'streak_months': '2',
23-
'_id': 'f5b4860c38313d4564d277ccc521a4a0',
24-
'event_id': 'f5b4860c38313d4564d277ccc521a4a0'
25-
}
26-
],
27-
'for': 'twitch_account'
28-
}
29-
30-
31-
class TestEventTypes:
32-
platforms = {
2+
_types = {
333
"Streamlabs": {
344
"Donation": {
35-
"valueInput": True
5+
"valueInput": True,
6+
"listOptions": []
367
}
378
},
389
"Patreon": {
3910
"Pledge": {
40-
"valueInput": True
11+
"valueInput": True,
12+
"listOptions": []
4113
}
4214
},
4315
"Twitch": {
4416
"Follow": {
45-
"valueInput": False
17+
"valueInput": False,
18+
"listOptions": []
4619
},
4720
"Subscribe": {
48-
"valueInput": False
21+
"valueInput": True, # TODO: this should use a listOptions when coded for
22+
"listOptions": []
4923
},
5024
"Receive Gift Subscription": {
51-
"valueInput": False
25+
"valueInput": False,
26+
"listOptions": []
5227
},
5328
"Give Subscription Gifts": {
54-
"valueInput": True
29+
"valueInput": True,
30+
"listOptions": []
5531
},
5632
"Host": {
57-
"valueInput": True
33+
"valueInput": True,
34+
"listOptions": []
5835
},
5936
"Raid": {
60-
"valueInput": True
37+
"valueInput": True,
38+
"listOptions": []
6139
}
6240
},
6341
"Youtube": {
@@ -67,3 +45,58 @@ class TestEventTypes:
6745

6846
}
6947
}
48+
49+
@staticmethod
50+
def GenerateTestEvent(eventPlatform, eventType, value, payloadCount):
51+
eventTypeString = ""
52+
eventForString = ""
53+
eventMessageConstructor = None
54+
if eventPlatform == "Twitch":
55+
if eventType == "Subscribe":
56+
eventTypeString = "subscription"
57+
eventForString = "twitch_account"
58+
59+
def EventMessageConstructor(value, iterator):
60+
iterator += 1
61+
return {
62+
'name': 'user' + str(iterator),
63+
'display_name': 'UsEr' + str(iterator),
64+
'months': '2',
65+
'message': 'a test subscription',
66+
'emotes': '1:25-26',
67+
'sub_plan': str(int(value)),
68+
'sub_plan_name': 'Channel\\sSubscription\\s(streamer)',
69+
'sub_type': 'resub',
70+
'gifter': None,
71+
'subscriber_twitch_id': '12345678',
72+
'streak_months': '2',
73+
'_id': 'f5b4860c38313d4564d277ccc521a4a0',
74+
'event_id': 'f5b4860c38313d4564d277ccc521a4a0'
75+
}
76+
eventMessageConstructor = EventMessageConstructor
77+
78+
return TestEvents._ConstructTestEventDict(eventForString, eventTypeString, eventMessageConstructor, value, payloadCount)
79+
80+
@staticmethod
81+
def _ConstructTestEventDict(forString, typeString, messageConstructor, value, payloadCount):
82+
eventDict = {
83+
"for": forString,
84+
"type": typeString,
85+
"message": []
86+
}
87+
for i in range(payloadCount):
88+
eventDict["message"].append(messageConstructor(value, i))
89+
90+
return eventDict
91+
92+
@staticmethod
93+
def GetAttribute(platformString, typeString, attributeName):
94+
return TestEvents._types[platformString][typeString][attributeName]
95+
96+
@staticmethod
97+
def GetPlatforms():
98+
return list(TestEvents._types.keys())
99+
100+
@staticmethod
101+
def GetPlatformTypes(platformString):
102+
return list(TestEvents._types[platformString].keys())

Source/Translations.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,10 @@ def LoadLocalisedTexts(self, language):
3434
"Rcon CommandResponseWarning": "WARNING: Rcon got response from server: ",
3535
"Rcon TestErrorMessage": "Rcon connection test message: ",
3636
"Rcon NoCommand": "Rcon Test Mode: ",
37-
"TestEvent InvalidTestEvent": "Invalid Test Event Selection: "
37+
"Rcon StartupNoCommandMode": "Rcon running in No Command mode",
38+
"TestEvent InvalidTestEvent": "Invalid Test Event Selection: ",
39+
"TestEvent ValueNotFloat": "Test Event Value isn't a number: ",
40+
"TestEvent PayloadCountNotInt": "Test Event Payload Count not a positive whole number: "
3841
}
3942

4043
def GetTranslation(self, key):

0 commit comments

Comments
 (0)