feat: 0.11.7 — Stale data cleanup + FileBrowser sync after migration + deploy title fix

- Detect stale data on non-active storage paths after migration; show on
  deploy/settings page with size info and two-step delete confirmation
- Add POST /api/storage/stale-cleanup handler with safety checks (active
  path protection, registered-path validation, ProtectedHDDPaths guard)
- Export ProtectedHDDPaths() from stacks package for reuse in web handlers
- Sync FileBrowser mounts after successful app data migration
- Deploy page title/h2 now shows "Beállítások" for already-deployed apps
  instead of always showing "Telepítés"
- Also add delete-old-data button on migration-done card in migrate.html

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-17 12:45:08 +01:00
parent 264855fb0d
commit fba2eb3631
7 changed files with 376 additions and 8 deletions
+53 -2
View File
@@ -79,8 +79,19 @@
Az alkalmazás az új tárolóról fut.<br>
A régi adatok a korábbi helyen megmaradtak biztonsági másolatként.
</p>
<div style="margin-top:1.5rem;display:flex;gap:.75rem">
<a href="/stacks" class="btn btn-primary">Alkalmazások megtekintése</a>
<div class="alert alert-warning" style="margin-top:1rem">
<strong>Javasolt lépések:</strong>
<ol style="margin:.5rem 0 0 1rem;padding:0">
<li>Ellenőrizd, hogy az alkalmazás megfelelően működik</li>
<li>Győződj meg róla, hogy minden adat megtalálható</li>
<li>Ha minden rendben, törölheted a korábbi adatokat</li>
</ol>
</div>
<div style="margin-top:1.5rem;display:flex;gap:.75rem;flex-wrap:wrap">
<a href="/stacks/{{.Meta.Slug}}/deploy" class="btn btn-primary">Alkalmazások megtekintése</a>
<button id="migrate-delete-old-btn" class="btn btn-outline btn-danger" onclick="deleteOldMigrationData()" style="display:none">
🗑️ Korábbi adatok törlése
</button>
<a href="/settings" class="btn btn-outline">Beállítások</a>
</div>
</div>
@@ -183,6 +194,46 @@ function showMigDone() {
document.getElementById('migrate-progress-card').style.display = 'none';
document.getElementById('migrate-done-card').style.display = 'block';
document.getElementById('migrate-done-card').scrollIntoView({behavior:'smooth'});
// Show the delete button (old data is at the source path)
document.getElementById('migrate-delete-old-btn').style.display = '';
}
function deleteOldMigrationData() {
var oldPath = '{{.CurrentHDDPath}}';
if (!confirm('Biztosan törölni szeretnéd a korábbi adatokat?\n\nTárhely: ' + oldPath + '\n\n⚠️ Ez a művelet visszavonhatatlan!\nElőtte győződj meg róla, hogy az alkalmazás az új tárolóról megfelelően működik.')) {
return;
}
if (!confirm('UTOLSÓ FIGYELMEZTETÉS!\n\nA törlés visszavonhatatlan. Biztosan folytatod?')) {
return;
}
var btn = document.getElementById('migrate-delete-old-btn');
btn.disabled = true;
btn.textContent = 'Törlés folyamatban...';
fetch('/api/storage/stale-cleanup', {
method: 'POST',
headers: {'Content-Type': 'application/json'},
body: JSON.stringify({stack_name: stackName, stale_path: oldPath})
})
.then(function(r) { return r.json(); })
.then(function(data) {
if (!data.ok) {
alert('Hiba: ' + (data.error || 'Ismeretlen hiba'));
btn.disabled = false;
btn.textContent = '🗑️ Korábbi adatok törlése';
return;
}
btn.textContent = '✅ Korábbi adatok törölve (' + (data.freed_human || '') + ')';
btn.classList.remove('btn-danger');
btn.classList.add('btn-outline');
btn.onclick = null;
})
.catch(function(e) {
alert('Hálózati hiba: ' + e.message);
btn.disabled = false;
btn.textContent = '🗑️ Korábbi adatok törlése';
});
}
</script>