// pretty print duration when given in seconds function formatDuration(dur) { var out = ""; var hours = 0; var minutes = 0; if(dur > (60*60)){ hours = Math.trunc(dur/(60*60)) out = out + hours + " hours " } if(dur > 60){ minutes = Math.trunc((dur-(hours*60*60))/60) out = out + minutes + " minutes " } seconds = Math.trunc(dur - ( (hours*60*60) + (minutes*60) )) out = out + seconds + " seconds " return out; } function setStatus(stat) { var barContainer = document.getElementById("installBarContainer"); var elem = document.getElementById("installBar"); var msg = document.getElementById("message"); // console.log(stat) if(stat.Running) { percent = Math.round((stat.Transferred/stat.Size)*10000)/100; var t = Date.parse(stat.Start); // var n = Date.now(); var elapsed = Date.now() - t; var trans = (stat.Transferred/1024/1024); console.log(trans) console.log(elapsed / 1000) var rate = Math.round(trans / (elapsed / 1000)) elem.style.width = percent + "%"; elem.innerHTML = percent + "%"; barContainer.style.display = ""; elem.ariaValueNow = percent; // in seconds var eta = Math.round(((stat.Size - trans)/1024/1024) / rate); msg.innerHTML = "Installing: " + stat.Url + "\nRate: " + rate + "mb/s" + "\nEta: " + formatDuration(eta); msg.style.display = ""; } if(!stat.Running && stat.Transferred >= 50 && stat.Error == null) { elem.style.width = 100 + "%"; elem.innerHTML = 100 + "%"; elem.ariaValueNow = 100; msg.innerHTML = "Completed install for: " + stat.Url; barContainer.style.display = ""; msg.style.display = ""; } if(stat.Error != null) { msg.innerHTML = "Errors encountered while installing from: \n\n" + stat.Url + "\n\n" + JSON.stringify(stat.Error, undefined, 2); barContainer.style.display = "hidden"; msg.style.display = ""; } } function updateStatus() { window.fetch('/status') .then(function(response){ return response.json(); }).then(function(json){ return setStatus(json); }); } document.addEventListener("DOMContentLoaded",function(){ setInterval(updateStatus, 750); });