|
1 | 1 | /obj/machinery/jukebox |
2 | 2 | var/list/custom_songs = list() |
3 | 3 | var/internet_track_selected = null |
| 4 | + var/internet_playing = FALSE |
4 | 5 |
|
5 | 6 | /obj/machinery/jukebox/ui_data(mob/user) |
6 | 7 | var/list/data = ..() |
7 | 8 | data["internet_sound_enabled"] = CONFIG_GET(flag/request_internet_sound) ? TRUE : FALSE |
8 | 9 |
|
9 | 10 | if(internet_track_selected) |
10 | 11 | data["track_selected"] = internet_track_selected |
| 12 | + if(internet_playing) |
| 13 | + data["active"] = TRUE |
11 | 14 |
|
12 | 15 | var/list/all_songs = data["songs"] |
13 | 16 | if(!all_songs) |
|
27 | 30 | return data |
28 | 31 |
|
29 | 32 | /obj/machinery/jukebox/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) |
30 | | - switch(action) |
31 | | - if("select_track") |
32 | | - var/track_name = params["track"] |
| 33 | + if(action == "select_track") |
| 34 | + var/track_name = params["track"] |
33 | 35 |
|
34 | | - if(custom_songs[track_name]) |
35 | | - internet_track_selected = track_name |
| 36 | + if(custom_songs[track_name]) |
| 37 | + internet_track_selected = track_name |
| 38 | + internet_playing = TRUE |
36 | 39 |
|
37 | | - if(hascall(src, "turn_off")) |
38 | | - call(src, "turn_off")() |
39 | | - else if(hascall(src, "stop_playing")) |
40 | | - call(src, "stop_playing")() |
41 | | - else |
42 | | - ..("toggle", params, ui, state) |
| 40 | + var/mob/user = ui.user |
| 41 | + if(user) |
| 42 | + var/sound/mute_sound = sound(null) |
| 43 | + mute_sound.channel = CHANNEL_JUKEBOX |
| 44 | + SEND_SOUND(user, mute_sound) |
43 | 45 |
|
44 | | - var/mob/user = ui.user |
45 | | - var/request_url = custom_songs[track_name] |
| 46 | + if(hascall(src, "turn_off")) |
| 47 | + call(src, "turn_off")() |
| 48 | + else if(hascall(src, "stop_playing")) |
| 49 | + call(src, "stop_playing")() |
46 | 50 |
|
47 | | - if(user && user.client) |
48 | | - to_chat(user, span_info("Playing internet stream: [track_name]..."), confidential = TRUE) |
49 | | - GLOB.requests.music_request(user.client, request_url, null) |
| 51 | + var/request_url = custom_songs[track_name] |
| 52 | + if(user && user.client) |
| 53 | + to_chat(user, span_info("Playing internet stream: [track_name]..."), confidential = TRUE) |
| 54 | + GLOB.requests.music_request(user.client, request_url, null) |
50 | 55 |
|
51 | | - update_static_data_for_all_viewers() |
52 | | - return TRUE |
53 | | - else |
54 | | - internet_track_selected = null |
| 56 | + update_static_data_for_all_viewers() |
| 57 | + return TRUE |
| 58 | + else |
| 59 | + internet_track_selected = null |
| 60 | + internet_playing = FALSE |
55 | 61 |
|
56 | | - if("request_internet_track") |
| 62 | + if(action == "toggle") |
| 63 | + if(internet_track_selected) |
| 64 | + internet_playing = !internet_playing |
57 | 65 | var/mob/user = ui.user |
58 | | - if(!user || !user.client) |
59 | | - return TRUE |
60 | 66 |
|
61 | | - if(!CONFIG_GET(flag/request_internet_sound)) |
62 | | - to_chat(user, span_danger("This server has disabled internet sound requests."), confidential = TRUE) |
63 | | - return TRUE |
| 67 | + if(!internet_playing) |
| 68 | + if(user) |
| 69 | + var/sound/mute_sound = sound(null) |
| 70 | + mute_sound.channel = CHANNEL_JUKEBOX |
| 71 | + SEND_SOUND(user, mute_sound) |
| 72 | + else |
| 73 | + var/request_url = custom_songs[internet_track_selected] |
| 74 | + if(user && user.client) |
| 75 | + GLOB.requests.music_request(user.client, request_url, null) |
64 | 76 |
|
65 | | - if(user.client.prefs.muted & MUTE_INTERNET_REQUEST) |
66 | | - to_chat(user, span_danger("You cannot play music at this time. (muted)."), confidential = TRUE) |
67 | | - return TRUE |
| 77 | + update_static_data_for_all_viewers() |
| 78 | + return TRUE |
| 79 | + |
| 80 | + if(action == "request_internet_track") |
| 81 | + var/mob/user = ui.user |
| 82 | + if(!user || !user.client) |
| 83 | + return TRUE |
68 | 84 |
|
69 | | - INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/jukebox, handle_internet_request), user) |
| 85 | + if(!CONFIG_GET(flag/request_internet_sound)) |
| 86 | + to_chat(user, span_danger("This server has disabled internet sound requests."), confidential = TRUE) |
70 | 87 | return TRUE |
71 | 88 |
|
| 89 | + if(user.client.prefs.muted & MUTE_INTERNET_REQUEST) |
| 90 | + to_chat(user, span_danger("You cannot play music at this time. (muted)."), confidential = TRUE) |
| 91 | + return TRUE |
| 92 | + |
| 93 | + INVOKE_ASYNC(src, TYPE_PROC_REF(/obj/machinery/jukebox, handle_internet_request), user) |
| 94 | + return TRUE |
| 95 | + |
72 | 96 | if(..()) |
73 | | - var/track_name = params["track"] |
74 | | - if(action == "select_track" && !custom_songs[track_name]) |
75 | | - internet_track_selected = null |
76 | | - update_static_data_for_all_viewers() |
77 | 97 | return TRUE |
78 | 98 |
|
79 | 99 | return FALSE |
|
100 | 120 | var/display_name = "🌐 | [track_title]" |
101 | 121 | custom_songs[display_name] = request_url |
102 | 122 | internet_track_selected = display_name |
| 123 | + internet_playing = TRUE |
| 124 | + |
| 125 | + if(user) |
| 126 | + var/sound/mute_sound = sound(null) |
| 127 | + mute_sound.channel = CHANNEL_JUKEBOX |
| 128 | + SEND_SOUND(user, mute_sound) |
103 | 129 |
|
104 | 130 | if(hascall(src, "turn_off")) |
105 | 131 | call(src, "turn_off")() |
|
0 commit comments