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:
@@ -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', {
|
||||
|
||||
Reference in New Issue
Block a user