From 3b0937ff1f533e44870fa8e9d1de2bd834160fa6 Mon Sep 17 00:00:00 2001 From: equilet <2237372+equilet@users.noreply.github.com> Date: Fri, 7 Apr 2023 14:36:26 -0700 Subject: [PATCH] detect first poll for debugging, 1st attempt at handling livestream condition, cleanup --- player.js | 210 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 134 insertions(+), 76 deletions(-) diff --git a/player.js b/player.js index a72fc7a..8472126 100644 --- a/player.js +++ b/player.js @@ -1,36 +1,20 @@ -//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); @@ -50,31 +34,41 @@ function loadData(url, callback, ...args) { 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(){ @@ -82,75 +76,139 @@ 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); -- 2.34.1