. */ namespace Poniverse\Ponyfm\Console\Commands; use Illuminate\Console\Command; use Illuminate\Foundation\Bus\DispatchesJobs; use Poniverse\Ponyfm\Commands\GenerateTrackFilesCommand; use Poniverse\Ponyfm\Commands\UploadTrackCommand; use Poniverse\Ponyfm\Jobs\EncodeTrackFile; use Poniverse\Ponyfm\Models\Track; class RebuildTrack extends Command { use DispatchesJobs; /** * The name and signature of the console command. * * @var string */ protected $signature = 'rebuild:track {trackId : ID of the track to rebuild} {--upload : Include this option to use the uploaded file as the encode source instead of the master file}'; /** * The console command description. * * @var string */ protected $description = 'Re-encodes a track\'s files'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { /** @var Track $track */ $track = Track::with('trackFiles')->withTrashed()->find((int) $this->argument('trackId')); if($this->option('upload')) { $this->info("Attempting to finish this track's upload..."); $sourceFile = new \SplFileInfo($track->getTemporarySourceFile()); $generateTrackFiles = new GenerateTrackFilesCommand($track, $sourceFile, false); $result = $generateTrackFiles->execute(); // The GenerateTrackFiles command will re-encode all TrackFiles. if ($result->didFail()) { $this->error("Something went wrong!"); $this->error(json_encode($result->getMessages(), JSON_PRETTY_PRINT)); } } else { foreach ($track->trackFiles as $trackFile) { if (!$trackFile->is_master) { $this->info("Re-encoding this track's {$trackFile->format} file..."); $this->dispatch(new EncodeTrackFile($trackFile, true)); } } } } }