feat(installer): 최종 리소스팩 다운로드 진행률(퍼센트) 표시
"예" 선택 후 최종 리소스팩 다운로드 시 퍼센트/진행바를 보여준다. - finalResourcepack:install 을 downloadFile → downloadStream 으로 바꿔 content-length 기반 진행률을 계산하고 finalResourcepack:progress 이벤트로 렌더러에 전송. - preload onFinalResourcepackProgress 구독 추가, 렌더러에 진행바+% 표시(완료 100%, 실패 시 바 숨김). 0.4.17→0.4.18. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -1133,20 +1133,47 @@ function downloadFinalResourcepack() {
|
||||
section.innerHTML =
|
||||
'<h2>' + tt('resourcepack.downloadHeading') + '</h2>' +
|
||||
'<div class="formMessage" id="rpMsg">' + tt('resourcepack.downloading') + '</div>' +
|
||||
'<div id="rpBarWrap" style="margin-top:10px;height:16px;background:rgba(255,255,255,0.08);border:1px solid var(--border,#30363d);border-radius:8px;overflow:hidden;">' +
|
||||
' <div id="rpBar" style="height:100%;width:0%;background:var(--accent,#6cf);transition:width 0.15s;"></div>' +
|
||||
'</div>' +
|
||||
'<div class="formMessage" id="rpPercent" style="margin-top:6px;">0%</div>' +
|
||||
'<div class="actionRow" id="rpActions" hidden></div>'
|
||||
pageHost.appendChild(section)
|
||||
var msg = section.querySelector('#rpMsg')
|
||||
var actions = section.querySelector('#rpActions')
|
||||
var bar = section.querySelector('#rpBar')
|
||||
var barWrap = section.querySelector('#rpBarWrap')
|
||||
var percentEl = section.querySelector('#rpPercent')
|
||||
|
||||
function proceed() { state.finalRpHandled = true; renderStep5() }
|
||||
// 다운로드 진행률(퍼센트) 구독. 완료/실패 시 해제.
|
||||
var unsubscribe = null
|
||||
if (installerApi.onFinalResourcepackProgress) {
|
||||
unsubscribe = installerApi.onFinalResourcepackProgress(function (info) {
|
||||
if (info && info.percent >= 0) {
|
||||
bar.style.width = info.percent + '%'
|
||||
percentEl.textContent = info.percent + '%'
|
||||
} else if (info) {
|
||||
// 전체 크기를 모르면 받은 용량(MB)만 표시.
|
||||
percentEl.textContent = (info.loaded / 1048576).toFixed(1) + ' MB'
|
||||
}
|
||||
})
|
||||
}
|
||||
function stopProgress() { if (unsubscribe) { unsubscribe(); unsubscribe = null } }
|
||||
|
||||
function proceed() { stopProgress(); state.finalRpHandled = true; renderStep5() }
|
||||
|
||||
installerApi.installFinalResourcepack().then(function (res) {
|
||||
stopProgress()
|
||||
if (res && res.ok) {
|
||||
bar.style.width = '100%'
|
||||
percentEl.textContent = '100%'
|
||||
msg.textContent = tt('resourcepack.downloadDone')
|
||||
msg.classList.add('success')
|
||||
actions.innerHTML = '<button class="primaryBtn" id="rpNext">' + tt('common.next') + '</button>'
|
||||
actions.querySelector('#rpNext').addEventListener('click', proceed)
|
||||
} else {
|
||||
barWrap.hidden = true
|
||||
percentEl.hidden = true
|
||||
msg.textContent = tt('resourcepack.downloadFailed', { message: (res && res.message) || 'unknown' })
|
||||
msg.classList.add('error')
|
||||
actions.innerHTML =
|
||||
@@ -1157,6 +1184,9 @@ function downloadFinalResourcepack() {
|
||||
}
|
||||
actions.hidden = false
|
||||
}).catch(function (err) {
|
||||
stopProgress()
|
||||
barWrap.hidden = true
|
||||
percentEl.hidden = true
|
||||
msg.textContent = tt('resourcepack.downloadFailed', { message: (err && err.message) ? err.message : String(err) })
|
||||
msg.classList.add('error')
|
||||
actions.innerHTML =
|
||||
|
||||
Reference in New Issue
Block a user