feat: show record label copyright at bottom of track listing (#1421)

* show record label copyright at bottom of track listing

* add recordLabels support for Jellyfin

---------

Co-authored-by: jeffvli <jeffvictorli@gmail.com>
This commit is contained in:
Benjamin
2025-12-22 21:08:35 -06:00
committed by GitHub
parent c34b6774b9
commit 7a77b9bfe7
4 changed files with 20 additions and 3 deletions
@@ -360,7 +360,7 @@ export const JellyfinController: InternalControllerEndpoint = {
},
query: {
...artistQuery,
Fields: 'People, Tags',
Fields: 'People, Tags, Studios',
GenreIds: query.genreIds ? query.genreIds.join(',') : undefined,
IncludeItemTypes: 'MusicAlbum',
IsFavorite: query.favorite,
@@ -362,6 +362,9 @@ export const AlbumDetailContent = () => {
const comment = detailQuery?.data?.comment;
const releaseYear = detailQuery?.data?.releaseYear;
const labels = detailQuery?.data?.recordLabels;
const mbzId = detailQuery?.data?.mbzId;
return (
@@ -396,7 +399,15 @@ export const AlbumDetailContent = () => {
</Stack>
</div>
</div>
{labels && (
<Stack gap="xs">
{labels.map((label) => (
<Text isMuted key={`label-${label}`} size="sm">
{releaseYear ? ` ${releaseYear}` : ''} {label}
</Text>
))}
</Stack>
)}
<Stack gap="lg" mt="3rem">
{cq.height || cq.width ? (
<Suspense fallback={<Spinner container />}>
@@ -323,7 +323,7 @@ const normalizeAlbum = (
originalDate: null,
participants: getPeople(item),
playCount: item.UserData?.PlayCount || 0,
recordLabels: [],
recordLabels: item.Studios?.map((entry) => entry.Name) || [],
releaseDate: item.PremiereDate || null,
releaseTypes: [],
releaseYear: item.ProductionYear || null,
@@ -525,6 +525,11 @@ const albumArtist = z.object({
UserData: userData.optional(),
});
const studio = z.object({
Id: z.string(),
Name: z.string(),
});
const albumDetailParameters = baseParameters;
const album = z.object({
@@ -555,6 +560,7 @@ const album = z.object({
RunTimeTicks: z.number(),
ServerId: z.string(),
Songs: z.array(song).optional(), // This is not a native Jellyfin property -- this is used for combined album detail
Studios: z.array(studio),
Tags: z.string().array().optional(),
Type: z.string(),
UserData: userData.optional(),