feat: attempt to retrieve images from downloaded items
This commit is contained in:
@@ -112,25 +112,36 @@ function formatImageUri(ItemId: string | number, baseUri: string): string {
|
||||
*/
|
||||
export function getImage(item: string | number | Album | AlbumTrack | Playlist | ArtistItem | null, credentials?: AppState['settings']['credentials']): string | undefined {
|
||||
// Either accept provided credentials, or retrieve them directly from the store
|
||||
const { uri: serverUri } = credentials
|
||||
?? asyncFetchStore().getState().settings.credentials ?? {};
|
||||
const state = asyncFetchStore().getState();
|
||||
const { uri: serverUri } = credentials ?? state.settings.credentials ?? {};
|
||||
|
||||
if (!item || !serverUri) {
|
||||
return undefined;
|
||||
// GUARD: If the item's just the id, we'll pass it on directly.
|
||||
} else if (typeof item === 'string' || typeof item === 'number') {
|
||||
}
|
||||
|
||||
// Get the item ID
|
||||
const itemId = typeof item === 'string' || typeof item === 'number'
|
||||
? item
|
||||
: 'PrimaryImageItemId' in item
|
||||
? item.PrimaryImageItemId || item.Id
|
||||
: item.Id;
|
||||
|
||||
// Check if we have a downloaded image for this item
|
||||
const downloadEntity = state.downloads.entities[itemId];
|
||||
if (downloadEntity?.image) {
|
||||
return downloadEntity.image;
|
||||
}
|
||||
|
||||
// If no downloaded image, fall back to server URL
|
||||
if (typeof item === 'string' || typeof item === 'number') {
|
||||
if (__DEV__) {
|
||||
console.warn('useGetImage: supplied item is string or number. Please submit an item object instead.', { item });
|
||||
}
|
||||
return formatImageUri(item, serverUri);
|
||||
// GUARD: If the item has an `PrimaryImageItemId` (for Emby servers),
|
||||
// we'll attemp to return that
|
||||
} else if ('PrimaryImageItemId' in item) {
|
||||
return formatImageUri(item.PrimaryImageItemId || item.Id, serverUri);
|
||||
} else {
|
||||
if ('ImageTags' in item && item.ImageTags.Primary) {
|
||||
return formatImageUri(item.Id, serverUri);
|
||||
}
|
||||
} else if ('ImageTags' in item && item.ImageTags.Primary) {
|
||||
return formatImageUri(item.Id, serverUri);
|
||||
}
|
||||
|
||||
return undefined;
|
||||
|
||||
Reference in New Issue
Block a user