Passed
Pull Request — master (#7)
by manny
04:09
created

racetime_obs.script_save()   A

Complexity

Conditions 1

Size

Total Lines 5
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 5
nop 1
dl 0
loc 5
rs 10
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
    else:
146
        obs.obs_data_set_default_string(
147
            settings, "race_info", "Race not found")
148
    return True
149
150
151
def new_category_selected(props, prop, settings):
152
    rtgg_obs.category = obs.obs_data_get_string(settings, "category_filter")
153
    rtgg_obs.logger.info(f"new category selected: {rtgg_obs.category}")
154
    fill_race_list(rtgg_obs, obs.obs_properties_get(props, "race"), prop)
155
    return True
156
157
158
def media_player_toggled(props, prop, settings):
159
    vis = obs.obs_data_get_bool(settings, "use_media_player")
160
    obs.obs_property_set_visible(
161
        obs.obs_properties_get(props, "media_player_group"), vis)
162
    return True
163
164
165
def update_sources():
166
    if rtgg_obs.race is not None:
167
        if rtgg_obs.timer.is_enabled():
168
            color, time = rtgg_obs.timer.get_timer_text(
169
                rtgg_obs.race, rtgg_obs.full_name)
170
            set_source_text(rtgg_obs.timer.source_name, time, color)
171
        update_coop_sources()
172
        if rtgg_obs.qualifier.is_enabled():
173
            set_source_text(rtgg_obs.qualifier.par_source,
174
                            rtgg_obs.qualifier.par_text, None)
175
            set_source_text(rtgg_obs.qualifier.score_source,
176
                            rtgg_obs.qualifier.entrant_score, None)
177
        if rtgg_obs.media_player.enabled:
178
            rtgg_obs.media_player.race_updated(
179
                rtgg_obs.race, rtgg_obs.full_name)
180
    elif ladder_timer.enabled:
181
        color, time = ladder_timer.get_timer_text()
182
        set_source_text(rtgg_obs.timer.source_name, time, color)
183
        stats = ladder_timer.get_stats()
184
        set_source_text(ladder_timer.stats_source, stats, None)
185
186
187
def update_coop_sources():
188
    if rtgg_obs.coop.is_enabled():
189
        rtgg_obs.coop.update_coop_text(rtgg_obs.race, rtgg_obs.full_name)
190
        set_source_text(
191
            rtgg_obs.coop.our_time_source,
192
            rtgg_obs.coop.our_time_text,
193
            rtgg_obs.coop.our_time_color
194
        )
195
        set_source_text(
196
            rtgg_obs.coop.opponent_time_source,
197
            rtgg_obs.coop.opponent_time_text,
198
            rtgg_obs.coop.opponent_time_color
199
        )
200