repod/lib/Service/MultiPodService.php
Michel Roux c951a93b8c
All checks were successful
repod / xml (push) Successful in 16s
repod / php (push) Successful in 57s
repod / nodejs (push) Successful in 2m8s
repod / release (push) Has been skipped
feat: add unified search integration
2024-01-18 11:43:58 +01:00

54 lines
1.1 KiB
PHP

<?php
declare(strict_types=1);
namespace OCA\RePod\Service;
use OCA\GPodderSync\Core\PodcastData\PodcastData;
use Psr\Log\LoggerInterface;
class MultiPodService implements IPodProvider
{
/**
* @var IPodProvider[]
*/
private array $providers = [];
public function __construct(
FyydService $fyydService,
ItunesService $itunesService,
private LoggerInterface $logger
) {
$this->providers = [$fyydService, $itunesService];
}
/**
* @return PodcastData[]
*/
public function search(string $value): array {
$podcasts = [];
foreach ($this->providers as $provider) {
try {
$podcasts = [...$podcasts, ...$provider->search($value)];
} catch (\Exception $e) {
$this->logger->error($e->getMessage(), $e->getTrace());
}
}
usort($podcasts, fn (PodcastData $a, PodcastData $b) => $b->getFetchedAtUnix() <=> $a->getFetchedAtUnix());
return array_values(
array_intersect_key(
$podcasts,
array_unique(
array_map(
fn (PodcastData $feed) => $feed->getLink(),
array_filter($podcasts, fn (PodcastData $feed) => $feed->getLink())
)
)
)
);
}
}