fix(import): invalidate probe when URL input changes

Review P2: probe 성공 후 사용자가 URL 입력값을 다른 URL 로 바꿔도 "확인"
버튼이 여전히 활성화 상태였습니다. 그래서 A 로 probe → B 로 수정 → 확인을
누르면 B 가 probe 없이 바로 다운로드 시작됐습니다.

수정:

- `lastProbedUrl` 로 마지막으로 probe 통과한 URL 기록.
- ytUrl 의 input 이벤트에서 현재 값이 lastProbedUrl 과 다르면
  ytStartBtn 을 disable 로 되돌리고 ytProbeBtn 을 다시 활성화.
- ytStartBtn 클릭 핸들러에도 가드 추가: 클릭 시점에 URL ≠ lastProbedUrl
  이면 안내 메시지와 함께 차단 (race condition 대비).

이제 "확인 누르기 전 가져오기 못 누르게" 요구사항이 어느 순서로 입력이
들어와도 만족됩니다.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
Claude
2026-05-16 03:11:00 +09:00
parent 11db6df8d2
commit 33addb304a

View File

@@ -70,7 +70,19 @@
}
// YouTube probe
// "확인" 누르기 전 "가져오기" 재클릭 방지: probe 클릭 시 disable, 실패시만 재활성화.
// "확인" 누르기 전 "가져오기" 재클릭 방지 + URL 변경 시 다시 probe 강제.
// 흐름: URL 입력 → 가져오기 → (성공 시) 확인 활성화 → 확인 클릭.
// URL 이 바뀌면 확인 비활성화로 돌아가고 가져오기 다시 활성화.
var lastProbedUrl = null
ytUrl.addEventListener('input', function () {
// 입력이 바뀌면 직전 probe 결과는 무효.
if (ytUrl.value.trim() !== lastProbedUrl) {
ytStartBtn.disabled = true
// probe 중이 아닐 때만 가져오기를 풀어준다 (probe 중간엔 잠금 유지).
ytProbeBtn.disabled = false
}
})
ytProbeBtn.addEventListener('click', function () {
var url = ytUrl.value.trim()
if (!url) return
@@ -102,7 +114,8 @@
}
}
if (!titleInput.value) titleInput.value = p.title
// 확인(start) 만 활성화, 가져오기는 잠금 유지 (확인 누르면 다운로드 시작 → redirect)
// 이 URL 에 한해 확인 활성화. URL 변경 감지용으로 마지막 probe URL 저장.
lastProbedUrl = url
ytStartBtn.disabled = false
}).catch(function (e) {
probeInfo.textContent = '확인 실패: ' + e.message
@@ -113,6 +126,13 @@
ytStartBtn.addEventListener('click', function () {
var url = ytUrl.value.trim()
if (!url) return
// 가드: URL 이 바뀐 채로 확인이 눌리는 경우 (이벤트 race) 차단.
if (url !== lastProbedUrl) {
probeInfo.textContent = 'URL 이 바뀌었습니다. "가져오기" 를 다시 눌러 확인하세요.'
ytStartBtn.disabled = true
ytProbeBtn.disabled = false
return
}
// 중복 클릭 방지
ytStartBtn.disabled = true
fetch('/op/folder/' + encodeURIComponent(folder) + '/video/youtube/start', {