-
Notifications
You must be signed in to change notification settings - Fork 11
Enhance platform handling in RomM and add FsSlug property #77
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
Added checks for mapping.PlatformFsSlug in RomM.cs to improve platform identification logic. Introduced a new query parameter for platform_fs_slug in API requests. Added PlatformFsSlug property in EmulatorMapping.cs with JsonIgnore attribute to prevent serialization.
Summary of ChangesHello @phscezario, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request enhances the platform handling within RomM by integrating a new Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Code Review
This pull request enhances platform handling by introducing PlatformFsSlug as an alternative to PlatformId for identifying platforms when fetching games from the RomM API. The changes are in the right direction, but I've found a few critical issues and areas for improvement.
My review focuses on:
- Correctness: I've identified several potential
NullReferenceExceptions caused by allowingmapping.Platformto be null without ensuring all its usages are null-safe. The logic for looking up the platform is also flawed and can lead to a crash. - Maintainability: There's an opportunity to refactor the construction of API query parameters to remove significant code duplication.
I've provided specific comments with code suggestions to address these points. Please review them carefully, especially the critical ones, as they can cause the application to crash during game import.
| } | ||
|
|
||
| if (mapping.Platform == null) | ||
| if (mapping.Platform == null && mapping.PlatformFsSlug == null) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This change allows mapping.Platform to be null if mapping.PlatformFsSlug is provided. However, this introduces NullReferenceExceptions in several places later in the code that still assume mapping.Platform is not null.
For example:
- Line 256:
mapping.Platform.Name - Line 378:
mapping.Platform.Name - Line 409:
mapping.Platform.Name
The potential NullReferenceException on line 247 is addressed in a separate comment, but these other instances also need to be fixed. You should either make all usages of mapping.Platform within this loop null-safe (e.g., using the null-conditional operator ?.) or reconsider this condition to avoid breaking existing logic.
| RomMPlatform apiPlatform = apiPlatform = apiPlatforms.FirstOrDefault(p => p.IgdbId == mapping.Platform.IgdbId); | ||
|
|
||
| if (mapping.PlatformFsSlug != null) | ||
| { | ||
| apiPlatform = apiPlatforms.FirstOrDefault(p => p.FsSlug == mapping.PlatformFsSlug); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There are a few issues with the logic for finding the apiPlatform:
- Typo: There's a redundant assignment
apiPlatform = apiPlatform = ...on line 247. - Crash Risk: If
mapping.Platformisnull(which is now possible due to the change on line 240), accessingmapping.Platform.IgdbIdon line 247 will cause aNullReferenceException. - Flawed Logic: The code first attempts to find the platform by
IgdbIdand then overwrites it ifPlatformFsSlugis available. The logic should prioritizePlatformFsSlugand only fall back toIgdbIdif the slug is not present.
Here is a suggested replacement that fixes these issues and is safer and clearer:
RomMPlatform apiPlatform = null;
if (mapping.PlatformFsSlug != null)
{
apiPlatform = apiPlatforms.FirstOrDefault(p => p.FsSlug == mapping.PlatformFsSlug);
}
else if (mapping.Platform != null)
{
apiPlatform = apiPlatforms.FirstOrDefault(p => p.IgdbId == mapping.Platform.IgdbId);
}
I hope this PR, along with the other one that was closed (#2771), will help by: