mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-10 04:30:25 +02:00
add fallback to year for navidrome release display (#1498)
This commit is contained in:
@@ -100,27 +100,55 @@ export const AlbumDetailHeader = forwardRef<HTMLDivElement>((_props, ref) => {
|
|||||||
const originalDifferentFromRelease =
|
const originalDifferentFromRelease =
|
||||||
album?.originalDate && album?.originalDate !== album?.releaseDate;
|
album?.originalDate && album?.originalDate !== album?.releaseDate;
|
||||||
|
|
||||||
|
const originalYearDifferentFromRelease = album?.originalYear !== album?.releaseYear;
|
||||||
|
|
||||||
const playCount = album?.playCount;
|
const playCount = album?.playCount;
|
||||||
|
|
||||||
const releasePrefix = originalDifferentFromRelease
|
const releasePrefix = originalDifferentFromRelease
|
||||||
? t('page.albumDetail.released', { postProcess: 'sentenceCase' })
|
? t('page.albumDetail.released', { postProcess: 'sentenceCase' })
|
||||||
: '♫';
|
: '♫';
|
||||||
|
|
||||||
if (originalDifferentFromRelease && album.originalDate) {
|
const releaseYearPrefix = originalYearDifferentFromRelease
|
||||||
|
? t('page.albumDetail.released', { postProcess: 'sentenceCase' })
|
||||||
|
: '♫';
|
||||||
|
|
||||||
|
if (album.originalDate) {
|
||||||
|
if (originalDifferentFromRelease) {
|
||||||
items.push({
|
items.push({
|
||||||
id: 'originalDate',
|
id: 'originalDate',
|
||||||
value: `♫ ${formatDateAbsoluteUTC(album.originalDate)}`,
|
value: `♫ ${formatDateAbsoluteUTC(album.originalDate)}`,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (releaseDate) {
|
||||||
|
items.push({
|
||||||
|
id: 'releaseDate',
|
||||||
|
value: `${releasePrefix} ${formatDateAbsoluteUTC(releaseDate)}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else if (album.originalYear) {
|
||||||
|
if (originalYearDifferentFromRelease) {
|
||||||
|
items.push({
|
||||||
|
id: 'originalYear',
|
||||||
|
value: `♫ ${album.originalYear}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (releaseDate) {
|
||||||
|
items.push({
|
||||||
|
id: 'releaseDate',
|
||||||
|
value: `${releaseYearPrefix} ${formatDateAbsoluteUTC(releaseDate)}`,
|
||||||
|
});
|
||||||
|
} else if (releaseYear) {
|
||||||
|
items.push({
|
||||||
|
id: 'releaseYear',
|
||||||
|
value: `${releaseYearPrefix} ${releaseYear}`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
items.push(
|
items.push(
|
||||||
...[
|
...[
|
||||||
{
|
|
||||||
id: 'releaseDate',
|
|
||||||
value: releaseDate
|
|
||||||
? `${releasePrefix} ${formatDateAbsoluteUTC(releaseDate)}`
|
|
||||||
: releaseYear,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
id: 'songCount',
|
id: 'songCount',
|
||||||
value: t('entity.trackWithCount', { count: detailQuery?.data?.songCount || 0 }),
|
value: t('entity.trackWithCount', { count: detailQuery?.data?.songCount || 0 }),
|
||||||
|
|||||||
@@ -37,36 +37,89 @@ const matchesFullDate = (date: string) => {
|
|||||||
return Boolean(date.match(/^\d{4}-\d{2}-\d{2}$/));
|
return Boolean(date.match(/^\d{4}-\d{2}-\d{2}$/));
|
||||||
};
|
};
|
||||||
|
|
||||||
const normalizeReleaseDate = (item: { date?: string; releaseDate?: string }) => {
|
const matchesYearOnly = (date: string) => {
|
||||||
|
return Boolean(date.match(/^\d{4}$/));
|
||||||
|
};
|
||||||
|
|
||||||
|
const normalizeReleaseDate = (item: {
|
||||||
|
date?: string;
|
||||||
|
releaseDate?: string;
|
||||||
|
}): { date: null | string; year: null | number } => {
|
||||||
if (item.releaseDate && matchesFullDate(item.releaseDate)) {
|
if (item.releaseDate && matchesFullDate(item.releaseDate)) {
|
||||||
return item.releaseDate;
|
return {
|
||||||
|
date: item.releaseDate,
|
||||||
|
year: parseInt(item.releaseDate.split('-')[0]),
|
||||||
|
};
|
||||||
|
} else if (item.releaseDate && matchesYearOnly(item.releaseDate)) {
|
||||||
|
return {
|
||||||
|
date: null,
|
||||||
|
year: parseInt(item.releaseDate),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.date && matchesFullDate(item.date)) {
|
if (item.date && matchesFullDate(item.date)) {
|
||||||
return item.date;
|
return {
|
||||||
|
date: item.date,
|
||||||
|
year: parseInt(item.date.split('-')[0]),
|
||||||
|
};
|
||||||
|
} else if (item.date && matchesYearOnly(item.date)) {
|
||||||
|
return {
|
||||||
|
date: null,
|
||||||
|
year: parseInt(item.date),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return {
|
||||||
|
date: null,
|
||||||
|
year: null,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const normalizeOriginalDate = (item: {
|
const normalizeOriginalDate = (item: {
|
||||||
date?: string;
|
date?: string;
|
||||||
originalDate?: string;
|
originalDate?: string;
|
||||||
releaseDate?: string;
|
releaseDate?: string;
|
||||||
}) => {
|
}): { date: null | string; year: null | number } => {
|
||||||
if (item.originalDate && matchesFullDate(item.originalDate)) {
|
if (item.originalDate && matchesFullDate(item.originalDate)) {
|
||||||
return item.originalDate;
|
return {
|
||||||
|
date: item.originalDate,
|
||||||
|
year: parseInt(item.originalDate.split('-')[0]),
|
||||||
|
};
|
||||||
|
} else if (item.originalDate && matchesYearOnly(item.originalDate)) {
|
||||||
|
return {
|
||||||
|
date: null,
|
||||||
|
year: parseInt(item.originalDate),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.releaseDate && matchesFullDate(item.releaseDate)) {
|
if (item.releaseDate && matchesFullDate(item.releaseDate)) {
|
||||||
return item.releaseDate;
|
return {
|
||||||
|
date: item.releaseDate,
|
||||||
|
year: parseInt(item.releaseDate.split('-')[0]),
|
||||||
|
};
|
||||||
|
} else if (item.releaseDate && matchesYearOnly(item.releaseDate)) {
|
||||||
|
return {
|
||||||
|
date: null,
|
||||||
|
year: parseInt(item.releaseDate),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (item.date && matchesFullDate(item.date)) {
|
if (item.date && matchesFullDate(item.date)) {
|
||||||
return item.date;
|
return {
|
||||||
|
date: item.date,
|
||||||
|
year: parseInt(item.date.split('-')[0]),
|
||||||
|
};
|
||||||
|
} else if (item.date && matchesYearOnly(item.date)) {
|
||||||
|
return {
|
||||||
|
date: null,
|
||||||
|
year: parseInt(item.date),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return {
|
||||||
|
date: null,
|
||||||
|
year: null,
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getArtists = (
|
const getArtists = (
|
||||||
@@ -240,7 +293,7 @@ const normalizeSong = (
|
|||||||
: null,
|
: null,
|
||||||
playCount: item.playCount || 0,
|
playCount: item.playCount || 0,
|
||||||
playlistItemId,
|
playlistItemId,
|
||||||
releaseDate: normalizeReleaseDate(item),
|
releaseDate: normalizeReleaseDate(item).date,
|
||||||
releaseYear: item.year || null,
|
releaseYear: item.year || null,
|
||||||
sampleRate: item.sampleRate || null,
|
sampleRate: item.sampleRate || null,
|
||||||
size: item.size,
|
size: item.size,
|
||||||
@@ -303,9 +356,7 @@ const normalizeAlbum = (
|
|||||||
pathReplaceWith?: string,
|
pathReplaceWith?: string,
|
||||||
): Album => {
|
): Album => {
|
||||||
const releaseDate = normalizeReleaseDate(item);
|
const releaseDate = normalizeReleaseDate(item);
|
||||||
const releaseYear = releaseDate ? parseInt(releaseDate.split('-')[0]) : null;
|
|
||||||
const originalDate = normalizeOriginalDate(item);
|
const originalDate = normalizeOriginalDate(item);
|
||||||
const originalYear = originalDate ? parseInt(originalDate.split('-')[0]) : null;
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...parseAlbumTags(item),
|
...parseAlbumTags(item),
|
||||||
@@ -341,12 +392,12 @@ const normalizeAlbum = (
|
|||||||
lastPlayedAt: normalizePlayDate(item),
|
lastPlayedAt: normalizePlayDate(item),
|
||||||
mbzId: item.mbzAlbumId || null,
|
mbzId: item.mbzAlbumId || null,
|
||||||
name: item.name,
|
name: item.name,
|
||||||
originalDate,
|
originalDate: originalDate.date,
|
||||||
originalYear,
|
originalYear: originalDate.year,
|
||||||
playCount: item.playCount || 0,
|
playCount: item.playCount || 0,
|
||||||
releaseDate,
|
releaseDate: releaseDate.date,
|
||||||
releaseType: item.mbzAlbumType || null,
|
releaseType: item.mbzAlbumType || null,
|
||||||
releaseYear,
|
releaseYear: releaseDate.year,
|
||||||
size: item.size,
|
size: item.size,
|
||||||
songCount: item.songCount,
|
songCount: item.songCount,
|
||||||
songs: item.songs
|
songs: item.songs
|
||||||
|
|||||||
Reference in New Issue
Block a user