]> git.dabkitsch.com - sfm-player.git/commitdiff
detect first poll for debugging, 1st attempt at handling livestream condition, cleanup
authorequilet <2237372+equilet@users.noreply.github.com>
Fri, 7 Apr 2023 21:36:26 +0000 (14:36 -0700)
committerequilet <2237372+equilet@users.noreply.github.com>
Fri, 7 Apr 2023 21:36:26 +0000 (14:36 -0700)
player.js

index a72fc7add138a0b20a29c6776b2e68f98068ae16..84721260234a11eedeeda938c053bbace66e8f79 100644 (file)
--- 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);