66 lines
1.9 KiB
Python

"""Contrôleur pour lister les fichiers et dossiers Nextcloud"""
from fastapi import APIRouter, HTTPException, Path
from fastapi.responses import JSONResponse
from nc_py_api import NextcloudException
from utils import get_nextcloud_client, format_file_info
router = APIRouter()
@router.get("/list/{path:path}")
async def list_directory(
path: str = Path(
...,
description="Chemin du répertoire à lister (utilisez '/' pour la racine)",
examples=["Documents"]
)
):
"""
Liste tous les fichiers et dossiers d'un répertoire Nextcloud
Args:
path: Chemin du répertoire (sans le slash initial)
Returns:
JSON contenant la liste des fichiers et dossiers
"""
try:
# Créer le client Nextcloud
nc = get_nextcloud_client()
# Normaliser le chemin
if path == "/" or path == "":
directory_path = "/"
else:
# Enlever les slashes de début/fin
directory_path = "/" + path.strip("/")
# Lister le contenu du répertoire
try:
files_list = nc.files.listdir(path=directory_path)
except NextcloudException as e:
if "404" in str(e):
raise HTTPException(
status_code=404,
detail=f"Le répertoire '{directory_path}' n'existe pas"
)
else:
raise HTTPException(
status_code=500,
detail=f"Erreur Nextcloud: {str(e)}"
)
# Formater les résultats - retourner uniquement la liste des items
items = [format_file_info(item) for item in files_list]
return JSONResponse(content=items)
except HTTPException:
raise
except Exception as e:
raise HTTPException(
status_code=500,
detail=f"Erreur interne: {str(e)}"
)