Files
SteelXR/.lovable/plan.md
T
gpt-engineer-app[bot] dd7e1248fc Changes
Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
2026-05-14 16:55:34 +00:00

3.2 KiB

Navegador de pasta na nuvem (FileBrowser)

Hoje o CloudLoader exige a URL exata do arquivo (ex.: …/demo.ifc). Vou estender para também aceitar uma URL de pasta (ex.: https://store.tracksteel.com.br/modelos/). Ao clicar em Abrir pasta, o app lista os arquivos .ifc / .obj / .stl / .glb daquela pasta, o usuário seleciona um e clica em Carregar.

Como vai funcionar (UX)

  1. No diálogo "Carregar modelo da nuvem" passa a haver dois modos, lado a lado:
    • Arquivo (comportamento atual) — cola URL do arquivo, clica Carregar.
    • Pasta (novo) — cola URL da pasta, clica Abrir pasta.
  2. Ao abrir uma pasta:
    • Mostra breadcrumb do caminho atual (clicável para subir).
    • Lista subpastas (📁) e arquivos 3D suportados (📄 com extensão e tamanho).
    • Esconde por padrão arquivos não suportados; um toggle "Mostrar todos" libera os demais.
    • Clicar numa subpasta navega para dentro dela; clicar num arquivo o seleciona.
  3. Botão Carregar selecionado dispara o mesmo fluxo já existente (smartFetch + conversão IFC/OBJ/STL → GLB + addModel).
  4. Funciona em append: respeita o limite de 5 peças simultâneas e o toast de erro já existente.

Detecção e API (FileBrowser)

FileBrowser expõe GET /api/resources/{caminho}?auth=<JWT> que devolve JSON com items: [{ name, isDir, size, extension, ... }]. Vou:

  • Reaproveitar tryFileBrowserToken(origin) (NoAuth) já implementado.
  • A partir da URL colada, derivar origin + path (path da pasta, com / final).
  • Chamar /api/resources{path}?auth=<token> e renderizar items.
  • Para baixar o arquivo escolhido, montar …/api/raw{path}/{name}?auth=<token> (mesma lógica do smartFetch).
  • Filtro de extensões: glb, obj, stl, ifc (via getSupportedExtension).
  • Mensagens de erro claras quando: não é FileBrowser, CORS bloqueia, token NoAuth indisponível, pasta vazia.

Escopo desta entrega

Suporte só a FileBrowser (que é o caso atual store.tracksteel.com.br). Dropbox/OneDrive/Drive ficam de fora — exigiriam OAuth e um connector próprio (posso fazer numa próxima rodada se quiser).

Arquivos

  • Editar src/components/CloudLoader.tsx
    • Adicionar tabs "Arquivo / Pasta" no DialogContent.
    • Adicionar estado mode, folderUrl, currentPath, items, selectedItem, browsing.
    • Manter handleLoad(rawUrl) atual para o modo Arquivo.
  • Criar src/lib/filebrowser.ts
    • getFileBrowserToken(origin) (move/extrai a função existente).
    • listFolder(folderUrl): Promise<{ origin, path, token, items }>.
    • buildRawUrl(origin, path, name, token).
    • SUPPORTED_EXT = ['glb','obj','stl','ifc'].
  • Criar src/components/FolderBrowser.tsx
    • Componente puro de UI: recebe items, currentPath, callbacks onNavigate, onSelect, onLoad. Mostra breadcrumb, lista, botão Carregar selecionado.
  • Sem mudanças em useModelStore, convertIFC, convertToGLB — fluxo de download/conversão é o mesmo.

Limitações conhecidas

  • Funciona somente em FileBrowser com NoAuth ou já autenticado pelo navegador.
  • Servidor precisa permitir CORS para o domínio do app (já é o caso de store.tracksteel.com.br).
  • Listagens muito grandes (>500 arquivos) podem ficar lentas; sem paginação nesta versão.