Merge pull request #937 from keriati/privateAppSupport

Improve Private App support
This commit is contained in:
KodeStar
2022-10-31 10:32:55 +00:00
committed by GitHub
3 changed files with 71 additions and 20 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}
}

View File

@@ -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);
}