From 4eaae2637ec0f6552dc71015be96f3684a581e27 Mon Sep 17 00:00:00 2001 From: ghost Date: Fri, 2 Feb 2024 20:13:10 +0200 Subject: [PATCH] give routing priority to page, then directory --- src/server.php | 262 ++++++++++++++++++++++++------------------------- 1 file changed, 131 insertions(+), 131 deletions(-) diff --git a/src/server.php b/src/server.php index 6ba607e..c8ab6ec 100644 --- a/src/server.php +++ b/src/server.php @@ -129,8 +129,137 @@ $server->setHandler( $_uri = isset($matches[1]) ? $matches[1] : ''; - // Directory request, build index links as no side menu in gemini version - if ($directory = $filesystem->getDirectoryPathByUri($_uri)) + // File request, get page content + if ($path = $filesystem->getPagePathByUri($_uri)) + { + // Check for cached results + if ($content = $memory->get($path)) + { + $response->setContent( + $content + ); + + return $response; + } + + // Init reader + $reader = new \Yggverse\Gemini\Dokuwiki\Reader(); + + // Define base URL + $reader->setMacros( + '~URL:base~', + sprintf( + 'gemini://%s%s/%s', + $config->gemini->server->host, + $config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port, + '' // @TODO append relative prefix (:) + ) + ); + + // Define index menu + /* @TODO + $pages = []; + + if ($directory = $filesystem->getDirectoryPathByUri($_uri)) + { + foreach ($filesystem->getPagePathsByPath($directory) as $file) + { + $pages[] = sprintf( + '=> /%s', + $filesystem->getPageUriByPath( + $file + ) + ); + } + } + + if ($pages) + { + $reader->setRule( + '/\{\{indexmenu>:([^\}]+)\}\}/i', + implode( + PHP_EOL, + $pages + ) + ); + } + */ + + // Convert + $gemini = $reader->toGemini( + file_get_contents( + $path + ) + ); + + $lines = [ + $gemini + ]; + + // Get page links + if ($links = $reader->getLinks($gemini)) + { + $lines[] = sprintf( + '## %s', + $config->string->links + ); + + foreach ($links as $link) + { + $lines[] = sprintf( + '=> %s', + $link + ); + } + } + + // Append actions header + $lines[] = sprintf( + '## %s', + $config->string->actions + ); + + // Append source and homepage link + $lines[] = sprintf( + '=> gemini://%s%s %s', + $config->gemini->server->host, + $config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port, + $config->string->main + ); + + // Append source link + $lines[] = sprintf( + '=> %s/%s %s', + $config->dokuwiki->url->source, + $matches[1], + $config->string->source + ); + + // Append about info + $lines[] = $config->string->about; + + // Merge lines + $content = implode( + PHP_EOL, + $lines + ); + + // Cache results + $memory->set( + $path, + $content + ); + + // Response + $response->setContent( + $content + ); + + return $response; + } + + // File not found, request directory for minimal navigation + else if ($directory = $filesystem->getDirectoryPathByUri($_uri)) { // Check for cached results /* @@ -374,135 +503,6 @@ $server->setHandler( return $response; } - - // File request, get page content - if ($path = $filesystem->getPagePathByUri($_uri)) - { - // Check for cached results - if ($content = $memory->get($path)) - { - $response->setContent( - $content - ); - - return $response; - } - - // Init reader - $reader = new \Yggverse\Gemini\Dokuwiki\Reader(); - - // Define base URL - $reader->setMacros( - '~URL:base~', - sprintf( - 'gemini://%s%s/%s', - $config->gemini->server->host, - $config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port, - '' // @TODO append relative prefix (:) - ) - ); - - // Define index menu - /* @TODO - $pages = []; - - if ($directory = $filesystem->getDirectoryPathByUri($_uri)) - { - foreach ($filesystem->getPagePathsByPath($directory) as $file) - { - $pages[] = sprintf( - '=> /%s', - $filesystem->getPageUriByPath( - $file - ) - ); - } - } - - if ($pages) - { - $reader->setRule( - '/\{\{indexmenu>:([^\}]+)\}\}/i', - implode( - PHP_EOL, - $pages - ) - ); - } - */ - - // Convert - $gemini = $reader->toGemini( - file_get_contents( - $path - ) - ); - - $lines = [ - $gemini - ]; - - // Get page links - if ($links = $reader->getLinks($gemini)) - { - $lines[] = sprintf( - '## %s', - $config->string->links - ); - - foreach ($links as $link) - { - $lines[] = sprintf( - '=> %s', - $link - ); - } - } - - // Append actions header - $lines[] = sprintf( - '## %s', - $config->string->actions - ); - - // Append source and homepage link - $lines[] = sprintf( - '=> gemini://%s%s %s', - $config->gemini->server->host, - $config->gemini->server->port == 1965 ? null : ':' . $config->gemini->server->port, - $config->string->main - ); - - // Append source link - $lines[] = sprintf( - '=> %s/%s %s', - $config->dokuwiki->url->source, - $matches[1], - $config->string->source - ); - - // Append about info - $lines[] = $config->string->about; - - // Merge lines - $content = implode( - PHP_EOL, - $lines - ); - - // Cache results - $memory->set( - $path, - $content - ); - - // Response - $response->setContent( - $content - ); - - return $response; - } } // Route not found