diff --git a/packages/renderer/src/components/ArtistsInline.tsx b/packages/renderer/src/components/ArtistsInline.tsx
index 9f725d7..333ec69 100644
--- a/packages/renderer/src/components/ArtistsInline.tsx
+++ b/packages/renderer/src/components/ArtistsInline.tsx
@@ -11,7 +11,9 @@ const ArtistInline = ({
{artists.map((artist, index) => (
- {artist.name}
+
+ {artist.name}
+
{index < artists.length - 1 ? ', ' : ''}
))}
diff --git a/packages/renderer/src/components/TracksAlbum.tsx b/packages/renderer/src/components/TracksAlbum.tsx
index 1c8ce57..1ea52fd 100644
--- a/packages/renderer/src/components/TracksAlbum.tsx
+++ b/packages/renderer/src/components/TracksAlbum.tsx
@@ -49,12 +49,14 @@ const Track = memo(
isLiked = false,
isSkeleton = false,
isHighlight = false,
+ subtitle = undefined,
onClick,
}: {
track: Track
isLiked?: boolean
isSkeleton?: boolean
isHighlight?: boolean
+ subtitle?: string
onClick: (e: React.MouseEvent, trackID: number) => void
}) => {
if (enableRenderLog)
@@ -113,7 +115,17 @@ const Track = memo(
isHighlight ? 'text-brand-500' : 'text-black dark:text-white'
)}
>
- {track.name}
+ {track.name}
+ {subtitle && (
+
+ ({subtitle})
+
+ )}
)}
@@ -238,6 +250,7 @@ const TracksAlbum = ({
isLiked={userLikedSongs?.ids?.includes(track.id) ?? false}
isSkeleton={false}
isHighlight={track.id === playingTrack?.id}
+ subtitle={track.tns?.at(0) ?? track.alia?.at(0)}
/>
))}
diff --git a/packages/renderer/src/components/TracksList.tsx b/packages/renderer/src/components/TracksList.tsx
index 1a332f1..67b5d88 100644
--- a/packages/renderer/src/components/TracksList.tsx
+++ b/packages/renderer/src/components/TracksList.tsx
@@ -7,6 +7,7 @@ import { prefetchAlbum } from '@/hooks/useAlbum'
import useUser from '@/hooks/useUser'
import useUserLikedSongsIDs from '@/hooks/useUserLikedSongsIDs'
import { formatDuration, resizeImage } from '@/utils/common'
+import { player } from '@/store'
const Track = memo(
({
@@ -14,12 +15,14 @@ const Track = memo(
isLiked = false,
isSkeleton = false,
isPlaying = false,
+ subtitle = undefined,
onClick,
}: {
track: Track
isLiked?: boolean
isSkeleton?: boolean
isPlaying?: boolean
+ subtitle?: string
onClick: (e: React.MouseEvent, trackID: number) => void
}) => {
return (
@@ -28,8 +31,8 @@ const Track = memo(
className={classNames(
'group grid w-full rounded-xl after:scale-[.98] after:rounded-xl dark:after:bg-white/[.08]',
'grid-cols-12 p-2 pr-4',
- !isSkeleton && !isPlaying && 'btn-hover-animation after:bg-gray-100',
- !isSkeleton && isPlaying && 'bg-brand-100'
+ !isSkeleton && !isPlaying && 'btn-hover-animation after:bg-gray-100 dark:after:bg-white/[.08]',
+ !isSkeleton && isPlaying && 'bg-brand-100 dark:bg-gray-800'
)}
>
{/* Track info */}
@@ -51,12 +54,33 @@ const Track = memo(
{isSkeleton ? (
PLACEHOLDER12345
) : (
-
- {track.name}
+
+ {track.name}
+ {subtitle && (
+
+ ({subtitle})
+
+ )}
)}
-
+
{isSkeleton ? (
PLACE
) : (
@@ -75,7 +99,10 @@ const Track = memo(
prefetchAlbum({ id: track.al.id })}
- className='hover:underline'
+ className={classNames(
+ 'hover:underline',
+ isPlaying && 'text-brand-500'
+ )}
>
{track.al.name}
@@ -107,7 +134,12 @@ const Track = memo(
{isSkeleton ? (
0:00
) : (
-
+
{formatDuration(track.dt, 'en', 'hh:mm:ss')}
)}
@@ -143,6 +175,12 @@ const TracksList = memo(
if (e.detail === 2) onTrackDoubleClick?.(trackID)
}
+ const playerSnapshot = useSnapshot(player)
+ const playingTrack = useMemo(
+ () => playerSnapshot.track,
+ [playerSnapshot.track]
+ )
+
return (
{/* Tracks table header */}
@@ -157,25 +195,26 @@ const TracksList = memo(
{/* Tracks */}
- {!isSkeleton &&
- tracks.map(track => (
-
- ))}
- {isSkeleton &&
- skeletonTracks.map((track, index) => (
-
)
diff --git a/packages/renderer/src/interface.d.ts b/packages/renderer/src/interface.d.ts
index 90f9944..1afc752 100644
--- a/packages/renderer/src/interface.d.ts
+++ b/packages/renderer/src/interface.d.ts
@@ -111,6 +111,7 @@ declare interface Track {
tagPicList: null
v: number
version: number
+ tns: (string | null)[]
}
declare interface Artist {
alias: unknown[]