This commit is contained in:
Your Name
2026-08-22 10:46:13 +08:00
parent c06d293424
commit 43e5411b6a
39 changed files with 1607 additions and 300 deletions
@@ -27,7 +27,9 @@ class DesktopWorkstationLogic extends BaseLogic
{
public const CONFIG_TYPE = 'desktop_workstation';
public const PLATFORMS = ['windows_x64', 'macos_arm64', 'macos_x64'];
public const PLATFORMS = ['windows_x64', 'macos_arm64', 'macos_x64'];
public const PACKAGE_TYPES = ['archive', 'inno_setup'];
/**
* @notes 管理端读取配置(安装包地址补全域名)
@@ -76,10 +78,10 @@ class DesktopWorkstationLogic extends BaseLogic
$latest = self::normalizeVersion((string) ($config['latest_version'] ?? ''));
$minVersion = self::normalizeVersion((string) ($config['min_version'] ?? ''));
$enabled = (int) ($config['enabled'] ?? 0) === 1;
$packageKey = self::packageKey($platform, $arch);
$package = $packageKey !== ''
? self::plainPackage($config['packages'][$packageKey] ?? [])
: self::emptyPackage();
$packageKey = self::packageKey($platform, $arch);
$package = $packageKey !== ''
? self::plainPackage($config['packages'][$packageKey] ?? [], $packageKey)
: self::emptyPackage();
$canInstall = $package['url'] !== '' && $package['sha256'] !== '';
$hasUpdate = $enabled && $latest !== '' && $current !== '' && self::compareVersion($current, $latest) < 0;
$belowMin = $minVersion !== '' && $current !== '' && self::compareVersion($current, $minVersion) < 0;
@@ -186,8 +188,9 @@ class DesktopWorkstationLogic extends BaseLogic
$packages[$key] = [
'url' => (string) ($params[$key . '_url'] ?? ''),
'sha256' => (string) ($params[$key . '_sha256'] ?? ''),
'size' => $params[$key . '_size'] ?? 0,
'filename' => (string) ($params[$key . '_filename'] ?? ''),
'size' => $params[$key . '_size'] ?? 0,
'filename' => (string) ($params[$key . '_filename'] ?? ''),
'type' => (string) ($params[$key . '_type'] ?? 'archive'),
];
}
}
@@ -210,7 +213,7 @@ class DesktopWorkstationLogic extends BaseLogic
{
$packages = [];
foreach (self::PLATFORMS as $key) {
$packages[$key] = self::publicPackage($config['packages'][$key] ?? []);
$packages[$key] = self::publicPackage($config['packages'][$key] ?? [], $key);
}
$config['packages'] = $packages;
return $config;
@@ -230,8 +233,9 @@ class DesktopWorkstationLogic extends BaseLogic
$url = FileService::setFileUrl($url);
}
$sha256 = strtolower(trim((string) ($row['sha256'] ?? '')));
$filename = trim((string) ($row['filename'] ?? ''));
$size = (int) ($row['size'] ?? 0);
$filename = trim((string) ($row['filename'] ?? ''));
$size = (int) ($row['size'] ?? 0);
$type = self::normalizePackageType((string) ($row['type'] ?? ''), $key);
if ($persist) {
$filled = self::fillLocalPackageMeta($url, $sha256, $size, $filename);
$url = $filled['url'];
@@ -242,8 +246,9 @@ class DesktopWorkstationLogic extends BaseLogic
$normalized[$key] = [
'url' => $url,
'sha256' => $sha256,
'size' => max(0, $size),
'filename' => mb_substr($filename, 0, 180),
'size' => max(0, $size),
'filename' => mb_substr($filename, 0, 180),
'type' => $type,
];
}
return $normalized;
@@ -251,36 +256,52 @@ class DesktopWorkstationLogic extends BaseLogic
/**
* @param array<string, mixed> $row
* @return array{url:string,sha256:string,size:int,filename:string}
*/
private static function publicPackage(array $row): array
{
$plain = self::plainPackage($row);
* @return array{url:string,sha256:string,size:int,filename:string,type:string}
*/
private static function publicPackage(array $row, string $key): array
{
$plain = self::plainPackage($row, $key);
$plain['url'] = $plain['url'] === '' ? '' : FileService::getFileUrl($plain['url']);
return $plain;
}
/**
* @param array<string, mixed> $row
* @return array{url:string,sha256:string,size:int,filename:string}
*/
private static function plainPackage(array $row): array
{
return [
* @return array{url:string,sha256:string,size:int,filename:string,type:string}
*/
private static function plainPackage(array $row, string $key = ''): array
{
return [
'url' => trim((string) ($row['url'] ?? '')),
'sha256' => strtolower(trim((string) ($row['sha256'] ?? ''))),
'size' => max(0, (int) ($row['size'] ?? 0)),
'filename' => (string) ($row['filename'] ?? ''),
'size' => max(0, (int) ($row['size'] ?? 0)),
'filename' => (string) ($row['filename'] ?? ''),
'type' => self::normalizePackageType((string) ($row['type'] ?? ''), $key),
];
}
/**
* @return array{url:string,sha256:string,size:int,filename:string}
*/
private static function emptyPackage(): array
{
return ['url' => '', 'sha256' => '', 'size' => 0, 'filename' => ''];
}
* @return array{url:string,sha256:string,size:int,filename:string,type:string}
*/
private static function emptyPackage(): array
{
return ['url' => '', 'sha256' => '', 'size' => 0, 'filename' => '', 'type' => 'archive'];
}
public static function normalizePackageType(string $type, string $key = ''): string
{
$value = strtolower(trim($type));
if ($value === '') {
return 'archive';
}
if (!in_array($value, self::PACKAGE_TYPES, true)) {
return 'archive';
}
if ($value === 'inno_setup' && $key !== '' && $key !== 'windows_x64') {
return 'archive';
}
return $value;
}
/**
* @return array{url:string,sha256:string,size:int,filename:string}