diff --git a/src/main/ra.ts b/src/main/ra.ts index 2f6fd0e..e41ea52 100644 --- a/src/main/ra.ts +++ b/src/main/ra.ts @@ -94,7 +94,8 @@ function writeGameListCache(cache: GameListCache): void { async function fetchGameList(consoleId: number, apiKey: string, username: string): Promise { const url = `https://retroachievements.org/API/API_GetGameList.php?z=${encodeURIComponent(username)}&y=${encodeURIComponent(apiKey)}&c=${consoleId}`; const json = await fetchText(url); - const data = JSON.parse(json); + let data: any; + try { data = JSON.parse(json); } catch { return []; } if (!Array.isArray(data)) return []; return data.map((g: any) => ({ id: g.ID, title: g.Title })); } @@ -138,9 +139,10 @@ async function lookupGameIdByHash(romPath: string): Promise { const body = `r=gameid&m=${hash}`; const response = await postForm('https://retroachievements.org/dorequest.php', body); const parsed = JSON.parse(response); - if (parsed.Success && parsed.ID) return parsed.ID; + if (parsed.Success && (parsed.ID || parsed.GameID)) return parsed.ID || parsed.GameID; return null; - } catch { + } catch (err) { + console.error('[ra] hash lookup error:', err); return null; } } @@ -168,7 +170,7 @@ async function fetchAchievements( try { const url = `https://retroachievements.org/API/API_GetGameInfoAndUserProgress.php` + `?z=${encodeURIComponent(username)}&y=${encodeURIComponent(apiKey)}` - + `&i=${gameId}&u=${encodeURIComponent(username)}`; + + `&g=${gameId}&u=${encodeURIComponent(username)}`; const json = await fetchText(url); const data = JSON.parse(json); if (!data || !data.Achievements) return null; @@ -192,7 +194,8 @@ async function fetchAchievements( userProgress: achievements.filter(a => a.dateEarned).length, achievements, }; - } catch { + } catch (err) { + console.error('[ra] fetchAchievements error:', err); return null; } } diff --git a/src/main/settings.ts b/src/main/settings.ts index 127f5f2..4b52a92 100644 --- a/src/main/settings.ts +++ b/src/main/settings.ts @@ -30,6 +30,7 @@ const defaultSettings: AppSettings = { biosDirectory: '', retroAchievementsUsername: '', retroAchievementsPassword: '', + retroAchievementsApiKey: '', }; let cached: AppSettings | null = null; diff --git a/src/renderer/components/GameDetailModal.tsx b/src/renderer/components/GameDetailModal.tsx index cc82591..ad893cf 100644 --- a/src/renderer/components/GameDetailModal.tsx +++ b/src/renderer/components/GameDetailModal.tsx @@ -97,82 +97,83 @@ export function GameDetailModal({ game, onClose, onLaunch }: Props) {
- {loadingMeta ? ( -
Loading metadata...
- ) : ( - <> -
- {metadata?.year && ( -
- Year - {metadata.year} -
- )} - {metadata?.genre && ( -
- Genre - {metadata.genre} -
- )} - {metadata?.publisher && ( -
- Publisher - {metadata.publisher} -
- )} - {metadata?.rating !== undefined && metadata.rating > 0 && ( -
- Rating - {'★'.repeat(Math.round(metadata.rating))}{'☆'.repeat(5 - Math.round(metadata.rating))} -
- )} -
- Emulator - {game.emulatorId} -
-
- Played - {game.playCount} time{game.playCount !== 1 ? 's' : ''} -
-
- - {metadata?.description && ( -
-

About

-

{metadata.description}

-
- )} - - )} - -
-

- Achievements - {achievements && ( - - {achievements.userProgress}/{achievements.totalAchievements} · {achievements.totalPoints} pts - - )} -

- - {loadingAchievements ? ( -

Loading achievements...

- ) : achievements ? ( -
- {achievements.achievements.map((a) => ( - - ))} -
+
+ {loadingMeta ? ( +
Loading metadata...
) : ( -

- Add your RetroAchievements Web API Key in Settings > Utilities to see achievements here. -

+ <> +
+ {metadata?.year && ( +
+ Year + {metadata.year} +
+ )} + {metadata?.genre && ( +
+ Genre + {metadata.genre} +
+ )} + {metadata?.publisher && ( +
+ Publisher + {metadata.publisher} +
+ )} + {metadata?.rating !== undefined && metadata.rating > 0 && ( +
+ Rating + {'★'.repeat(Math.round(metadata.rating))}{'☆'.repeat(5 - Math.round(metadata.rating))} +
+ )} +
+ Emulator + {game.emulatorId} +
+
+ Played + {game.playCount} time{game.playCount !== 1 ? 's' : ''} +
+
+ + {metadata?.description && ( +
+

About

+

{metadata.description}

+
+ )} + )} + +
+

+ Achievements + {achievements && ( + + {achievements.userProgress}/{achievements.totalAchievements} · {achievements.totalPoints} pts + + )} +

+ + {loadingAchievements ? ( +

Loading achievements...

+ ) : achievements ? ( +
+ {achievements.achievements.map((a) => ( + + ))} +
+ ) : ( +

+ Add your RetroAchievements Web API Key in Settings > Utilities to see achievements here. +

+ )} +