feat: display-name from manifest.xml, remove type prefix #225

Merged
jmiller merged 1 commits from dev into main 2026-05-30 17:52:44 +00:00
2 changed files with 26 additions and 51 deletions
+15 -5
View File
@@ -135,13 +135,22 @@ $extFolder = '';
$extName = '';
$typePrefix = '';
// Detect platform from manifest.xml
// Detect platform and display name from manifest.xml
$platform = 'generic';
$prettyName = '';
$manifestXml = "{$root}/.mokogitea/manifest.xml";
if (file_exists($manifestXml)) {
$content = file_get_contents($manifestXml);
if ($content !== false && preg_match('/<platform>([^<]+)<\/platform>/', $content, $pm)) {
$platform = trim($pm[1]);
if ($content !== false) {
if (preg_match('/<platform>([^<]+)<\/platform>/', $content, $pm)) {
$platform = trim($pm[1]);
}
// <display-name> is the human-friendly name; <name> is the element/repo name
if (preg_match('/<display-name>([^<]+)<\/display-name>/', $content, $dn)) {
$prettyName = trim($dn[1]);
} elseif (preg_match('/<name>([^<]+)<\/name>/', $content, $nm)) {
$prettyName = trim($nm[1]);
}
}
}
@@ -263,8 +272,9 @@ if (empty($extName)) {
echo "Element: {$extElement}, Type: {$extType}, Prefix: {$typePrefix}, Name: {$extName}\n";
// ── Build release name ──────────────────────────────────────────────────────
$releaseName = "{$extName} {$version} ({$typePrefix}{$extElement}-{$version})";
// Use display-name from manifest.xml if available, otherwise fall back to extName
$displayName = !empty($prettyName) ? $prettyName : $extName;
$releaseName = "{$displayName} {$version} ({$typePrefix}{$extElement}-{$version})";
echo "Release name: {$releaseName}\n";
// ── Generate release notes ──────────────────────────────────────────────────
+11 -46
View File
@@ -100,6 +100,8 @@ if (file_exists($mokoManifest)) {
};
}
$detectedName = (string)($mokoXml->identity->name ?? $repo);
// <display-name> is the human-friendly name for releases and updates.xml
$detectedDisplayName = (string)($mokoXml->identity->{"display-name"} ?? '');
$detectedPackageType = (string)($mokoXml->build->{"package-type"} ?? '');
}
}
@@ -200,33 +202,7 @@ if ($manifest !== null) {
$targetPlatform = "<targetplatform name=\"{$detectedPlatform}\" version=\".*\" />";
}
// Resolve display name from .sys.ini language files
$iniFiles = [];
$langIterator = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($root, RecursiveDirectoryIterator::SKIP_DOTS)
);
foreach ($langIterator as $file) {
if (preg_match('/\.sys\.ini$/i', $file->getFilename())) {
$iniFiles[] = $file->getPathname();
}
}
$keyCandidates = [$extName];
if (!preg_match('/^[A-Z_]+$/', $extName)) {
$upper = strtoupper(str_replace([' ', '-'], '_', $extName));
$keyCandidates[] = "TPL_{$upper}";
$keyCandidates[] = "MOD_{$upper}";
$keyCandidates[] = "COM_{$upper}";
$keyCandidates[] = "PLG_{$upper}";
}
foreach ($iniFiles as $ini) {
$content = file_get_contents($ini);
foreach ($keyCandidates as $key) {
if (preg_match('/^' . preg_quote($key, '/') . '="([^"]+)"/m', $content, $m)) {
$extName = $m[1];
break 2;
}
}
}
// Display name resolution moved to manifest.xml <display-name> (below)
// Fallbacks
if (empty($extName)) {
@@ -236,27 +212,16 @@ if (empty($extType)) {
$extType = 'component';
}
// If extName is still a technical/prefixed name (mod_foo, tpl_foo), prefer
// the human-readable name from .mokogitea/manifest.xml <identity><name>
if (preg_match('/^(pkg_|com_|mod_|plg_\w+_|tpl_|lib_)/i', $extName) && !empty($detectedName)) {
$extName = $detectedName;
// Display name: use <display-name> from manifest.xml if available
// This is the canonical human-friendly name — no type prefix added
if (!empty($detectedDisplayName)) {
$displayName = $detectedDisplayName;
} elseif (!empty($detectedName)) {
$displayName = $detectedName;
} else {
$displayName = $extName;
}
// Build display name with type prefix (e.g. "Package - MokoWaaS")
$typeDisplayMap = [
'package' => 'Package',
'plugin' => 'Plugin',
'module' => 'Module',
'component' => 'Component',
'template' => 'Template',
'library' => 'Library',
'file' => 'File',
];
$typeDisplay = $typeDisplayMap[$extType] ?? ucfirst($extType);
// Strip existing type prefix to avoid doubling (e.g. "Template - Template - MokoOnyx")
$extName = preg_replace('/^(' . implode('|', array_map('preg_quote', $typeDisplayMap)) . ')\s*-\s*/i', '', $extName);
$displayName = "{$typeDisplay} - {$extName}";
// -- Build type prefix --------------------------------------------------------
$typePrefix = '';
switch ($extType) {