120 Zeilen
3.8 KiB
JavaScript
120 Zeilen
3.8 KiB
JavaScript
"use strict";
|
|
|
|
const gvlReferenceMaintenanceStatus = document.getElementById(
|
|
"gvl-reference-maintenance-status"
|
|
);
|
|
const gvlReferenceProtectedRevisions = document.getElementById(
|
|
"gvl-reference-protected-revisions"
|
|
);
|
|
const gvlReferenceMaintenanceMessage = document.getElementById(
|
|
"gvl-reference-maintenance-message"
|
|
);
|
|
const purgeGvlReferenceDataButton = document.getElementById(
|
|
"purge-gvl-reference-data-button"
|
|
);
|
|
|
|
document.addEventListener("DOMContentLoaded", async () => {
|
|
purgeGvlReferenceDataButton.addEventListener("click", async () => {
|
|
await purgeUnlockedEvidenceRecords();
|
|
});
|
|
await renderGvlReferenceMaintenanceStatus();
|
|
});
|
|
|
|
async function renderGvlReferenceMaintenanceStatus() {
|
|
try {
|
|
const result = await browser.runtime.sendMessage({
|
|
type: "list_gvl_snapshots"
|
|
});
|
|
|
|
if (!result?.success) {
|
|
throw new Error(result?.error ?? "list_gvl_snapshots_failed");
|
|
}
|
|
|
|
renderGvlReferenceSnapshotStatus(result.gvlSnapshots ?? []);
|
|
} catch (error) {
|
|
renderGvlReferenceStatus("–", true, "Status nicht verfügbar.");
|
|
renderProtectedRevisions([]);
|
|
console.warn("VG-Observe GVL maintenance status failed", error);
|
|
}
|
|
}
|
|
|
|
function renderGvlReferenceSnapshotStatus(snapshots) {
|
|
if (!snapshots.length) {
|
|
renderGvlReferenceStatus("–", true, "Keine GVL-Revisionen.");
|
|
renderProtectedRevisions([]);
|
|
return;
|
|
}
|
|
|
|
const protectedRevisions = snapshots
|
|
.filter((snapshot) => snapshot.workspaceDeleteProtected === true)
|
|
.map((snapshot) => snapshot.vendorListVersion)
|
|
.filter((vendorListVersion) => vendorListVersion !== null)
|
|
.filter((vendorListVersion) => vendorListVersion !== undefined);
|
|
const allRevisionsDeleteAllowed = snapshots.every((snapshot) => {
|
|
return snapshot.workspaceDeleteAllowed === true;
|
|
});
|
|
|
|
if (allRevisionsDeleteAllowed) {
|
|
renderGvlReferenceStatus("🔓", false, "GVL-Revisionen löschbar.");
|
|
} else if (protectedRevisions.length) {
|
|
renderGvlReferenceStatus("🔒", true, "GVL-Revisionen geschützt.");
|
|
} else {
|
|
renderGvlReferenceStatus("–", true, "Status nicht verfügbar.");
|
|
}
|
|
|
|
renderProtectedRevisions(protectedRevisions);
|
|
}
|
|
|
|
function renderGvlReferenceStatus(statusSymbol, buttonDisabled, message) {
|
|
gvlReferenceMaintenanceStatus.textContent = statusSymbol;
|
|
purgeGvlReferenceDataButton.disabled = buttonDisabled;
|
|
gvlReferenceMaintenanceMessage.textContent = message;
|
|
}
|
|
|
|
async function purgeUnlockedEvidenceRecords() {
|
|
if (
|
|
!confirm(
|
|
"Ungesperrte Evidence-Daten mit bestehender Schutzlogik bereinigen?"
|
|
)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
purgeGvlReferenceDataButton.disabled = true;
|
|
gvlReferenceMaintenanceMessage.textContent = "Bereinigung läuft...";
|
|
|
|
try {
|
|
const result = await browser.runtime.sendMessage({
|
|
type: "purge_unlocked_evidence_records"
|
|
});
|
|
|
|
if (!result?.success) {
|
|
throw new Error(result?.error ?? "purge_unlocked_evidence_records_failed");
|
|
}
|
|
|
|
await renderGvlReferenceMaintenanceStatus();
|
|
gvlReferenceMaintenanceMessage.textContent = buildPurgeSuccessMessage(result);
|
|
} catch (error) {
|
|
await renderGvlReferenceMaintenanceStatus();
|
|
gvlReferenceMaintenanceMessage.textContent = "Bereinigung fehlgeschlagen.";
|
|
console.warn("VG-Observe protected purge failed", error);
|
|
}
|
|
}
|
|
|
|
function buildPurgeSuccessMessage(result) {
|
|
if (Number.isFinite(result.deletedCount)) {
|
|
return `Bereinigung abgeschlossen: ${result.deletedCount} Records.`;
|
|
}
|
|
|
|
return "Bereinigung abgeschlossen.";
|
|
}
|
|
|
|
function renderProtectedRevisions(vendorListVersions) {
|
|
gvlReferenceProtectedRevisions.hidden = vendorListVersions.length === 0;
|
|
gvlReferenceProtectedRevisions.textContent = vendorListVersions.length
|
|
? `Geschützt: ${vendorListVersions
|
|
.map((vendorListVersion) => String(vendorListVersion))
|
|
.join(", ")}`
|
|
: "";
|
|
}
|