diff --git a/src/renderer/index.html b/src/renderer/index.html index 4250979..3b55b14 100644 --- a/src/renderer/index.html +++ b/src/renderer/index.html @@ -89,6 +89,16 @@ +
변경할 이름의 파일이 이미 존재합니다.
+새로운 이름의 파일도 존재합니다.
diff --git a/src/renderer/renderer.js b/src/renderer/renderer.js index cb37057..3494466 100644 --- a/src/renderer/renderer.js +++ b/src/renderer/renderer.js @@ -36,7 +36,10 @@ const moveDigitsInput = document.getElementById('move-digits'); const moveCancelBtn = document.getElementById('move-cancel'); const moveConfirmBtn = document.getElementById('move-confirm'); const moveErrorModal = document.getElementById('move-error-modal'); -const moveErrorCloseBtn = document.getElementById('move-error-close'); +const moveErrorCloseBtn = document.getElementById('move-error-close'); +const renameConflictModal = document.getElementById('rename-conflict-modal'); +const renameConflictCloseBtn = document.getElementById('rename-conflict-close'); +const renameConflictList = document.getElementById('rename-conflict-list'); // ── 핸들러 초기화 ───────────────────────────────── const callbacks = { @@ -248,18 +251,46 @@ function updatePreview() { } // ── 이름 변경 ──────────────────────────────────── +renameConflictCloseBtn.addEventListener('click', () => { + renameConflictModal.style.display = 'none'; +}); + async function doRename() { if (!state.files.length || !state.currentFolder) return; const prefix = inputPrefix.value.trim() || 'photo'; const digits = Math.max(1, Math.min(6, parseInt(inputDigits.value) || 3)); - const examples = state.files.slice(0, 3).map((f, i) => { + const selectedArr = [...state.selectedIdxs].sort((a, b) => a - b); + const filesToRename = selectedArr.length > 0 + ? selectedArr.map(i => state.files[i]).filter(Boolean) + : state.files; + + if (!filesToRename.length) return; + + // 선택된 파일이 있으면 변경될 이름이 미선택 파일 이름과 충돌하는지 확인 + if (selectedArr.length > 0) { + const unselectedNames = new Set( + state.files.filter((_, i) => !state.selectedIdxs.has(i)).map(f => f.name) + ); + const newNames = filesToRename.map((f, i) => { + const ext = f.name.split('.').pop().toLowerCase(); + return `${prefix}_${String(i + 1).padStart(digits, '0')}.${ext}`; + }); + const conflicting = newNames.filter(n => unselectedNames.has(n)); + if (conflicting.length) { + renameConflictList.innerHTML = conflicting.map(n => `