wip: filters movie results, adds options to filter input
This commit is contained in:
@@ -2,8 +2,10 @@
|
||||
|
||||
namespace App\Command;
|
||||
|
||||
use App\User\Framework\Entity\UserPreference;
|
||||
use App\User\Framework\Repository\PreferenceOptionRepository;
|
||||
use App\User\Framework\Repository\PreferencesRepository;
|
||||
use App\User\Framework\Repository\UserRepository;
|
||||
use Symfony\Component\Console\Attribute\AsCommand;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
@@ -18,14 +20,17 @@ class SeedDatabaseCommand extends Command
|
||||
{
|
||||
private PreferencesRepository $preferenceRepository;
|
||||
private PreferenceOptionRepository $preferenceOptionRepository;
|
||||
private UserRepository $userRepository;
|
||||
|
||||
public function __construct(
|
||||
PreferencesRepository $preferenceRepository,
|
||||
PreferenceOptionRepository $preferenceOptionRepository,
|
||||
UserRepository $userRepository,
|
||||
) {
|
||||
parent::__construct();
|
||||
$this->preferenceRepository = $preferenceRepository;
|
||||
$this->preferenceOptionRepository = $preferenceOptionRepository;
|
||||
$this->userRepository = $userRepository;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int
|
||||
@@ -34,6 +39,7 @@ class SeedDatabaseCommand extends Command
|
||||
|
||||
$this->seedPreferences($io);
|
||||
$this->seedPreferenceOptions($io);
|
||||
$this->updateUserPreferences($io);
|
||||
|
||||
return Command::SUCCESS;
|
||||
}
|
||||
@@ -60,6 +66,26 @@ class SeedDatabaseCommand extends Command
|
||||
$this->preferenceRepository->getEntityManager()->flush();
|
||||
}
|
||||
|
||||
private function updateUserPreferences(SymfonyStyle $io)
|
||||
{
|
||||
$io->info('[SeedDatabaseCommand] > Updating user preferences...');
|
||||
$users = $this->userRepository->findAll();
|
||||
$preferences = $this->preferenceRepository->findAll();
|
||||
foreach ($users as $user) {
|
||||
foreach ($preferences as $preference) {
|
||||
if (false === $user->hasUserPreference($preference->getId())) {
|
||||
$user->addUserPreference(
|
||||
new UserPreference()
|
||||
->setPreference($preference)
|
||||
->setUser($user)
|
||||
->setPreferenceValue(null)
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
$this->userRepository->getEntityManager()->flush();
|
||||
}
|
||||
|
||||
private function getPreferences(): array
|
||||
{
|
||||
return [
|
||||
@@ -91,6 +117,13 @@ class SeedDatabaseCommand extends Command
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'quality',
|
||||
'name' => 'Quality',
|
||||
'description' => null,
|
||||
'enabled' => true,
|
||||
'type' => 'media',
|
||||
],
|
||||
[
|
||||
'id' => 'movie_folder',
|
||||
'name' => 'Create new folder for Movies',
|
||||
|
||||
@@ -20,9 +20,6 @@ use Symfony\Contracts\Cache\ItemInterface;
|
||||
final class ApiController extends AbstractController
|
||||
{
|
||||
public function __construct(
|
||||
private readonly GetMovieOptionsHandler $getMovieOptionsHandler,
|
||||
private readonly GetTvShowOptionsHandler $getTvShowOptionsHandler,
|
||||
private readonly Broadcaster $broadcaster,
|
||||
private readonly Torrentio $torrentio,
|
||||
) {}
|
||||
|
||||
@@ -38,79 +35,4 @@ final class ApiController extends AbstractController
|
||||
$this->torrentio->search($imdbId, 'movies', false),
|
||||
);
|
||||
}
|
||||
|
||||
#[Route('/torrentio/movies/{tmdbId}/{imdbId}', name: 'app_torrentio_movies')]
|
||||
public function movieOptions(GetMovieOptionsInput $input, CacheInterface $cache): Response
|
||||
{
|
||||
$cacheId = sprintf(
|
||||
"page.torrentio.movies.%s.%s",
|
||||
$input->tmdbId,
|
||||
$input->imdbId
|
||||
);
|
||||
|
||||
return $cache->get($cacheId, function (ItemInterface $item) use ($input) {
|
||||
$item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0));
|
||||
$results = $this->getMovieOptionsHandler->handle($input->toCommand());
|
||||
return $this->render('torrentio/movies.html.twig', [
|
||||
'results' => $results,
|
||||
]);
|
||||
});
|
||||
}
|
||||
|
||||
#[Route('/torrentio/tvshows/{tmdbId}/{imdbId}/{season?}/{episode?}', name: 'app_torrentio_tvshows')]
|
||||
public function tvShowOptions(GetTvShowOptionsInput $input, CacheInterface $cache): Response
|
||||
{
|
||||
$cacheId = sprintf(
|
||||
"page.torrentio.tvshows.%s.%s.%s.%s",
|
||||
$input->tmdbId,
|
||||
$input->imdbId,
|
||||
$input->season,
|
||||
$input->episode,
|
||||
);
|
||||
|
||||
try {
|
||||
// return $cache->get($cacheId, function (ItemInterface $item) use ($input) {
|
||||
// $item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0));
|
||||
$results = $this->getTvShowOptionsHandler->handle($input->toCommand());
|
||||
return $this->render('torrentio/tvshows.html.twig', [
|
||||
'results' => $results,
|
||||
]);
|
||||
// });
|
||||
} catch (TorrentioRateLimitException $exception) {
|
||||
$this->broadcaster->alert('Warning', 'Torrentio has rate limited your requests. Please wait a few minutes before trying again.', 'warning');
|
||||
return $this->render('bare.html.twig',
|
||||
[],
|
||||
new Response('Too many requests',
|
||||
Response::HTTP_TOO_MANY_REQUESTS,
|
||||
['Retry-After' => 4000]
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[Route('/torrentio/tvshows/clear/{tmdbId}/{imdbId}/{season?}/{episode?}', name: 'app_clear_torrentio_tvshows')]
|
||||
public function clearTvShowOptions(GetTvShowOptionsInput $input, CacheInterface $cache, Request $request): Response
|
||||
{
|
||||
$cacheId = sprintf(
|
||||
"page.torrentio.tvshows.%s.%s.%s.%s",
|
||||
$input->tmdbId,
|
||||
$input->imdbId,
|
||||
$input->season,
|
||||
$input->episode,
|
||||
);
|
||||
$cache->delete($cacheId);
|
||||
|
||||
$this->broadcaster->alert(
|
||||
title: 'Success',
|
||||
message: 'Torrentio cache Cleared.'
|
||||
);
|
||||
|
||||
return $cache->get($cacheId, function (ItemInterface $item) use ($input) {
|
||||
$item->expiresAt(Carbon::now()->addHour()->setMinute(0)->setSecond(0));
|
||||
$results = $this->getTvShowOptionsHandler->handle($input->toCommand());
|
||||
return $this->render('torrentio/tvshows.html.twig', [
|
||||
'results' => $results,
|
||||
]);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ class ResultFactory
|
||||
string $bingeGroup = "-"
|
||||
) {
|
||||
$ptn = (object) (new PTN())->parse($title);
|
||||
// dump($ptn);
|
||||
return new TorrentioResult(
|
||||
self::trimTitle($title),
|
||||
urldecode($url),
|
||||
@@ -34,6 +35,7 @@ class ResultFactory
|
||||
$bingeGroup,
|
||||
$ptn->resolution ?? "-",
|
||||
self::setCodec($ptn->codec ?? "-"),
|
||||
$ptn->quality ?? "-",
|
||||
$ptn,
|
||||
substr(base64_encode($url), strlen($url) - 10),
|
||||
$ptn->episode ?? "-",
|
||||
|
||||
@@ -16,6 +16,7 @@ class TorrentioResult
|
||||
public ?string $bingeGroup = "-",
|
||||
public ?string $resolution = "-",
|
||||
public ?string $codec = "-",
|
||||
public ?string $quality = "-",
|
||||
public object|array $ptn = [],
|
||||
public ?string $key = "-",
|
||||
public ?string $episodeNumber = "-",
|
||||
|
||||
Reference in New Issue
Block a user