. */ namespace Poniverse\Ponyfm\Console\Commands; use Carbon\Carbon; use File; use Illuminate\Console\Command; use Illuminate\Support\Facades\Cache; use Poniverse\Ponyfm\TrackFile; class ClearTrackCache extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'track-cache:clear {--tracks=expired : Clear only [expired] (default) or [all] cached tracks.} {--force : Skip all prompts.}'; /** * The console command description. * * @var string */ protected $description = 'Clears cached tracks. Defaults to expired tracks. Usage: php artisan track-cache:clear [--tracks=expired|all]'; /** * Create a new command instance. * */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { if ($this->option('tracks') === 'all') { // Get all cacheable track files $trackFiles = TrackFile::where('is_cacheable', true) ->with('track.album') ->get(); } else { // Get all expired track files $trackFiles = TrackFile::where('is_cacheable', true) ->where('expires_at', '<=', Carbon::now()) ->with('track.album') ->get(); } // Delete above track files if (count($trackFiles) === 0) { $this->info('No tracks found. Exiting.'); } else { if ($this->option('force') || $this->confirm(count($trackFiles) . ' cacheable track files found. Proceed to delete their files if they exist? [y|N]', false)) { $count = 0; foreach ($trackFiles as $trackFile) { // Set expiration to null (so can be re-cached upon request) $trackFile->expires_at = null; $trackFile->update(); // Delete file if exists if (File::exists($trackFile->getFile())) { $count++; File::delete($trackFile->getFile()); $this->info('Deleted ' . $trackFile->getFile()); } // Remove the cached file size for the album Cache::forget($trackFile->track->album->getCacheKey('filesize-' . $trackFile->format)); } $this->info($count . ' files deleted. Deletion complete. Exiting.'); } else { $this->info('Deletion cancelled. Exiting.'); } } } }