mirror of
https://code.castopod.org/adaures/castopod
synced 2025-06-06 09:22:01 +00:00
chore(clips): clear video clip and soundbite cache on delete
This commit is contained in:
parent
bd61752be2
commit
241366130e
@ -109,33 +109,6 @@ class ClipModel extends Model
|
|||||||
return $found;
|
return $found;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets all video clips for an episode
|
|
||||||
*
|
|
||||||
* @return BaseClip[]
|
|
||||||
*/
|
|
||||||
public function getVideoClips(int $podcastId, int $episodeId): array
|
|
||||||
{
|
|
||||||
$cacheName = "podcast#{$podcastId}_episode#{$episodeId}_video-clips";
|
|
||||||
if (! ($found = cache($cacheName))) {
|
|
||||||
$found = $this->where([
|
|
||||||
'episode_id' => $episodeId,
|
|
||||||
'podcast_id' => $podcastId,
|
|
||||||
'type' => 'video',
|
|
||||||
])
|
|
||||||
->orderBy('start_time')
|
|
||||||
->findAll();
|
|
||||||
|
|
||||||
foreach ($found as $key => $videoClip) {
|
|
||||||
$found[$key] = new VideoClip($videoClip->toArray());
|
|
||||||
}
|
|
||||||
|
|
||||||
cache()
|
|
||||||
->save($cacheName, $found, DECADE);
|
|
||||||
}
|
|
||||||
return $found;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets scheduled video clips for an episode
|
* Gets scheduled video clips for an episode
|
||||||
*
|
*
|
||||||
@ -157,6 +130,23 @@ class ClipModel extends Model
|
|||||||
return $found;
|
return $found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deleteVideoClip(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
|
||||||
|
{
|
||||||
|
$this->clearVideoClipCache($clipId);
|
||||||
|
|
||||||
|
return $this->delete([
|
||||||
|
'podcast_id' => $podcastId,
|
||||||
|
'episode_id' => $episodeId,
|
||||||
|
'id' => $clipId,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function clearVideoClipCache(int $clipId): void
|
||||||
|
{
|
||||||
|
cache()
|
||||||
|
->delete("video-clip#{$clipId}");
|
||||||
|
}
|
||||||
|
|
||||||
public function getSoundbiteById(int $soundbiteId): ?Soundbite
|
public function getSoundbiteById(int $soundbiteId): ?Soundbite
|
||||||
{
|
{
|
||||||
$cacheName = "soundbite#{$soundbiteId}";
|
$cacheName = "soundbite#{$soundbiteId}";
|
||||||
@ -206,8 +196,7 @@ class ClipModel extends Model
|
|||||||
|
|
||||||
public function deleteSoundbite(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
|
public function deleteSoundbite(int $podcastId, int $episodeId, int $clipId): BaseResult | bool
|
||||||
{
|
{
|
||||||
cache()
|
$this->clearSoundbiteCache($podcastId, $episodeId, $clipId);
|
||||||
->delete("podcast#{$podcastId}_episode#{$episodeId}_soundbites");
|
|
||||||
|
|
||||||
return $this->delete([
|
return $this->delete([
|
||||||
'podcast_id' => $podcastId,
|
'podcast_id' => $podcastId,
|
||||||
@ -216,6 +205,11 @@ class ClipModel extends Model
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// cache()
|
public function clearSoundbiteCache(int $podcastId, int $episodeId, int $clipId): void
|
||||||
// ->deleteMatching("page_podcast#{$clip->podcast_id}_episode#{$clip->episode_id}_*");
|
{
|
||||||
|
cache()
|
||||||
|
->delete("podcast#{$podcastId}_episode#{$episodeId}_soundbites");
|
||||||
|
cache()
|
||||||
|
->delete("soundbite#{$clipId}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -150,9 +150,12 @@ class SoundbiteController extends BaseController
|
|||||||
|
|
||||||
if ($soundbite->media === null) {
|
if ($soundbite->media === null) {
|
||||||
// delete Clip directly
|
// delete Clip directly
|
||||||
(new ClipModel())->delete($soundbite->id);
|
(new ClipModel())->deleteSoundbite($this->podcast->id, $this->episode->id, $soundbite->id);
|
||||||
} else {
|
} else {
|
||||||
|
(new ClipModel())->clearSoundbiteCache($this->podcast->id, $this->episode->id, $soundbite->id);
|
||||||
|
|
||||||
$mediaModel = new MediaModel();
|
$mediaModel = new MediaModel();
|
||||||
|
// delete the soundbite file, the clip will be deleted on cascade
|
||||||
if (! $mediaModel->deleteMedia($soundbite->media)) {
|
if (! $mediaModel->deleteMedia($soundbite->media)) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
|
@ -211,9 +211,12 @@ class VideoClipsController extends BaseController
|
|||||||
|
|
||||||
if ($videoClip->media === null) {
|
if ($videoClip->media === null) {
|
||||||
// delete Clip directly
|
// delete Clip directly
|
||||||
(new ClipModel())->delete($videoClip->id);
|
(new ClipModel())->deleteVideoClip($this->podcast->id, $this->episode->id, $videoClip->id);
|
||||||
} else {
|
} else {
|
||||||
|
(new ClipModel())->clearVideoClipCache($videoClip->id);
|
||||||
|
|
||||||
$mediaModel = new MediaModel();
|
$mediaModel = new MediaModel();
|
||||||
|
// delete the videoClip file, the clip will be deleted on cascade
|
||||||
if (! $mediaModel->deleteMedia($videoClip->media)) {
|
if (! $mediaModel->deleteMedia($videoClip->media)) {
|
||||||
return redirect()
|
return redirect()
|
||||||
->back()
|
->back()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user