aboutsummaryrefslogtreecommitdiff
path: root/cmd/web/js.go
diff options
context:
space:
mode:
authorMitch Riedstra <mitch@riedstra.us>2021-01-09 15:22:27 -0500
committerMitch Riedstra <mitch@riedstra.us>2021-01-09 15:22:27 -0500
commit602790e2ca33ad7f22235bf2ae548cef7db8b814 (patch)
treef79fc9a7f6e019a3f2a774e13d030937b3ae9f86 /cmd/web/js.go
parente31c9168627c040317e5cc8566724f88910439ae (diff)
downloadsteam-export-602790e2ca33ad7f22235bf2ae548cef7db8b814.tar.gz
steam-export-602790e2ca33ad7f22235bf2ae548cef7db8b814.tar.xz
Add a progress bar to the UI for installation via HTTP. Uses polling, but whatever.
Diffstat (limited to 'cmd/web/js.go')
-rw-r--r--cmd/web/js.go109
1 files changed, 109 insertions, 0 deletions
diff --git a/cmd/web/js.go b/cmd/web/js.go
new file mode 100644
index 0000000..0d54fab
--- /dev/null
+++ b/cmd/web/js.go
@@ -0,0 +1,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)
+ }
+}