Browse Source

update MIME type detection

PHP-GTK3
yggverse 4 months ago
parent
commit
7230bec4cf
  1. 65
      src/Model/Connection/Gemini.php

65
src/Model/Connection/Gemini.php

@ -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,46 +56,35 @@ 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->setMime(
$this->_connection::MIME_TEXT_PLAIN $mime
); );
break; break;
default:
throw new \Exception(
sprintf(
_('MIME type not implemented for %s'),
$response->getMeta()
)
);
}
break;
case 31: // redirect case 31: // redirect
// show link, no follow // show link, no follow
@ -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;
}
} }
Loading…
Cancel
Save