Feature: auto-fill game covers from internet sources

This commit is contained in:
Ponte
2026-02-14 23:13:14 +01:00
parent 37ff894801
commit c7c06823cd
4 changed files with 220 additions and 0 deletions

36
app.js
View File

@@ -51,6 +51,7 @@ const totalGamesValue = document.getElementById("totalGamesValue");
const migrateBtn = document.getElementById("migrateBtn");
const backupControls = document.getElementById("backupControls");
const backupBtn = document.getElementById("backupBtn");
const autoCoverBtn = document.getElementById("autoCoverBtn");
const restoreMergeBtn = document.getElementById("restoreMergeBtn");
const restoreReplaceBtn = document.getElementById("restoreReplaceBtn");
const restoreFileInput = document.getElementById("restoreFileInput");
@@ -545,6 +546,41 @@ backupBtn.addEventListener("click", async () => {
}
});
autoCoverBtn.addEventListener("click", async () => {
if (!apiReachable) {
alert("API indisponible. Enrichissement des pochettes impossible.");
return;
}
const confirmed = window.confirm(
"Lancer la recuperation automatique des pochettes depuis internet pour les jeux sans image ?",
);
if (!confirmed) {
return;
}
autoCoverBtn.disabled = true;
const originalLabel = autoCoverBtn.textContent;
autoCoverBtn.textContent = "Traitement en cours...";
try {
const result = await apiRequest("/api/covers/autofill", {
method: "POST",
body: { limit: 350, overwrite: false },
timeoutMs: 180000,
});
await refreshFromApi(state.selectedBrand, state.selectedConsole);
alert(
`Pochettes maj: ${result.updated || 0} / ${result.scanned || 0} jeu(x). Non trouves: ${result.notFound || 0}.`,
);
} catch (error) {
console.error(error);
alert(`Echec auto-pochettes: ${error.message}`);
} finally {
autoCoverBtn.disabled = false;
autoCoverBtn.textContent = originalLabel;
}
});
restoreMergeBtn.addEventListener("click", () => {
pendingRestoreMode = "merge";
restoreFileInput.click();