mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-12 03:02:54 +00:00
64 lines
2.0 KiB
Plaintext
64 lines
2.0 KiB
Plaintext
//
|
|
// Load the list of available music tracks for the jukebox (or other things that use music)
|
|
//
|
|
|
|
// Music track available for playing in a media machine.
|
|
/datum/track
|
|
var/url // URL to load song from
|
|
var/title // Song title
|
|
var/artist // Song's creator
|
|
var/duration // Song length in deciseconds
|
|
var/secret // Show up in regular playlist or secret playlist?
|
|
var/lobby // Be one of the choices for lobby music?
|
|
|
|
/datum/track/New(var/url, var/title, var/duration, var/artist = "", var/secret = 0, var/lobby = 0)
|
|
src.url = url
|
|
src.title = title
|
|
src.artist = artist
|
|
src.duration = duration
|
|
src.secret = secret
|
|
src.lobby = lobby
|
|
|
|
/datum/track/proc/display()
|
|
var str = "\"[title]\""
|
|
if(artist)
|
|
str += " by [artist]"
|
|
return str
|
|
|
|
/datum/track/proc/toNanoList()
|
|
return list("ref" = "\ref[src]", "title" = title, "artist" = artist, "duration" = duration)
|
|
|
|
|
|
// Global list holding all configured jukebox tracks
|
|
var/global/list/all_jukebox_tracks = list()
|
|
var/global/list/all_lobby_tracks = list()
|
|
|
|
// Read the jukebox configuration file on system startup.
|
|
/hook/startup/proc/load_jukebox_tracks()
|
|
var/jukebox_track_file = "config/jukebox.json"
|
|
if(!fexists(jukebox_track_file))
|
|
warning("File not found: [jukebox_track_file]")
|
|
return
|
|
var/list/jsonData = json_decode(file2text(jukebox_track_file))
|
|
if(!istype(jsonData))
|
|
warning("Failed to read tracks from [jukebox_track_file], json_decode failed.")
|
|
for(var/entry in jsonData)
|
|
if(!istext(entry["url"]))
|
|
warning("[jukebox_track_file] entry [entry]: bad or missing 'url'")
|
|
continue
|
|
if(!istext(entry["title"]))
|
|
warning("[jukebox_track_file] entry [entry]: bad or missingg 'title'")
|
|
continue
|
|
if(!isnum(entry["duration"]))
|
|
warning("[jukebox_track_file] entry [entry]: bad or missing 'duration'")
|
|
continue
|
|
var/datum/track/T = new(entry["url"], entry["title"], entry["duration"])
|
|
if(istext(entry["artist"]))
|
|
T.artist = entry["artist"]
|
|
T.secret = entry["secret"] ? 1 : 0
|
|
T.lobby = entry["lobby"] ? 1 : 0
|
|
all_jukebox_tracks += T
|
|
if(T.lobby)
|
|
all_lobby_tracks += T
|
|
return 1
|