blob: b793be4045bf75d2c767fd1c650096a9655692fe (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
// 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);
});
|