git.php: release asset links prefer local server copies (/downloads, /mirror), fall back to GitHub; store 0.2.9 pmm/pmm.exe locally

这个提交包含在:
JGZYES
2026-09-02 22:04:12 +08:00
父节点 9cf1d0ef31
当前提交 db500af295
修改 3 个文件,包含 14 行新增1 行删除
+2
查看文件
@@ -227,3 +227,5 @@ code{font-family:"JetBrains Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,"Co
.rel-asset{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12.5px;font-family:ui-monospace,monospace;color:var(--text);text-decoration:none} .rel-asset{border:1px solid var(--line);border-radius:8px;padding:6px 10px;font-size:12.5px;font-family:ui-monospace,monospace;color:var(--text);text-decoration:none}
.rel-asset:hover{border-color:#fff;color:#fff} .rel-asset:hover{border-color:#fff;color:#fff}
.rel-size{color:var(--dim);margin-left:6px} .rel-size{color:var(--dim);margin-left:6px}
.rel-asset.local{color:#fff;border-color:#fff}
.rel-asset.local::before{content:"·";margin-right:4px}
二进制
查看文件
二进制文件未显示。
+12 -1
查看文件
@@ -71,6 +71,16 @@ function gh_api(string $url): array {
$d = json_decode((string)$json, true); $d = json_decode((string)$json, true);
return is_array($d) ? $d : []; return is_array($d) ? $d : [];
} }
/* Prefer a local copy of a release asset on this server; fall back to GitHub. */
function local_asset(string $name): ?string {
foreach ([__DIR__ . '/downloads/' . $name, __DIR__ . '/mirror/packages/pmm/' . $name] as $p) {
if (@is_file($p)) {
$base = realpath(__DIR__);
return '/' . str_replace('\\', '/', substr(str_replace('\\', '/', realpath($p)), strlen($base) + 1));
}
}
return null;
}
function render_releases(): void { function render_releases(): void {
$rels = gh_api('https://api.github.com/repos/JGZYES/ParlzPackageManger/releases?per_page=30'); $rels = gh_api('https://api.github.com/repos/JGZYES/ParlzPackageManger/releases?per_page=30');
if (!$rels) { echo '<div class="tips">无法获取 Releases(网络或 API 受限)。</div>'; return; } if (!$rels) { echo '<div class="tips">无法获取 Releases(网络或 API 受限)。</div>'; return; }
@@ -97,7 +107,8 @@ function render_releases(): void {
<?php if ($assets): ?> <?php if ($assets): ?>
<div class="rel-assets"> <div class="rel-assets">
<?php foreach ($assets as $a): ?> <?php foreach ($assets as $a): ?>
<a class="rel-asset" href="<?php echo esc($a['browser_download_url'] ?? '#'); ?>" target="_blank" rel="noopener"> <?php $local = local_asset((string)($a['name'] ?? '')); $href = $local ?: ($a['browser_download_url'] ?? '#'); ?>
<a class="rel-asset<?php echo $local ? ' local' : ''; ?>" href="<?php echo esc($href); ?>" target="_blank" rel="noopener">
<?php echo esc($a['name'] ?? 'asset'); ?> <span class="rel-size"><?php echo isset($a['size']) ? fmt_size((int)$a['size']) : ''; ?></span> <?php echo esc($a['name'] ?? 'asset'); ?> <span class="rel-size"><?php echo isset($a['size']) ? fmt_size((int)$a['size']) : ''; ?></span>
</a> </a>
<?php endforeach; ?> <?php endforeach; ?>