diff --git a/src/Model/Connection/Gemini.php b/src/Model/Connection/Gemini.php index 4a0108a4..fcceea1d 100644 --- a/src/Model/Connection/Gemini.php +++ b/src/Model/Connection/Gemini.php @@ -9,6 +9,7 @@ use \Yggverse\Gemini\Client\Response; use \Yggverse\Net\Address; use \Yggverse\Yoda\Model\Connection; +use \Yggverse\Yoda\Model\Filesystem; class Gemini { @@ -55,44 +56,33 @@ class Gemini case 20: // ok + // Update content data $this->_connection->setData( $response->getBody() ); + // Detect MIME type switch (true) { - case str_contains( - $response->getMeta(), - $this->_connection::MIME_TEXT_GEMINI - ): + case $mime = self::getMimeByMeta( + $response->getMeta() + ): break; - $this->_connection->setMime( - $this->_connection::MIME_TEXT_GEMINI - ); + case $mime = Filesystem::getMimeByPath( + $address->getPath() + ): break; - break; + case $mime = Filesystem::getMimeByData( + $response->getData() + ): break; - case str_contains( - $response->getMeta(), - $this->_connection::MIME_TEXT_PLAIN - ): - - $this->_connection->setMime( - $this->_connection::MIME_TEXT_PLAIN - ); - - break; - - default: - - throw new \Exception( - sprintf( - _('MIME type not implemented for %s'), - $response->getMeta() - ) - ); + default: $mime = null; } + $this->_connection->setMime( + $mime + ); + break; case 31: // redirect @@ -109,10 +99,6 @@ class Gemini ) ); - $this->_connection->setMime( - $this->_connection::MIME_TEXT_GEMINI - ); - break; default: @@ -139,4 +125,25 @@ class Gemini true ); } + + public static function getMimeByMeta( + ?string $meta = null + ): ?string + { + if ($meta) + { + preg_match( + '/(?([\w]+\/[\w]+))/m', + $meta, + $match + ); + + if (isset($match['mime'])) + { + return $match['mime']; + } + } + + return null; + } } \ No newline at end of file