Initial commit

This commit is contained in:
Tie 2026-04-01 21:13:58 +02:00
commit b22231c8b6
40 changed files with 2443 additions and 0 deletions

61
frontend/routes/viewer.py Normal file
View file

@ -0,0 +1,61 @@
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
import config
import api_client
from pathlib import Path
import shutil
import os
from datetime import datetime
router = APIRouter()
@router.get("/viewer/list", response_class=HTMLResponse)
async def viewer_list(request: Request):
"""Liste les nuages de points disponibles - Endpoint autonome frontend"""
pointclouds = []
# Récupérer la liste des nuages directement depuis le système de fichiers
ept_dir = Path(config.EPT_DIR)
if ept_dir.exists():
for item in sorted(ept_dir.iterdir(), key=lambda x: x.stat().st_ctime, reverse=True):
if item.is_dir():
# Lire le manifeste
manifest_path = item / "manifest.json"
manifest = {}
if manifest_path.exists():
try:
manifest = {"ept_dir": item.name}
except:
pass
# Calculer la taille et le nombre de fichiers
total_size = 0
file_count = 0
for f in item.rglob("*"):
if f.is_file():
total_size += f.stat().st_size
file_count += 1
if file_count > 0:
pointclouds.append({
"id": item.name,
"size_mb": round(total_size / (1024 * 1024), 2),
"file_count": file_count,
"manifest": manifest,
"created": item.stat().st_ctime,
})
return request.app.state.templates.TemplateResponse(
"partials/cloud_list.html",
{"request": request, "pointclouds": pointclouds},
)
@router.get("/viewer/{pc_id}", response_class=HTMLResponse)
async def viewer(request: Request, pc_id: str):
embed_url = f"{config.POTREE_URL}/viewer-embed/{pc_id}"
return request.app.state.templates.TemplateResponse(
"partials/viewer.html",
{"request": request, "pc_id": pc_id, "embed_url": embed_url},
)