mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-10 04:30:25 +02:00
refactor item detail to use song list instead of album detail query
This commit is contained in:
@@ -57,7 +57,7 @@ const JF_FIELDS = {
|
|||||||
ALBUM_ARTIST_DETAIL: 'Genres, Overview, SortName, ProviderIds',
|
ALBUM_ARTIST_DETAIL: 'Genres, Overview, SortName, ProviderIds',
|
||||||
ALBUM_ARTIST_LIST: 'Genres, DateCreated, ExternalUrls, Overview, SortName, ProviderIds',
|
ALBUM_ARTIST_LIST: 'Genres, DateCreated, ExternalUrls, Overview, SortName, ProviderIds',
|
||||||
ALBUM_DETAIL: 'Genres, DateCreated, ChildCount, People, Tags, ProviderIds',
|
ALBUM_DETAIL: 'Genres, DateCreated, ChildCount, People, Tags, ProviderIds',
|
||||||
ALBUM_LIST: 'People, Tags, Studios, SortName, UserData, ProviderIds',
|
ALBUM_LIST: 'People, Tags, Studios, SortName, UserData, ProviderIds, ChildCount',
|
||||||
FOLDER: 'Genres, DateCreated, MediaSources, UserData, ParentId',
|
FOLDER: 'Genres, DateCreated, MediaSources, UserData, ParentId',
|
||||||
GENRE: 'ItemCounts',
|
GENRE: 'ItemCounts',
|
||||||
PLAYLIST_DETAIL: 'Genres, DateCreated, MediaSources, ChildCount, ParentId, SortName',
|
PLAYLIST_DETAIL: 'Genres, DateCreated, MediaSources, ChildCount, ParentId, SortName',
|
||||||
@@ -1112,7 +1112,7 @@ export const JellyfinController: InternalControllerEndpoint = {
|
|||||||
GenreIds: query.genreIds?.join(','),
|
GenreIds: query.genreIds?.join(','),
|
||||||
IncludeItemTypes: 'Audio',
|
IncludeItemTypes: 'Audio',
|
||||||
IsFavorite: query.favorite,
|
IsFavorite: query.favorite,
|
||||||
Limit: query.limit,
|
Limit: query.limit === -1 ? undefined : query.limit,
|
||||||
ParentId: getLibraryId(query.musicFolderId),
|
ParentId: getLibraryId(query.musicFolderId),
|
||||||
Recursive: true,
|
Recursive: true,
|
||||||
SearchTerm: query.searchTerm,
|
SearchTerm: query.searchTerm,
|
||||||
@@ -1147,7 +1147,7 @@ export const JellyfinController: InternalControllerEndpoint = {
|
|||||||
GenreIds: query.genreIds?.join(','),
|
GenreIds: query.genreIds?.join(','),
|
||||||
IncludeItemTypes: 'Audio',
|
IncludeItemTypes: 'Audio',
|
||||||
IsFavorite: query.favorite,
|
IsFavorite: query.favorite,
|
||||||
Limit: query.limit,
|
Limit: query.limit === -1 ? undefined : query.limit,
|
||||||
ParentId: getLibraryId(query.musicFolderId),
|
ParentId: getLibraryId(query.musicFolderId),
|
||||||
Recursive: true,
|
Recursive: true,
|
||||||
SearchTerm: query.searchTerm,
|
SearchTerm: query.searchTerm,
|
||||||
|
|||||||
@@ -42,7 +42,6 @@ import {
|
|||||||
import { useItemDragDropState } from '/@/renderer/components/item-list/item-table-list/hooks/use-item-drag-drop-state';
|
import { useItemDragDropState } from '/@/renderer/components/item-list/item-table-list/hooks/use-item-drag-drop-state';
|
||||||
import { columnLabelMap } from '/@/renderer/components/item-list/item-table-list/item-table-list-column';
|
import { columnLabelMap } from '/@/renderer/components/item-list/item-table-list/item-table-list-column';
|
||||||
import { ItemControls, ItemTableListColumnConfig } from '/@/renderer/components/item-list/types';
|
import { ItemControls, ItemTableListColumnConfig } from '/@/renderer/components/item-list/types';
|
||||||
import { albumQueries } from '/@/renderer/features/albums/api/album-api';
|
|
||||||
import {
|
import {
|
||||||
JOINED_ARTISTS_MUTED_PROPS,
|
JOINED_ARTISTS_MUTED_PROPS,
|
||||||
JoinedArtists,
|
JoinedArtists,
|
||||||
@@ -50,13 +49,14 @@ import {
|
|||||||
import { usePlayer } from '/@/renderer/features/player/context/player-context';
|
import { usePlayer } from '/@/renderer/features/player/context/player-context';
|
||||||
import { useIsMutatingCreateFavorite } from '/@/renderer/features/shared/mutations/create-favorite-mutation';
|
import { useIsMutatingCreateFavorite } from '/@/renderer/features/shared/mutations/create-favorite-mutation';
|
||||||
import { useIsMutatingDeleteFavorite } from '/@/renderer/features/shared/mutations/delete-favorite-mutation';
|
import { useIsMutatingDeleteFavorite } from '/@/renderer/features/shared/mutations/delete-favorite-mutation';
|
||||||
|
import { songsQueries } from '/@/renderer/features/songs/api/songs-api';
|
||||||
import { AppRoute } from '/@/renderer/router/routes';
|
import { AppRoute } from '/@/renderer/router/routes';
|
||||||
import { useSettingsStore, useShowRatings } from '/@/renderer/store';
|
import { useSettingsStore, useShowRatings } from '/@/renderer/store';
|
||||||
import { formatDateAbsoluteUTC, formatDurationString } from '/@/renderer/utils';
|
import { formatDateAbsoluteUTC, formatDurationString } from '/@/renderer/utils';
|
||||||
import { ExplicitIndicator } from '/@/shared/components/explicit-indicator/explicit-indicator';
|
import { ExplicitIndicator } from '/@/shared/components/explicit-indicator/explicit-indicator';
|
||||||
import { Skeleton } from '/@/shared/components/skeleton/skeleton';
|
import { Skeleton } from '/@/shared/components/skeleton/skeleton';
|
||||||
import { Text } from '/@/shared/components/text/text';
|
import { Text } from '/@/shared/components/text/text';
|
||||||
import { Album, LibraryItem, Song } from '/@/shared/types/domain-types';
|
import { Album, LibraryItem, Song, SongListSort, SortOrder } from '/@/shared/types/domain-types';
|
||||||
import { ItemListKey, TableColumn } from '/@/shared/types/types';
|
import { ItemListKey, TableColumn } from '/@/shared/types/types';
|
||||||
|
|
||||||
const DEFAULT_ROW_HEIGHT = 300;
|
const DEFAULT_ROW_HEIGHT = 300;
|
||||||
@@ -582,21 +582,36 @@ const RowContent = memo(
|
|||||||
return (data?.[index] as Album | undefined) || undefined;
|
return (data?.[index] as Album | undefined) || undefined;
|
||||||
}, [data, getItem, index]);
|
}, [data, getItem, index]);
|
||||||
|
|
||||||
const { data: songData, isLoading: isSongsQueryLoading } = useQuery({
|
const songListQuery = useMemo(() => {
|
||||||
enabled: !!item && !!item.id,
|
if (!item?.id || !item?._serverId) return null;
|
||||||
...albumQueries.detail({
|
return {
|
||||||
query: {
|
query: {
|
||||||
id: item?.id || '',
|
albumIds: [item.id],
|
||||||
|
limit: -1,
|
||||||
|
sortBy: SongListSort.ALBUM,
|
||||||
|
sortOrder: SortOrder.ASC,
|
||||||
|
startIndex: 0,
|
||||||
},
|
},
|
||||||
serverId: item?._serverId || '',
|
serverId: item?._serverId || '',
|
||||||
}),
|
};
|
||||||
|
}, [item]);
|
||||||
|
|
||||||
|
const { data: songListData, isLoading: isSongsQueryLoading } = useQuery({
|
||||||
|
enabled: !!songListQuery,
|
||||||
|
...(songListQuery
|
||||||
|
? songsQueries.list(songListQuery)
|
||||||
|
: {
|
||||||
|
queryFn: async () => ({ items: [], startIndex: 0, totalRecordCount: 0 }),
|
||||||
|
queryKey: ['item-detail', 'list', 'disabled'],
|
||||||
|
}),
|
||||||
});
|
});
|
||||||
|
|
||||||
const isSongsLoading = !!item && isSongsQueryLoading && !songData;
|
const songItems = songListData?.items;
|
||||||
|
const isSongsLoading = !!item && isSongsQueryLoading && !songItems?.length;
|
||||||
|
|
||||||
const songs = useMemo(() => {
|
const songs = useMemo(() => {
|
||||||
return (
|
return (
|
||||||
songData?.songs ||
|
songItems ||
|
||||||
Array.from({ length: item?.songCount || 0 }, (_, i) => ({
|
Array.from({ length: item?.songCount || 0 }, (_, i) => ({
|
||||||
duration: 0,
|
duration: 0,
|
||||||
id: `${item?.id}-${i}`,
|
id: `${item?.id}-${i}`,
|
||||||
@@ -604,13 +619,13 @@ const RowContent = memo(
|
|||||||
trackNumber: i + 1,
|
trackNumber: i + 1,
|
||||||
}))
|
}))
|
||||||
);
|
);
|
||||||
}, [songData, item?.id, item?.songCount]);
|
}, [songItems, item?.id, item?.songCount]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
if (item?.id && songData?.songs?.length) {
|
if (item?.id && songItems?.length) {
|
||||||
registerSongs(item.id, songData.songs as Song[]);
|
registerSongs(item.id, songItems as Song[]);
|
||||||
}
|
}
|
||||||
}, [item?.id, registerSongs, songData?.songs]);
|
}, [item?.id, registerSongs, songItems]);
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
return (
|
return (
|
||||||
|
|||||||
Reference in New Issue
Block a user