fix(ui): split album and track artists (OpenSubsonic) (#696)

* fix(ui): split OpenSubsonic album and track artists in header and player

Album detail header uses albumArtists from album or child songs; player bar,
mobile player, and mini player use structured track artists with per-id links.
Adds deriveAlbumHeaderArtistRefs helper and OpenArtistRefInline.

Fixes #552

* docs: changelog and credits for OpenSubsonic artist links (PR #696)
This commit is contained in:
cucadmuh
2026-05-14 21:56:39 +03:00
committed by GitHub
parent ecdbe0cf2a
commit 3cc172723d
20 changed files with 315 additions and 29 deletions
+15 -2
View File
@@ -1,4 +1,6 @@
import { emit } from '@tauri-apps/api/event';
import CachedImage from '../CachedImage';
import { OpenArtistRefInline } from '../OpenArtistRefInline';
import type { MiniTrackInfo } from '../../utils/miniPlayerBridge';
interface Props {
@@ -26,9 +28,20 @@ export function MiniMeta({ track, miniCoverSrc, miniCoverKey }: Props) {
<div className="mini-player__title" title={track?.title}>
{track?.title ?? '—'}
</div>
{track?.artist && (
{track?.artists && track.artists.length > 0 ? (
<div className="mini-player__artist" title={track.artists.map(a => a.name).filter(Boolean).join(' · ')}>
<OpenArtistRefInline
refs={track.artists}
fallbackName={track.artist}
onGoArtist={id => { void emit('mini:navigate', { to: `/artist/${id}` }); }}
as="none"
linkTag="span"
linkClassName="mini-player__artist-link"
/>
</div>
) : track?.artist ? (
<div className="mini-player__artist" title={track.artist}>{track.artist}</div>
)}
) : null}
{track?.album && (
<div className="mini-player__album" title={track.album}>{track.album}</div>
)}