diff --git a/app/Application.php b/app/Application.php index 65288106..8f90355b 100644 --- a/app/Application.php +++ b/app/Application.php @@ -110,6 +110,13 @@ class Application extends Model { $apps = self::apps(); $app = $apps->where('appid', $appid)->first(); + + if ($app === null) { + // Try in db for Private App + $appModel = self::where('appid', $appid)->first(); + $app = json_decode($appModel->toJson()); + } + if ($app === null) { return null; } @@ -128,6 +135,15 @@ class Application extends Model $list[$app->appid] = $app->name; } + // Check for private apps in the db + $appsListFromDB = self::all(['appid', 'name']); + + foreach($appsListFromDB as $app) { + // Already existing keys are overwritten, + // only private apps should be added at the end + $list[$app->appid] = $app->name; + } + return $list; } } diff --git a/app/Console/Commands/RegisterApp.php b/app/Console/Commands/RegisterApp.php index aea317c0..e09ef16b 100644 --- a/app/Console/Commands/RegisterApp.php +++ b/app/Console/Commands/RegisterApp.php @@ -5,6 +5,7 @@ namespace App\Console\Commands; use App\Application; use App\SupportedApps; use Illuminate\Console\Command; +use Illuminate\Support\Facades\Storage; class RegisterApp extends Command { @@ -13,7 +14,7 @@ class RegisterApp extends Command * * @var string */ - protected $signature = 'register:app {folder}'; + protected $signature = 'register:app {folder} {--remove}'; /** * The console command description. @@ -49,29 +50,47 @@ class RegisterApp extends Command $this->addApp($folder); } } else { - $this->addApp($folder); + $this->addApp($folder, $this->option('remove')); } } - public function addApp($folder) + public function addApp($folder, $remove = false) { $json = app_path('SupportedApps/'.$folder.'/app.json'); - if (file_exists($json)) { - $app = json_decode(file_get_contents($json)); - if (isset($app->appid)) { - $exists = Application::find($app->appid); - if ($exists) { - $this->error('Application already registered - '.$exists->name.' - '.$exists->appid); - } else { - // Doesn't exist so add it - SupportedApps::saveApp($app, new Application); - $this->info('Application Added - '.$app->name.' - '.$app->appid); - } - } else { - $this->error('No App ID for - '.$folder); - } - } else { - $this->error('Could not find '.$json); + + if (!file_exists($json)) { + $this->error('Could not find ' . $json); + return; } + + $app = json_decode(file_get_contents($json)); + + if (!isset($app->appid)) { + $this->error('No App ID for - ' . $folder); + return; + } + + $exists = Application::find($app->appid); + + if ($exists) { + if ($remove) { + $exists->delete(); + $this->info('Application Removed - ' . $app->name . ' - ' . $app->appid); + return; + } + $this->error('Application already registered - ' . $exists->name . ' - ' . $exists->appid); + return; + } + + // Doesn't exist so add it + SupportedApps::saveApp($app, new Application); + $this->saveIcon($folder, $app->icon); + $this->info('Application Added - ' . $app->name . ' - ' . $app->appid); + } + + private function saveIcon($appFolder, $icon) { + $iconPath = app_path('SupportedApps/' . $appFolder . '/' . $icon); + $contents = file_get_contents($iconPath); + Storage::disk('public')->put('icons/'.$icon, $contents); } } diff --git a/app/Http/Controllers/ItemController.php b/app/Http/Controllers/ItemController.php index 1936f3ed..9935f526 100644 --- a/app/Http/Controllers/ItemController.php +++ b/app/Http/Controllers/ItemController.php @@ -17,6 +17,7 @@ use Illuminate\Http\Request; use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Route; use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Facades\URL; class ItemController extends Controller { @@ -208,6 +209,11 @@ class ItemController extends Controller $icon .= '.'.$path_parts['extension']; } $path = 'icons/'.$icon; + + // Private apps could have here duplicated icons folder + if (strpos($path, 'icons/icons/') !== false) { + $path = str_replace('icons/icons/','icons/',$path); + } Storage::disk('public')->put($path, $contents); $request->merge([ 'icon' => $path, @@ -376,7 +382,17 @@ class ItemController extends Controller } $output['colour'] = ($app->tile_background == 'light') ? '#fafbfc' : '#161b1f'; - $output['iconview'] = config('app.appsource').'icons/'.$app->icon; + + if(strpos($app->icon, '://') !== false) { + $output['iconview'] = $app->icon; + } elseif(strpos($app->icon, 'icons/') !== false) { + // Private apps have the icon locally + $output['iconview'] = URL::to('/').'/storage/'.$app->icon; + $output['icon'] = str_replace('icons/', '', $output['icon']); + } else { + $output['iconview'] = config('app.appsource').'icons/'.$app->icon; + } + return json_encode($output); }