diff --git a/src/app/api/file/route.ts b/src/app/api/file/route.ts index 36d76a2..cb97190 100644 --- a/src/app/api/file/route.ts +++ b/src/app/api/file/route.ts @@ -23,18 +23,34 @@ const MIME_TYPES: Record = { '.zip': 'application/zip', '.dmg': 'application/x-apple-diskimage', '.gz': 'application/gzip', + '.tgz': 'application/gzip', + '.bz2': 'application/x-bzip2', + '.xz': 'application/x-xz', + '.zst': 'application/zstd', } function getMimeType(filePath: string): string { - // Special-case .tar.gz before checking the last extension - if (filePath.toLowerCase().endsWith('.tar.gz')) return 'application/gzip' + // Special-case multi-part extensions before checking the last extension + const lower = filePath.toLowerCase() + if (lower.endsWith('.tar.gz')) return 'application/gzip' + if (lower.endsWith('.tar.bz2')) return 'application/x-bzip2' + if (lower.endsWith('.tar.xz')) return 'application/x-xz' + if (lower.endsWith('.tar.zst')) return 'application/zstd' const ext = path.extname(filePath).toLowerCase() return MIME_TYPES[ext] ?? 'application/octet-stream' } function isDownloadAttachment(filePath: string): boolean { const lower = filePath.toLowerCase() - return lower.endsWith('.zip') || lower.endsWith('.tar.gz') || lower.endsWith('.dmg') + return ( + lower.endsWith('.zip') || + lower.endsWith('.tar.gz') || + lower.endsWith('.tar.bz2') || + lower.endsWith('.tar.xz') || + lower.endsWith('.tar.zst') || + lower.endsWith('.tgz') || + lower.endsWith('.dmg') + ) } export async function GET(request: NextRequest) { diff --git a/src/components/games/GameDetailModal.tsx b/src/components/games/GameDetailModal.tsx index 43ba60a..b9a8508 100644 --- a/src/components/games/GameDetailModal.tsx +++ b/src/components/games/GameDetailModal.tsx @@ -609,7 +609,6 @@ function DownloadButton({ onMouseLeave={(e) => ((e.currentTarget as HTMLElement).style.backgroundColor = 'transparent')} > - {primary.filename} @@ -647,8 +646,8 @@ function DownloadButton({ onMouseLeave={(e) => ((e.currentTarget as HTMLElement).style.backgroundColor = 'transparent')} > - {file.filename} + ))} diff --git a/src/lib/games.ts b/src/lib/games.ts index cc7ada8..30dbba7 100644 --- a/src/lib/games.ts +++ b/src/lib/games.ts @@ -11,6 +11,10 @@ function platformForFile(name: string): GamePlatform | null { const lower = name.toLowerCase() if (lower.endsWith('.zip')) return 'windows' if (lower.endsWith('.tar.gz')) return 'linux' + if (lower.endsWith('.tar.bz2')) return 'linux' + if (lower.endsWith('.tar.xz')) return 'linux' + if (lower.endsWith('.tar.zst')) return 'linux' + if (lower.endsWith('.tgz')) return 'linux' if (lower.endsWith('.dmg')) return 'macos' if (lower.endsWith('.apk')) return 'android' return null