Skip to content

feat(many): Expose primary stat to reflet only album artist | artist credit #4268

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

Merged
merged 7 commits into from
Jun 28, 2025

Conversation

kgarner7
Copy link
Contributor

Since both ND API and Subsonic API (with ArtistParticipations) expose artist songs/albums where the artist is credited as an album artist or artist, add a new stat primary to reflect this.

Expose this for Subsonic when ArtistParticipations is true (to get accurate album count/song count).

Expose this for Navidrome as another role primary, also in the UI, and add manual primary* sorts to sort only by credits that Navidrome can return.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Summary of Changes

Hello @kgarner7, 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 introduces a primary stat to represent artist credits accurately, particularly for album artists and artists. It enhances the Subsonic API by exposing this stat when ArtistParticipations is enabled and integrates it into the Navidrome UI with corresponding sorting options. The changes also include a database migration to update artist statistics and refactor the getArtistAlbumCount function.

Highlights

  • New primary stat: Introduces a new primary stat to reflect artist credits as album artist or artist, enhancing accuracy in artist statistics.
  • Subsonic API Enhancement: Exposes the primary stat for Subsonic API when ArtistParticipations is enabled, providing more accurate album and song counts.
  • Navidrome UI Integration: Adds primary role to Navidrome UI and introduces manual primary* sorts for sorting by available credits.
  • Database Migration: Includes a database migration to update artist statistics with the new primary role.
  • Code Refactoring: Refactors getArtistAlbumCount function to utilize primaryStats when ArtistParticipations is enabled.
Using Gemini Code Assist

The 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 in your pull request via creating an issue comment (i.e. comment on the pull request page) using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in issue comments and review comments.
Help /gemini help Displays a list of available commands.

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 .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist is currently in preview and 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 to provide feedback.

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

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

The pull request introduces a 'primary' stat to reflect album artist/artist credits, enhancing the accuracy of artist statistics in Navidrome and Subsonic APIs. The changes include modifications to database migrations, model definitions, repository logic, and UI components to incorporate this new stat. The review focuses on code correctness, efficiency, and maintainability, with suggestions for clarifying logic, reducing code duplication, and ensuring consistency across the codebase.

Comment on lines 412 to 421
// Create a single parameter array with all IDs (repeated 3 times for each IN clause)
// We need to repeat each ID 3 times (once for each IN clause)
var args []interface{}
for _, id := range artistIDBatch {
args = append(args, id) // For ROLE_IDS_PLACEHOLDER
}
for _, id := range artistIDBatch {
args = append(args, id) // For TOTAL_IDS_PLACEHOLDER
}
for _, id := range artistIDBatch {
args = append(args, id) // For UPDATE_IDS_PLACEHOLDER
}
args := make([]any, 4*len(artistIDBatch))
for i := range 4 {
startIdx := i * len(artistIDBatch)

for idx, id := range artistIDBatch {
args[startIdx+idx] = id
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

Instead of manually calculating the start index and iterating, consider using copy to simplify the logic and potentially improve performance.

Also, the comment says "repeated 3 times", but the code repeats it 4 times.

args := make([]any, 4*len(artistIDBatch))
for i, id := range artistIDBatch {
    args[i] = id // For ROLE_IDS_PLACEHOLDER
    args[len(artistIDBatch)+i] = id // For TOTAL_IDS_PLACEHOLDER
    args[2*len(artistIDBatch)+i] = id // For UPDATE_IDS_PLACEHOLDER
    args[3*len(artistIDBatch)+i] = id // For UPDATE_IDS_PLACEHOLDER
}

Copy link
Member

@deluan deluan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good. Let me know what do you think about my comments.

@deluan deluan merged commit 2741b1a into navidrome:master Jun 28, 2025
31 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants