chore: cleanup
This commit is contained in:
@@ -22,7 +22,7 @@ class TmdbMovieResultDenormalizer extends TmdbResultDenormalizer implements Deno
|
||||
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): TmdbResult|array|null
|
||||
{
|
||||
/** @var TmdbResult $result */
|
||||
$result = $this->normalizer->denormalize($data, TmdbResult::class, $format, $context);
|
||||
$result = parent::denormalize($data, TmdbResult::class, $format, $context);
|
||||
|
||||
if (array_key_exists('release_date', $data) && !in_array($data['release_date'], ['', null,])) {
|
||||
$airDate = (new \DateTime($data['release_date']));
|
||||
@@ -34,9 +34,7 @@ class TmdbMovieResultDenormalizer extends TmdbResultDenormalizer implements Deno
|
||||
$result->premiereDate = $airDate;
|
||||
$result->poster = (null !== $data['poster_path']) ? self::POSTER_IMG_PATH . $data['poster_path'] : null;
|
||||
$result->year = (null !== $airDate) ? $airDate->format('Y') : null;
|
||||
$result->mediaType = "movies";
|
||||
$result->stars = $this->getStars($data);
|
||||
$result->directors = $this->getDirectors($data);
|
||||
$result->mediaType = MediaType::Movie->value;
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,12 @@ class TmdbResultDenormalizer implements DenormalizerInterface
|
||||
|
||||
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): TmdbResult|array|null
|
||||
{
|
||||
return $this->normalizer->denormalize($data, TmdbResult::class, $format, $context);
|
||||
$result = $this->normalizer->denormalize($data, TmdbResult::class, $format, $context);
|
||||
$result->stars = $this->getStars($data);
|
||||
$result->directors = $this->getDirectors($data);
|
||||
$result->producers = $this->getProducers($data);
|
||||
$result->creators = $this->getCreators($data);
|
||||
return $result;
|
||||
}
|
||||
|
||||
protected function getStars(array $data): ?array
|
||||
@@ -49,6 +54,28 @@ class TmdbResultDenormalizer implements DenormalizerInterface
|
||||
->toArray();
|
||||
}
|
||||
|
||||
public function getCreators(array $data): ?array
|
||||
{
|
||||
if (!array_key_exists('credits', $data)) {
|
||||
return null;
|
||||
}
|
||||
return Map::from($data['credits']['crew'])
|
||||
->filter(fn($item) => $item['job'] === 'Creator')
|
||||
->map(fn($item) => $this->normalizer->denormalize($item, CrewMemberDto::class))
|
||||
->toArray();
|
||||
}
|
||||
|
||||
public function getProducers(array $data): ?array
|
||||
{
|
||||
if (!array_key_exists('credits', $data)) {
|
||||
return null;
|
||||
}
|
||||
return Map::from($data['credits']['crew'])
|
||||
->filter(fn($item) => $item['job'] === 'Producer')
|
||||
->map(fn($item) => $this->normalizer->denormalize($item, CrewMemberDto::class))
|
||||
->toArray();
|
||||
}
|
||||
|
||||
public function getGenres(array $data, MediaType $mediaType): ?array
|
||||
{
|
||||
if (array_key_exists('genres', $data)) {
|
||||
|
||||
@@ -20,7 +20,7 @@ class TmdbTvShowResultDenormalizer extends TmdbResultDenormalizer implements Den
|
||||
public function denormalize(mixed $data, string $type, ?string $format = null, array $context = []): TmdbResult|array|null
|
||||
{
|
||||
/** @var TmdbResult $result */
|
||||
$result = $this->normalizer->denormalize($data, TmdbResult::class, $format, $context);
|
||||
$result = parent::denormalize($data, TmdbResult::class, $format, $context);
|
||||
|
||||
if (!in_array($data['first_air_date'], ['', null,])) {
|
||||
$airDate = (new \DateTime($data['first_air_date']));
|
||||
@@ -28,11 +28,16 @@ class TmdbTvShowResultDenormalizer extends TmdbResultDenormalizer implements Den
|
||||
$airDate = null;
|
||||
}
|
||||
|
||||
if (array_key_exists('seasons', $data)) {
|
||||
$result->numberSeasons = count($data['seasons']);
|
||||
}
|
||||
|
||||
$result->title = $data['original_name'];
|
||||
$result->premiereDate = $airDate;
|
||||
$result->poster = (null !== $data['poster_path']) ? self::POSTER_IMG_PATH . $data['poster_path'] : null;
|
||||
$result->year = (null !== $airDate) ? $airDate->format('Y') : null;
|
||||
$result->mediaType = MediaType::TvShow->value;
|
||||
|
||||
return $result;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,10 @@ class TmdbResult
|
||||
* @param GenreDto[]|null $genres
|
||||
* @param CastMemberDto[]|null $stars
|
||||
* @param CrewMemberDto[]|null $directors
|
||||
* @param CrewMemberDto[]|null $creators
|
||||
* @param CrewMemberDto[]|null $producers
|
||||
* @param int|null $runtime
|
||||
* @param int|null $numberSeasons
|
||||
*/
|
||||
public function __construct(
|
||||
#[SerializedPath('[external_ids][imdb_id]')]
|
||||
@@ -49,6 +52,9 @@ class TmdbResult
|
||||
public ?array $genres = null,
|
||||
public ?array $stars = null,
|
||||
public ?array $directors = null,
|
||||
public ?array $creators = null,
|
||||
public ?array $producers = null,
|
||||
public ?int $runtime = null,
|
||||
public ?int $numberSeasons = null,
|
||||
) {}
|
||||
}
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
{{ episode.episodeNumber }}. {{ episode.name }}
|
||||
</h4>
|
||||
<p>{{ episode.description|truncate }}</p>
|
||||
<div>
|
||||
<button class="results-count-badge py-1 px-1.5 mr-1 grow-0 font-bold text-xs bg-green-600 rounded-lg hover:cursor-pointer hover:bg-green-700 text-white" title="Click to expand the results table for season {{ episode.seasonNumber }} episode {{ episode.episodeNumber }}.">
|
||||
<div class="text-xs font-bold">
|
||||
<button class="results-count-badge py-1 px-1.5 mr-1 grow-0 bg-green-600 rounded-lg hover:cursor-pointer hover:bg-green-700 text-white" title="Click to expand the results table for season {{ episode.seasonNumber }} episode {{ episode.episodeNumber }}.">
|
||||
<span class="results-count-number" {{ stimulus_target('tv-results', 'count') }}>-</span> results
|
||||
</button>
|
||||
|
||||
<small class="py-1 px-1.5 mr-1 grow-0 font-bold bg-gray-700 rounded-lg font-normal text-white" title='"{{ episode.name }}" aired on {{ episode.airDate|date(null, 'UTC') }}.'>
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 bg-gray-700 rounded-lg text-white" title='"{{ episode.name }}" aired on {{ episode.airDate|date(null, 'UTC') }}.'>
|
||||
{{ episode.airDate|date(null, 'UTC') }}
|
||||
</small>
|
||||
</span>
|
||||
|
||||
<twig:Turbo:Frame id="meb_{{ this.imdbId }}_{{ episode_id(episode.seasonNumber, episode.episodeNumber) }}" src="{{ path('api.library.search', {
|
||||
title: this.title,
|
||||
@@ -46,9 +46,9 @@
|
||||
block: 'media_exists_badge',
|
||||
target: "meb_" ~ this.imdbId ~"_" ~ episode_id(episode.seasonNumber, episode.episodeNumber)
|
||||
}) }}">
|
||||
<small class="py-1 px-1.5 mr-1 grow-0 font-bold bg-rose-600 rounded-lg text-white" title="Episode has not been downloaded yet.">
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 bg-rose-600 rounded-lg text-white" title="Episode has not been downloaded yet.">
|
||||
missing
|
||||
</small>
|
||||
</span>
|
||||
</twig:Turbo:Frame>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -12,20 +12,20 @@
|
||||
</ul>
|
||||
</div>
|
||||
</template>
|
||||
<small
|
||||
<span
|
||||
class="py-1 px-1.5 mr-1 grow-0 font-bold bg-blue-600 rounded-lg text-center text-white"
|
||||
data-action="mouseenter->popover#show mouseleave->popover#hide"
|
||||
>
|
||||
exists
|
||||
</small>
|
||||
</span>
|
||||
</span>
|
||||
{% endif %}
|
||||
|
||||
{% if result.exists == false %}
|
||||
<small class="py-1 px-1.5 mr-1 grow-0 font-bold bg-rose-600 rounded-lg text-white"
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 font-bold bg-rose-600 rounded-lg text-white"
|
||||
title="Media has not been downloaded yet.">
|
||||
missing
|
||||
</small>
|
||||
</span>
|
||||
{% endif %}
|
||||
</template>
|
||||
</turbo-stream>
|
||||
|
||||
@@ -53,27 +53,47 @@
|
||||
|
||||
<p class="text-gray-50 mb-4">
|
||||
{{ results.media.description }}
|
||||
<br /><br />
|
||||
</p>
|
||||
|
||||
<div>
|
||||
{% if results.media.stars != null %}
|
||||
<strong>Starring</strong>: {{ results.media.stars|join(', ') }} <br />
|
||||
<strong>Starring</strong>: {{ results.media.stars|join(', ') }} <br />
|
||||
{% endif %}
|
||||
|
||||
{% if results.media.directors != null %}
|
||||
<strong>Directors</strong>: {{ results.media.directors|join(', ') }} <br />
|
||||
<strong>Directors</strong>: {{ results.media.directors|join(', ') }} <br />
|
||||
{% endif %}
|
||||
</p>
|
||||
|
||||
{% if results.media.genres != null %}
|
||||
<div id="genres" class="text-gray-50">
|
||||
{% for genre in results.media.genres %}
|
||||
<small class="px-2 py-1 border border-orange-500 rounded-full">{{ genre }}</small>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% if results.media.producers != null %}
|
||||
<strong>Producers</strong>: {{ results.media.producers|join(', ') }} <br />
|
||||
{% endif %}
|
||||
|
||||
{% if results.media.creators != null %}
|
||||
<strong>Creators</strong>: {{ results.media.creators|join(', ') }} <br />
|
||||
{% endif %}
|
||||
|
||||
{% if results.media.genres != null %}
|
||||
<div id="genres" class="text-gray-50 my-4">
|
||||
{% for genre in results.media.genres %}
|
||||
<small class="px-2 py-1 border border-orange-500 rounded-full">{{ genre }}</small>
|
||||
{% endfor %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
{% if results.media.mediaType == "tvshows" %}
|
||||
<div class="flex flex-row justify-start items-end grow text-xs">
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 font-bold text-xs bg-orange-500 rounded-lg hover:cursor-pointer hover:bg-green-700 text-white">
|
||||
<span>{{ results.media.numberSeasons }}</span> season(s)
|
||||
</span>
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 bg-sky-700 rounded-lg text-white" title='"{{ results.media.title }}" first aired on {{ results.media.premiereDate|date(null, 'UTC') }}.'>
|
||||
{{ results.media.premiereDate|date(null, 'UTC') }}
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if "movies" == results.media.mediaType %}
|
||||
<div class="flex flex-row justify-start items-end grow">
|
||||
<div class="flex flex-row justify-start items-end grow text-xs">
|
||||
<span class="results-count-badge py-1 px-1.5 mr-1 grow-0 font-bold text-xs bg-green-600 rounded-lg hover:cursor-pointer hover:bg-green-700 text-white">
|
||||
<span class="results-count-number" id="movie_results_count">-</span> results
|
||||
</span>
|
||||
@@ -83,18 +103,18 @@
|
||||
block: 'media_exists_badge',
|
||||
target: "meb_" ~ results.media.imdbId
|
||||
}) }}">
|
||||
<small class="py-1 px-1.5 mr-1 grow-0 font-bold bg-rose-600 rounded-lg text-white" title="Movie has not been downloaded yet.">
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 font-bold bg-rose-600 rounded-lg text-white" title="Movie has not been downloaded yet.">
|
||||
missing
|
||||
</small>
|
||||
</span>
|
||||
</twig:Turbo:Frame>
|
||||
|
||||
<small class="py-1 px-1.5 mr-1 grow-0 font-bold bg-sky-700 rounded-lg text-white" title="Release date {{ results.media.episodeAirDate }}">
|
||||
{{ results.media.episodeAirDate|date(null, 'UTC') }}
|
||||
</small>
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 font-bold bg-sky-700 rounded-lg text-white" title="Release date {{ results.media.episodeAirDate }}">
|
||||
{{ results.media.episodeAirDate|date('n/j/Y', 'UTC') }}
|
||||
</span>
|
||||
|
||||
<small class="py-1 px-1.5 mr-1 grow-0 font-bold bg-orange-500 rounded-lg text-white" title="This movie has a runtime of {{ results.media.runtime }} minutes.">
|
||||
<span class="py-1 px-1.5 mr-1 grow-0 font-bold bg-orange-500 rounded-lg text-white" title="This movie has a runtime of {{ results.media.runtime }} minutes.">
|
||||
{{ results.media.runtime }} minutes
|
||||
</small>
|
||||
</span>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user