]> git.basschouten.com Git - pithrottler.git/commitdiff
Add update code to the Web GUI.
authorBas Schouten <bas@basschouten.com>
Mon, 22 Apr 2024 09:27:54 +0000 (10:27 +0100)
committerBas Schouten <bas@basschouten.com>
Mon, 22 Apr 2024 09:27:54 +0000 (10:27 +0100)
html/index.html
pithrottler.js

index d82b11dd1cda8f073bdbc78ab0c1b128fa01c07c..3566a3437fd3cc65e563baf8dcdcd4868e96d67b 100644 (file)
       fetch("/set?latency=" + document.getElementById("latencyRange").value + "&ploss=" + document.getElementById("plossRange").value + "&throughput=" + document.getElementById("tpRange").value);
     }
 
+    async function checkForUpdates() {
+      const updateAvailable = await fetch("/checkupdate");\r
+      if (await updateAvailable.text() == "0") {\r
+        document.getElementById("updateStatus").innerHTML = "Up to date.";\r
+      } else {\r
+        document.getElementById("updateStatus").innerHTML = "An update is available.";\r
+        document.getElementById("updateButton").style.display = "";\r
+      }\r
+    }
+
+    async function runUpdate() {
+      document.getElementById("updateStatus").innerHTML = "Updating...";
+      document.getElementById("updateButton").style.display = "none";
+      const updateAvailable = await fetch("/runupdate");\r
+      location.reload();\r
+    }
+
     function loadPresets() {
       let innerhtml = "";
       for (type in presets) {
 </head>
 <body onload="loadPresets();">
   <select id="preset" onchange="changePreset();">
-
   </select>
-<div class="slidecontainer">
-  Latency<br />
-  <input type="range" min="0" max="1000" style="width:400px;" value="0" class="slider" id="latencyRange" oninput="document.getElementById('latency').innerHTML = this.value;"> <span id="latency">0</span> ms
-</div>
-<div class="slidecontainer">
-  Packet Loss<br />
-  <input type="range" min="0" max="95" style="width:400px;" value="0" class="slider" id="plossRange" oninput="document.getElementById('ploss').innerHTML = this.value;"> <span id="ploss">0</span> %
-</div>
-<div class="slidecontainer">
-  Throughput Limitation (0 for unlimited)<br />
-  <input type="range" min="0" max="20000" style="width:400px;" value="0" class="slider" id="tpRange" oninput="document.getElementById('tp').innerHTML = this.value;"> <span id="tp">0</span> kb/s
-</div>
-<button onclick="saveSettings();">Save Settings</button>
+  <div class="slidecontainer">
+    Latency<br />
+    <input type="range" min="0" max="1000" style="width:400px;" value="0" class="slider" id="latencyRange" oninput="document.getElementById('latency').innerHTML = this.value;"> <span id="latency">0</span> ms
+  </div>
+  <div class="slidecontainer">
+    Packet Loss<br />
+    <input type="range" min="0" max="95" style="width:400px;" value="0" class="slider" id="plossRange" oninput="document.getElementById('ploss').innerHTML = this.value;"> <span id="ploss">0</span> %
+  </div>
+  <div class="slidecontainer">
+    Throughput Limitation (0 for unlimited)<br />
+    <input type="range" min="0" max="20000" style="width:400px;" value="0" class="slider" id="tpRange" oninput="document.getElementById('tp').innerHTML = this.value;"> <span id="tp">0</span> kb/s
+  </div>
+  <button onclick="saveSettings();">Save Settings</button>
+  <button onclick="checkForUpdates();">Check for Updates</button>
+  <div id="updateStatus"></div>
+  <button onclick="runUpdate();" style="display:none;" id="updateButton">Update PiThrottler</button>
 </body>
 </html>
\ No newline at end of file
index c8a01ac73d2a42cb0f9d5134a1e8336fbfb6ecf5..bef8773986ae9599c8ae9f493524d4df1e9ea750 100644 (file)
@@ -8,6 +8,37 @@ var serve = serveStatic("./html");
 const app = (req, res) => {
   console.log(new Date(), req.url);
 
+  if (req.url.startsWith("/checkupdate")) {
+    res.statusCode = 200;
+    res.setHeader('Content-Type', 'text/plain');
+    res.setHeader('Access-Control-Allow-Origin', '*');
+
+    exec('git ls-remote -q origin master', function (error, stdout, stderr) {
+      let remoteRevision = stdout.substring(0, 40);
+      exec('git rev-parse HEAD', function (error, stdout, stderr) {
+        console.log(remoteRevision);
+        console.log(stdout);
+        if (remoteRevision != stdout) {
+          res.end("1");\r
+        } else {
+          res.end("0");\r
+        }
+      });
+    });
+    return;
+  }
+
+  if (req.url.startsWith("/runupdate")) {
+    res.statusCode = 200;
+    res.setHeader('Content-Type', 'text/plain');
+    res.setHeader('Access-Control-Allow-Origin', '*');
+
+    exec('./install.sh', function (error, stdout, stderr) {
+        res.end("Done");\r
+    });
+    return;
+  }
+
   if (req.url.startsWith("/set")) {
     let searchParams = new URL("http://localhost:2121" + req.url).searchParams;