feat: 🚀 finished the main opds part
This commit is contained in:
parent
a7da64b4de
commit
77511ece72
@ -4,6 +4,9 @@ declare(strict_types=1);
|
||||
|
||||
namespace OCA\OpdsCatalog\Controller;
|
||||
|
||||
use Kiwilan\Ebook\Ebook;
|
||||
use Kiwilan\Opds\Entries\OpdsEntryBook;
|
||||
use Kiwilan\Opds\Entries\OpdsEntryBookAuthor;
|
||||
use Kiwilan\Opds\Entries\OpdsEntryNavigation;
|
||||
use Kiwilan\Opds\Enums\OpdsVersionEnum;
|
||||
use Kiwilan\Opds\Opds;
|
||||
@ -38,7 +41,7 @@ class PageController extends Controller
|
||||
|
||||
#[NoCSRFRequired]
|
||||
#[NoAdminRequired]
|
||||
#[FrontpageRoute(verb: 'GET', url: '/{path}', requirements: ['path' => '.+'])]
|
||||
#[FrontpageRoute(verb: 'GET', url: '/index/{path}', requirements: ['path' => '.*'])]
|
||||
public function index(string $path): Response {
|
||||
$userFolder = $this->rootFolder->getUserFolder($this->user->getUID());
|
||||
$root = $userFolder->get($path);
|
||||
@ -50,13 +53,44 @@ class PageController extends Controller
|
||||
$feeds[] = new OpdsEntryNavigation(
|
||||
(string) $node->getId(),
|
||||
$node->getName(),
|
||||
$userFolder->getRelativePath($node->getPath()) ?? $path.'/'.$node->getName(),
|
||||
$this->urlGenerator->linkToRouteAbsolute(
|
||||
'opds_catalog.page.index',
|
||||
['path' => $userFolder->getRelativePath($node->getPath()) ?? $path.'/'.$node->getName()]
|
||||
),
|
||||
properties: [
|
||||
'numberOfItems' => count($node->getDirectoryListing()),
|
||||
],
|
||||
updated: new \DateTime('@'.$node->getMTime())
|
||||
);
|
||||
} elseif ($node instanceof File) {
|
||||
$ebook = Ebook::read($node->getPath());
|
||||
if ($ebook instanceof Ebook) {
|
||||
$authors = [];
|
||||
foreach ($ebook->getAuthors() as $author) {
|
||||
if (null !== $author->getName()) {
|
||||
$authors[] = new OpdsEntryBookAuthor($author->getName());
|
||||
}
|
||||
}
|
||||
|
||||
$feeds[] = new OpdsEntryBook(
|
||||
(string) $node->getId(),
|
||||
$ebook->getTitle() ?? $ebook->getFilename(),
|
||||
$this->urlGenerator->linkToRoute('opds_catalog.page.books', ['path' => $path.'/'.$node->getName()]),
|
||||
summary: $ebook->getDescription(),
|
||||
media: $this->urlGenerator->linkTo('', 'core/preview', ['fileId' => $node->getId(), 'x' => 1024, 'y' => 1024]),
|
||||
updated: new \DateTime('@'.$node->getMTime()),
|
||||
download: $this->urlGenerator->linkTo('', 'remote.php/dav/files/'.$this->user->getUID().'/'.$userFolder->getRelativePath($node->getPath())),
|
||||
mediaThumbnail: $this->urlGenerator->linkTo('', 'core/preview', ['fileId' => $node->getId()]),
|
||||
categories: $ebook->getTags(),
|
||||
authors: $authors,
|
||||
published: $ebook->getPublishDate(),
|
||||
volume: $ebook->getVolume(),
|
||||
serie: $ebook->getSeries(),
|
||||
language: $ebook->getLanguage(),
|
||||
identifier: $ebook->getIdentifiers()[0]->getValue(),
|
||||
publisher: $ebook->getPublisher()
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -65,12 +99,12 @@ class PageController extends Controller
|
||||
name: $this->user->getDisplayName()."'s Library",
|
||||
author: $this->user->getDisplayName(),
|
||||
iconUrl: $this->urlGenerator->getAbsoluteURL('/avatar/'.$this->user->getUID().'/512'),
|
||||
startUrl: $this->urlGenerator->linkToRoute('opds_catalog.page.index'),
|
||||
searchUrl: $this->urlGenerator->linkToRoute('opds_catalog.page.search')
|
||||
startUrl: $this->urlGenerator->linkToRouteAbsolute('opds_catalog.page.index'),
|
||||
searchUrl: $this->urlGenerator->linkToRouteAbsolute('opds_catalog.page.search')
|
||||
);
|
||||
$opds = Opds::make($config)->get();
|
||||
$response = $opds->getResponse();
|
||||
|
||||
$opds = Opds::make($config)->feeds($feeds)->get();
|
||||
$response = $opds->getResponse();
|
||||
if ($response instanceof OpdsResponse) {
|
||||
if (OpdsVersionEnum::v1Dot2 === $opds->getVersion()) {
|
||||
// @phpstan-ignore-next-line
|
||||
|
Loading…
x
Reference in New Issue
Block a user