Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
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
8 changes: 4 additions & 4 deletions src/renderer/api/navidrome/navidrome-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ export const NavidromeController: InternalControllerEndpoint = {
getAlbumArtistInfo: async (args) => {
const { apiClientProps, query } = args;

const artistInfoRes = await ssApiClient(apiClientProps).getArtistInfo({
const artistInfoRes = await ssApiClient(apiClientProps).getArtistInfo2({
query: {
id: query.id,
...(query.limit != null && { count: query.limit }),
Expand All @@ -300,7 +300,7 @@ export const NavidromeController: InternalControllerEndpoint = {
return null;
}

const artistInfo = artistInfoRes.body.artistInfo;
const artistInfo = artistInfoRes.body.artistInfo2;
const imageUrl =
artistInfo?.largeImageUrl ||
artistInfo?.mediumImageUrl ||
Expand All @@ -312,8 +312,8 @@ export const NavidromeController: InternalControllerEndpoint = {
imageUrl,
similarArtists:
artistInfo?.similarArtist?.map((artist) => ({
id: artist.id,
imageId: artist.id,
id: String(artist.id),
imageId: String(artist.id),
imageUrl: null,
name: artist.name,
userFavorite: Boolean(artist.starred) || false,
Expand Down
6 changes: 3 additions & 3 deletions src/renderer/api/subsonic/subsonic-api.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,12 +98,12 @@ export const contract = c.router({
200: ssType._response.getArtist,
},
},
getArtistInfo: {
getArtistInfo2: {
method: 'GET',
path: 'getArtistInfo.view',
path: 'getArtistInfo2.view',
query: ssType._parameters.artistInfo,
responses: {
200: ssType._response.artistInfo,
200: ssType._response.artistInfo2,
},
},
getArtists: {
Expand Down
8 changes: 4 additions & 4 deletions src/renderer/api/subsonic/subsonic-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -496,7 +496,7 @@ export const SubsonicController: InternalControllerEndpoint = {
getAlbumArtistInfo: async (args) => {
const { apiClientProps, query } = args;

const artistInfoRes = await ssApiClient(apiClientProps).getArtistInfo({
const artistInfoRes = await ssApiClient(apiClientProps).getArtistInfo2({
query: {
id: query.id,
...(query.limit != null && { count: query.limit }),
Expand All @@ -507,14 +507,14 @@ export const SubsonicController: InternalControllerEndpoint = {
return null;
}

const artistInfo = artistInfoRes.body.artistInfo;
const artistInfo = artistInfoRes.body.artistInfo2;

return {
biography: artistInfo?.biography || null,
similarArtists:
artistInfo?.similarArtist?.map((artist) => ({
id: artist.id,
imageId: artist.coverArt ?? artist.id,
id: String(artist.id),
imageId: artist.coverArt ?? String(artist.id),
imageUrl: null,
name: artist.name,
userFavorite: Boolean(artist.starred) || false,
Expand Down
8 changes: 5 additions & 3 deletions src/shared/api/navidrome/navidrome-normalize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -392,7 +392,9 @@ const normalizeAlbum = (

const normalizeAlbumArtist = (
item: z.infer<typeof ndType._response.albumArtist> & {
similarArtists?: z.infer<typeof ssType._response.artistInfo>['artistInfo']['similarArtist'];
similarArtists?: NonNullable<
z.infer<typeof ssType._response.artistInfo2>['artistInfo2']
>['similarArtist'];
},
server?: null | ServerListItem,
): AlbumArtist => {
Expand Down Expand Up @@ -448,8 +450,8 @@ const normalizeAlbumArtist = (
playCount: item.playCount || 0,
similarArtists:
item.similarArtists?.map((artist) => ({
id: artist.id,
imageId: artist.id,
id: String(artist.id),
imageId: String(artist.id),
imageUrl: null,
name: artist.name,
userFavorite: Boolean(artist.starred) || false,
Expand Down
16 changes: 8 additions & 8 deletions src/shared/api/subsonic/subsonic-normalize.ts
Original file line number Diff line number Diff line change
Expand Up @@ -245,14 +245,14 @@ const normalizeSong = (
const normalizeAlbumArtist = (
item:
| (z.infer<typeof ssType._response.albumArtist> & {
similarArtists?: z.infer<
typeof ssType._response.artistInfo
>['artistInfo']['similarArtist'];
similarArtists?: NonNullable<
z.infer<typeof ssType._response.artistInfo2>['artistInfo2']
>['similarArtist'];
})
| (z.infer<typeof ssType._response.artistListEntry> & {
similarArtists?: z.infer<
typeof ssType._response.artistInfo
>['artistInfo']['similarArtist'];
similarArtists?: NonNullable<
z.infer<typeof ssType._response.artistInfo2>['artistInfo2']
>['similarArtist'];
}),
server?: null | ServerListItemWithCredential,
): AlbumArtist => {
Expand All @@ -273,8 +273,8 @@ const normalizeAlbumArtist = (
playCount: null,
similarArtists:
item.similarArtists?.map((artist) => ({
id: artist.id,
imageId: artist.coverArt ?? artist.id,
id: String(artist.id),
imageId: artist.coverArt ?? String(artist.id),
imageUrl: null,
name: artist.name,
userFavorite: Boolean(artist.starred) || false,
Expand Down
49 changes: 28 additions & 21 deletions src/shared/api/subsonic/subsonic-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -304,26 +304,33 @@ const artistInfoParameters = z.object({
includeNotPresent: z.boolean().optional(),
});

const artistInfo = z.object({
artistInfo: z.object({
biography: z.string().optional(),
largeImageUrl: z.string().optional(),
lastFmUrl: z.string().optional(),
mediumImageUrl: z.string().optional(),
musicBrainzId: z.string().optional(),
similarArtist: z.array(
z.object({
albumCount: z.string(),
artistImageUrl: z.string().optional(),
coverArt: z.string().optional(),
id: z.string(),
name: z.string(),
starred: z.string().optional(),
userRating: z.number().optional(),
}),
),
smallImageUrl: z.string().optional(),
}),
// Organizes music according to ID3 tags, and must be queried with an ID3 artist id
// (as returned by getArtists/getArtist). The non-ID3 getArtistInfo resolves the id
// against the folder browsing namespace, where the same id belongs to an unrelated item.
const artistInfo2 = z.object({
artistInfo2: z
.object({
biography: z.string().optional(),
largeImageUrl: z.string().optional(),
lastFmUrl: z.string().optional(),
mediumImageUrl: z.string().optional(),
musicBrainzId: z.string().optional(),
similarArtist: z
.array(
z.object({
albumCount: z.number().or(z.string()).optional(),
artistImageUrl: z.string().optional(),
coverArt: z.string().optional(),
id,
name: z.string(),
starred: z.string().optional(),
userRating: z.number().optional(),
}),
)
.optional(),
smallImageUrl: z.string().optional(),
})
.optional(),
});

const topSongsListParameters = z.object({
Expand Down Expand Up @@ -951,7 +958,7 @@ export const ssType = {
albumInfo,
albumList,
albumListEntry,
artistInfo,
artistInfo2,
artistListEntry,
authenticate,
baseResponse,
Expand Down
Loading