scripting.media_trigger_scripting   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 87
Duplicated Lines 42.53 %

Importance

Changes 0
Metric Value
eloc 66
dl 37
loc 87
rs 10
c 0
b 0
f 0
wmc 5

5 Functions

Rating   Name   Duplication   Size   Complexity  
A chat_media_trigger_settings() 0 10 1
A media_type_changed() 0 2 1
A media_trigger_settings() 37 37 1
A timer_media_trigger_settings() 0 8 1
A finish_media_trigger_settings() 0 14 1

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
import gettext
2
import os
3
4
import obspython as obs
5
from rtgg_obs import RacetimeObs
6
7
8 View Code Duplication
def media_trigger_settings(props, rtgg_obs: RacetimeObs, index: int):
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated in your project.
Loading history...
9
    lang = gettext.translation(
10
        "racetime-obs", localedir=os.environ['LOCALEDIR'])
11
    _ = lang.gettext
12
13
    media_player_group = obs.obs_properties_create()
14
    name = f"media_trigger_#{index}"
15
    obs.obs_properties_add_group(
16
            props, name, _("Media Trigger #") + f"{index}",
17
            obs.OBS_GROUP_NORMAL, media_player_group
18
        )
19
    obs.obs_property_set_visible(
20
        obs.obs_properties_get(props, "media_player_group"),
21
        rtgg_obs.media_player.enabled
22
    )
23
    obs.obs_properties_add_path(
24
        media_player_group, f"media_path_#{index}",
25
        _("Sound File"), obs.OBS_PATH_FILE,
26
        "Audio Files (*.mp3 *.aac *.wav *.wma)", None
27
    )
28
    p = obs.obs_properties_add_list(
29
        media_player_group, f"trigger_type_#{index}", _("Type of Trigger"),
30
        obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_STRING)
31
    obs.obs_property_list_add_string(p, "", "")
32
    obs.obs_property_list_add_string(p, _("Chat"), "chat")
33
    obs.obs_property_list_add_string(p, _("Finish Place"), "finish")
34
    obs.obs_property_list_add_string(p, _("Timer"), "time")
35
    obs.obs_property_set_modified_callback(p, media_type_changed)
36
    p = obs.obs_properties_add_list(
37
        media_player_group, f"monitoring_type_#{index}", _("Monitoring Type"),
38
        obs.OBS_COMBO_TYPE_LIST, obs.OBS_COMBO_FORMAT_INT)
39
    obs.obs_property_list_add_int(
40
        p, _("Only Listen"), obs.OBS_MONITORING_TYPE_MONITOR_ONLY)
41
    obs.obs_property_list_add_int(
42
        p, _("Only Stream"), obs.OBS_MONITORING_TYPE_NONE)
43
    obs.obs_property_list_add_int(
44
        p, _("Listen and Stream"), obs.OBS_MONITORING_TYPE_MONITOR_AND_OUTPUT)
45
46
47
def media_type_changed(props, prop, settings):
48
    pass
49
50
51
def chat_media_trigger_settings(props, index: int):
52
    lang = gettext.translation(
53
        "racetime-obs", localedir=os.environ['LOCALEDIR'])
54
    _ = lang.gettext
55
56
    obs.obs_properties_add_bool(props, f"trigger_chat_bot_#{index}", _("Bot?"))
57
    obs.obs_properties_add_bool(
58
        props, f"trigger_chat_highlight_#{index}", _("Highlighted?"))
59
    obs.obs_properties_add_bool(
60
        props, f"trigger_chat_system_#{index}", _("System?"))
61
62
63
def finish_media_trigger_settings(props, index: int):
64
    """
65
    Settings for a media trigger based on what place the entrant finishes
66
    """
67
    lang = gettext.translation(
68
        "racetime-obs", localedir=os.environ['LOCALEDIR'])
69
    _ = lang.gettext
70
71
    obs.obs_properties_add_int(
72
        props, f"trigger_finish_place_#{index}", _("Finish Place <="),
73
        1, 10, 1)
74
    obs.obs_properties_add_int(
75
        props, f"trigger_finish_entrants_#{index}", _("Num. Entrants >="),
76
        2, 255, 1)
77
78
79
def timer_media_trigger_settings(props, index: int):
80
    lang = gettext.translation(
81
        "racetime-obs", localedir=os.environ['LOCALEDIR'])
82
    _ = lang.gettext
83
84
    obs.obs_properties_add_float_slider(
85
        props, f"trigger_timer_time_#{index}", _("Start playing at "),
86
        -15.0, 60, 0.1)
87