From 3151921c587e42edbb34855ea47ad3e4498d5de0 Mon Sep 17 00:00:00 2001 From: paranarimasu <33796518+paranarimasu@users.noreply.github.com> Date: Fri, 26 Aug 2022 18:05:07 -0500 Subject: [PATCH] fix(admin): support multiple disks for audio extraction (#451) * fix(admin): support multiple disks for audio extraction * fix: example env should reference configured filesystem --- .env.example | 33 ++++++++++++------- .../Wiki/Video/Audio/BackfillAudioAction.php | 16 +++++---- app/Nova/Lenses/Audio/AudioVideoLens.php | 16 ++++++++- config/filesystems.php | 31 ++++++++++++----- 4 files changed, 67 insertions(+), 29 deletions(-) diff --git a/.env.example b/.env.example index 4fc42dd15..1fd3b6167 100644 --- a/.env.example +++ b/.env.example @@ -11,8 +11,8 @@ ASSET_URL=null APP_KEY= # audio -AUDIO_DISK_DEFAULT=audios -AUDIO_DISKS=audios +AUDIO_DISK_DEFAULT=audios_nyc +AUDIO_DISKS=audios_nyc AUDIO_DISK_ROOT= AUDIO_PATH=/audio AUDIO_URL= @@ -118,14 +118,23 @@ VIDEO_FRA_STREAM_READS= VIDEO_FRA_DISABLE_ASSERTS= VIDEO_FRA_VISIBILITY= -AUDIO_ACCESS_KEY_ID= -AUDIO_SECRET_ACCESS_KEY= -AUDIO_DEFAULT_REGION= -AUDIO_ENDPOINT= -AUDIO_BUCKET= -AUDIO_STREAM_READS= -AUDIO_DISABLE_ASSERTS= -AUDIO_VISIBILITY= +AUDIO_NYC_ACCESS_KEY_ID= +AUDIO_NYC_SECRET_ACCESS_KEY= +AUDIO_NYC_DEFAULT_REGION= +AUDIO_NYC_ENDPOINT= +AUDIO_NYC_BUCKET= +AUDIO_NYC_STREAM_READS= +AUDIO_NYC_DISABLE_ASSERTS= +AUDIO_NYC_VISIBILITY= + +AUDIO_FRA_ACCESS_KEY_ID= +AUDIO_FRA_SECRET_ACCESS_KEY= +AUDIO_FRA_DEFAULT_REGION= +AUDIO_FRA_ENDPOINT= +AUDIO_FRA_BUCKET= +AUDIO_FRA_STREAM_READS= +AUDIO_FRA_DISABLE_ASSERTS= +AUDIO_FRA_VISIBILITY= # flags ALLOW_VIDEO_STREAMS=false @@ -222,8 +231,8 @@ TELESCOPE_DRIVER=database TELESCOPE_ENABLED=true # video -VIDEO_DISK_DEFAULT=videos -VIDEO_DISKS=videos +VIDEO_DISK_DEFAULT=videos_nyc +VIDEO_DISKS=videos_nyc VIDEO_DISK_ROOT= VIDEO_PATH=/video VIDEO_URL= diff --git a/app/Actions/Models/Wiki/Video/Audio/BackfillAudioAction.php b/app/Actions/Models/Wiki/Video/Audio/BackfillAudioAction.php index 1389ad352..e1a0641b0 100644 --- a/app/Actions/Models/Wiki/Video/Audio/BackfillAudioAction.php +++ b/app/Actions/Models/Wiki/Video/Audio/BackfillAudioAction.php @@ -232,13 +232,15 @@ class BackfillAudioAction extends BaseAction protected function extractAudio(Video $video, string $audioPath): void { try { - FFMpeg::fromDisk(Config::get(VideoConstants::DEFAULT_DISK_QUALIFIED)) - ->open($video->path) - ->addFilter(new AudioClipFilter(new TimeCode(0, 0, 0, 0))) - ->addFilter(new AddMetadataFilter()) - ->export() - ->toDisk(Config::get(AudioConstants::DEFAULT_DISK_QUALIFIED)) - ->save($audioPath); + foreach (Config::get(AudioConstants::DISKS_QUALIFIED, []) as $audioDisk) { + FFMpeg::fromDisk(Config::get(VideoConstants::DEFAULT_DISK_QUALIFIED)) + ->open($video->path) + ->addFilter(new AudioClipFilter(new TimeCode(0, 0, 0, 0))) + ->addFilter(new AddMetadataFilter()) + ->export() + ->toDisk($audioDisk) + ->save($audioPath); + } } catch (Exception $e) { Log::error($e->getMessage()); } finally { diff --git a/app/Nova/Lenses/Audio/AudioVideoLens.php b/app/Nova/Lenses/Audio/AudioVideoLens.php index 0af0e0738..d8952327a 100644 --- a/app/Nova/Lenses/Audio/AudioVideoLens.php +++ b/app/Nova/Lenses/Audio/AudioVideoLens.php @@ -4,11 +4,14 @@ declare(strict_types=1); namespace App\Nova\Lenses\Audio; +use App\Models\Auth\User; use App\Models\BaseModel; use App\Models\Wiki\Audio; +use App\Nova\Actions\Wiki\Audio\DeleteAudioAction; use App\Nova\Lenses\BaseLens; use Exception; use Illuminate\Database\Eloquent\Builder; +use Illuminate\Http\Request; use Laravel\Nova\Fields\DateTime; use Laravel\Nova\Fields\ID; use Laravel\Nova\Fields\Number; @@ -97,7 +100,18 @@ class AudioVideoLens extends BaseLens */ public function actions(NovaRequest $request): array { - return []; + return [ + (new DeleteAudioAction()) + ->confirmText(__('nova.remove_audio_text')) + ->confirmButtonText(__('nova.remove')) + ->cancelButtonText(__('nova.cancel')) + ->exceptOnIndex() + ->canSee(function (Request $request) { + $user = $request->user(); + + return $user instanceof User && $user->can('delete audio'); + }), + ]; } /** diff --git a/config/filesystems.php b/config/filesystems.php index 5b04c4f01..d53fb2283 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -102,16 +102,29 @@ return [ 'throw' => false, ], - 'audios' => [ + 'audios_nyc' => [ 'driver' => 's3', - 'key' => env('AUDIO_ACCESS_KEY_ID'), - 'secret' => env('AUDIO_SECRET_ACCESS_KEY'), - 'region' => env('AUDIO_DEFAULT_REGION'), - 'bucket' => env('AUDIO_BUCKET'), - 'endpoint' => env('AUDIO_ENDPOINT'), - 'stream_reads' => env('AUDIO_STREAM_READS'), - 'disable_asserts' => env('AUDIO_DISABLE_ASSERTS'), - 'visibility' => env('AUDIO_VISIBILITY'), + 'key' => env('AUDIO_NYC_ACCESS_KEY_ID'), + 'secret' => env('AUDIO_NYC_SECRET_ACCESS_KEY'), + 'region' => env('AUDIO_NYC_DEFAULT_REGION'), + 'bucket' => env('AUDIO_NYC_BUCKET'), + 'endpoint' => env('AUDIO_NYC_ENDPOINT'), + 'stream_reads' => env('AUDIO_NYC_STREAM_READS'), + 'disable_asserts' => env('AUDIO_NYC_DISABLE_ASSERTS'), + 'visibility' => env('AUDIO_NYC_VISIBILITY'), + 'throw' => false, + ], + + 'audios_fra' => [ + 'driver' => 's3', + 'key' => env('AUDIO_FRA_ACCESS_KEY_ID'), + 'secret' => env('AUDIO_FRA_SECRET_ACCESS_KEY'), + 'region' => env('AUDIO_FRA_DEFAULT_REGION'), + 'bucket' => env('AUDIO_FRA_BUCKET'), + 'endpoint' => env('AUDIO_FRA_ENDPOINT'), + 'stream_reads' => env('AUDIO_FRA_STREAM_READS'), + 'disable_asserts' => env('AUDIO_FRA_DISABLE_ASSERTS'), + 'visibility' => env('AUDIO_FRA_VISIBILITY'), 'throw' => false, ],