From a89efe1f7bb40bc1e03879ffc854785170c970ef Mon Sep 17 00:00:00 2001 From: AI Bot Date: Wed, 2 Sep 2026 17:46:10 +0530 Subject: [PATCH] Fix modelData saving and error catching --- src/pages/Editor.tsx | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/pages/Editor.tsx b/src/pages/Editor.tsx index 5e14443..2ad0f69 100644 --- a/src/pages/Editor.tsx +++ b/src/pages/Editor.tsx @@ -706,22 +706,16 @@ export default function Editor() { const zipObj: Record = {}; if (sceneData.modelData && sceneData.modelData.data && typeof sceneData.modelData.data === 'string') { - if (sceneData.modelData.data.startsWith('data:')) { - const dataUrl = sceneData.modelData.data; - const base64 = dataUrl.split(',')[1]; - const binaryStr = atob(base64); - const len = binaryStr.length; - const bytes = new Uint8Array(len); - for (let i = 0; i < len; i++) { - bytes[i] = binaryStr.charCodeAt(i); - } - zipObj['model.glb'] = bytes; - sceneData.modelData.data = 'model.glb'; - } else if (sceneData.modelData.data.startsWith('blob:') || sceneData.modelData.data.startsWith('http')) { - const res = await fetch(sceneData.modelData.data); - const buf = await res.arrayBuffer(); - zipObj['model.glb'] = new Uint8Array(buf); - sceneData.modelData.data = 'model.glb'; + if (sceneData.modelData.data.startsWith('data:') || sceneData.modelData.data.startsWith('blob:') || sceneData.modelData.data.startsWith('http')) { + try { + const res = await fetch(sceneData.modelData.data); + const buf = await res.arrayBuffer(); + zipObj['model.glb'] = new Uint8Array(buf); + sceneData.modelData.data = 'model.glb'; + } catch (fetchErr) { + console.error("Failed to fetch modelData for zipping", fetchErr); + throw fetchErr; + } } } @@ -989,7 +983,14 @@ export default function Editor() { setIsLoading(true); setImportStatus("Restoring model..."); try { + if (modelInfo.data === 'model.glb') { + throw new Error("Model data is missing from the project file."); + } + const response = await fetch(modelInfo.data); + if (!response.ok) { + throw new Error(`Failed to fetch model: ${response.statusText}`); + } const blob = await response.blob(); const url = URL.createObjectURL(blob); @@ -1074,11 +1075,12 @@ export default function Editor() { setLoadedModel(object); setBlobURLs(prev => [...prev, url]); } - setIsLoading(false); - } catch (error) { - console.error('Error re-importing model:', error); - setIsLoading(false); - } + setIsLoading(false); + } catch (error: any) { + console.error('Error re-importing model:', error); + setImportError(error.message || "Failed to load model from project file."); + setIsLoading(false); + } }; const handleTextureUpload = (event: React.ChangeEvent, type: 'map' | 'normalMap' | 'specularMap' | 'alphaMap' = 'map') => {