diff --git a/app/Jobs/MediaPipeline/MediaDeletePipeline.php b/app/Jobs/MediaPipeline/MediaDeletePipeline.php index df16a42d5..90e30edea 100644 --- a/app/Jobs/MediaPipeline/MediaDeletePipeline.php +++ b/app/Jobs/MediaPipeline/MediaDeletePipeline.php @@ -11,6 +11,7 @@ use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\Middleware\WithoutOverlapping; use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Storage; class MediaDeletePipeline implements ShouldBeUniqueUntilProcessing, ShouldQueue @@ -62,10 +63,18 @@ class MediaDeletePipeline implements ShouldBeUniqueUntilProcessing, ShouldQueue public function handle() { $media = $this->media; + + // Verify media exists + if (!$media) { + Log::info("MediaDeletePipeline: Media no longer exists, skipping job"); + return 1; + } + $path = $media->media_path; $thumb = $media->thumbnail_path; if (! $path) { + Log::info("MediaDeletePipeline: Media {$media->id} has no path, skipping deletion"); return 1; } @@ -73,8 +82,20 @@ class MediaDeletePipeline implements ShouldBeUniqueUntilProcessing, ShouldQueue array_pop($e); $i = implode('/', $e); - if ((bool) config_cache('pixelfed.cloud_storage') == true) { - $disk = Storage::disk(config('filesystems.cloud')); + try { + if ((bool) config_cache('pixelfed.cloud_storage') == true) { + $disk = Storage::disk(config('filesystems.cloud')); + + if ($path && $disk->exists($path)) { + $disk->delete($path); + } + + if ($thumb && $disk->exists($thumb)) { + $disk->delete($thumb); + } + } + + $disk = Storage::disk(config('filesystems.local')); if ($path && $disk->exists($path)) { $disk->delete($path); @@ -83,28 +104,21 @@ class MediaDeletePipeline implements ShouldBeUniqueUntilProcessing, ShouldQueue if ($thumb && $disk->exists($thumb)) { $disk->delete($thumb); } - } - - $disk = Storage::disk(config('filesystems.local')); - - if ($path && $disk->exists($path)) { - $disk->delete($path); - } - if ($thumb && $disk->exists($thumb)) { - $disk->delete($thumb); - } - - if ($media->hls_path != null) { - $files = MediaHlsService::allFiles($media); - if ($files && count($files)) { - foreach ($files as $file) { - $disk->delete($file); + if ($media->hls_path != null) { + $files = MediaHlsService::allFiles($media); + if ($files && count($files)) { + foreach ($files as $file) { + $disk->delete($file); + } } } - } - $media->delete(); + $media->delete(); + } catch (\Exception $e) { + Log::warning("MediaDeletePipeline: Failed to delete media {$media->id}: " . $e->getMessage()); + throw $e; + } return 1; } diff --git a/app/Jobs/MediaPipeline/MediaStoragePipeline.php b/app/Jobs/MediaPipeline/MediaStoragePipeline.php index 90b6c181b..519d1e276 100644 --- a/app/Jobs/MediaPipeline/MediaStoragePipeline.php +++ b/app/Jobs/MediaPipeline/MediaStoragePipeline.php @@ -9,6 +9,7 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Redis; use App\Services\MediaStorageService; @@ -26,7 +27,26 @@ class MediaStoragePipeline implements ShouldQueue public function handle() { - MediaStorageService::store($this->media); + $media = $this->media; + + // Verify media exists + if (!$media) { + Log::info("MediaStoragePipeline: Media no longer exists, skipping job"); + return; + } + + // Verify media has required fields + if (!$media->media_path) { + Log::info("MediaStoragePipeline: Media {$media->id} has no media_path, skipping job"); + return; + } + + try { + MediaStorageService::store($media); + } catch (\Exception $e) { + Log::warning("MediaStoragePipeline: Failed to store media {$media->id}: " . $e->getMessage()); + throw $e; + } } } diff --git a/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php b/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php index 1884bd780..2143fc4af 100644 --- a/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php +++ b/app/Jobs/MediaPipeline/MediaSyncLicensePipeline.php @@ -10,6 +10,7 @@ use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Queue\SerializesModels; +use Illuminate\Support\Facades\Log; use App\Services\StatusService; class MediaSyncLicensePipeline implements ShouldQueue @@ -28,8 +29,15 @@ class MediaSyncLicensePipeline implements ShouldQueue public function handle() { $licenseId = $this->licenseId; + $userId = $this->userId; - if(!$licenseId || !$this->userId) { + // Verify required data exists + if (!$licenseId) { + Log::info("MediaSyncLicensePipeline: License ID not provided, skipping job"); + return 1; + } + if (!$userId) { + Log::info("MediaSyncLicensePipeline: User ID not provided, skipping job"); return 1; }