diff --git a/src/feature/create-album/utils/heicToJpeg.test.ts b/src/feature/create-album/utils/heicToJpeg.test.ts index 3ad1fa07..89bf13e3 100644 --- a/src/feature/create-album/utils/heicToJpeg.test.ts +++ b/src/feature/create-album/utils/heicToJpeg.test.ts @@ -49,9 +49,8 @@ describe('convertHeicFilesToJpeg', () => { expect(result[0].type).toBe('image/jpeg'); // The second file should remain as is expect(result[1].name).toBe('image.jpg'); - expect(Toast.alert).toHaveBeenCalledWith( - '1개의 HEIC 파일을 변환 중입니다...', - ); + expect(Toast.alert).toHaveBeenCalledWith('변환 중... 0/1'); + expect(Toast.alert).toHaveBeenCalledWith('변환 중... 1/1'); }); it('should handle conversion failure gracefully', async () => { diff --git a/src/feature/create-album/utils/heicToJpeg.ts b/src/feature/create-album/utils/heicToJpeg.ts index 2f729977..dc1b6759 100644 --- a/src/feature/create-album/utils/heicToJpeg.ts +++ b/src/feature/create-album/utils/heicToJpeg.ts @@ -7,35 +7,47 @@ export async function convertHeicFilesToJpeg(files: File[]): Promise { /heic|heif/i.test(file.type) || /\.heic$|\.heif$/i.test(file.name), ); - if (heicFiles.length > 0) { - Toast.alert(`${heicFiles.length}개의 HEIC 파일을 변환 중입니다...`); + if (heicFiles.length === 0) { + return files; } - const convertedFiles = await Promise.all( - files.map(async (file) => { - if (/heic|heif/i.test(file.type) || /\.heic$|\.heif$/i.test(file.name)) { - try { - const jpegBlob = await heicTo({ - blob: file, + let convertedCount = 0; + const totalCount = heicFiles.length; + + // 초기 메시지 표시 + Toast.alert(`변환 중... 0/${totalCount}`); + + const convertedFiles: File[] = []; + + for (const file of files) { + if (/heic|heif/i.test(file.type) || /\.heic$|\.heif$/i.test(file.name)) { + try { + const jpegBlob = await heicTo({ + blob: file, + type: 'image/jpeg', + quality: 0.9, + }); + const convertedFile = new File( + [jpegBlob], + file.name.replace(/\.(heic|heif)$/i, '.jpg'), + { type: 'image/jpeg', - quality: 0.9, - }); - return new File( - [jpegBlob], - file.name.replace(/\.(heic|heif)$/i, '.jpg'), - { - type: 'image/jpeg', - lastModified: file.lastModified, - }, - ); - } catch (e) { - Toast.alert(`${file.name} 파일의 변환에 실패했습니다.`); - return file; - } + lastModified: file.lastModified, + }, + ); + convertedFiles.push(convertedFile); + + // 변환 완료마다 진행률 업데이트 + convertedCount++; + Toast.alert(`변환 중... ${convertedCount}/${totalCount}`); + } catch (e) { + Toast.alert(`${file.name} 파일의 변환에 실패했습니다.`); + convertedFiles.push(file); } - return file; - }), - ); + } else { + convertedFiles.push(file); + } + } return convertedFiles; }