diff --git a/src/pages/Viewer.tsx b/src/pages/Viewer.tsx index b3b9bc8..d1282ba 100644 --- a/src/pages/Viewer.tsx +++ b/src/pages/Viewer.tsx @@ -44,7 +44,22 @@ const Viewer = () => { toast.error('Formato inválido. Selecione .GLB, .OBJ, .STL ou .IFC'); return; } + const sizeCheck = validateModelFile(file.name, file.size, ext); + if (!sizeCheck.ok) { + toast.error(sizeCheck.reason!); + return; + } if (ext === 'glb') { + try { + const head = await file.slice(0, 16).arrayBuffer(); + const sig = validateModelFile(file.name, file.size, ext, head); + if (!sig.ok) { + toast.error(sig.reason!); + return; + } + } catch (err) { + console.error('[upload] header read failed', err); + } const url = URL.createObjectURL(file); addModel({ fileName: file.name, fileSize: file.size, url }); toast.success(`"${file.name}" adicionado à cena`); @@ -53,6 +68,12 @@ const Viewer = () => { setConverting(true); try { const buffer = await file.arrayBuffer(); + const sig = validateModelFile(file.name, file.size, ext, buffer); + if (!sig.ok) { + toast.error(sig.reason!); + if (sig.detail) console.warn('[validateModelFile]', sig.detail); + return; + } const result = ext === 'ifc' ? await convertIFCtoGLB(buffer, file.name) : await convertToGLB(buffer, ext, file.name); @@ -60,8 +81,9 @@ const Viewer = () => { addModel({ fileName: result.fileName, fileSize: result.fileSize, url }); toast.success(`"${file.name}" convertido e adicionado!`); } catch (err) { - console.error(err); - toast.error(`Falha ao converter "${file.name}"`); + console.error('[upload] conversion failed', err); + const msg = err instanceof Error ? err.message : 'erro desconhecido'; + toast.error(`Falha ao converter "${file.name}": ${msg}`); } finally { setConverting(false); }