Files
Vesktop/static/views/updater/script.js
2025-10-19 03:34:50 +02:00

70 lines
2.5 KiB
JavaScript

const { update, version: currentVersion } = await VesktopUpdaterNative.getData();
document.getElementById("current-version").textContent = currentVersion;
document.getElementById("new-version").textContent = update.version;
document.getElementById("release-notes").innerHTML = update.releaseNotes
.map(
({ version, note: html }) => `
<section>
<h3>Version ${version}</h3>
<div>${html.replace(/<\/?h([1-3])/g, (m, level) => m.replace(level, Number(level) + 3))}</div>
</section>
`
)
.join("\n");
document.querySelectorAll("a").forEach(a => {
a.target = "_blank";
});
// remove useless headings
document.querySelectorAll("h3, h4, h5, h6").forEach(h => {
if (h.textContent.trim().toLowerCase() === "what's changed") {
h.remove();
}
});
/** @type {HTMLDialogElement} */
const updateDialog = document.getElementById("update-dialog");
/** @type {HTMLDialogElement} */
const installingDialog = document.getElementById("installing-dialog");
/** @type {HTMLProgressElement} */
const downloadProgress = document.getElementById("download-progress");
/** @type {HTMLElement} */
const errorText = document.getElementById("error");
document.getElementById("update-button").addEventListener("click", () => {
downloadProgress.value = 0;
errorText.textContent = "";
if (navigator.platform.startsWith("Linux")) {
document.getElementById("linux-note").classList.remove("hidden");
}
updateDialog.showModal();
VesktopUpdaterNative.installUpdate().then(() => {
downloadProgress.value = 100;
updateDialog.closedBy = "any";
installingDialog.showModal();
updateDialog.classList.add("hidden");
});
});
document.getElementById("later-button").addEventListener("click", () => VesktopUpdaterNative.snoozeUpdate());
document.getElementById("ignore-button").addEventListener("click", () => {
const confirmed = confirm(
"Are you sure you want to ignore this update? You will not be notified about this update again. Updates are important for security and stability."
);
if (confirmed) VesktopUpdaterNative.ignoreUpdate();
});
VesktopUpdaterNative.onProgress(percent => (downloadProgress.value = percent));
VesktopUpdaterNative.onError(message => {
updateDialog.closedBy = "any";
errorText.textContent = `An error occurred while downloading the update: ${message}`;
installingDialog.close();
updateDialog.classList.remove("hidden");
});