v4.3: file-based media storage + manual VACUUM maintenance

This commit is contained in:
Ashim Kumar
2026-06-12 13:24:00 +06:00
parent 965470853e
commit cc57204aff
10 changed files with 789 additions and 164 deletions

View File

@@ -3,7 +3,7 @@
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Audiobook Maker Pro v4.1</title>
<title>Audiobook Maker Pro v4.3</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.1/font/bootstrap-icons.css">
@@ -163,7 +163,7 @@
<h1 class="app-title">
<i class="bi bi-soundwave"></i>
Audiobook Maker Pro
<span class="version-badge">v4.2</span>
<span class="version-badge">v4.3</span>
</h1>
</div>
<div class="header-right">
@@ -197,6 +197,11 @@
</a>
</li>
<li id="adminDivider" style="display:none;"><hr class="dropdown-divider"></li>
<li>
<a class="dropdown-item" href="#" onclick="openDbMaintenance()">
<i class="bi bi-hdd-stack me-2"></i>Storage & Maintenance
</a>
</li>
<li>
<a class="dropdown-item" href="#" onclick="openChangePassword()">
<i class="bi bi-key me-2"></i>Change Password
@@ -467,6 +472,69 @@
</div>
</div>
<!-- v4.3: Storage & Maintenance Modal -->
<div class="modal fade" id="dbMaintenanceModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
<i class="bi bi-hdd-stack me-2"></i>Storage & Maintenance
</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div id="dbStatsLoading" class="text-center py-4">
<div class="spinner-border text-primary" role="status"></div>
<p class="mt-2 text-muted">Loading storage info...</p>
</div>
<div id="dbStatsContent" style="display:none;">
<div class="row g-3 mb-3">
<div class="col-6">
<div class="p-3 rounded" style="background: var(--bg-tertiary);">
<div class="text-muted small mb-1"><i class="bi bi-database me-1"></i>Database Size</div>
<div class="fs-5 fw-bold" id="dbmFileSize">— MB</div>
</div>
</div>
<div class="col-6">
<div class="p-3 rounded" style="background: var(--bg-tertiary);">
<div class="text-muted small mb-1"><i class="bi bi-folder me-1"></i>Media Files Size</div>
<div class="fs-5 fw-bold" id="dbmMediaSize">— MB</div>
</div>
</div>
</div>
<div class="mb-2 d-flex justify-content-between align-items-center">
<span class="small fw-semibold">
<i class="bi bi-trash3 me-1"></i>Reclaimable free space
</span>
<span class="small text-muted" id="dbmFreeText">— MB (—%)</span>
</div>
<div class="progress mb-3" style="height: 14px;">
<div class="progress-bar" id="dbmFreeBar" role="progressbar" style="width: 0%;"></div>
</div>
<div class="alert" id="dbmAdvice" style="display:none;"></div>
<p class="text-muted small mb-0">
<i class="bi bi-info-circle me-1"></i>
VACUUM ডেটাবেসের ফাঁকা স্পেস reclaim করে এটি ছোট করে। প্রজেক্ট ডিলিট করার পর বা মাসে একবার চালানো ভালো। এটি কিছু সময় নিতে পারে।
</p>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Close</button>
<button type="button" class="btn btn-outline-secondary" id="dbmRefreshBtn" onclick="loadDbStats()">
<i class="bi bi-arrow-clockwise me-1"></i>Refresh
</button>
<button type="button" class="btn btn-primary" id="dbmVacuumBtn" onclick="runDbVacuum()">
<i class="bi bi-stars me-1"></i>Run VACUUM
</button>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
<script src="/static/js/app.js"></script>
@@ -475,4 +543,4 @@
<script src="/static/js/generation.js"></script>
<script src="/static/js/interactive-reader.js"></script>
</body>
</html>
</html>