fix: missing image covers for emby
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
import { Album, AlbumTrack, SimilarAlbum } from '@/store/music/types';
|
||||
import { Album, AlbumTrack } from '@/store/music/types';
|
||||
import { fetchApi } from './lib';
|
||||
import {retrieveAndInjectLyricsToTracks} from '@/utility/JellyfinApi/lyrics.ts';
|
||||
|
||||
@@ -26,11 +26,15 @@ export async function retrieveAllAlbums() {
|
||||
* Retrieve a single album
|
||||
*/
|
||||
export async function retrieveAlbum(id: string): Promise<Album> {
|
||||
const Similar = await fetchApi<{ Items: SimilarAlbum[] }>(({ user_id }) => `/Items/${id}/Similar?userId=${user_id}&limit=12`)
|
||||
.then((albums) => albums!.Items.map((a) => a.Id));
|
||||
return fetchApi<Album>(({ user_id }) => `/Users/${user_id}/Items/${id}`);
|
||||
}
|
||||
|
||||
return fetchApi<Album>(({ user_id }) => `/Users/${user_id}/Items/${id}`)
|
||||
.then(album => ({ ...album!, Similar }));
|
||||
/**
|
||||
* Retrieve albums that are similar to the provided album
|
||||
*/
|
||||
export async function retrieveSimilarAlbums(id: string): Promise<Album[]> {
|
||||
return fetchApi<{ Items: Album[] }>(({ user_id }) => `/Items/${id}/Similar?userId=${user_id}&limit=12`)
|
||||
.then((albums) => albums!.Items);
|
||||
}
|
||||
|
||||
const latestAlbumsOptions = {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import type { AppState, Store } from '@/store';
|
||||
import { useTypedSelector, type AppState, type Store } from '@/store';
|
||||
import { Platform } from 'react-native';
|
||||
import { version } from '../../../package.json';
|
||||
import { Album, AlbumTrack, ArtistItem, Playlist } from '@/store/music/types';
|
||||
|
||||
type Credentials = AppState['settings']['credentials'];
|
||||
|
||||
@@ -105,9 +106,13 @@ export async function fetchApi<T>(
|
||||
/**
|
||||
* Retrieve an image URL for a given ItemId
|
||||
*/
|
||||
export function getImage(ItemId: string): string {
|
||||
const credentials = asyncFetchStore().getState().settings.credentials;
|
||||
const uri = encodeURI(`${credentials?.uri}/Items/${ItemId}/Images/Primary?format=jpeg`);
|
||||
export function getImage(ItemId: string | number, credentials?: AppState['settings']['credentials']): string {
|
||||
// Either accept provided credentials, or retrieve them directly from the store
|
||||
const { uri: serverUri } = credentials
|
||||
?? asyncFetchStore().getState().settings.credentials ?? {};
|
||||
|
||||
// Generate the uri and return
|
||||
const uri = encodeURI(`${serverUri}/Items/${ItemId}/Images/Primary?format=jpeg`);
|
||||
return uri;
|
||||
}
|
||||
|
||||
@@ -115,5 +120,20 @@ export function getImage(ItemId: string): string {
|
||||
* Create a hook that can convert ItemIds to image URLs
|
||||
*/
|
||||
export function useGetImage() {
|
||||
return (ItemId: string) => getImage(ItemId);
|
||||
const credentials = useTypedSelector((state) => state.settings.credentials);
|
||||
|
||||
return (item: string | number | Album | AlbumTrack | Playlist | ArtistItem | null) => {
|
||||
if (!item) {
|
||||
return '';
|
||||
// GUARD: If the item's just the id, we'll pass it on directly.
|
||||
} else if (typeof item === 'string' || typeof item === 'number') {
|
||||
return getImage(item, credentials);
|
||||
// GUARD: If the item has an `PrimaryImageItemId` (for Emby servers),
|
||||
// we'll attemp to return that
|
||||
} else if ('PrimaryImageItemId' in item) {
|
||||
return getImage(item.PrimaryImageItemId || item.Id, credentials);
|
||||
} else {
|
||||
return getImage(item.Id);
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -61,9 +61,7 @@ export async function generateTrack(track: AlbumTrack): Promise<Track> {
|
||||
artist: track.Artists.join(', '),
|
||||
album: track.Album,
|
||||
duration: track.RunTimeTicks,
|
||||
artwork: track.AlbumId
|
||||
? getImage(track.AlbumId)
|
||||
: getImage(track.Id),
|
||||
artwork: getImage(track.Id),
|
||||
hasLyrics: track.HasLyrics,
|
||||
lyrics: track.Lyrics,
|
||||
contentType: response.headers.get('Content-Type') || undefined,
|
||||
|
||||
Reference in New Issue
Block a user