diff --git a/app/Controllers/ApiController.php b/app/Controllers/ApiController.php index dfc274a..ab4dd7c 100644 --- a/app/Controllers/ApiController.php +++ b/app/Controllers/ApiController.php @@ -21,6 +21,30 @@ use Psr\Http\Message\ServerRequestInterface; */ class ApiController extends BasicController { + /** + * Возвращает информацию о плейлисте + * + * @param ServerRequestInterface $request + * @param ResponseInterface $response + * @return ResponseInterface + * @throws Exception + */ + public function getOne(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface + { + try { + $code = $request->getAttributes()['code'] ?? null; + empty($code) && throw new PlaylistNotFoundException(''); + + $playlist = ini()->getPlaylist($code); + if ($playlist['isOnline'] === true) { + unset($playlist['content']); + } + return $this->responseJson($response, 200, $playlist); + } catch (PlaylistNotFoundException $e) { + return $this->responseJsonError($response, 404, $e); + } + } + /** * Возвращает информацию о каналов плейлиста * @@ -56,24 +80,4 @@ class ApiController extends BasicController return $response->withStatus(200) ->withHeader('Content-Type', $mime); } - - /** - * Возвращает информацию о плейлисте - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * @throws Exception - */ - public function json(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface - { - $code = $request->getAttributes()['code']; - - try { - $playlist = ini()->getPlaylist($code); - return $this->responseJson($response, 200, $playlist); - } catch (PlaylistNotFoundException $e) { - return $this->responseJsonError($response, 404, $e); - } - } } diff --git a/app/Controllers/BasicController.php b/app/Controllers/BasicController.php index c5feb2f..4f422fe 100644 --- a/app/Controllers/BasicController.php +++ b/app/Controllers/BasicController.php @@ -34,7 +34,7 @@ class BasicController */ public function notFound(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface { - $code = $request->getAttributes()['code']; + $code = $request->getAttributes()['code'] ?? ''; $response->withStatus(404); $this->view($request, $response, 'notfound.twig', ['code' => $code]); diff --git a/app/Controllers/WebController.php b/app/Controllers/WebController.php index c2b6622..0d2a956 100644 --- a/app/Controllers/WebController.php +++ b/app/Controllers/WebController.php @@ -63,21 +63,6 @@ class WebController extends BasicController ]); } - /** - * Возвращает страницу FAQ - * - * @param ServerRequestInterface $request - * @param ResponseInterface $response - * @return ResponseInterface - * @throws LoaderError - * @throws RuntimeError - * @throws SyntaxError - */ - public function faq(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface - { - return $this->view($request, $response, 'faq.twig'); - } - /** * Переадресует запрос на прямую ссылку плейлиста * diff --git a/app/Core/IniFile.php b/app/Core/IniFile.php index fa3bb27..0ac4cba 100644 --- a/app/Core/IniFile.php +++ b/app/Core/IniFile.php @@ -41,7 +41,11 @@ class IniFile // сохраняем порядок foreach (array_keys($ini) as $code) { - $data = redis()->get($code); + try { + $data = @redis()->get($code); + } catch (Throwable) { + $data = false; + } if ($data === false) { $raw = $ini[$code]; $data = [ diff --git a/config/routes.php b/config/routes.php index 59c3eea..f47be9b 100644 --- a/config/routes.php +++ b/config/routes.php @@ -6,6 +6,7 @@ */ use App\Controllers\ApiController; +use App\Controllers\BasicController; use App\Controllers\BotController; use App\Controllers\WebController; @@ -56,13 +57,13 @@ return [ [ 'method' => 'GET', - 'path' => '/{code:[0-9a-zA-Z]+}/json', - 'handler' => [ApiController::class, 'json'], - 'name' => 'json', + 'path' => '/api/playlists/{code:[0-9a-zA-Z]+}', + 'handler' => [ApiController::class, 'getOne'], + 'name' => 'api::getOne', ], [ 'method' => 'GET', - 'path' => '/{code:[0-9a-zA-Z]+}/qrcode', + 'path' => '/api/playlists/{code:[0-9a-zA-Z]+}/qrcode', 'handler' => [ApiController::class, 'makeQrCode'], 'name' => 'api::makeQrCode', ], diff --git a/views/details.twig b/views/details.twig index 2d79ead..db2f530 100644 --- a/views/details.twig +++ b/views/details.twig @@ -175,7 +175,7 @@