getFileById($fileId); $name = $file->getName(); return new TemplateResponse('kicanvasviewer', 'viewer', [ 'fileId' => $fileId, 'fileName' => $name, ]); } #[NoAdminRequired] #[NoCSRFRequired] public function file(int $fileId, string $name): DataDisplayResponse { $file = $this->getFileById($fileId); if (!preg_match('/\.(kicad_sch|kicad_pcb)$/i', $file->getName())) { return new DataDisplayResponse('Unsupported file type', 400); } $response = new DataDisplayResponse($file->getContent()); $response->addHeader('Content-Type', 'text/plain; charset=utf-8'); $response->addHeader('Content-Disposition', 'inline; filename="' . basename($file->getName()) . '"'); return $response; } private function getFileById(int $fileId) { $user = $this->userSession->getUser(); if ($user === null) { throw new \Exception('Not logged in'); } $userFolder = $this->rootFolder->getUserFolder($user->getUID()); $nodes = $userFolder->getById($fileId); if (empty($nodes)) { throw new \Exception('File not found'); } return $nodes[0]; } #[NoAdminRequired] #[NoCSRFRequired] public function resolve(string $etag): JSONResponse { $user = $this->userSession->getUser(); if ($user === null) { return new JSONResponse(['error' => 'not logged in'], 401); } $userFolder = $this->rootFolder->getUserFolder($user->getUID()); $nodes = array_merge( $userFolder->searchByMime('application/x-kicad-schematic'), $userFolder->searchByMime('application/x-kicad-pcb') ); foreach ($nodes as $node) { if ($node->getEtag() === $etag) { return new JSONResponse([ 'fileId' => $node->getId(), 'fileName' => $node->getName(), 'mime' => $node->getMimeType(), ]); } } return new JSONResponse(['error' => 'not found'], 404); } }