mirror of
https://github.com/koel/koel
synced 2024-12-19 09:03:07 +00:00
54 lines
1.7 KiB
PHP
54 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands\Storage;
|
|
|
|
use App\Models\Setting;
|
|
use Illuminate\Console\Command;
|
|
use Illuminate\Support\Facades\Artisan;
|
|
use Illuminate\Support\Facades\File;
|
|
use Jackiedo\DotenvEditor\DotenvEditor;
|
|
|
|
class SetupLocalStorageCommand extends Command
|
|
{
|
|
protected $signature = 'koel:storage:local';
|
|
protected $description = 'Set up the local storage for Koel';
|
|
|
|
public function __construct(private readonly DotenvEditor $dotenvEditor)
|
|
{
|
|
parent::__construct();
|
|
}
|
|
|
|
public function handle(): int
|
|
{
|
|
$this->components->info('Setting up local storage for Koel.');
|
|
$this->components->warn('Changing the storage configuration can cause irreversible data loss.');
|
|
$this->components->warn('Consider backing up your data before proceeding.');
|
|
|
|
Setting::set('media_path', $this->askForMediaPath());
|
|
|
|
$this->dotenvEditor->setKey('STORAGE_DRIVER', 'local');
|
|
$this->dotenvEditor->save();
|
|
Artisan::call('config:clear', ['--quiet' => true]);
|
|
|
|
$this->components->info('Local storage has been set up.');
|
|
|
|
if ($this->components->confirm('Would you want to initialize a scan now?', true)) {
|
|
$this->call('koel:scan');
|
|
}
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
|
|
private function askForMediaPath(): string
|
|
{
|
|
$mediaPath = $this->components->ask('Enter the absolute path to your media files', Setting::get('media_path'));
|
|
|
|
if (File::isReadable($mediaPath) && File::isWritable($mediaPath)) {
|
|
return $mediaPath;
|
|
}
|
|
|
|
$this->components->error('The path you entered is not read- and/or writeable. Please check and try again.');
|
|
|
|
return $this->askForMediaPath();
|
|
}
|
|
}
|