Passed
Push — master ( e155f9...ca7331 )
by manny
47s queued 11s
created

racetime_obs.refresh_pressed()   A

Complexity

Conditions 2

Size

Total Lines 17
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 17
nop 4
dl 0
loc 17
rs 9.55
c 0
b 0
f 0
1
from threading import Thread
2
from gadgets.ladder_timer import LadderTimer
3
4
import obspython as obs
5
import clients.racetime_client as racetime_client
6
import scripting.coop_scripting as coop_scripting
7
import scripting.media_player_scripting as media_player_scripting
8
import scripting.qualifier_scripting as qualifier_scripting
9
import scripting.setup_scripting as setup_scripting
10
import scripting.timer_scripting as timer_scripting
11
import scripting.ladder_scripting as ladder_scripting
12
from rtgg_obs import RacetimeObs
13
from scripting import fill_race_list, fill_source_list, set_source_text
14
from scripting import ScriptProperties as sp
15
16
rtgg_obs = RacetimeObs()
17
ladder_timer = LadderTimer(rtgg_obs.logger)
18
ladder_scripting.ladder_timer = ladder_timer
19
20
21
def script_description():
22
    return (
23
        "<center>racetime-obs xxVERSIONxx<hr>"
24
        "<p>Select a text source to use as your timer and enter your"
25
        "full username on racetime.gg  (including discriminator). This only"
26
        "needs to be done once.\n\nThen select the race room each race you "
27
        "join and stop worrying about whether you started your timer or not."
28
        "<hr/></p>"
29
    )
30
31
32
def script_load(settings):
33
    rtgg_obs.timer.use_podium_colors = obs.obs_data_get_bool(
34
        settings, "use_podium")
35
36
    rtgg_obs.media_player.last_session_race = obs.obs_data_get_string(
37
        settings, "last_session_race")
38
39
    obs.obs_data_set_string(settings, "race", sp.none_races)
40
41
    race_update_t = Thread(target=rtgg_obs.race_update_thread)
42
    race_update_t.daemon = True
43
    race_update_t.start()
44
45
46
def script_save(settings):
47
    obs.obs_data_set_bool(settings, "use_podium",
48
                          rtgg_obs.timer.use_podium_colors)
49
    obs.obs_data_set_string(
50
        settings, "last_session_race", rtgg_obs.selected_race)
51
52
53
def script_update(settings):
54
    setup_scripting.script_update_setup_settings(settings, rtgg_obs)
55
    timer_scripting.script_update_timer_settings(
56
        settings, rtgg_obs, update_sources
57
    )
58
    coop_scripting.script_update_coop_settings(settings, rtgg_obs)
59
    qualifier_scripting.script_update_qualifier_settings(settings, rtgg_obs)
60
    media_player_scripting.script_update_media_player_settings(
61
        settings, rtgg_obs
62
    )
63
    ladder_scripting.script_update_ladder_settings(settings)
64
65
    rtgg_obs.full_name = obs.obs_data_get_string(settings, "username")
66
67
    rtgg_obs.timer.source_name = obs.obs_data_get_string(settings, "source")
68
69
    rtgg_obs.selected_race = obs.obs_data_get_string(settings, "race")
70
    rtgg_obs.category = obs.obs_data_get_string(settings, "category_filter")
71
72
73
def script_defaults(settings):
74
    obs.obs_data_set_default_string(settings, "race_info", "Race info")
75
    obs.obs_data_set_default_string(settings, "race", "None")
76
    obs.obs_data_set_default_int(settings, "qualifier_cutoff", 3)
77
78
79
def script_properties():
80
    props = obs.obs_properties_create()
81
    setup_scripting.script_setup(
82
        props, new_race_selected, new_category_selected
83
    )
84
85
    refresh = obs.obs_properties_add_button(
86
        props, "button", "Refresh", lambda *props: None)
87
    obs.obs_property_set_modified_callback(refresh, refresh_pressed)
88
    timer_scripting.script_timer_settings(props, rtgg_obs,)
89
    coop_scripting.script_coop_settings(props, rtgg_obs)
90
    qualifier_scripting.script_qualifier_settings(props, rtgg_obs)
91
    media_player_scripting.script_media_player_settings(
92
        props, rtgg_obs, media_player_toggled
93
    )
94
    ladder_scripting.script_ladder_settings(props)
95
96
    return props
97
98
99
def refresh_pressed(props, prop, *args, **kwargs):
100
    fill_source_list(obs.obs_properties_get(props, "source"))
101
    fill_source_list(obs.obs_properties_get(props, "coop_our_source"))
102
    fill_source_list(obs.obs_properties_get(props, "coop_opponent_source"))
103
    fill_source_list(obs.obs_properties_get(props, "qualifier_par_source"))
104
    fill_source_list(obs.obs_properties_get(props, "qualifier_score_source"))
105
    fill_race_list(rtgg_obs, obs.obs_properties_get(props, "race"),
106
                   obs.obs_properties_get(props, "category_filter"))
107
    coop_scripting.fill_coop_entrant_lists(props, rtgg_obs)
108
    if rtgg_obs.race is not None:
109
        rtgg_obs.coop.update_coop_text(rtgg_obs.race, rtgg_obs.full_name)
110
        update_coop_sources()
111
        rtgg_obs.qualifier.update_qualifier_text(
112
            rtgg_obs.race, rtgg_obs.full_name)
113
        rtgg_obs.media_player.race_updated(
114
                rtgg_obs.race, rtgg_obs.full_name)
115
    return True
116
117
118
def new_race_selected(props, prop, settings):
119
    rtgg_obs.race_changed = True
120
    obs.timer_remove(update_sources)
121
122
    rtgg_obs.selected_race = obs.obs_data_get_string(settings, "race")
123
    if rtgg_obs.selected_race == sp.none_races:
124
        rtgg_obs.race = None
125
    if rtgg_obs.selected_race == sp.alttpr_ladder:
126
        rtgg_obs.race = None
127
        ladder_timer.enabled = True
128
    else:
129
        ladder_timer.enabled = False
130
    r = racetime_client.get_race_by_name(rtgg_obs.selected_race)
131
    if r is not None:
132
        rtgg_obs.race = r
133
        rtgg_obs.coop.update_coop_text(rtgg_obs.race, rtgg_obs.full_name)
134
        rtgg_obs.qualifier.update_qualifier_text(
135
            rtgg_obs.race, rtgg_obs.full_name)
136
        rtgg_obs.media_player.race_updated(
137
                rtgg_obs.race, rtgg_obs.full_name)
138
        rtgg_obs.logger.info(f"new race selected: {rtgg_obs.race}")
139
        obs.obs_data_set_default_string(settings, "race_info", r.info)
140
        coop_scripting.fill_coop_entrant_lists(props, rtgg_obs)
141
        rtgg_obs.timer.enabled = True
142
        obs.timer_add(update_sources, 100)
143
    elif ladder_timer.enabled:
144
        obs.timer_add(update_sources, 100)
145
    elif rtgg_obs.preview_mode:
146
        obs.timer_add(update_sources, 100)
147
    else:
148
        obs.obs_data_set_default_string(
149
            settings, "race_info", "Race not found")
150
    return True
151
152
153
def new_category_selected(props, prop, settings):
154
    rtgg_obs.category = obs.obs_data_get_string(settings, "category_filter")
155
    rtgg_obs.logger.info(f"new category selected: {rtgg_obs.category}")
156
    fill_race_list(rtgg_obs, obs.obs_properties_get(props, "race"), prop)
157
    return True
158
159
160
def media_player_toggled(props, prop, settings):
161
    vis = obs.obs_data_get_bool(settings, "use_media_player")
162
    obs.obs_property_set_visible(
163
        obs.obs_properties_get(props, "media_player_group"), vis)
164
    return True
165
166
167
def update_sources():
168
    if rtgg_obs.preview_mode:
169
        update_sources_preview()
170
171
    if rtgg_obs.race is not None:
172
        if rtgg_obs.timer.is_enabled():
173
            color, time = rtgg_obs.timer.get_timer_text(
174
                rtgg_obs.race, rtgg_obs.full_name)
175
            set_source_text(rtgg_obs.timer.source_name, time, color)
176
        update_coop_sources()
177
        if rtgg_obs.qualifier.is_enabled():
178
            set_source_text(rtgg_obs.qualifier.par_source,
179
                            rtgg_obs.qualifier.par_text, None)
180
            set_source_text(rtgg_obs.qualifier.score_source,
181
                            rtgg_obs.qualifier.entrant_score, None)
182
        if rtgg_obs.media_player.enabled:
183
            rtgg_obs.media_player.race_updated(
184
                rtgg_obs.race, rtgg_obs.full_name)
185
    elif ladder_timer.enabled:
186
        color, time = ladder_timer.get_timer_text()
187
        set_source_text(rtgg_obs.timer.source_name, time, color)
188
        stats = ladder_timer.get_stats()
189
        set_source_text(ladder_timer.stats_source, stats, None)
190
191
192
def update_sources_preview():
193
    color, time = rtgg_obs.timer.get_timer_text_preview()
194
    set_source_text(rtgg_obs.timer.source_name, time, color)
195
    if (rtgg_obs.coop.is_enabled()):
196
        rtgg_obs.coop.update_coop_text_preview()
197
        set_source_text(
198
                rtgg_obs.coop.our_time_source,
199
                rtgg_obs.coop.our_time_text,
200
                rtgg_obs.coop.our_time_color
201
            )
202
        set_source_text(
203
                rtgg_obs.coop.opponent_time_source,
204
                rtgg_obs.coop.opponent_time_text,
205
                rtgg_obs.coop.opponent_time_color
206
            )
207
    if (rtgg_obs.qualifier.is_enabled):
208
        rtgg_obs.qualifier.update_qualifier_text_preview()
209
        set_source_text(rtgg_obs.qualifier.par_source,
210
                        rtgg_obs.qualifier.par_text, None)
211
        set_source_text(rtgg_obs.qualifier.score_source,
212
                        rtgg_obs.qualifier.entrant_score, None)
213
214
215
def update_coop_sources():
216
    if rtgg_obs.coop.is_enabled():
217
        rtgg_obs.coop.update_coop_text(rtgg_obs.race, rtgg_obs.full_name)
218
        set_source_text(
219
            rtgg_obs.coop.our_time_source,
220
            rtgg_obs.coop.our_time_text,
221
            rtgg_obs.coop.our_time_color
222
        )
223
        set_source_text(
224
            rtgg_obs.coop.opponent_time_source,
225
            rtgg_obs.coop.opponent_time_text,
226
            rtgg_obs.coop.opponent_time_color
227
        )
228