From 5a81908ed48ed09e2fc243b6621c5ca7b7298f6e Mon Sep 17 00:00:00 2001 From: Kelvin Zhang <me@iamkelv.in> Date: Thu, 29 Oct 2015 16:00:16 +0000 Subject: [PATCH] Add file size rebuilding command --- app/Console/Commands/RebuildFilesize.php | 77 ++++++++++++++++++++++ app/Console/Commands/RebuildTrackCache.php | 5 +- app/Console/Kernel.php | 1 + 3 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 app/Console/Commands/RebuildFilesize.php diff --git a/app/Console/Commands/RebuildFilesize.php b/app/Console/Commands/RebuildFilesize.php new file mode 100644 index 00000000..a5d66cc9 --- /dev/null +++ b/app/Console/Commands/RebuildFilesize.php @@ -0,0 +1,77 @@ +<?php + +namespace Poniverse\Ponyfm\Console\Commands; + +use Illuminate\Console\Command; +use Illuminate\Support\Facades\File; +use Poniverse\Ponyfm\TrackFile; + +class RebuildFilesize extends Command +{ + /** + * The name and signature of the console command. + * + * @var string + */ + protected $signature = 'filesize:rebuild + {--force : Skip all prompts.}'; + + /** + * The console command description. + * + * @var string + */ + protected $description = 'Rebuilds the filesize cache for each track file which currently exists on disk.'; + + /** + * Create a new command instance. + * + */ + public function __construct() + { + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $this->info('This will only rebuild the cache for track files which exist on disk; non-existent files will be skipped.'); + + if ($this->option('force') || $this->confirm('Are you sure you want to rebuild the filesize cache? [y|N]', + false) + ) { + + TrackFile::chunk(200, function ($trackFiles) { + + $this->info('========== Start Chunk =========='); + + foreach ($trackFiles as $trackFile) { + $file = $trackFile->getFile(); + + if (File::exists($file)) { + $size = File::size($file); + $this->info('ID ' . $trackFile->id . ' processed - ' . $size . ' bytes'); + } else { + $size = null; + $this->info('ID ' . $trackFile->id . ' skipped'); + } + + $trackFile->filesize = $size; + $trackFile->update(); + } + + $this->info('=========== End Chunk ==========='); + + }); + + $this->info('Rebuild complete. Exiting.'); + + } else { + $this->info('Rebuild cancelled. Exiting.'); + } + } +} diff --git a/app/Console/Commands/RebuildTrackCache.php b/app/Console/Commands/RebuildTrackCache.php index ef5d5582..1dae63ce 100644 --- a/app/Console/Commands/RebuildTrackCache.php +++ b/app/Console/Commands/RebuildTrackCache.php @@ -64,6 +64,9 @@ class RebuildTrackCache extends Command public function handle() { $this->info('This will run \'php artisan down\' if you proceed and \'php artisan up\' when complete.'); + $this->info('***'); + $this->info('If this is your first time running this command, it is *highly* recommended that you run `php artisan filesize:rebuild` to cache file sizes for all files before they are deleted.'); + $this->info('***'); if ($this->option('force') || $this->confirm('Are you sure you want to delete all to-be-cached files and encode missing non-cached files? [y|N]', false) @@ -201,7 +204,7 @@ class RebuildTrackCache extends Command } // Encode recorded files - foreach($emptyTrackFiles as $emptyTrackFile) { + foreach ($emptyTrackFiles as $emptyTrackFile) { $this->dispatch(new EncodeTrackFile($emptyTrackFile, false)); } diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 6f76ff2b..9a7c58e2 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -41,6 +41,7 @@ class Kernel extends ConsoleKernel \Poniverse\Ponyfm\Console\Commands\PoniverseApiSetup::class, \Poniverse\Ponyfm\Console\Commands\ClearTrackCache::class, \Poniverse\Ponyfm\Console\Commands\RebuildTrackCache::class, + \Poniverse\Ponyfm\Console\Commands\RebuildFilesize::class, ]; /**