From f9b130c0d986384822e4c955e4118bf2628b3448 Mon Sep 17 00:00:00 2001 From: Anatole Sot <47571181+ano0002@users.noreply.github.com> Date: Sun, 25 Feb 2024 20:02:01 +0100 Subject: [PATCH] Added artist to the releases page & fixed the title cards not working 100% of the time & fixed Tags not being properly applied to search --- overseerr-api.yml | 9 +++------ server/api/musicbrainz/index.ts | 10 +++++++--- server/api/musicbrainz/poster.ts | 8 ++++---- server/api/servarr/lidarr.ts | 8 ++++++-- server/models/Search.ts | 2 +- src/components/Common/ListView/index.tsx | 2 +- src/components/Discover/DiscoverMusics/index.tsx | 4 ++-- src/components/MusicDetails/ReleaseDetails.tsx | 16 +++++++++++++++- src/components/TitleCard/index.tsx | 2 +- 9 files changed, 40 insertions(+), 21 deletions(-) diff --git a/overseerr-api.yml b/overseerr-api.yml index 7dca2ce6d..b79490f96 100644 --- a/overseerr-api.yml +++ b/overseerr-api.yml @@ -5101,11 +5101,6 @@ paths: schema: type: string example: 1,2 - - in: query - name: sortBy - schema: - type: string - example: popularity.desc responses: '200': description: Results @@ -5126,7 +5121,9 @@ paths: results: type: array items: - $ref: '#/components/schemas/ReleaseResult' + anyOf: + - $ref: '#/components/schemas/ReleaseResult' + - $ref: '#/components/schemas/ArtistResult' '500': description: An error occured while getting musics content: diff --git a/server/api/musicbrainz/index.ts b/server/api/musicbrainz/index.ts index 9b2f137ca..2607e94fe 100644 --- a/server/api/musicbrainz/index.ts +++ b/server/api/musicbrainz/index.ts @@ -231,10 +231,12 @@ function processReleaseSearchParams( offset: search.offset, }; if (search.artistname) { - processedSearchParams.query += ` AND artist:${search.artistname}`; + processedSearchParams.query += ` AND artist:"${search.artistname}"`; } if (search.tags) { - processedSearchParams.query += ` AND tag:${search.tags.join(' AND tag:')}`; + processedSearchParams.query += ` AND tag:"${search.tags.join( + '" AND tag:"' + )}"`; } return processedSearchParams; } @@ -248,7 +250,9 @@ function processArtistSearchParams( offset: search.offset, }; if (search.tags) { - processedSearchParams.query += ` AND tag:${search.tags.join(' AND tag:')}`; + processedSearchParams.query += ` AND tag:"${search.tags.join( + '" AND tag:"' + )}"`; } return processedSearchParams; } diff --git a/server/api/musicbrainz/poster.ts b/server/api/musicbrainz/poster.ts index a13f2f971..451373910 100644 --- a/server/api/musicbrainz/poster.ts +++ b/server/api/musicbrainz/poster.ts @@ -2,9 +2,9 @@ import LidarrAPI from '@server/api/servarr/lidarr'; import { getSettings } from '@server/lib/settings'; import type { mbArtist, mbRelease, mbReleaseGroup } from './interfaces'; -function getPosterFromMB( +async function getPosterFromMB( element: mbRelease | mbReleaseGroup | mbArtist -): string | undefined { +): Promise { if (element.media_type === 'artist') { const settings = getSettings(); const lidarrSettings = settings.lidarr.find((lidarr) => lidarr.isDefault); @@ -16,7 +16,7 @@ function getPosterFromMB( url: LidarrAPI.buildUrl(lidarrSettings, '/api/v1'), }); try { - const artist = (lidarr as LidarrAPI).getArtist(element.id); + const artist = await (lidarr as LidarrAPI).getArtist(element.id); if (artist.images.find((i) => i.coverType === 'poster')?.url) { return LidarrAPI.buildUrl( lidarrSettings, @@ -43,7 +43,7 @@ async function getFanartFromMB(element: mbArtist): Promise { url: LidarrAPI.buildUrl(lidarrSettings, '/api/v1'), }); try { - const artist = lidarr.getArtist(element.id); + const artist = await lidarr.getArtist(element.id); return ( artist.images ?? [{ coverType: 'fanart', remoteUrl: undefined }] ).filter((i) => i.coverType === 'fanart')[0].remoteUrl; diff --git a/server/api/servarr/lidarr.ts b/server/api/servarr/lidarr.ts index 83588fb83..3bfcb4445 100644 --- a/server/api/servarr/lidarr.ts +++ b/server/api/servarr/lidarr.ts @@ -172,7 +172,7 @@ class LidarrAPI extends ServarrBase<{ musicId: number }> { } }; - public getArtist = (id: string | number): LidarrArtist => { + public getArtist = async (id: string | number): Promise => { try { if (LidarrAPI.lastArtistsUpdate < Date.now() - LidarrAPI.delay) { this.getArtists(); @@ -190,7 +190,11 @@ class LidarrAPI extends ServarrBase<{ musicId: number }> { if (result) { return result; } - throw new Error(`Artist not found (using MusicBrainzId): ${id}`); + const artist = await this.getArtistByMusicBrainzId(id); + if (artist) { + return artist; + } + throw new Error(`Artist not found (using MusicBrainz Id): ${id}`); } catch (e) { throw new Error(`[Lidarr] ${e.message}`); } diff --git a/server/models/Search.ts b/server/models/Search.ts index b3c0986f3..1a9932743 100644 --- a/server/models/Search.ts +++ b/server/models/Search.ts @@ -286,7 +286,7 @@ export const mapReleaseGroupResult = async ( ) ), tags: releaseGroupResult.tags, - posterPath: getPosterFromMB(releaseGroupResult), + posterPath: await getPosterFromMB(releaseGroupResult), mediaInfo: media ?? undefined, }; }; diff --git a/src/components/Common/ListView/index.tsx b/src/components/Common/ListView/index.tsx index 5e2ce52b8..ab81ef2c3 100644 --- a/src/components/Common/ListView/index.tsx +++ b/src/components/Common/ListView/index.tsx @@ -138,8 +138,8 @@ const ListView = ({ titleCard = ( { titles, fetchMore, error, - } = useDiscover( + } = useDiscover( '/api/v1/discover/musics', preparedFilters ); diff --git a/src/components/MusicDetails/ReleaseDetails.tsx b/src/components/MusicDetails/ReleaseDetails.tsx index 4bf38c22c..9f4e82892 100644 --- a/src/components/MusicDetails/ReleaseDetails.tsx +++ b/src/components/MusicDetails/ReleaseDetails.tsx @@ -163,7 +163,21 @@ const ReleaseDetails = ({ release }: ReleaseDetailsProp) => { ({mainDateDisplay}) )} - + + By  + {data.artist.map((artist, index) => ( + <> + {' '} + + {artist.name} + + {index < data.artist.length - 1 ? ', ' : ''} + + ))} +
diff --git a/src/components/TitleCard/index.tsx b/src/components/TitleCard/index.tsx index a9f3b4c53..625694f87 100644 --- a/src/components/TitleCard/index.tsx +++ b/src/components/TitleCard/index.tsx @@ -195,7 +195,7 @@ const TitleCard = ({