Skip to content
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

Artist discography sorted own-albums-first #2580

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
194a85c
Update ArtistShow.js
certuna Jun 27, 2023
6eb9f02
Update album_repository.go
certuna Jun 27, 2023
df704ee
Update album_repository.go
certuna Jun 27, 2023
6150f26
Update ArtistShow.js
certuna Jun 27, 2023
b45060a
Update ArtistShow.js
certuna Jun 27, 2023
831f5fb
Update album_repository.go
certuna Jun 27, 2023
bb735a6
Update album_repository.go
certuna Jul 4, 2023
7b3839c
Merge pull request #6 from navidrome/master
certuna Jul 6, 2023
f5278bb
Merge pull request #7 from navidrome/master
certuna Jul 18, 2023
4a4106e
Merge pull request #9 from navidrome/master
certuna Jul 31, 2023
60eb2eb
Merge pull request #12 from navidrome/master
certuna Aug 17, 2023
509ebdd
Merge pull request #14 from navidrome/master
certuna Sep 17, 2023
68213a4
Merge branch 'navidrome:master' into master
certuna Oct 20, 2023
2835600
Merge pull request #15 from navidrome/master
certuna Nov 1, 2023
981d8bc
Merge branch 'navidrome:master' into artistdiscographysort
certuna Nov 9, 2023
439b736
Merge branch 'navidrome:master' into artistdiscographysort
certuna Nov 12, 2023
7936365
remove unneeded tests
certuna Nov 12, 2023
06cc262
Merge branch 'navidrome:master' into artistdiscographysort
certuna Nov 16, 2023
2ac5b3c
Merge branch 'navidrome:master' into artistdiscographysort
certuna Nov 22, 2023
9cbc873
Merge branch 'navidrome:master' into artistdiscographysort
certuna Nov 27, 2023
edad920
Merge branch 'navidrome:master' into artistdiscographysort
certuna Dec 3, 2023
752c40f
Merge branch 'navidrome:master' into artistdiscographysort
certuna Dec 4, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 7 additions & 3 deletions persistence/album_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ func NewAlbumRepository(ctx context.Context, o orm.QueryExecutor) model.AlbumRep
"starred": booleanFilter,
"has_rating": hasRatingFilter,
}

return r
}

Expand Down Expand Up @@ -87,15 +86,20 @@ func (r *albumRepository) Exists(id string) (bool, error) {
func (r *albumRepository) selectAlbum(options ...model.QueryOptions) SelectBuilder {
sql := r.newSelectWithAnnotation("album.id", options...).Columns("album.*")
if len(options) > 0 && options[0].Filters != nil {
s, _, _ := options[0].Filters.ToSql()
s, args, _ := options[0].Filters.ToSql()
// If there's any reference of genre in the filter, joins with genre
if strings.Contains(s, "genre") {
sql = r.withGenres(sql)
// If there's no filter on genre_id, group the results by media_file.id
// If there's no filter on genre_id, group the results by album.id
if !strings.Contains(s, "genre_id") {
sql = sql.GroupBy("album.id")
}
}
if strings.Contains(s, "all_artist_ids") {
artistID := strings.Trim(fmt.Sprintf("%s", args[0]), "%")
sql = sql.Column(Alias(Eq{"album_artist_id": artistID}, "match_album_artist"))
// OrderBy comes from the client: /artist/ArtistShow.js
}
}
return sql
}
Expand Down
19 changes: 2 additions & 17 deletions scanner/mapping_internal_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ var _ = Describe("mapping", func() {
gr = newCachedGenreRepository(ctx, gr)
mapper = newMediaFileMapper("/", gr)
})

It("returns empty if no genres are available", func() {
g, gs := mapper.mapGenres(nil)
Expect(g).To(BeEmpty())
Expand All @@ -53,22 +53,7 @@ var _ = Describe("mapping", func() {
Expect(gs[0].Name).To(Equal("Rock"))
Expect(gs[1].Name).To(Equal("Electronic"))
})

It("parses multi-valued genres", func() {
g, gs := mapper.mapGenres([]string{"Rock;Dance", "Electronic", "Rock"})
Expect(g).To(Equal("Rock"))
Expect(gs).To(HaveLen(3))
Expect(gs[0].Name).To(Equal("Rock"))
Expect(gs[1].Name).To(Equal("Dance"))
Expect(gs[2].Name).To(Equal("Electronic"))
})
It("trims genres names", func() {
_, gs := mapper.mapGenres([]string{"Rock ; Dance", " Electronic "})
Expect(gs).To(HaveLen(3))
Expect(gs[0].Name).To(Equal("Rock"))
Expect(gs[1].Name).To(Equal("Dance"))
Expect(gs[2].Name).To(Equal("Electronic"))
})

It("does not break on spaces", func() {
_, gs := mapper.mapGenres([]string{"New Wave"})
Expect(gs).To(HaveLen(1))
Expand Down
5 changes: 4 additions & 1 deletion ui/src/artist/ArtistShow.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ const AlbumShowLayout = (props) => {
addLabel={false}
reference="album"
target="artist_id"
sort={{ field: 'max_year asc,date asc', order: 'ASC' }}
sort={{
field: 'match_album_artist desc,max_year asc,date asc',
order: 'ASC',
}}
filter={{ artist_id: record?.id }}
perPage={0}
pagination={null}
Expand Down
Loading