mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
Actual all jukebox fixing
Turns out all jukeboxes were broken and fixed the issues with enabling config path and ensuring the old songs were merged into new system, as well as making a sorting system to ensure casino and non-casino tracks aren't mixed together.
This commit is contained in:
@@ -2,7 +2,7 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
name = "Media Tracks"
|
||||
flags = SS_NO_FIRE
|
||||
init_order = INIT_ORDER_MEDIA_TRACKS
|
||||
|
||||
|
||||
/// Every track, including secret
|
||||
var/list/all_tracks = list()
|
||||
/// Non-secret jukebox tracks
|
||||
@@ -21,19 +21,19 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
/datum/controller/subsystem/media_tracks/proc/load_tracks()
|
||||
for(var/filename in config.jukebox_track_files)
|
||||
report_progress("Loading jukebox track: [filename]")
|
||||
|
||||
|
||||
if(!fexists(filename))
|
||||
error("File not found: [filename]")
|
||||
continue
|
||||
|
||||
|
||||
var/list/jsonData = json_decode(file2text(filename))
|
||||
|
||||
|
||||
if(!istype(jsonData))
|
||||
error("Failed to read tracks from [filename], json_decode failed.")
|
||||
continue
|
||||
|
||||
|
||||
for(var/entry in jsonData)
|
||||
|
||||
|
||||
// Critical problems that will prevent the track from working
|
||||
if(!istext(entry["url"]))
|
||||
error("Jukebox entry in [filename]: bad or missing 'url'. Tracks must have a URL.")
|
||||
@@ -50,34 +50,34 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
warning("Jukebox entry in [filename], [entry["title"]]: bad or missing 'artist'. Please consider crediting the artist.")
|
||||
if(!istext(entry["genre"]))
|
||||
warning("Jukebox entry in [filename], [entry["title"]]: bad or missing 'genre'. Please consider adding a genre.")
|
||||
|
||||
|
||||
var/datum/track/T = new(entry["url"], entry["title"], entry["duration"], entry["artist"], entry["genre"])
|
||||
|
||||
|
||||
T.secret = entry["secret"] ? 1 : 0
|
||||
T.lobby = entry["lobby"] ? 1 : 0
|
||||
|
||||
|
||||
/// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem
|
||||
T.casino = entry["casino"] ? 1 : 0
|
||||
/// CHOMPstation edit end
|
||||
|
||||
|
||||
all_tracks += T
|
||||
|
||||
/datum/controller/subsystem/media_tracks/proc/sort_tracks()
|
||||
report_progress("Sorting media tracks...")
|
||||
sortTim(all_tracks, /proc/cmp_media_track_asc)
|
||||
|
||||
|
||||
jukebox_tracks.Cut()
|
||||
lobby_tracks.Cut()
|
||||
/// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem
|
||||
casino_tracks.Cut()
|
||||
/// CHOMPstation edit end
|
||||
|
||||
|
||||
for(var/datum/track/T in all_tracks)
|
||||
if(!T.secret)
|
||||
/// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem
|
||||
if(!T.secret && !T.casino)
|
||||
jukebox_tracks += T
|
||||
if(T.lobby)
|
||||
lobby_tracks += T
|
||||
/// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem
|
||||
if(T.casino)
|
||||
casino_tracks += T
|
||||
/// CHOMPstation edit end
|
||||
@@ -86,7 +86,7 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
var/client/C = usr.client
|
||||
if(!check_rights(R_DEBUG|R_FUN))
|
||||
return
|
||||
|
||||
|
||||
// Required
|
||||
var/url = input(C, "REQUIRED: Provide URL for track, or paste JSON if you know what you're doing. See code comments.", "Track URL") as message|null
|
||||
if(!url)
|
||||
@@ -110,7 +110,7 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
* "lobby": plays in the lobby (true/false)
|
||||
* "casino": plays in the casino (true/false) CHOMPstation casino
|
||||
*/
|
||||
|
||||
|
||||
if(islist(json))
|
||||
for(var/song in json)
|
||||
if(!islist(song))
|
||||
@@ -119,18 +119,18 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
var/list/songdata = song
|
||||
if(!songdata["url"] || !songdata["title"] || !songdata["duration"])
|
||||
to_chat(C, "<span class='warning'>URL, Title, or Duration was missing from a song. Skipping.</span>")
|
||||
continue
|
||||
continue
|
||||
var/datum/track/T = new(songdata["url"], songdata["title"], songdata["duration"], songdata["artist"], songdata["genre"], songdata["secret"], songdata["lobby"], songdata["casino"])
|
||||
all_tracks += T
|
||||
|
||||
|
||||
report_progress("New media track added by [C]: [T.title]")
|
||||
sort_tracks()
|
||||
return
|
||||
|
||||
|
||||
var/title = input(C, "REQUIRED: Provide title for track", "Track Title") as text|null
|
||||
if(!title)
|
||||
return
|
||||
|
||||
|
||||
var/duration = input(C, "REQUIRED: Provide duration for track (in deciseconds, aka seconds*10)", "Track Duration") as num|null
|
||||
if(!duration)
|
||||
return
|
||||
@@ -139,11 +139,11 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
var/artist = input(C, "Optional: Provide artist for track", "Track Artist") as text|null
|
||||
if(isnull(artist)) // Cancel rather than empty string
|
||||
return
|
||||
|
||||
|
||||
var/genre = input(C, "Optional: Provide genre for track (try to match an existing one)", "Track Genre") as text|null
|
||||
if(isnull(genre)) // Cancel rather than empty string
|
||||
return
|
||||
|
||||
|
||||
var/secret = tgui_alert(C, "Optional: Mark track as secret?", "Track Secret", list("Yes", "Cancel", "No"))
|
||||
if(secret == "Cancel")
|
||||
return
|
||||
@@ -151,7 +151,7 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
secret = TRUE
|
||||
else
|
||||
secret = FALSE
|
||||
|
||||
|
||||
var/lobby = tgui_alert(C, "Optional: Mark track as lobby music?", "Track Lobby", list("Yes", "Cancel", "No"))
|
||||
if(lobby == "Cancel")
|
||||
return
|
||||
@@ -171,15 +171,15 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
/// CHOMPstation edit end
|
||||
|
||||
var/datum/track/T = new(url, title, duration, artist, genre)
|
||||
|
||||
|
||||
T.secret = secret
|
||||
T.lobby = lobby
|
||||
/// CHOMPstation edit start: Jack - Injecting casino track into new jukebox subsystem
|
||||
T.casino = casino
|
||||
/// CHOMPstation edit end
|
||||
|
||||
|
||||
all_tracks += T
|
||||
|
||||
|
||||
report_progress("New media track added by [C]: [title]")
|
||||
sort_tracks()
|
||||
|
||||
@@ -191,7 +191,7 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
var/track = input(C, "Input track title or URL to remove (must be exact)", "Remove Track") as text|null
|
||||
if(!track)
|
||||
return
|
||||
|
||||
|
||||
for(var/datum/track/T in all_tracks)
|
||||
if(T.title == track || T.url == track)
|
||||
all_tracks -= T
|
||||
@@ -199,7 +199,7 @@ SUBSYSTEM_DEF(media_tracks)
|
||||
report_progress("Media track removed by [C]: [track]")
|
||||
sort_tracks()
|
||||
return
|
||||
|
||||
|
||||
to_chat(C, "<span class='warning>Couldn't find a track matching the specified parameters.</span>")
|
||||
|
||||
/datum/controller/subsystem/media_tracks/vv_get_dropdown()
|
||||
|
||||
Reference in New Issue
Block a user