63 lines
2.4 KiB
PHP
63 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Desktop;
|
|
|
|
final class AppIconResolver
|
|
{
|
|
/**
|
|
* @param array<int, array<string, mixed>> $apps
|
|
* @return array<int, array<string, mixed>>
|
|
*/
|
|
public static function decorate(array $apps, string $skin): array
|
|
{
|
|
$manifest = self::manifest($skin);
|
|
|
|
return array_map(
|
|
static function (array $app) use ($manifest): array {
|
|
$appId = (string) ($app['app_id'] ?? '');
|
|
$iconPath = $manifest[$appId] ?? null;
|
|
|
|
if ($iconPath !== null) {
|
|
$app['icon_path'] = $iconPath;
|
|
}
|
|
|
|
return $app;
|
|
},
|
|
$apps
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @return array<string, string>
|
|
*/
|
|
private static function manifest(string $skin): array
|
|
{
|
|
return match ($skin) {
|
|
'windows' => [
|
|
'welcome-center' => '/assets/desktop/skin-icons/windows/welcome-center.ico',
|
|
'public-dashboard' => '/assets/desktop/skin-icons/windows/public-dashboard.ico',
|
|
'workspace-manager' => '/assets/desktop/skin-icons/windows/workspace-manager.ico',
|
|
'admin-apps' => '/assets/desktop/skin-icons/windows/admin-apps.ico',
|
|
'desktop-login' => '/assets/desktop/skin-icons/windows/desktop-login.ico',
|
|
],
|
|
'apple' => [
|
|
'welcome-center' => '/assets/desktop/skin-icons/apple/welcome-center.svg',
|
|
'public-dashboard' => '/assets/desktop/skin-icons/apple/public-dashboard.svg',
|
|
'workspace-manager' => '/assets/desktop/skin-icons/apple/workspace-manager.svg',
|
|
'admin-apps' => '/assets/desktop/skin-icons/apple/admin-apps.svg',
|
|
'desktop-login' => '/assets/desktop/skin-icons/apple/desktop-login.svg',
|
|
],
|
|
'linux' => [
|
|
'welcome-center' => '/assets/desktop/skin-icons/linux/welcome-center.svg',
|
|
'public-dashboard' => '/assets/desktop/skin-icons/linux/public-dashboard.svg',
|
|
'workspace-manager' => '/assets/desktop/skin-icons/linux/workspace-manager.svg',
|
|
'admin-apps' => '/assets/desktop/skin-icons/linux/admin-apps.svg',
|
|
'desktop-login' => '/assets/desktop/skin-icons/linux/desktop-login.svg',
|
|
],
|
|
default => [],
|
|
};
|
|
}
|
|
}
|