update MIME type detection

This commit is contained in:
yggverse 2024-07-17 17:18:56 +03:00
parent 6d3f669603
commit 7230bec4cf

View file

@ -9,6 +9,7 @@ use \Yggverse\Gemini\Client\Response;
use \Yggverse\Net\Address; use \Yggverse\Net\Address;
use \Yggverse\Yoda\Model\Connection; use \Yggverse\Yoda\Model\Connection;
use \Yggverse\Yoda\Model\Filesystem;
class Gemini class Gemini
{ {
@ -55,44 +56,33 @@ class Gemini
case 20: // ok case 20: // ok
// Update content data
$this->_connection->setData( $this->_connection->setData(
$response->getBody() $response->getBody()
); );
// Detect MIME type
switch (true) switch (true)
{ {
case str_contains( case $mime = self::getMimeByMeta(
$response->getMeta(), $response->getMeta()
$this->_connection::MIME_TEXT_GEMINI ): break;
):
$this->_connection->setMime( case $mime = Filesystem::getMimeByPath(
$this->_connection::MIME_TEXT_GEMINI $address->getPath()
); ): break;
break; case $mime = Filesystem::getMimeByData(
$response->getData()
): break;
case str_contains( default: $mime = null;
$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()
)
);
} }
$this->_connection->setMime(
$mime
);
break; break;
case 31: // redirect case 31: // redirect
@ -109,10 +99,6 @@ class Gemini
) )
); );
$this->_connection->setMime(
$this->_connection::MIME_TEXT_GEMINI
);
break; break;
default: default:
@ -139,4 +125,25 @@ class Gemini
true true
); );
} }
public static function getMimeByMeta(
?string $meta = null
): ?string
{
if ($meta)
{
preg_match(
'/(?<mime>([\w]+\/[\w]+))/m',
$meta,
$match
);
if (isset($match['mime']))
{
return $match['mime'];
}
}
return null;
}
} }