-
Notifications
You must be signed in to change notification settings - Fork 1
/
baseball-streaming.py
173 lines (160 loc) · 10.7 KB
/
baseball-streaming.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import PySimpleGUI as sg
import subprocess
import threading
import sys
import os
HEAT_GAMES_2022 = {
'2022-04-30 Elitserien Sundsvall @ Sundbyberg Game #1': {'game_id': '91830', 'series_id': '2022-elitserien-baseboll'},
'2022-04-30 Elitserien Sundsvall @ Sundbyberg Game #2': {'game_id': '91831', 'series_id': '2022-elitserien-baseboll'},
'2022-05-07 Regionserien Skellefteå @ Sundbyberg Game #1': {'game_id': '95336', 'series_id': '2022-regionserien-baseboll'},
'2022-05-07 Regionserien Skellefteå @ Sundbyberg Game #2': {'game_id': '95337', 'series_id': '2022-regionserien-baseboll'},
'2022-05-07 Elitserien Sundbyberg @ Karlskoga Game #1': {'game_id': '91839', 'series_id': '2022-elitserien-baseboll'},
'2022-05-07 Elitserien Sundbyberg @ Karlskoga Game #2': {'game_id': '91840', 'series_id': '2022-elitserien-baseboll'},
'2022-05-08 Juniorserien Sundbyberg @ Karlskoga Game #1': {'game_id': '91737', 'series_id': '2022-juniorserien-baseboll'},
'2022-05-08 Juniorserien Sundbyberg @ Karlskoga Game #2': {'game_id': '91739', 'series_id': '2022-juniorserien-baseboll'},
'2022-05-10 Elitserien Stockholm @ Sundbyberg': {'game_id': '91841', 'series_id': '2022-elitserien-baseboll'},
'2022-05-15 Regionserien Enköping @ Sundbyberg Game #1': {'game_id': '95358', 'series_id': '2022-regionserien-baseboll'},
'2022-05-15 Regionserien Enköping @ Sundbyberg Game #2': {'game_id': '95359', 'series_id': '2022-regionserien-baseboll'},
'2022-05-17 Elitserien Stockholm @ Sundbyberg': {'game_id': '91849', 'series_id': '2022-elitserien-baseboll'},
'2022-05-18 Regionserien Stockholm @ Sundbyberg': {'game_id': '95361', 'series_id': '2022-regionserien-baseboll'},
'2022-06-04 Elitserien Karlskoga @ Sundbyberg Game #1': {'game_id': '91875', 'series_id': '2022-elitserien-baseboll'},
'2022-06-04 Elitserien Karlskoga @ Sundbyberg Game #2': {'game_id': '91876', 'series_id': '2022-elitserien-baseboll'},
'2022-06-05 Juniorserien Göteborg @ Sundbyberg Game #1': {'game_id': '91758', 'series_id': '2022-juniorserien-baseboll'},
'2022-06-05 Juniorserien Göteborg @ Sundbyberg Game #2': {'game_id': '91759', 'series_id': '2022-juniorserien-baseboll'},
'2022-06-15 Juniorserien Stockholm @ Sundbyberg': {'game_id': '91764', 'series_id': '2022-juniorserien-baseboll'},
'2022-06-18 Elitserien Karlskoga @ Sundbyberg Game #1': {'game_id': '91883', 'series_id': '2022-elitserien-baseboll'},
'2022-06-18 Elitserien Karlskoga @ Sundbyberg Game #2': {'game_id': '91884', 'series_id': '2022-elitserien-baseboll'},
'2022-06-19 Juniorserien Karlskoga @ Sundbyberg Game #1': {'game_id': '91768', 'series_id': '2022-juniorserien-baseboll'},
'2022-06-19 Juniorserien Karlskoga @ Sundbyberg Game #2': {'game_id': '91769', 'series_id': '2022-juniorserien-baseboll'},
'2022-07-04 U18 EM Switzerland @ Turkey Game #1': {'game_id': '98582', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-04 U18 EM Poland @ Sweden Game #2': {'game_id': '98583', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-05 U18 EM Turkey @ Great Britain Game #3': {'game_id': '98584', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-05 U18 EM Sweden @ Switzerland Game #4': {'game_id': '98585', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-06 U18 EM Poland @ Switzerland Game #5': {'game_id': '98586', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-06 U18 EM Great Britain @ Sweden Game #6': {'game_id': '98587', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-07 U18 EM Turkey @ Poland Game #7': {'game_id': '98588', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-07 U18 EM Switzerland @ Great Britain Game #8': {'game_id': '98589', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-08 U18 EM Great Britain @ Poland Game #9': {'game_id': '98590', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-08 U18 EM Sweden @ Turkey Game #10': {'game_id': '98591', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-09 U18 EM Final': {'game_id': '98592', 'series_id': '2022-u-18-european-baseball-championship-qualifier'},
'2022-07-23 Elitserien Sölvesborg @ Sundbyberg Game #1': {'game_id': '91889', 'series_id': '2022-elitserien-baseboll'},
'2022-07-23 Elitserien Sölvesborg @ Sundbyberg Game #2': {'game_id': '91890', 'series_id': '2022-elitserien-baseboll'},
'2022-07-24 Juniorserien Sölvesborg @ Sundbyberg Game #1': {'game_id': '91783', 'series_id': '2022-juniorserien-baseboll'},
'2022-07-24 Juniorserien Sölvesborg @ Sundbyberg Game #2': {'game_id': '91784', 'series_id': '2022-juniorserien-baseboll'},
'2022-08-06 Regionserien Alby @ Sundbyberg Game #1': {'game_id': '95490', 'series_id': '2022-regionserien-baseboll'},
'2022-08-06 Regionserien Alby @ Sundbyberg Game #2': {'game_id': '95491', 'series_id': '2022-regionserien-baseboll'},
'2022-08-11 Juniorserien Stockholm @ Sundbyberg': {'game_id': '91798', 'series_id': '2022-juniorserien-baseboll'},
'2022-08-16 Elitserien Stockholm @ Sundbyberg': {'game_id': '91912', 'series_id': '2022-elitserien-baseboll'},
'2022-08-19 Elitserien Stockholm @ Sundbyberg': {'game_id': '91907', 'series_id': '2022-elitserien-baseboll'},
'2022-08-24 Regionserien Stockholm @ Sundbyberg': {'game_id': '95539', 'series_id': '2022-regionserien-baseboll'},
'2022-08-27 Elitserien Semifinal 1 Leksand @ Sundbyberg': {'game_id': '101175', 'series_id': '2022-elitserien-baseboll'},
'2022-08-27 Elitserien Semifinal 2 Leksand @ Sundbyberg': {'game_id': '101176', 'series_id': '2022-elitserien-baseboll'},
'2022-08-28 Elitserien Semifinal 3 Leksand @ Sundbyberg': {'game_id': '101177', 'series_id': '2022-elitserien-baseboll'},
}
def resource_path(relative_path):
base_path = getattr(sys, '_MEIPASS', os.path.dirname(
os.path.abspath(__file__)))
return os.path.join(base_path, relative_path)
def runCommand(cmd):
global streamer_process
print("Streamer starting...")
print(' '.join(cmd))
if hasattr(subprocess, 'STARTUPINFO'):
startupinfo = subprocess.STARTUPINFO()
startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
streamer_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=startupinfo)
else:
streamer_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in streamer_process.stdout:
print(line.decode(errors='ignore').rstrip())
sg.theme('SystemDefault')
layout = [[sg.Text('Output directory for OBS resources', size=(30, 1), justification='right'),
sg.Input(default_text='/home/martinkero/Documents/personal/obs/resources', size=80, key='target_dir'),
sg.FolderBrowse()],
[sg.Text('Select game', size=(30, 1), justification='right'),
sg.Combo(list(HEAT_GAMES_2022.keys()), key='game_selector', enable_events=True, readonly=True)],
[sg.Text('', size=(30, 1), justification='right'),
sg.Text('or enter IDs manually below')],
[sg.Text('Series ID', size=(30, 1), justification='right'),
sg.Input(default_text='2022-elitserien-baseboll', size=30, key='series_id')],
[sg.Text('Game ID', size=(30, 1), justification='right'),
sg.Input(default_text='91830', size=6, key='game_id')],
[sg.Text('',size=(30, 1)),
sg.Radio('Live', key='live', group_id=1, default=True),
sg.Radio('Replay', key='replay', group_id=1)],
[sg.Text('',size=(30, 1)),
sg.Radio('All Stats', key='allstats', group_id=2, default=True),
sg.Radio('Series Stats Only', key='seriesstats', group_id=2)],
[sg.Submit(button_text='Start streaming', button_color='Green'),
sg.Cancel(button_text='Stop', button_color='Red'),
sg.Cancel(button_text='Exit'),
sg.Cancel(button_text='Clear')],
[sg.Text('Log:')],
[sg.Output(size=(400, 30), expand_x=True, expand_y=True, key='output_area', echo_stdout_stderr=True)]]
window = sg.Window('Baseball Streaming', layout, resizable=True, size=(1024,768),
icon=resource_path('256x256.png'))
streamer_thread = None
while True:
if window.was_closed():
if streamer_thread:
if streamer_process:
streamer_process.terminate()
stop_streaming = True
streamer_thread.join()
sys.exit(0)
event, values = window.read()
if event == 'game_selector':
window['series_id'].update(HEAT_GAMES_2022[values['game_selector']]['series_id'])
window['game_id'].update(HEAT_GAMES_2022[values['game_selector']]['game_id'])
if event == 'Elitserien':
window['series_id'].update('2022-elitserien-baseboll')
if event == 'Juniorserien':
window['series_id'].update('2022-juniorserien-baseboll')
if event == 'Regionserien':
window['series_id'].update('2022-regionserien-baseboll')
if event == 'Softbollserien':
window['series_id'].update('2022-softbollserien')
if event == 'Juniorserien Softboll':
window['series_id'].update('2022-juniorserien-softboll-2022')
if event == 'Clear':
window['output_area'].update('')
if event == 'Exit':
if streamer_thread:
if streamer_process:
streamer_process.terminate()
streamer_thread.join()
sys.exit(0)
if event == 'Stop':
if streamer_thread:
if streamer_process:
streamer_process.terminate()
streamer_thread.join()
print("Streamer stopped.")
if event == 'Start streaming':
if streamer_thread:
if streamer_process:
streamer_process.terminate()
streamer_thread.join()
if values['live']:
mode = 'live'
else:
mode = 'replay'
if not values['target_dir']:
print(
"Output directory must be set to a valid path, use browse button to select it.")
continue
if not values['series_id']:
print('Series ID must be set to a value. E.g., 2022-elitserien-baseboll')
continue
if not values['game_id']:
print('Game ID must be set to a value. E.g., 91830')
continue
cmd = ['java', '-jar', resource_path('baseball-streaming.jar'),
'-m', mode,
'-t', values['target_dir'],
'-s', values['series_id'],
'-g', values['game_id']]
if values['seriesstats']:
cmd.append('-l')
streamer_thread = threading.Thread(target=lambda: runCommand(cmd))
streamer_thread.start()