From 9a892a8c5eb02fa4b9c0bd8701bf8f3d5c9ba138 Mon Sep 17 00:00:00 2001 From: Gogs Date: Thu, 9 Jul 2026 15:49:14 +0200 Subject: [PATCH] Consolidation 2 --- app/src/Services/ProgrammeIndexBuilder.php | 53 ++++++++++++++++++ app/templates/home.php | 63 +++++----------------- 2 files changed, 66 insertions(+), 50 deletions(-) create mode 100644 app/src/Services/ProgrammeIndexBuilder.php diff --git a/app/src/Services/ProgrammeIndexBuilder.php b/app/src/Services/ProgrammeIndexBuilder.php new file mode 100644 index 0000000..04d12a2 --- /dev/null +++ b/app/src/Services/ProgrammeIndexBuilder.php @@ -0,0 +1,53 @@ +getTimestamp() : (string)$start; + $stopKey = $stop instanceof DateTimeInterface ? $stop->getTimestamp() : (string)$stop; + + return md5($channelId . '|' . $startKey . '|' . $stopKey . '|' . $title); + } + + public static function add( + array &$index, + string $id, + string $channelId, + array $channel, + array $programme + ): void { + $metadata = $programme['metadata'] ?? []; + + $index[$id] = [ + 'id' => $id, + 'channel_id' => $channelId, + 'channel' => $channel['name'] ?? $channel['channel_name'] ?? $channelId, + 'channel_number' => $channel['number'] ?? $channel['channel_number'] ?? 999999, + 'favorite' => $channel['favorite'] ?? false, + 'title' => $programme['title'] ?? '', + 'subtitle' => $programme['subtitle'] ?? '', + 'description' => $programme['desc'] ?? $programme['description'] ?? '', + 'category' => $programme['category'] ?? '', + 'metadata' => $metadata, + 'year' => $programme['year'] ?? $metadata['year'] ?? '', + 'rating' => $programme['rating'] ?? $metadata['age_rating'] ?? '', + 'country' => $programme['country'] ?? $metadata['country'] ?? '', + 'start' => self::formatTime($programme['start'] ?? null), + 'stop' => self::formatTime($programme['stop'] ?? null), + ]; + } + + private static function formatTime(mixed $value): string + { + if ($value instanceof DateTimeInterface) { + return $value->format('H:i'); + } + + if (is_numeric($value)) { + return date('H:i', (int)$value); + } + + return ''; + } +} diff --git a/app/templates/home.php b/app/templates/home.php index e6a9002..f1aa071 100644 --- a/app/templates/home.php +++ b/app/templates/home.php @@ -1,5 +1,6 @@ getTimestamp() : (string)$start; - return md5($channelId . '|' . $startKey . '|' . $title); -} - -function dashboardAddProgrammeIndex(array &$programmeIndex, string $id, string $channelId, array $channel, array $p): void { - $metadata = $p['metadata'] ?? []; - - $programmeIndex[$id] = [ - 'id' => $id, - 'channel_id' => $channelId, - 'channel' => $channel['name'] ?? $channelId, - 'channel_number' => $channel['number'] ?? 999999, - 'favorite' => $channel['favorite'] ?? false, - 'title' => $p['title'] ?? '', - 'subtitle' => $p['subtitle'] ?? '', - 'description' => $p['desc'] ?? $p['description'] ?? '', - 'category' => $p['category'] ?? '', - 'metadata' => $metadata, - 'year' => $metadata['year'] ?? '', - 'rating' => $metadata['age_rating'] ?? '', - 'country' => $metadata['country'] ?? '', - 'start' => $p['start'] instanceof DateTimeInterface ? $p['start']->format('H:i') : date('H:i', (int)($p['start'] ?? 0)), - 'stop' => $p['stop'] instanceof DateTimeInterface ? $p['stop']->format('H:i') : date('H:i', (int)($p['stop'] ?? 0)), - ]; -} foreach ($programmes as $channelId => $items) { $channel = $channels[$channelId] ?? null; @@ -43,8 +18,8 @@ foreach ($programmes as $channelId => $items) { if (!$start instanceof DateTimeInterface) continue; if ($start >= $now && $start <= $now->modify('+30 minutes')) { - $id = dashboardProgrammeId($channelId, $start, $p['title'] ?? ''); - dashboardAddProgrammeIndex($programmeIndex, $id, $channelId, $channel, $p); + $id = ProgrammeIndexBuilder::id($channelId, $start, $p['title'] ?? '', $p['stop'] ?? null); + ProgrammeIndexBuilder::add($programmeIndex, $id, $channelId, $channel, $p); $upcoming[] = [ 'id' => $id, @@ -57,8 +32,8 @@ foreach ($programmes as $channelId => $items) { if ($start->format('Y-m-d') === $now->format('Y-m-d') && $start->format('H:i') >= '20:00' && $start->format('H:i') <= '23:00') { - $id = dashboardProgrammeId($channelId, $start, $p['title'] ?? ''); - dashboardAddProgrammeIndex($programmeIndex, $id, $channelId, $channel, $p); + $id = ProgrammeIndexBuilder::id($channelId, $start, $p['title'] ?? '', $p['stop'] ?? null); + ProgrammeIndexBuilder::add($programmeIndex, $id, $channelId, $channel, $p); $primetime[] = [ 'id' => $id, @@ -71,25 +46,13 @@ foreach ($programmes as $channelId => $items) { } foreach ($currentProgrammes as $item) { - $id = dashboardProgrammeId($item['channel_id'], $item['start'], $item['title'] ?? ''); + $id = ProgrammeIndexBuilder::id($item['channel_id'], $item['start'], $item['title'] ?? '', $item['stop'] ?? null); - $programmeIndex[$id] = [ - 'id' => $id, - 'channel_id' => $item['channel_id'], - 'channel' => $item['channel_name'], - 'channel_number' => $item['channel_number'], + ProgrammeIndexBuilder::add($programmeIndex, $id, $item['channel_id'], [ + 'name' => $item['channel_name'], + 'number' => $item['channel_number'], 'favorite' => $item['favorite'], - 'title' => $item['title'], - 'subtitle' => $item['subtitle'], - 'description' => $item['description'], - 'category' => $item['category'], - 'metadata' => $item['metadata'] ?? [], - 'year' => $item['year'] ?? '', - 'rating' => $item['rating'] ?? '', - 'country' => $item['country'] ?? '', - 'start' => date('H:i', $item['start']), - 'stop' => date('H:i', $item['stop']), - ]; + ], $item); } usort($upcoming, fn($a, $b) => $a['programme']['start'] <=> $b['programme']['start']); @@ -112,7 +75,7 @@ $favoritesNow = array_values(array_filter($currentProgrammes, fn($item) => !empt
- +