Changing environment variables and initialisation commands

This commit is contained in:
ilumos 2017-08-17 04:05:07 +01:00
parent 15d15ae8c0
commit 256de2f1a5
6 changed files with 43 additions and 29 deletions

View file

@ -1,3 +1,3 @@
DOWNLOAD_LOCATION="/tmp/lancache-autofill" DOWNLOADS_DIRECTORY="/tmp/lancache-autofill"
STEAMCMD="/usr/games/steamcmd/steamcmd.sh" STEAMCMD_PATH="/usr/games/steam/steamcmd.sh"
STEAM_USER="your-username-here" DEFAULT_STEAM_USER="your-username-here"

View file

@ -8,7 +8,7 @@ use Illuminate\Database\Capsule\Manager as Capsule;
use Dotenv\Dotenv; use Dotenv\Dotenv;
use Zeropingheroes\LancacheAutofill\Console\Commands\Steam\{UpdateAppList, SearchApps, QueueApp, ShowQueue, StartDownloading}; use Zeropingheroes\LancacheAutofill\Console\Commands\Steam\{UpdateAppList, SearchApps, QueueApp, ShowQueue, StartDownloading};
use Zeropingheroes\LancacheAutofill\Console\Commands\{CreateDatabase, DeleteDownloads}; use Zeropingheroes\LancacheAutofill\Console\Commands\{InitialiseDatabase, InitialiseDownloadsDirectory};
// Load Composer's autoloader // Load Composer's autoloader
if (file_exists($a = __DIR__.'/../../autoload.php')) { if (file_exists($a = __DIR__.'/../../autoload.php')) {
@ -20,7 +20,7 @@ if (file_exists($a = __DIR__.'/../../autoload.php')) {
// Load environment variables // Load environment variables
$dotenv = new Dotenv(__DIR__); $dotenv = new Dotenv(__DIR__);
$dotenv->load(); $dotenv->load();
$dotenv->required(['DOWNLOAD_LOCATION', 'STEAMCMD', 'STEAM_USER']); $dotenv->required(['DOWNLOADS_DIRECTORY', 'STEAMCMD_PATH', 'DEFAULT_STEAM_USER']);
// Set up the console app // Set up the console app
$app = new Application(new Container, new Dispatcher, '5.4'); $app = new Application(new Container, new Dispatcher, '5.4');
@ -34,8 +34,8 @@ $capsule->addConnection([
$capsule->setAsGlobal(); $capsule->setAsGlobal();
// Make commands available // Make commands available
$app->add(new CreateDatabase); $app->add(new InitialiseDatabase);
$app->add(new DeleteDownloads); $app->add(new InitialiseDownloadsDirectory);
$app->add(new UpdateAppList); $app->add(new UpdateAppList);
$app->add(new SearchApps); $app->add(new SearchApps);

View file

@ -5,21 +5,21 @@ namespace Zeropingheroes\LancacheAutofill\Console\Commands;
use Illuminate\Console\Command; use Illuminate\Console\Command;
use Illuminate\Database\Capsule\Manager as Capsule; use Illuminate\Database\Capsule\Manager as Capsule;
class CreateDatabase extends Command class InitialiseDatabase extends Command
{ {
/** /**
* The name and signature of the console command. * The name and signature of the console command.
* *
* @var string * @var string
*/ */
protected $signature = 'app:create-database'; protected $signature = 'app:initialise-database';
/** /**
* The console command description. * The console command description.
* *
* @var string * @var string
*/ */
protected $description = 'Create the database'; protected $description = 'Initialise the database';
/** /**
* Execute the console command. * Execute the console command.
@ -28,8 +28,18 @@ class CreateDatabase extends Command
*/ */
public function handle() public function handle()
{ {
$this->info('Creating database'); if (Capsule::schema()->hasTable('steam_apps') OR Capsule::schema()->hasTable('steam_queue')) {
if ($this->confirm('Are you sure you wish to clear all data in the database?')) {
$this->info('Removing existing database tables');
Capsule::schema()->dropIfExists('steam_apps');
Capsule::schema()->dropIfExists('steam_queue');
} else {
die();
}
}
$this->info('Creating empty database tables');
Capsule::schema()->create('steam_apps', function ($table) { Capsule::schema()->create('steam_apps', function ($table) {
$table->integer('appid')->unique(); $table->integer('appid')->unique();
$table->string('name'); $table->string('name');
@ -42,6 +52,7 @@ class CreateDatabase extends Command
$table->string('account'); $table->string('account');
$table->string('status'); $table->string('status');
$table->string('message')->nullable(); $table->string('message')->nullable();
$table->string('platform');
}); });
} }

View file

@ -7,21 +7,21 @@ use Illuminate\Database\Capsule\Manager as Capsule;
use Symfony\Component\Process\Process; use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException; use Symfony\Component\Process\Exception\ProcessFailedException;
class DeleteDownloads extends Command class InitialiseDownloadsDirectory extends Command
{ {
/** /**
* The name and signature of the console command. * The name and signature of the console command.
* *
* @var string * @var string
*/ */
protected $signature = 'app:delete-downloads'; protected $signature = 'app:initialise-downloads-directory';
/** /**
* The console command description. * The console command description.
* *
* @var string * @var string
*/ */
protected $description = 'Delete downloads from the disk'; protected $description = 'Initialise the downloads directory';
/** /**
* Execute the console command. * Execute the console command.
@ -30,8 +30,8 @@ class DeleteDownloads extends Command
*/ */
public function handle() public function handle()
{ {
if ($this->confirm('Are you sure you wish to remove all files and folders in "'.getenv('DOWNLOAD_LOCATION').'"?')) { if ($this->confirm('Are you sure you wish to remove all files and folders in "'.getenv('DOWNLOADS_DIRECTORY').'"?')) {
$remove = new Process('rm -r '.getenv('DOWNLOAD_LOCATION')); $remove = new Process('rm -r '.getenv('DOWNLOADS_DIRECTORY'));
$remove->run(function ($type, $buffer) { $remove->run(function ($type, $buffer) {
if (Process::ERR === $type) { if (Process::ERR === $type) {
@ -42,14 +42,14 @@ class DeleteDownloads extends Command
}); });
$create = new Process('mkdir -p '.getenv('DOWNLOAD_LOCATION')); $create = new Process('mkdir -p '.getenv('DOWNLOADS_DIRECTORY'));
$create->run(); $create->run();
if( $remove->isSuccessful() && $create->isSuccessful() ) { if( $remove->isSuccessful() && $create->isSuccessful() ) {
$this->info('Successfully removed all files and folders in "'.getenv('DOWNLOAD_LOCATION').'"'); $this->info('Successfully removed all files and folders in "'.getenv('DOWNLOADS_DIRECTORY').'"');
die(); die();
} }
$this->error('Unable to remove all files and folders in "'.getenv('DOWNLOAD_LOCATION').'"'); $this->error('Unable to remove all files and folders in "'.getenv('DOWNLOADS_DIRECTORY').'"');
} }
} }
} }

View file

@ -15,7 +15,7 @@ class QueueApp extends Command
protected $signature = 'steam:queue-app protected $signature = 'steam:queue-app
{app_id : The ID of the app} {app_id : The ID of the app}
{platforms=windows : Comma separated list of platforms to download the app for [windows, osx, linux]} {platforms=windows : Comma separated list of platforms to download the app for [windows, osx, linux]}
{--account= : The Steam account to use when downloading the app (if different to the STEAM_USER environment variable)}'; {--account= : The Steam account to use when downloading the app (the DEFAULT_STEAM_USER environment variable will be used if this option is omitted)}';
/** /**
* The console command description. * The console command description.
@ -42,7 +42,7 @@ class QueueApp extends Command
$platforms = explode(',', $this->argument('platforms')) ?? ['windows']; $platforms = explode(',', $this->argument('platforms')) ?? ['windows'];
// If no account is specified, default to the account set in the .env file // If no account is specified, default to the account set in the .env file
$account = $this->option('account') ?? getenv('STEAM_USER'); $account = $this->option('account') ?? getenv('DEFAULT_STEAM_USER');
if( array_diff($platforms, $this::PLATFORMS)) if( array_diff($platforms, $this::PLATFORMS))
{ {

View file

@ -30,6 +30,13 @@ class StartDownloading extends Command
*/ */
public function handle() public function handle()
{ {
if ( ! file_exists(getenv('STEAMCMD_PATH')) )
{
$this->error('SteamCMD not found - please check the STEAMCMD_PATH environment variable is set correctly');
die();
}
if ( $this->queuedItems() == 0 ) if ( $this->queuedItems() == 0 )
{ {
$this->error('Queue is empty - nothing to download'); $this->error('Queue is empty - nothing to download');
@ -44,9 +51,9 @@ class StartDownloading extends Command
try { try {
$arguments = $arguments =
[ [
'login' => getenv('STEAM_USER'), 'login' => $app->account,
'@sSteamCmdForcePlatformType' => $app->platform, '@sSteamCmdForcePlatformType' => $app->platform,
'force_install_dir' => getenv('DOWNLOAD_LOCATION').'/'.$app->platform.'/'.$app->appid, 'force_install_dir' => getenv('DOWNLOADS_DIRECTORY').'/'.$app->platform.'/'.$app->appid,
'app_license_request' => $app->appid, 'app_license_request' => $app->appid,
'app_update' => $app->appid, 'app_update' => $app->appid,
'quit' => null, 'quit' => null,
@ -62,7 +69,7 @@ class StartDownloading extends Command
// Start SteamCMD with the arguments, using "unbuffer" // Start SteamCMD with the arguments, using "unbuffer"
// as SteamCMD buffers output when it is not run in a // as SteamCMD buffers output when it is not run in a
// tty, which prevents us showing output line by line // tty, which prevents us showing output line by line
$process = new Process('unbuffer steamcmd.sh '.$argumentString); $process = new Process('unbuffer '. getenv('STEAMCMD_PATH') . ' ' . $argumentString);
// Set a long timeout as downloading could take a while // Set a long timeout as downloading could take a while
$process->setTimeout(14400); $process->setTimeout(14400);
@ -79,10 +86,6 @@ class StartDownloading extends Command
$this->updateQueueItemStatus($app->id, 'completed'); $this->updateQueueItemStatus($app->id, 'completed');
} catch (ProcessFailedException $e) { } catch (ProcessFailedException $e) {
if($process->getExitCode() == 127) {
$this->error('SteamCMD not found - please check the correct path is set in your .env file');
die();
}
// Create an array of SteamCMD's output (removing excess newlines) // Create an array of SteamCMD's output (removing excess newlines)
$lines = explode(PHP_EOL,trim($process->getOutput())); $lines = explode(PHP_EOL,trim($process->getOutput()));