diff --git a/package.json b/package.json index c2feee1..a138d10 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "minecraft-music-quiz-installer", - "version": "0.4.19", + "version": "0.4.20", "description": "마인크래프트 음악퀴즈 간편설치기 + 관리 사이트", "main": "dist/installer/main.js", "scripts": { diff --git a/src/installer/main.ts b/src/installer/main.ts index 7ad4023..922bf5b 100644 --- a/src/installer/main.ts +++ b/src/installer/main.ts @@ -285,11 +285,12 @@ ipcMain.handle('finalResourcepack:install', async (): Promise<{ ok: boolean; pat if (!pack) return { ok: false, message: t('errors.packNotFound2') } const finalName = pack.pack.finalResourcepackPath if (!finalName || finalName === '.') return { ok: false, message: 'no final resourcepack' } + let dest = '' try { const cleaned = path.basename(finalName.replace(/^\/+/, '')) const url = `${state.baseUrl}/file/resourcepacks/outputs/${encodeURIComponent(cleaned)}` const destDir = path.join(getAppDataDir(), getMcCustomDirName(), 'resourcepacks') - const dest = path.join(destDir, cleaned) + dest = path.join(destDir, cleaned) await fsp.mkdir(destDir, { recursive: true }) sendLog(t('log.finalResourcepackDownload', { url })) // 진행률(퍼센트)을 렌더러로 흘려보내며 스트리밍 다운로드. @@ -307,6 +308,8 @@ ipcMain.handle('finalResourcepack:install', async (): Promise<{ ok: boolean; pat sendLog(t('log.finalResourcepackSaved', { path: dest })) return { ok: true, path: dest } } catch (error) { + // 실패 시 부분/0바이트 zip 이 마인크래프트 리소스팩 목록에 깨진 채로 남지 않도록 삭제. + if (dest) await fsp.rm(dest, { force: true }).catch(() => {}) return { ok: false, message: (error as Error).message } } })