Dateien
VG-Environment/src/dashboard/dashboard.js
T

147 Zeilen
4.3 KiB
JavaScript

"use strict";
const dashboardStatus = document.getElementById("dashboard-status");
const officialGvlLocalVersion = document.getElementById(
"official-gvl-local-version"
);
const officialGvlLastCheck = document.getElementById("official-gvl-last-check");
const officialGvlLastRealCheck = document.getElementById(
"official-gvl-last-real-check"
);
const officialGvlNextAllowedCheck = document.getElementById(
"official-gvl-next-allowed-check"
);
const officialGvlResult = document.getElementById("official-gvl-result");
const officialGvlVersionChange = document.getElementById(
"official-gvl-version-change"
);
const storeCells = {
consent_states: document.getElementById("store-consent-states"),
consent_events: document.getElementById("store-consent-events"),
observed_requests: document.getElementById("store-observed-requests"),
gvl_snapshots: document.getElementById("store-gvl-snapshots"),
gvl_snapshot_events: document.getElementById("store-gvl-snapshot-events")
};
document.addEventListener("DOMContentLoaded", async () => {
await renderEvidenceStatus();
await renderOfficialGvlStatus();
});
async function renderEvidenceStatus() {
try {
const status = await browser.runtime.sendMessage({
type: "get_evidence_retention_status"
});
if (!status?.success) {
throw new Error(status?.error ?? "get_evidence_retention_status_failed");
}
renderStoreCounts(status.storeCounts ?? {});
renderStatusMessage("Lokaler Beobachtungsstatus geladen");
} catch (error) {
renderStatusMessage("Lokaler Beobachtungsstatus konnte nicht geladen werden");
console.warn("VendorGet-IV dashboard status failed", error);
}
}
function renderStoreCounts(storeCounts) {
for (const [storeName, cell] of Object.entries(storeCells)) {
cell.textContent = String(storeCounts[storeName] ?? 0);
}
}
async function renderOfficialGvlStatus() {
try {
const result = await browser.runtime.sendMessage({
type: "get_latest_gvl_update_status"
});
if (!result?.success) {
throw new Error(result?.error ?? "get_latest_gvl_update_status_failed");
}
const status = result.status ?? {};
officialGvlLocalVersion.textContent = formatNullable(
status.latestLocalVendorListVersion ?? status.currentVendorListVersion
);
officialGvlLastCheck.textContent = formatNullable(status.checkedAt);
officialGvlLastRealCheck.textContent = formatNullable(
status.lastAutoGvlCheckAt
);
officialGvlNextAllowedCheck.textContent = formatNullable(
status.nextAllowedAutoCheckAt
);
officialGvlResult.textContent = formatGvlUpdateResult(status);
officialGvlVersionChange.textContent = formatGvlVersionChange(status);
} catch (error) {
officialGvlLocalVersion.textContent = "-";
officialGvlLastCheck.textContent = "-";
officialGvlLastRealCheck.textContent = "-";
officialGvlNextAllowedCheck.textContent = "-";
officialGvlResult.textContent = "Auto-Check fehlgeschlagen";
officialGvlVersionChange.textContent = "-";
console.warn("VendorGet-IV official GVL status failed", error);
}
}
function formatGvlUpdateResult(status) {
const result = status?.result ?? null;
if (result === "stored") {
return "Neue offizielle Vendorliste gespeichert";
}
if (result === "no_change") {
return "Keine neuere offizielle Vendorliste gefunden";
}
if (result === "already_known") {
return "Offizielle Vendorliste war bereits lokal bekannt";
}
if (result === "error") {
return "Auto-Check fehlgeschlagen";
}
if (result === "throttled") {
return "Übersprungen wegen 24h-Throttling";
}
if (result === "started") {
return "Auto-Check läuft";
}
if (result === "not_checked_since_background_start") {
return "Noch kein Auto-Check seit Background-Start";
}
return formatNullable(status?.message ?? result);
}
function formatGvlVersionChange(status) {
const previousVersion = formatNullable(status?.previousVendorListVersion);
const currentVersion = formatNullable(status?.currentVendorListVersion);
if (previousVersion === "-" && currentVersion === "-") {
return "-";
}
return `${previousVersion} -> ${currentVersion}`;
}
function renderStatusMessage(message) {
dashboardStatus.textContent = message;
}
function formatNullable(value) {
if (value === null || value === undefined || value === "") {
return "-";
}
return String(value);
}