Skin upload
Some checks failed
Deploy / deploy-staging (push) Failing after 6m30s
Deploy / deploy-production (push) Has been skipped

This commit is contained in:
2026-06-08 01:53:05 +02:00
parent 89dcc251b7
commit 853dab5cef
55727 changed files with 250417 additions and 4 deletions

View File

@@ -5,6 +5,7 @@ declare(strict_types=1);
namespace App;
use Desktop\AppRegistry;
use Desktop\AppIconResolver;
use Desktop\DesktopState;
use Desktop\SkinResolver;
use Desktop\WidgetRegistry;
@@ -26,6 +27,7 @@ final class App
$widgetRegistry = new WidgetRegistry($this->projectRoot . '/config/widgets.php');
$skins = SkinResolver::all();
$activeSkin = SkinResolver::resolve($_GET['skin'] ?? null);
$apps = AppIconResolver::decorate($registry->all(), $activeSkin);
$windows = (new WindowManager($registry))->defaultWindows();
$activeWidgetIds = DesktopState::defaultWidgetIds();
@@ -48,7 +50,7 @@ final class App
'keycloak_theme_handoff' => '/docs/keycloak-theme-handoff.md',
],
],
'apps' => $registry->all(),
'apps' => $apps,
'windows' => $windows,
'widgets' => [
'active' => $widgetRegistry->active($activeWidgetIds),

View File

@@ -0,0 +1,62 @@
<?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/skins/windows/vendor/windows-icons-merged/devices/monitors/monitor.ico',
'public-dashboard' => '/assets/desktop/skins/windows/vendor/windows-icons-merged/interface/symbols/internet.ico',
'workspace-manager' => '/assets/desktop/skins/windows/vendor/windows-icons-merged/folders/desktop.ico',
'admin-apps' => '/assets/desktop/skins/windows/vendor/windows-icons-merged/applications/settings.ico',
'desktop-login' => '/assets/desktop/skins/windows/vendor/windows-icons-merged/emblems/user.ico',
],
'apple' => [
'welcome-center' => '/assets/desktop/skins/apple/vendor/MacTahoe/preferences/32/desktop.svg',
'public-dashboard' => '/assets/desktop/skins/apple/vendor/MacTahoe/preferences/32/applications-internet.svg',
'workspace-manager' => '/assets/desktop/skins/apple/vendor/MacTahoe/preferences/32/desktop.svg',
'admin-apps' => '/assets/desktop/skins/apple/vendor/MacTahoe/preferences/32/preferences-desktop.svg',
'desktop-login' => '/assets/desktop/skins/apple/vendor/MacTahoe/actions/24/im-user.svg',
],
'linux' => [
'welcome-center' => '/assets/desktop/skins/linux/vendor/Mint-Relaxed-Icons/devices/64/computer.svg',
'public-dashboard' => '/assets/desktop/skins/linux/vendor/Mint-Relaxed-Icons/apps/48/applications-internet.svg',
'workspace-manager' => '/assets/desktop/skins/linux/vendor/Mint-Relaxed-Icons/places/16/folder-desktop.svg',
'admin-apps' => '/assets/desktop/skins/linux/vendor/Mint-Relaxed-Icons/apps/48/systemsettings.svg',
'desktop-login' => '/assets/desktop/skins/linux/vendor/Mint-Relaxed-Icons/actions/32/system-switch-user.svg',
],
default => [],
};
}
}

View File

@@ -69,6 +69,7 @@ final class SkinResolver
'taskbar_icon_style' => 'label',
'window_controls' => 'windows',
'maximize_over_system_bar' => false,
'icon_variant' => 'default',
],
$profile,
self::assetManifest($skinId)
@@ -89,6 +90,7 @@ final class SkinResolver
'taskbar_icon_style' => 'label',
'window_controls' => 'windows',
'maximize_over_system_bar' => false,
'icon_variant' => 'default',
],
self::assetManifest('base')
);