installer: re-install client when navigation changes install payload
기존 state.client.clientInstalled boolean 은 packKey/installPlatform/skipMap 차이를 보지 않아, 참가자→싱글 로 뒤로가서 변경했을 때 skipMap=false 경로의 맵 설치가 영영 안 일어났다 (반대로 싱글→참가자 면 안 풀어도 될 맵이 남음). state.client.lastInstall 에 마지막 성공 payload 전체를 저장하고, 진입 시 새 payload 와 필드별 비교해서 다르면 재설치한다. 실패는 lastInstall 을 비워 다음 진입에서 자동 재시도. 리뷰어 지적사항(installer/renderer.js:657) 대응. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -654,8 +654,20 @@ function renderSubStep42(host, back, done) {
|
|||||||
host.querySelector('#back').addEventListener('click', back)
|
host.querySelector('#back').addEventListener('click', back)
|
||||||
nextBtn.addEventListener('click', done)
|
nextBtn.addEventListener('click', done)
|
||||||
|
|
||||||
// 이미 설치됐다면 다시 돌리지 않음
|
// 이번에 실제로 보내야 할 payload. 이전 진입에서 같은 payload 로 이미 끝났으면
|
||||||
if (state.client.clientInstalled) {
|
// 다시 돌리지 않지만, packKey / installPlatform / skipMap 중 하나라도 다르면
|
||||||
|
// (예: 참가자 → 싱글 로 뒤로가서 변경) 재설치한다.
|
||||||
|
var payload = {
|
||||||
|
packKey: state.selectedPackKey,
|
||||||
|
installPlatform: !!state.client.installPlatform,
|
||||||
|
// 참가자는 친구 서버에 접속만 하므로 클라이언트에 맵을 풀지 않는다.
|
||||||
|
skipMap: state.mode === 'multi' && state.role === 'participant'
|
||||||
|
}
|
||||||
|
var last = state.client.lastInstall
|
||||||
|
if (last
|
||||||
|
&& last.packKey === payload.packKey
|
||||||
|
&& last.installPlatform === payload.installPlatform
|
||||||
|
&& last.skipMap === payload.skipMap) {
|
||||||
msg.textContent = tt('step4.sub42.done')
|
msg.textContent = tt('step4.sub42.done')
|
||||||
msg.classList.add('success')
|
msg.classList.add('success')
|
||||||
nextBtn.disabled = false
|
nextBtn.disabled = false
|
||||||
@@ -665,17 +677,14 @@ function renderSubStep42(host, back, done) {
|
|||||||
// 페이지 진입 즉시 자동 설치
|
// 페이지 진입 즉시 자동 설치
|
||||||
;(async function () {
|
;(async function () {
|
||||||
try {
|
try {
|
||||||
await installerApi.installClient({
|
await installerApi.installClient(payload)
|
||||||
packKey: state.selectedPackKey,
|
|
||||||
installPlatform: !!state.client.installPlatform,
|
|
||||||
// 참가자는 친구 서버에 접속만 하므로 클라이언트에 맵을 풀지 않는다.
|
|
||||||
skipMap: state.mode === 'multi' && state.role === 'participant'
|
|
||||||
})
|
|
||||||
msg.textContent = tt('step4.sub42.done')
|
msg.textContent = tt('step4.sub42.done')
|
||||||
msg.classList.add('success')
|
msg.classList.add('success')
|
||||||
state.client.clientInstalled = true
|
state.client.lastInstall = payload
|
||||||
nextBtn.disabled = false
|
nextBtn.disabled = false
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
// 실패한 호출은 "마지막 성공" 기록에 남기지 않는다. 다음 진입 시 재시도.
|
||||||
|
state.client.lastInstall = null
|
||||||
msg.textContent = tt('step4.sub42.failed', { message: (err && err.message) ? err.message : String(err) })
|
msg.textContent = tt('step4.sub42.failed', { message: (err && err.message) ? err.message : String(err) })
|
||||||
msg.classList.add('error')
|
msg.classList.add('error')
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user