aboutsummaryrefslogtreecommitdiff
path: root/cmd/web/js.go
blob: 0d54fabcf934b86a24fca5b698d50d8500022598 (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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package main

import (
	// "io/ioutil"
	"net/http"
)

func jsHandler(w http.ResponseWriter, r *http.Request) {
	w.Header().Add("Content-type", "application/javascript")
	_, err := w.Write([]byte(`
// 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 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 + "%";
		elem.style.display = "";

		// 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 + "%";
		msg.innerHTML = "Completed install for: " + stat.Url;
		elem.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);
		elem.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);
});
`))

	/*
		b, err := ioutil.ReadFile("C:\\Users\\mitch\\Documents\\my.js")
		if err != nil {
			Logger.Printf("While reading js: %s", err)
			return
		}
		_, err = w.Write(b)
	*/

	if err != nil {
		Logger.Printf("While sending js: %s", err)
	}
}