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)
|
||||
nextBtn.addEventListener('click', done)
|
||||
|
||||
// 이미 설치됐다면 다시 돌리지 않음
|
||||
if (state.client.clientInstalled) {
|
||||
// 이번에 실제로 보내야 할 payload. 이전 진입에서 같은 payload 로 이미 끝났으면
|
||||
// 다시 돌리지 않지만, 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.classList.add('success')
|
||||
nextBtn.disabled = false
|
||||
@@ -665,17 +677,14 @@ function renderSubStep42(host, back, done) {
|
||||
// 페이지 진입 즉시 자동 설치
|
||||
;(async function () {
|
||||
try {
|
||||
await installerApi.installClient({
|
||||
packKey: state.selectedPackKey,
|
||||
installPlatform: !!state.client.installPlatform,
|
||||
// 참가자는 친구 서버에 접속만 하므로 클라이언트에 맵을 풀지 않는다.
|
||||
skipMap: state.mode === 'multi' && state.role === 'participant'
|
||||
})
|
||||
await installerApi.installClient(payload)
|
||||
msg.textContent = tt('step4.sub42.done')
|
||||
msg.classList.add('success')
|
||||
state.client.clientInstalled = true
|
||||
state.client.lastInstall = payload
|
||||
nextBtn.disabled = false
|
||||
} catch (err) {
|
||||
// 실패한 호출은 "마지막 성공" 기록에 남기지 않는다. 다음 진입 시 재시도.
|
||||
state.client.lastInstall = null
|
||||
msg.textContent = tt('step4.sub42.failed', { message: (err && err.message) ? err.message : String(err) })
|
||||
msg.classList.add('error')
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user