rename internal types in domain models

This commit is contained in:
jeffvli
2025-11-03 20:38:18 -08:00
parent 76bf4ae825
commit 427f808180
23 changed files with 162 additions and 168 deletions
@@ -290,7 +290,7 @@ export const AlbumDetailContent = ({ background, tableRef }: AlbumDetailContentP
if (detailQuery.data.userFavorite) {
deleteFavoriteMutation.mutate({
apiClientProps: { serverId: detailQuery.data.serverId },
apiClientProps: { serverId: detailQuery.data._serverId },
query: {
id: [detailQuery.data.id],
type: LibraryItem.ALBUM,
@@ -298,7 +298,7 @@ export const AlbumDetailContent = ({ background, tableRef }: AlbumDetailContentP
});
} else {
createFavoriteMutation.mutate({
apiClientProps: { serverId: detailQuery.data.serverId },
apiClientProps: { serverId: detailQuery.data._serverId },
query: {
id: [detailQuery.data.id],
type: LibraryItem.ALBUM,
@@ -41,8 +41,8 @@ export const AlbumDetailHeader = forwardRef(
const { t } = useTranslation();
const showRating =
detailQuery?.data?.serverType === ServerType.NAVIDROME ||
detailQuery?.data?.serverType === ServerType.SUBSONIC;
detailQuery?.data?._serverType === ServerType.NAVIDROME ||
detailQuery?.data?._serverType === ServerType.SUBSONIC;
const originalDifferentFromRelease =
detailQuery.data?.originalDate &&
@@ -137,7 +137,7 @@ export const AlbumDetailHeader = forwardRef(
if (!detailQuery?.data) return;
updateRatingMutation.mutate({
apiClientProps: { serverId: detailQuery.data.serverId },
apiClientProps: { serverId: detailQuery.data._serverId },
query: {
item: [detailQuery.data],
rating,
@@ -69,7 +69,7 @@ const DummyAlbumDetailRoute = () => {
try {
if (wasFavorite) {
await deleteFavoriteMutation.mutateAsync({
apiClientProps: { serverId: detailQuery.data.serverId },
apiClientProps: { serverId: detailQuery.data._serverId },
query: {
id: [detailQuery.data.id],
type: LibraryItem.SONG,
@@ -77,7 +77,7 @@ const DummyAlbumDetailRoute = () => {
});
} else {
await createFavoriteMutation.mutateAsync({
apiClientProps: { serverId: detailQuery.data.serverId },
apiClientProps: { serverId: detailQuery.data._serverId },
query: {
id: [detailQuery.data.id],
type: LibraryItem.SONG,
@@ -79,7 +79,7 @@ export const AlbumArtistDetailHeader = forwardRef(
});
};
const showRating = detailQuery?.data?.serverType === ServerType.NAVIDROME;
const showRating = detailQuery?.data?._serverType === ServerType.NAVIDROME;
return (
<LibraryHeader
@@ -41,7 +41,7 @@ export const useDiscordRpc = () => {
// Handle change detection
const song = current[0];
const trackChanged = lastUniqueId !== song.uniqueId;
const trackChanged = lastUniqueId !== song._uniqueId;
/*
1. If the song has just started, update status
@@ -56,7 +56,7 @@ export const useDiscordRpc = () => {
current[2] !== previous[2]
) {
if (trackChanged) {
setlastUniqueId(song.uniqueId);
setlastUniqueId(song._uniqueId);
}
const start = Math.round(Date.now() - current[1] * 1000);
@@ -126,12 +126,12 @@ export const useDiscordRpc = () => {
}
if (discordSettings.showServerImage && song) {
if (song.serverType === ServerType.JELLYFIN && song.imageUrl) {
if (song._serverType === ServerType.JELLYFIN && song.imageUrl) {
activity.largeImageKey = song.imageUrl;
} else if (song.serverType === ServerType.NAVIDROME) {
} else if (song._serverType === ServerType.NAVIDROME) {
try {
const info = await controller.getAlbumInfo({
apiClientProps: { serverId: song.serverId },
apiClientProps: { serverId: song._serverId },
query: { id: song.albumId },
});
@@ -99,7 +99,7 @@ export const lyricsQueries = {
return queryOptions({
gcTime: Infinity,
queryFn: async ({ signal }): Promise<FullLyricsMetadata | null | StructuredLyric[]> => {
const server = getServerById(song?.serverId);
const server = getServerById(song?._serverId);
if (!server) throw new Error('Server not found');
if (!song) return null;
+6 -6
View File
@@ -45,7 +45,7 @@ export const Lyrics = () => {
lyricsQueries.songLyrics(
{
query: { songId: currentSong?.id || '' },
serverId: currentSong?.serverId || '',
serverId: currentSong?._serverId || '',
},
currentSong,
),
@@ -73,13 +73,13 @@ export const Lyrics = () => {
const handleOnResetLyric = useCallback(() => {
queryClient.invalidateQueries({
exact: true,
queryKey: queryKeys.songs.lyrics(currentSong?.serverId, { songId: currentSong?.id }),
queryKey: queryKeys.songs.lyrics(currentSong?._serverId, { songId: currentSong?.id }),
});
}, [currentSong?.id, currentSong?.serverId]);
}, [currentSong?.id, currentSong?._serverId]);
const handleOnRemoveLyric = useCallback(() => {
queryClient.setQueryData(
queryKeys.songs.lyrics(currentSong?.serverId, { songId: currentSong?.id }),
queryKeys.songs.lyrics(currentSong?._serverId, { songId: currentSong?.id }),
(prev: FullLyricsMetadata | undefined) => {
if (!prev) {
return undefined;
@@ -91,7 +91,7 @@ export const Lyrics = () => {
};
},
);
}, [currentSong?.id, currentSong?.serverId]);
}, [currentSong?.id, currentSong?._serverId]);
const fetchTranslation = useCallback(async () => {
if (!lyrics) return;
@@ -126,7 +126,7 @@ export const Lyrics = () => {
remoteSource: override?.source as LyricSource | undefined,
song: currentSong,
},
serverId: currentSong?.serverId || '',
serverId: currentSong?._serverId || '',
}),
);
@@ -122,7 +122,7 @@ export const PlayQueue = forwardRef(({ searchTerm, type }: QueueProps, ref: Ref<
const handleDragEnd = (e: RowDragEvent<QueueSong>) => {
if (!e.nodes.length) return;
const selectedUniqueIds = e.nodes
.map((node) => node.data?.uniqueId)
.map((node) => node.data?._uniqueId)
.filter((e) => e !== undefined);
// const playerData = reorderQueue(selectedUniqueIds as string[], e.overNode?.data?.uniqueId);
@@ -143,8 +143,8 @@ export const PlayQueue = forwardRef(({ searchTerm, type }: QueueProps, ref: Ref<
const handleGridReady = () => {
const { api } = tableRef?.current || {};
if (currentSong?.uniqueId) {
const currentNode = api?.getRowNode(currentSong?.uniqueId);
if (currentSong?._uniqueId) {
const currentNode = api?.getRowNode(currentSong?._uniqueId);
if (!currentNode) return;
api?.ensureNodeVisible(currentNode, 'middle');
@@ -196,10 +196,10 @@ export const PlayQueue = forwardRef(({ searchTerm, type }: QueueProps, ref: Ref<
const rowClassRules = useMemo<RowClassRules | undefined>(() => {
return {
'current-song': (params) => {
return params.data.uniqueId === currentSong?.uniqueId;
return params.data.uniqueId === currentSong?._uniqueId;
},
};
}, [currentSong?.uniqueId]);
}, [currentSong?._uniqueId]);
const previousSongRef = useRef<QueueSong | undefined>(undefined);
@@ -217,11 +217,11 @@ export const PlayQueue = forwardRef(({ searchTerm, type }: QueueProps, ref: Ref<
return;
}
const currentNode = currentSong?.uniqueId
? api.getRowNode(currentSong.uniqueId)
const currentNode = currentSong?._uniqueId
? api.getRowNode(currentSong._uniqueId)
: undefined;
const previousNode = previousSongRef.current?.uniqueId
? api.getRowNode(previousSongRef.current?.uniqueId)
const previousNode = previousSongRef.current?._uniqueId
? api.getRowNode(previousSongRef.current?._uniqueId)
: undefined;
const rowNodes = [currentNode, previousNode].filter(
@@ -248,8 +248,8 @@ export const PlayQueue = forwardRef(({ searchTerm, type }: QueueProps, ref: Ref<
return;
}
const currentNode = currentSong?.uniqueId
? api.getRowNode(currentSong.uniqueId)
const currentNode = currentSong?._uniqueId
? api.getRowNode(currentSong._uniqueId)
: undefined;
if (currentNode) {
@@ -1,4 +1,4 @@
import type { Song } from '/@/shared/types/domain-types';
import type { QueueSong, Song } from '/@/shared/types/domain-types';
import type { CrossfadeStyle } from '/@/shared/types/types';
import type { ReactPlayerProps } from 'react-player';
@@ -18,7 +18,7 @@ import { api } from '/@/renderer/api';
import {
crossfadeHandler,
gaplessHandler,
} from '/@/renderer/components/audio-player/utils/list-handlers';
} from '/@/renderer/features/player/audio-player/utils/list-handlers';
import { useWebAudio } from '/@/renderer/features/player/hooks/use-webaudio';
import {
TranscodingConfig,
@@ -62,26 +62,30 @@ const getDuration = (ref: any) => {
const EMPTY_SOURCE =
'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU2LjM2LjEwMAAAAAAAAAAAAAAA//OEAAAAAAAAAAAAAAAAAAAAAAAASW5mbwAAAA8AAAAEAAABIADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV6urq6urq6urq6urq6urq6urq6urq6urq6v////////////////////////////////8AAAAATGF2YzU2LjQxAAAAAAAAAAAAAAAAJAAAAAAAAAAAASDs90hvAAAAAAAAAAAAAAAAAAAA//MUZAAAAAGkAAAAAAAAA0gAAAAATEFN//MUZAMAAAGkAAAAAAAAA0gAAAAARTMu//MUZAYAAAGkAAAAAAAAA0gAAAAAOTku//MUZAkAAAGkAAAAAAAAA0gAAAAANVVV';
const useSongUrl = (transcode: TranscodingConfig, current: boolean, song?: Song): null | string => {
const useSongUrl = (
transcode: TranscodingConfig,
current: boolean,
song?: QueueSong,
): null | string => {
const prior = useRef(['', '']);
return useMemo(() => {
if (song?.serverId) {
if (song?._serverId) {
// If we are the current track, we do not want a transcoding
// reconfiguration to force a restart.
if (current && prior.current[0] === song.uniqueId) {
if (current && prior.current[0] === song._uniqueId) {
return prior.current[1];
}
if (!transcode.enabled) {
// transcoding disabled; save the result
prior.current = [song.uniqueId, song.streamUrl];
prior.current = [song._uniqueId, song.streamUrl];
return song.streamUrl;
}
const result = api.controller.getTranscodingUrl({
apiClientProps: {
serverId: song.serverId,
serverId: song._serverId,
},
query: {
base: song.streamUrl,
@@ -90,14 +94,14 @@ const useSongUrl = (transcode: TranscodingConfig, current: boolean, song?: Song)
})!;
// transcoding enabled; save the updated result
prior.current = [song.uniqueId, result];
prior.current = [song._uniqueId, result];
return result;
}
// no track; clear result
prior.current = ['', ''];
return null;
}, [current, song?.uniqueId, song?.serverId, song?.streamUrl, transcode]);
}, [current, song?._uniqueId, song?._serverId, song?.streamUrl, transcode]);
};
export interface AudioPlayerRef {
@@ -71,7 +71,7 @@ export const RightControls = () => {
if (!song?.id) return;
addToFavoritesMutation.mutate({
apiClientProps: { serverId: song?.serverId || '' },
apiClientProps: { serverId: song?._serverId || '' },
query: {
id: [song.id],
type: LibraryItem.SONG,
@@ -83,7 +83,7 @@ export const RightControls = () => {
if (!currentSong) return;
updateRatingMutation.mutate({
apiClientProps: { serverId: currentSong?.serverId || '' },
apiClientProps: { serverId: currentSong?._serverId || '' },
query: {
item: [currentSong],
rating,
@@ -95,7 +95,7 @@ export const RightControls = () => {
if (!song?.id) return;
removeFromFavoritesMutation.mutate({
apiClientProps: { serverId: song?.serverId || '' },
apiClientProps: { serverId: song?._serverId || '' },
query: {
id: [song.id],
type: LibraryItem.SONG,
@@ -188,7 +188,7 @@ export const RightControls = () => {
{
id,
itemType: LibraryItem.SONG,
serverId,
_serverId,
} as Song, // This is not a type-safe cast, but it works because those are all the prop
],
rating,
@@ -103,7 +103,7 @@ export const useScrobble = () => {
// Only trigger if the song changed, or the player changed. This should be the case
// anyways, but who knows
if (
currentSong.uniqueId !== previous[0]?.uniqueId ||
currentSong._uniqueId !== previous[0]?._uniqueId ||
current[2] !== previous[2]
) {
const artists =
@@ -141,15 +141,15 @@ export const useScrobble = () => {
if (
(!isCurrentSongScrobbled && shouldSubmitScrobble) ||
previousSong?.serverType === ServerType.JELLYFIN
previousSong?._serverType === ServerType.JELLYFIN
) {
const position =
previousSong?.serverType === ServerType.JELLYFIN
previousSong?._serverType === ServerType.JELLYFIN
? previousSongTimeSec * 1e7
: undefined;
sendScrobble.mutate({
apiClientProps: { serverId: previousSong?.serverId || '' },
apiClientProps: { serverId: previousSong?._serverId || '' },
query: {
id: previousSong.id,
position,
@@ -173,7 +173,7 @@ export const useScrobble = () => {
// Send start scrobble when song changes and the new song is playing
if (currentStatus === PlayerStatus.PLAYING && currentSong?.id) {
sendScrobble.mutate({
apiClientProps: { serverId: currentSong?.serverId || '' },
apiClientProps: { serverId: currentSong?._serverId || '' },
query: {
event: 'start',
id: currentSong.id,
@@ -182,7 +182,7 @@ export const useScrobble = () => {
},
});
if (currentSong?.serverType === ServerType.JELLYFIN) {
if (currentSong?._serverType === ServerType.JELLYFIN) {
// It is possible that another function sets an interval.
// We only want one running, so clear the existing interval
if (progressIntervalId.current) {
@@ -379,7 +379,7 @@ export const useScrobble = () => {
// multiple times in a row and playback goes normally (no next/previous)
equalityFn: (a, b) =>
// compute whether the song changed
a[0]?.uniqueId === b[0]?.uniqueId &&
a[0]?._uniqueId === b[0]?._uniqueId &&
// compute whether the same player: relevant for repeat one and repeat all (one track)
a[2] === b[2],
},
@@ -377,7 +377,7 @@ export const PlaylistDetailSongListHeaderFilters = ({
if (!detailQuery.data) return;
deletePlaylistMutation?.mutate(
{
apiClientProps: { serverId: detailQuery.data.serverId },
apiClientProps: { serverId: detailQuery.data._serverId },
query: { id: detailQuery.data.id },
},
{
@@ -56,7 +56,7 @@ const PlaylistDetailSongListRoute = () => {
createPlaylistMutation.mutate(
{
apiClientProps: { serverId: detailQuery?.data?.serverId },
apiClientProps: { serverId: detailQuery?.data?._serverId },
body: {
_custom: {
navidrome: {
@@ -83,7 +83,7 @@ const PlaylistDetailSongListRoute = () => {
},
);
deletePlaylistMutation.mutate({
apiClientProps: { serverId: detailQuery?.data?.serverId },
apiClientProps: { serverId: detailQuery?.data?._serverId },
query: { id: playlistId },
});
},
@@ -124,7 +124,7 @@ const PlaylistDetailSongListRoute = () => {
}),
)
}
serverId={detailQuery?.data?.serverId || ''}
serverId={detailQuery?.data?._serverId || ''}
/>
),
title: t('common.saveAs', { postProcess: 'sentenceCase' }),
@@ -74,7 +74,7 @@ export const useSetRating = (args: MutationHookArgs) => {
if (remote) {
remote.updateRating(
variables.query.rating,
variables.query.item[0].serverId,
variables.query.item[0]._serverId,
songIds,
);
}
@@ -88,9 +88,9 @@ export const useSetRating = (args: MutationHookArgs) => {
variables.query.item[0].itemType === LibraryItem.ALBUM;
if (isAlbumDetailPage) {
const { id: albumId, serverId } = variables.query.item[0] as Album;
const { id: albumId, _serverId } = variables.query.item[0] as Album;
const queryKey = queryKeys.albums.detail(serverId || '', { id: albumId });
const queryKey = queryKeys.albums.detail(_serverId || '', { id: albumId });
const previous = queryClient.getQueryData<AlbumDetailResponse>(queryKey);
if (previous) {
queryClient.setQueryData<AlbumDetailResponse>(queryKey, {
@@ -34,7 +34,7 @@ export const SimilarSongsList = ({ count, fullScreen, song }: SimilarSongsListPr
count,
songId: song.id,
},
serverId: song?.serverId,
serverId: song?._serverId,
}),
);
+55 -53
View File
@@ -137,7 +137,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.shuffled[currentIndex],
...shuffleInPlace([
...state.queue.shuffled.slice(currentIndex + 1),
...newItems.map((item) => item.uniqueId),
...newItems.map((item) => item._uniqueId),
]),
];
}
@@ -160,7 +160,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.shuffled[currentIndex],
...shuffleInPlace([
...state.queue.shuffled.slice(currentIndex + 1),
...newItems.map((item) => item.uniqueId),
...newItems.map((item) => item._uniqueId),
]),
];
}
@@ -177,7 +177,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
if (state.player.shuffle === PlayerShuffle.TRACK) {
state.queue.shuffled = shuffleInPlace(
newItems.map((item) => item.uniqueId),
newItems.map((item) => item._uniqueId),
);
}
});
@@ -198,7 +198,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.shuffled = [
...state.queue.shuffled,
...newItems.map((item) => item.uniqueId),
...newItems.map((item) => item._uniqueId),
];
});
break;
@@ -227,7 +227,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.shuffled[currentIndex],
...shuffleInPlace([
...state.queue.shuffled.slice(currentIndex + 1),
...newItems.map((item) => item.uniqueId),
...newItems.map((item) => item._uniqueId),
]),
];
});
@@ -252,7 +252,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.player.index = 0;
} else if (currentTrack) {
const priorityIndex = state.queue.priority.findIndex(
(item) => item.uniqueId === currentTrack.uniqueId,
(item) => item._uniqueId === currentTrack._uniqueId,
);
// If the current track is in the priority queue, add the first item after the current track
@@ -294,7 +294,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
if (state.player.shuffle === PlayerShuffle.TRACK) {
state.queue.shuffled = shuffleInPlace(
newItems.map((item) => item.uniqueId),
newItems.map((item) => item._uniqueId),
);
}
});
@@ -312,7 +312,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
set((state) => {
if (queueType === PlayerQueueType.DEFAULT) {
const index = state.queue.default.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
const insertIndex = Math.max(0, edge === 'top' ? index : index + 1);
@@ -333,7 +333,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.default = newQueue;
} else {
const priorityIndex = state.queue.priority.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
if (priorityIndex !== -1) {
@@ -349,7 +349,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
];
} else {
const defaultIndex = state.queue.default.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
if (defaultIndex !== -1) {
@@ -374,7 +374,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.shuffled[currentIndex],
...shuffleInPlace([
...state.queue.shuffled.slice(currentIndex + 1),
...newItems.map((item) => item.uniqueId),
...newItems.map((item) => item._uniqueId),
]),
];
}
@@ -390,14 +390,14 @@ export const usePlayerStoreBase = create<PlayerState>()(
},
clearSelected: (items: QueueSong[]) => {
set((state) => {
const uniqueIds = items.map((item) => item.uniqueId);
const uniqueIds = items.map((item) => item._uniqueId);
state.queue.default = state.queue.default.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
state.queue.priority = state.queue.priority.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newQueue = [...state.queue.priority, ...state.queue.default];
@@ -546,7 +546,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
if (id) {
const queue = state.getQueue();
const index = queue.items.findIndex((item) => item.uniqueId === id);
const index = queue.items.findIndex((item) => item._uniqueId === id);
if (index !== -1) {
state.player.index = index;
@@ -618,12 +618,12 @@ export const usePlayerStoreBase = create<PlayerState>()(
const queueType = getQueueType();
set((state) => {
const uniqueIdMap = new Map(items.map((item) => [item.uniqueId, item]));
const uniqueIdMap = new Map(items.map((item) => [item._uniqueId, item]));
if (queueType == PlayerQueueType.DEFAULT) {
// Find the index of the drop target
const index = state.queue.default.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
// Get the new index based on the edge
@@ -631,11 +631,11 @@ export const usePlayerStoreBase = create<PlayerState>()(
const itemsBefore = state.queue.default
.slice(0, insertIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const itemsAfter = state.queue.default
.slice(insertIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const newQueue = [...itemsBefore, ...items, ...itemsAfter];
@@ -643,7 +643,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.default = newQueue;
} else {
const priorityIndex = state.queue.priority.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
// If the item is in the priority queue
@@ -655,16 +655,16 @@ export const usePlayerStoreBase = create<PlayerState>()(
const itemsBefore = state.queue.priority
.slice(0, newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const itemsAfter = state.queue.priority
.slice(newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const newPriorityQueue = [...itemsBefore, ...items, ...itemsAfter];
const newDefaultQueue = state.queue.default.filter(
(item) => !uniqueIdMap.has(item.uniqueId),
(item) => !uniqueIdMap.has(item._uniqueId),
);
recalculatePlayerIndex(state, newPriorityQueue);
@@ -673,7 +673,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.default = newDefaultQueue;
} else {
const defaultIndex = state.queue.default.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
if (defaultIndex !== -1) {
@@ -684,11 +684,11 @@ export const usePlayerStoreBase = create<PlayerState>()(
const itemsBefore = state.queue.default
.slice(0, newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const itemsAfter = state.queue.default
.slice(newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const newDefaultQueue = [
...itemsBefore,
@@ -697,7 +697,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
];
const newPriorityQueue = state.queue.priority.filter(
(item) => !uniqueIdMap.has(item.uniqueId),
(item) => !uniqueIdMap.has(item._uniqueId),
);
recalculatePlayerIndex(state, newDefaultQueue);
@@ -711,17 +711,17 @@ export const usePlayerStoreBase = create<PlayerState>()(
},
moveSelectedToBottom: (items: QueueSong[]) => {
set((state) => {
const uniqueIds = items.map((item) => item.uniqueId);
const uniqueIds = items.map((item) => item._uniqueId);
if (state.player.queueType === PlayerQueueType.PRIORITY) {
const priorityFiltered = state.queue.priority.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newPriorityQueue = [...priorityFiltered, ...items];
const filtered = state.queue.default.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newDefaultQueue = [...filtered];
@@ -732,7 +732,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.priority = newPriorityQueue;
} else {
const filtered = state.queue.default.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newQueue = [...filtered, ...items];
@@ -750,14 +750,14 @@ export const usePlayerStoreBase = create<PlayerState>()(
const queue = state.getQueue();
const index = state.player.index;
const currentTrack = queue.items[index];
const uniqueId = currentTrack?.uniqueId;
const uniqueId = currentTrack?._uniqueId;
const uniqueIds = items.map((item) => item.uniqueId);
const uniqueIds = items.map((item) => item._uniqueId);
if (queueType === PlayerQueueType.DEFAULT) {
const currentIndex = state.player.index;
const filtered = state.queue.default.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newQueue = [
@@ -770,10 +770,12 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.default = newQueue;
} else {
const priorityIndex = state.queue.priority.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
const uniqueIdMap = new Map(items.map((item) => [item.uniqueId, item]));
const uniqueIdMap = new Map(
items.map((item) => [item._uniqueId, item]),
);
// If the item is in the priority queue
if (priorityIndex !== -1) {
@@ -781,16 +783,16 @@ export const usePlayerStoreBase = create<PlayerState>()(
const itemsBefore = state.queue.priority
.slice(0, newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const itemsAfter = state.queue.priority
.slice(newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const newPriorityQueue = [...itemsBefore, ...items, ...itemsAfter];
const newDefaultQueue = state.queue.default.filter(
(item) => !uniqueIdMap.has(item.uniqueId),
(item) => !uniqueIdMap.has(item._uniqueId),
);
recalculatePlayerIndex(state, newPriorityQueue);
@@ -799,7 +801,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.default = newDefaultQueue;
} else {
const defaultIndex = state.queue.default.findIndex(
(item) => item.uniqueId === uniqueId,
(item) => item._uniqueId === uniqueId,
);
if (defaultIndex !== -1) {
@@ -807,11 +809,11 @@ export const usePlayerStoreBase = create<PlayerState>()(
const itemsBefore = state.queue.default
.slice(0, newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const itemsAfter = state.queue.default
.slice(newIndex)
.filter((item) => !uniqueIdMap.has(item.uniqueId));
.filter((item) => !uniqueIdMap.has(item._uniqueId));
const newDefaultQueue = [
...itemsBefore,
@@ -820,7 +822,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
];
const newPriorityQueue = state.queue.priority.filter(
(item) => !uniqueIdMap.has(item.uniqueId),
(item) => !uniqueIdMap.has(item._uniqueId),
);
recalculatePlayerIndex(state, newDefaultQueue);
@@ -834,17 +836,17 @@ export const usePlayerStoreBase = create<PlayerState>()(
},
moveSelectedToTop: (items: QueueSong[]) => {
set((state) => {
const uniqueIds = items.map((item) => item.uniqueId);
const uniqueIds = items.map((item) => item._uniqueId);
if (state.player.queueType === PlayerQueueType.PRIORITY) {
const priorityFiltered = state.queue.priority.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newPriorityQueue = [...items, ...priorityFiltered];
const filtered = state.queue.default.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newDefaultQueue = [...filtered];
@@ -855,7 +857,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
state.queue.priority = newPriorityQueue;
} else {
const filtered = state.queue.default.filter(
(item) => !uniqueIds.includes(item.uniqueId),
(item) => !uniqueIds.includes(item._uniqueId),
);
const newQueue = [...items, ...filtered];
@@ -926,7 +928,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
set((state) => {
state.player.shuffle = shuffle;
const queue = state.queue.default;
state.queue.shuffled = shuffleInPlace(queue.map((item) => item.uniqueId));
state.queue.shuffled = shuffleInPlace(queue.map((item) => item._uniqueId));
});
},
setSpeed: (speed: number) => {
@@ -948,7 +950,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
shuffle: () => {
set((state) => {
const queue = state.queue.default;
state.queue.shuffled = shuffleInPlace(queue.map((item) => item.uniqueId));
state.queue.shuffled = shuffleInPlace(queue.map((item) => item._uniqueId));
});
},
shuffleAll: () => {
@@ -960,7 +962,7 @@ export const usePlayerStoreBase = create<PlayerState>()(
shuffleSelected: (items: QueueSong[]) => {
set((state) => {
const indices = items.map((item) =>
state.queue.default.findIndex((i) => i.uniqueId === item.uniqueId),
state.queue.default.findIndex((i) => i._uniqueId === item._uniqueId),
);
const shuffledItems = shuffleInPlace(items);
@@ -1143,7 +1145,7 @@ export const subscribeCurrentTrack = (
},
{
equalityFn: (a, b) => {
return a.song?.uniqueId === b.song?.uniqueId;
return a.song?._uniqueId === b.song?._uniqueId;
},
},
);
@@ -1377,14 +1379,14 @@ function recalculatePlayerIndex(state: any, queue: QueueSong[]) {
return;
}
const index = queue.findIndex((item) => item.uniqueId === currentTrack.uniqueId);
const index = queue.findIndex((item) => item._uniqueId === currentTrack._uniqueId);
state.player.index = Math.max(0, index);
}
function toQueueSong(item: Song): QueueSong {
return {
...item,
uniqueId: nanoid(),
_uniqueId: nanoid(),
};
}
@@ -12,7 +12,7 @@ const modifyUrl = (song: QueueSong): string => {
if (transcode.enabled) {
const streamUrl = api.controller.getTranscodingUrl({
apiClientProps: {
serverId: song.serverId,
serverId: song._serverId,
},
query: {
base: song.streamUrl,