cleanup batch after closing completed modal
This commit is contained in:
parent
6ff6cc0e59
commit
fd9fcf6c90
2 changed files with 59 additions and 5 deletions
|
|
@ -4079,6 +4079,44 @@ def cancel_batch(batch_id):
|
||||||
print(f"❌ Error cancelling batch {batch_id}: {e}")
|
print(f"❌ Error cancelling batch {batch_id}: {e}")
|
||||||
return jsonify({"success": False, "error": str(e)}), 500
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
|
# NEW ENDPOINT: Add this function to web_server.py
|
||||||
|
@app.route('/api/playlists/cleanup_batch', methods=['POST'])
|
||||||
|
def cleanup_batch():
|
||||||
|
"""
|
||||||
|
Cleans up a completed or cancelled batch from the server's in-memory state.
|
||||||
|
This is called by the client after the user closes a finished modal.
|
||||||
|
"""
|
||||||
|
data = request.get_json()
|
||||||
|
batch_id = data.get('batch_id')
|
||||||
|
if not batch_id:
|
||||||
|
return jsonify({"success": False, "error": "Missing batch_id"}), 400
|
||||||
|
|
||||||
|
try:
|
||||||
|
with tasks_lock:
|
||||||
|
# Check if the batch exists before trying to delete
|
||||||
|
if batch_id in download_batches:
|
||||||
|
# Get the list of task IDs before deleting the batch
|
||||||
|
task_ids_to_remove = download_batches[batch_id].get('queue', [])
|
||||||
|
|
||||||
|
# Delete the batch record
|
||||||
|
del download_batches[batch_id]
|
||||||
|
|
||||||
|
# Clean up the associated tasks from the tasks dictionary
|
||||||
|
for task_id in task_ids_to_remove:
|
||||||
|
if task_id in download_tasks:
|
||||||
|
del download_tasks[task_id]
|
||||||
|
|
||||||
|
print(f"✅ Cleaned up batch '{batch_id}' and its associated tasks from server state.")
|
||||||
|
return jsonify({"success": True, "message": f"Batch {batch_id} cleaned up."})
|
||||||
|
else:
|
||||||
|
# It's not an error if the batch is already gone
|
||||||
|
print(f"⚠️ Cleanup requested for non-existent batch '{batch_id}'. Already cleaned up?")
|
||||||
|
return jsonify({"success": True, "message": "Batch already cleaned up."})
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"❌ Error during batch cleanup for '{batch_id}': {e}")
|
||||||
|
return jsonify({"success": False, "error": str(e)}), 500
|
||||||
|
|
||||||
# ===============================
|
# ===============================
|
||||||
# == UNIFIED MISSING TRACKS API ==
|
# == UNIFIED MISSING TRACKS API ==
|
||||||
# ===============================
|
# ===============================
|
||||||
|
|
|
||||||
|
|
@ -1536,13 +1536,29 @@ function updatePlaylistCardUI(playlistId) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function cleanupDownloadProcess(playlistId) {
|
async function cleanupDownloadProcess(playlistId) {
|
||||||
if (!activeDownloadProcesses[playlistId]) return;
|
const process = activeDownloadProcesses[playlistId];
|
||||||
|
if (!process) return;
|
||||||
|
|
||||||
console.log(`Cleaning up download process for playlist ${playlistId}`);
|
console.log(`Cleaning up download process for playlist ${playlistId}`);
|
||||||
const process = activeDownloadProcesses[playlistId];
|
|
||||||
|
|
||||||
// Stop polling
|
// --- THIS IS THE FIX ---
|
||||||
|
// If the process has a batchId, tell the server to clean it up.
|
||||||
|
if (process.batchId) {
|
||||||
|
try {
|
||||||
|
console.log(`🚀 Sending cleanup request to server for batch: ${process.batchId}`);
|
||||||
|
await fetch('/api/playlists/cleanup_batch', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({ batch_id: process.batchId })
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Failed to send cleanup request to server:', error);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// --- END OF FIX ---
|
||||||
|
|
||||||
|
// Stop client-side polling
|
||||||
if (process.poller) {
|
if (process.poller) {
|
||||||
clearInterval(process.poller);
|
clearInterval(process.poller);
|
||||||
}
|
}
|
||||||
|
|
@ -1552,7 +1568,7 @@ function cleanupDownloadProcess(playlistId) {
|
||||||
process.modalElement.parentElement.removeChild(process.modalElement);
|
process.modalElement.parentElement.removeChild(process.modalElement);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove from global state
|
// Remove from client-side global state
|
||||||
delete activeDownloadProcesses[playlistId];
|
delete activeDownloadProcesses[playlistId];
|
||||||
|
|
||||||
// Restore card UI
|
// Restore card UI
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue