Add multi-platform game support with per-OS download detection

- Detect Windows (.zip), Linux (.tar.gz), and macOS (.dmg / .app bundle) game archives during scan
- Store GameFile[] with platform metadata in DB instead of plain zipFiles[]
- Stream .app bundles as on-the-fly zip archives via archiver
- Show WIN/LIN/MAC platform badge pills on GameCard and SeriesCard
- Auto-select the download matching the user's OS in GameDetailModal
- Persist cover URL to DB immediately on upload (no re-scan needed)
- Backward-compatible: legacy zipFiles entries map to platform 'windows'

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Garret Patti
2026-04-12 09:47:09 -04:00
parent ebc35d7184
commit 53205d4a19
9 changed files with 1273 additions and 87 deletions

View File

@@ -391,7 +391,7 @@ async function scanGames(library: Library, libraryRoot: string): Promise<void> {
parent_key: seriesKey,
title: game.title,
metadata: JSON.stringify({
zipFiles: game.zipFiles,
gameFiles: game.gameFiles,
coverUrl: game.coverUrl,
wideCoverUrl: game.wideCoverUrl,
}),
@@ -414,7 +414,7 @@ async function scanGames(library: Library, libraryRoot: string): Promise<void> {
item_type: 'game',
title: game.title,
metadata: JSON.stringify({
zipFiles: game.zipFiles,
gameFiles: game.gameFiles,
coverUrl: game.coverUrl,
wideCoverUrl: game.wideCoverUrl,
}),