handle other archive types for linux
This commit is contained in:
@@ -23,18 +23,34 @@ const MIME_TYPES: Record<string, string> = {
|
||||
'.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) {
|
||||
|
||||
@@ -609,7 +609,6 @@ function DownloadButton({
|
||||
onMouseLeave={(e) => ((e.currentTarget as HTMLElement).style.backgroundColor = 'transparent')}
|
||||
>
|
||||
<span className="flex-shrink-0">↓</span>
|
||||
<PlatformPill platform={primary.platform} />
|
||||
<span className="truncate">{primary.filename}</span>
|
||||
<span className="justify-right flex-shrink-0"><PlatformPill platform={primary.platform} /></span>
|
||||
</a>
|
||||
@@ -647,8 +646,8 @@ function DownloadButton({
|
||||
onMouseLeave={(e) => ((e.currentTarget as HTMLElement).style.backgroundColor = 'transparent')}
|
||||
>
|
||||
<span style={{ color: 'var(--text-secondary)' }} className="flex-shrink-0">↓</span>
|
||||
<PlatformPill platform={file.platform} />
|
||||
<span className="truncate">{file.filename}</span>
|
||||
<PlatformPill platform={file.platform} />
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user