Show detailed batch repair preview
This commit is contained in:
@@ -22,6 +22,13 @@ const audioPreview = document.querySelector('#audio-preview');
|
||||
const audioPreviewName = document.querySelector('#audio-preview-name');
|
||||
const audioPlayer = document.querySelector('#audio-player');
|
||||
const closeAudioPreview = document.querySelector('#close-audio-preview');
|
||||
const batchPreviewModal = document.querySelector('#batch-preview-modal');
|
||||
const batchPreviewSummary = document.querySelector('#batch-preview-summary');
|
||||
const batchPreviewList = document.querySelector('#batch-preview-list');
|
||||
const batchPreviewSafety = document.querySelector('#batch-preview-safety');
|
||||
const closeBatchPreview = document.querySelector('#close-batch-preview');
|
||||
const continueReviewing = document.querySelector('#continue-reviewing');
|
||||
const acceptPreview = document.querySelector('#accept-preview');
|
||||
let latestAnalysis = null;
|
||||
let selectedDuplicateGroup = null;
|
||||
let previewedRepair = null;
|
||||
@@ -191,12 +198,23 @@ previewRepairButton.addEventListener('click', async () => {
|
||||
repairMessage.textContent = 'Checking the plan…'; applyRepairButton.disabled = true;
|
||||
try {
|
||||
previewedRepair = await requestRepair('/api/duplicates/batch/preview');
|
||||
repairPreview.innerHTML = `<strong>One safe plan for ${previewedRepair.choice_count} approved group(s)</strong><p>${previewedRepair.replaced.length} duplicate file(s) will be backed up, then replaced with shortcuts to their selected keepers. ${previewedRepair.metadata_backups} Serato metadata file(s) will also be copied into the rollback snapshot. Database V2 will not be changed.</p>`;
|
||||
batchPreviewSummary.textContent = `${previewedRepair.choice_count} keeper decision(s) · ${previewedRepair.replaced.length} duplicate file(s) consolidated`;
|
||||
batchPreviewList.innerHTML = previewedRepair.decisions.map((decision, index) => `
|
||||
<article class="preview-decision"><span>Decision ${index + 1}</span><div class="winner-path"><b>Keep</b><strong>${escapeHtml(decision.keeper.split('/').pop())}</strong><small>${escapeHtml(decision.keeper)}</small></div><div class="replaced-paths"><b>Replace with a shortcut</b>${decision.replaced.map((path) => `<small>${escapeHtml(path)}</small>`).join('')}</div></article>
|
||||
`).join('');
|
||||
batchPreviewSafety.textContent = `${previewedRepair.metadata_backups} Serato metadata file(s) and every replaced audio file will be backed up. Database V2 will not be modified.`;
|
||||
repairPreview.innerHTML = `<strong>Preview approved</strong><p>${previewedRepair.choice_count} keeper decision(s) are ready for one backed-up apply.</p>`;
|
||||
repairPreview.hidden = false; applyRepairButton.disabled = false;
|
||||
repairMessage.textContent = 'Preview complete. Nothing has changed yet.';
|
||||
batchPreviewModal.showModal();
|
||||
} catch (error) { repairMessage.textContent = error.message; }
|
||||
});
|
||||
|
||||
function dismissBatchPreview() { batchPreviewModal.close(); }
|
||||
closeBatchPreview.addEventListener('click', dismissBatchPreview);
|
||||
continueReviewing.addEventListener('click', dismissBatchPreview);
|
||||
acceptPreview.addEventListener('click', dismissBatchPreview);
|
||||
|
||||
applyRepairButton.addEventListener('click', async () => {
|
||||
if (!previewedRepair) return;
|
||||
applyRepairButton.disabled = true; repairMessage.textContent = 'Creating the backup before making changes…';
|
||||
|
||||
Reference in New Issue
Block a user