Passed
Push — master ( 518ae3...863c37 )
by manny
46s queued 12s
created

racetime_obs.new_race_selected()   A

Complexity

Conditions 3

Size

Total Lines 25
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

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