query->get('path', ''); try { $path = $this->pathResolver->normalizeRelative($rawPath); } catch (InvalidPathException) { return new JsonResponse(['error' => 'Invalid path.'], 400); } try { $entries = $this->fileSource->dir($path); } catch (ShareNotConfiguredException) { return new JsonResponse(['error' => 'Share not configured.'], 409); } catch (ShareConnectionException) { return new JsonResponse(['error' => 'Unable to reach the file share.'], 502); } return new JsonResponse([ 'path' => $path, 'breadcrumb' => $this->breadcrumb($path), 'entries' => array_map(static fn (FileEntry $e): array => [ 'name' => $e->name, 'path' => $e->path, 'isDir' => $e->isDir, 'size' => $e->size, 'modifiedAt' => $e->modifiedAt, 'mimeType' => $e->mimeType, ], $entries), ]); } /** * @return array */ private function breadcrumb(string $path): array { if ('' === $path) { return []; } $crumbs = []; $acc = ''; foreach (explode('/', $path) as $segment) { $acc = '' === $acc ? $segment : $acc.'/'.$segment; $crumbs[] = ['name' => $segment, 'path' => $acc]; } return $crumbs; } }