implement always and hash sync

This commit is contained in:
2023-07-12 22:37:08 +00:00
parent e83cde0db7
commit d25ce49ede
4 changed files with 71 additions and 32 deletions

26
scripts/clientsync.js Normal file
View File

@@ -0,0 +1,26 @@
import { requestAPI } from "./utils.js";
export async function setupClientSync (scheme, rate, callback) {
if (scheme === "always") {
callback();
window.setInterval(callback, rate);
}
else if (scheme === "hash") {
const newHash = (await requestAPI("/sync/hash")).data;
localStorage.setItem("sync-current-hash", newHash);
callback();
window.setInterval(async () => {
const newHash = (await requestAPI("/sync/hash")).data;
if (localStorage.getItem("sync-current-hash") !== newHash) {
localStorage.setItem("sync-current-hash", newHash);
callback();
}
}, rate);
}
else if (scheme === "interrupt") {
}
else {
}
}

View File

@@ -1,37 +1,24 @@
import { requestPVE, requestAPI, goToPage, goToURL, instancesConfig, nodesConfig, setTitleAndHeader } from "./utils.js";
import { alert, dialog } from "./dialog.js";
import { PVE } from "../vars.js";
import { setupClientSync } from "./clientsync.js"
window.addEventListener("DOMContentLoaded", init);
let currentHash;
const refreshRate = 5000;
async function init () {
setTitleAndHeader();
const cookie = document.cookie;
if (cookie === "") {
goToPage("login.html");
}
currentHash = (await requestAPI("/sync/hash")).data;
await populateInstances();
const addInstanceBtn = document.querySelector("#instance-add");
addInstanceBtn.addEventListener("click", handleInstanceAdd);
window.setInterval(async () => {
const newHash = (await requestAPI("/sync/hash")).data;
if (currentHash !== newHash) {
currentHash = newHash;
populateInstances();
}
}, refreshRate);
setupClientSync(localStorage.getItem("sync-scheme"), Number(localStorage.getItem("sync-rate")) * 1000, populateInstances);
}
async function populateInstances () {
const newHash = (await requestAPI("/sync/hash")).data;
currentHash = newHash;
const resources = await requestPVE("/cluster/resources", "GET");
const instanceContainer = document.getElementById("instance-container");
const instances = [];

View File

@@ -0,0 +1,22 @@
window.addEventListener("DOMContentLoaded", init);
function init () {
let scheme = localStorage.getItem("sync-scheme");
if (scheme) {
document.querySelector(`#sync-${scheme}`).checked = true;
}
let rate = localStorage.getItem("sync-rate");
if (rate) {
document.querySelector(`#sync-rate`).value = rate;
}
document.querySelector("#settings").addEventListener("submit", handleSaveSettings, false);
}
function handleSaveSettings (event) {
event.preventDefault();
const form = new FormData(document.querySelector("#settings"));
console.log(form.get("sync-scheme"))
localStorage.setItem("sync-scheme", form.get("sync-scheme"));
localStorage.setItem("sync-rate", form.get("sync-rate"));
window.location.reload();
}