-//not using this but maybe if we can't get custom player to work
-//https://playerjs.com/docs/en=code
+//sfm player interaction and data management
//use live-info to get the current show/track, which holds the show ID
-var atpro_liveinfo = "https://sutrofm.airtime.pro/api/live-info-v2";
-var track_title, artist_name, show_title, player_status, status_color = new String();
-var bitrate, samplerate, track_chans, track_cuein, track_cueout = new Number();
-//track_len
-//file_size
-var desc, filename, image_url = new String;
-
-//var p_track_title, p_artist_name, p_show_title, p_bitrate, p_samplerate, p_track_len, p_track_chans, p_track_cuein, p_track_cueout, p_file_size, p_desc, p_filename;
-
+var atpro_liveinfo2 = "https://sutrofm.airtime.pro/api/live-info-v2";
+var atpro_liveinfo1 = "https://sutrofm.airtime.pro/api/live-info";
+var track_title, artist_name, show_title, player_status, status_color, stream_type = new String();
+//var bitrate, samplerate, track_chans, track_cuein, track_cueout = new Number();
+var desc, image_url = new String;
+var pressed = new Boolean;
const audiostr = document.getElementById('player-widget');
const btn = document.getElementById('button');
-btn.classList.add('play');
-let pressed = false;
-
-btn.addEventListener('click', function() {
- pressed = !pressed;
+//var p_track_title, p_artist_name, p_show_title, p_bitrate, p_samplerate, p_track_chans, p_track_cuein, p_track_cueout, p_desc;
- if(pressed){
- btn.classList.add('pause');
- btn.classList.remove('play');
- audiostr.play();
- } else {
- btn.classList.add('play');
- btn.classList.remove('pause');
- audiostr.pause();
- }
- console.log('toggled:', pressed);
-});
+//--------------------------------------------------------------------//
+//--------------------------------------------------------------------//
+//JSON loading
function xhrSuccess() {
this.callback.apply(this, this.arguments);
xhr.send(null);
}
+
+//--------------------------------------------------------------------//
+//--------------------------------------------------------------------//
+//Graphical updates
+
function showText(){
- var title = document.getElementById('track-name');
- var artist = document.getElementById('track-artist');
var show = document.getElementById('track-show');
- var br = document.getElementById('bitrate');
- var sr = document.getElementById('samplerate');
- var chans = document.getElementById('trackchans');
+ var artist = document.getElementById('track-artist');
+ var episode = document.getElementById('track-name');
+
+ //var br = document.getElementById('bitrate');
+ //var sr = document.getElementById('samplerate');
+ //var chans = document.getElementById('trackchans');
+ var descr = document.getElementById('desc');
var stat = document.getElementById('status');
- //var fpath = document.getElementById('fname');
- //var len = document.getElementById('tracklen');
- //var fsize = document.getElementById('filesize');
- //var desc = document.getElementById('desc');
-
- title.innerHTML = "episode: " + track_title;
- artist.innerHTML = "host/dj: " + artist_name;
- show.innerHTML = "SFM show title: " + show_title;
- br.innerHTML = "bitrate: " + bitrate / 1000. + "Kbps";
- sr.innerHTML = "sample rate: " + samplerate / 1000. + "kHz";
- chans.innerHTML = "channels: " + track_chans;
+
+ show.innerHTML = "SFM broadcasting: " + show_title;
+ artist.innerHTML = "host/dj/artist: " + artist_name;
+
+ //track_title show_title artist_name
+ //if it's a live stream it's not an episode, generally
+ if(track_title == null){
+ episode.style.visibility = 'hidden';
+ }else{
+ episode.style.visibility = 'visible';
+ episode.innerHTML = "episode: " + track_title;
+ }
+
+ //br.innerHTML = "bitrate: " + bitrate / 1000. + "Kbps";
+ //sr.innerHTML = "sample rate: " + samplerate / 1000. + "kHz";
+ //chans.innerHTML = "channels: " + track_chans;
+ descr.innerHTML = "description: " + desc;
stat.innerHTML = "status: " + player_status;
stat.style.color = status_color;
- //fpath.innerHTML = "file name: " + filename;
- //len.innerHTML = "file length: " + track_len;
- //fsize.innerHTML = "file size: " + file_size * 0.000001 + " megabytes";
}
function showImage(){
img.src = image_url;
}
+//--------------------------------------------------------------------//
+//--------------------------------------------------------------------//
+//Parser / setters
+
+//var testfirst = true;
+function parseJSON2(message) {
+
+ /*
+ if(testfirst){
+ console.log(`${message} ${this.responseText}`);
+ testfirst = false;
+ }
+ */
-function parseJSON(message) {
- //console.log(`${message} ${this.responseText}`);
var result = this.responseText;
var jsonp = JSON.parse(result);
+ var status_main = jsonp.station.source_enabled;
+ var show_curr = jsonp.shows.current;
+ var track_curr = jsonp.tracks.current;
//var prev = jsonp.tracks.previous;
//var pmeta = prev.metadata;
image_url = "https://sketch.dabkitsch.com/custom_player/SUTROFM-logo.png"
-
- if(jsonp.tracks.current != null) {
- //curr track main info
- var track_curr = jsonp.tracks.current;
- var show_curr = jsonp.shows.current;
+
+ //not a track but a live DJ stream
+ if(status_main == "Live DJ"){
+
+ //for live streams we need to put the artist name in description field
+ //artist name is more universal than episode, or show name
+ //this also allows us to do one-offs
+ artist_name = show_curr.description;
+
+ //not a show episode, necessarily
+ track_title = null;
+
+ //manual fields
+ show_title = track_curr.name; //this is taken from the stream
+ player_status = "sfm live stream";
+ status_color = "#60af5e";
+ //fake some data for now
+ //bitrate = "192000";
+ //samplerate = "44100";
+ //track_chans = "2"
+ desc = "n/a";
+
+ return;
+
+ //valid (normal) show, whether scheduled manually or via AutoDJ
+ }else if(show_curr != null) {
+
+ //console.log("detected other: ", jsonp.station.source_enabled);
+
//curr track metadata
var meta = track_curr.metadata;
+ //strings
track_title = meta.track_title;
artist_name = meta.artist_name;
- show_title = meta.album_title;
- filename = meta.filepath;
-
- bitrate = meta.bit_rate;
- samplerate = meta.sample_rate;
- //track_len = meta.length;
- track_chans = meta.channels;
- track_cuein = meta.cuein;
- track_cueout = meta.cueout;
- //file_size = meta.filesize;
+ show_title = show_curr.name;
+ //show_title = meta.album_title;
+
+ //numbers
+ //bitrate = meta.bit_rate;
+ //samplerate = meta.sample_rate;
+ //track_chans = meta.channels;
+ //track_cuein = meta.cuein;
+ //track_cueout = meta.cueout;
desc = meta.description;
-
+
if(show_curr.auto_dj == true){
player_status = "off-the-air rotation";
status_color = "#7b44a2";
+ //figure out what to do here w/r/t loading a default show image
}else{
var id = show_curr.id;
image_url = "https://sutrofm.airtime.pro/api/show-logo?id=" + show_curr.id;
- player_status = "sfm live";
+ player_status = "sfm live show";
console.log("image url: ", image_url, '\n');
status_color = "#60af5e";
}
} else {
+ console.log("not a show");
track_title = "--- no track currently";
artist_name = "--- no artist currently";
show_title = "--- no show currently";
- filename = "--- no file currently";
player_status = "--- off the air"
status_color = "#898989";
}
- //console.log("title: ", prev.track_title);
- //title.innerHTML = title_text;
showText();
showImage();
-
}
-function update_text(){
- //console.log("update text called\n");
- loadData(atpro_liveinfo, parseJSON, "JSON: ");
- showText();
-}
+//--------------------------------------------------------------------//
+//--------------------------------------------------------------------//
+//Initialization
+
+function init(){
+ //loadData(atpro_liveinfo1, parseJSON1, "JSONv1: ");
+ loadData(atpro_liveinfo2, parseJSON2, "JSONv2: ");
+
+ btn.classList.add('play');
+ let pressed = false;
+
+ btn.addEventListener('click', function() {
+ pressed = !pressed;
+
+ if(pressed){
+ btn.classList.add('pause');
+ btn.classList.remove('play');
+ audiostr.play();
+ } else {
+ btn.classList.add('play');
+ btn.classList.remove('pause');
+ audiostr.pause();
+ }
+ console.log('toggled:', pressed);
+ });
+}
if (document.readyState === "loading") {
- document.addEventListener("DOMContentLoaded", loadData(atpro_liveinfo, parseJSON, "JSON: "));
+ document.addEventListener("DOMContentLoaded", init());
} else {
- loadData(atpro_liveinfo, parseJSON, "JSON: ");
+ init();
+}
+
+function update_text(){
+ //console.log("update text called\n");
+ //loadData(atpro_liveinfo1, parseJSON1, "JSONv1: ");
+ loadData(atpro_liveinfo2, parseJSON2, "JSONv2: ");
+ showText();
}
setInterval(update_text, 2000);