feat: top releases sorted by popularity with library-style album cards

Replaced the date-sorted release group approach with a dedicated
TopReleaseGroupsForArtist LB API call that returns releases ranked
by total listen count (popularity). Added LBTopReleaseGroup type
and Wails bindings.

Restyled the top-releases cards to match the library album view:
square cover art on top with title and type below, centered text,
auto-filling the available width with even spacing.
This commit is contained in:
2026-03-29 17:12:30 -04:00
parent 4138fe593d
commit cef6709d9a
7 changed files with 180 additions and 39 deletions
+2
View File
@@ -50,3 +50,5 @@ export function StartIndexBuild():Promise<void>;
export function StopIndexBuild():Promise<void>;
export function TopRecordingsForArtist(arg1:string):Promise<Array<explore.LBTopRecording>>;
export function TopReleaseGroupsForArtist(arg1:string):Promise<Array<explore.LBTopReleaseGroup>>;
+4
View File
@@ -97,3 +97,7 @@ export function StopIndexBuild() {
export function TopRecordingsForArtist(arg1) {
return window['go']['explore']['Service']['TopRecordingsForArtist'](arg1);
}
export function TopReleaseGroupsForArtist(arg1) {
return window['go']['explore']['Service']['TopReleaseGroupsForArtist'](arg1);
}
+20
View File
@@ -34,6 +34,26 @@ export namespace explore {
this.totalListenCount = source["totalListenCount"];
}
}
export class LBTopReleaseGroup {
releaseGroupMbid: string;
title: string;
artistName: string;
type: string;
totalListenCount: number;
static createFrom(source: any = {}) {
return new LBTopReleaseGroup(source);
}
constructor(source: any = {}) {
if ('string' === typeof source) source = JSON.parse(source);
this.releaseGroupMbid = source["releaseGroupMbid"];
this.title = source["title"];
this.artistName = source["artistName"];
this.type = source["type"];
this.totalListenCount = source["totalListenCount"];
}
}
export class MBArtist {
mbid: string;
name: string;