From 855aacce0bf3841a876cd593e668e116149080aa Mon Sep 17 00:00:00 2001 From: Yassine Doghri Date: Mon, 17 Apr 2023 11:18:02 +0000 Subject: [PATCH] fix(websub): add missing misc helper import + add checks before clearing episode cache --- app/Models/EpisodeModel.php | 32 +++++++++++++++++-- .../WebSub/Controllers/WebSubController.php | 10 +++--- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/app/Models/EpisodeModel.php b/app/Models/EpisodeModel.php index dcf40ba5..9600fd3b 100644 --- a/app/Models/EpisodeModel.php +++ b/app/Models/EpisodeModel.php @@ -395,7 +395,20 @@ class EpisodeModel extends Model */ public function clearCache(array $data): array { - $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']); + /** @var int|null $episodeId */ + $episodeId = is_array($data['id']) ? $data['id'][0] : $data['id']; + + if ($episodeId === null) { + // Multiple episodes have been updated, do nothing + return $data; + } + + /** @var ?Episode $episode */ + $episode = (new self())->find($episodeId); + + if (! $episode instanceof Episode) { + return $data; + } // delete podcast cache cache() @@ -430,9 +443,22 @@ class EpisodeModel extends Model */ protected function writeEnclosureMetadata(array $data): array { - helper('id3'); + /** @var int|null $episodeId */ + $episodeId = is_array($data['id']) ? $data['id'][0] : $data['id']; - $episode = (new self())->find(is_array($data['id']) ? $data['id'][0] : $data['id']); + if ($episodeId === null) { + // Multiple episodes have been updated, do nothing + return $data; + } + + /** @var ?Episode $episode */ + $episode = (new self())->find($episodeId); + + if (! $episode instanceof Episode) { + return $data; + } + + helper('id3'); write_audio_file_tags($episode); diff --git a/modules/WebSub/Controllers/WebSubController.php b/modules/WebSub/Controllers/WebSubController.php index 0ca59e9c..eea2839f 100644 --- a/modules/WebSub/Controllers/WebSubController.php +++ b/modules/WebSub/Controllers/WebSubController.php @@ -24,20 +24,22 @@ class WebSubController extends Controller return; } + helper('misc'); + // get all podcasts that haven't been published yet // or having a published episode that hasn't been pushed yet $podcastModel = new PodcastModel(); - $podcasts = $podcastModel - ->distinct() + $podcastModel->builder() ->select('podcasts.*') + ->distinct() ->join('episodes', 'podcasts.id = episodes.podcast_id', 'left outer') ->where('podcasts.is_published_on_hubs', false) ->where('`' . $podcastModel->db->getPrefix() . 'podcasts`.`published_at` <= UTC_TIMESTAMP()', null, false) ->orGroupStart() ->where('episodes.is_published_on_hubs', false) ->where('`' . $podcastModel->db->getPrefix() . 'episodes`.`published_at` <= UTC_TIMESTAMP()', null, false) - ->groupEnd() - ->findAll(); + ->groupEnd(); + $podcasts = $podcastModel->findAll(); if ($podcasts === []) { return;