mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-07 04:20:12 +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 =
|
||||
album?.originalDate && album?.originalDate !== album?.releaseDate;
|
||||
|
||||
const originalYearDifferentFromRelease = album?.originalYear !== album?.releaseYear;
|
||||
|
||||
const playCount = album?.playCount;
|
||||
|
||||
const releasePrefix = originalDifferentFromRelease
|
||||
? t('page.albumDetail.released', { postProcess: 'sentenceCase' })
|
||||
: '♫';
|
||||
|
||||
if (originalDifferentFromRelease && album.originalDate) {
|
||||
items.push({
|
||||
id: 'originalDate',
|
||||
value: `♫ ${formatDateAbsoluteUTC(album.originalDate)}`,
|
||||
});
|
||||
const releaseYearPrefix = originalYearDifferentFromRelease
|
||||
? t('page.albumDetail.released', { postProcess: 'sentenceCase' })
|
||||
: '♫';
|
||||
|
||||
if (album.originalDate) {
|
||||
if (originalDifferentFromRelease) {
|
||||
items.push({
|
||||
id: '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(
|
||||
...[
|
||||
{
|
||||
id: 'releaseDate',
|
||||
value: releaseDate
|
||||
? `${releasePrefix} ${formatDateAbsoluteUTC(releaseDate)}`
|
||||
: releaseYear,
|
||||
},
|
||||
{
|
||||
id: 'songCount',
|
||||
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}$/));
|
||||
};
|
||||
|
||||
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)) {
|
||||
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)) {
|
||||
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: {
|
||||
date?: string;
|
||||
originalDate?: string;
|
||||
releaseDate?: string;
|
||||
}) => {
|
||||
}): { date: null | string; year: null | number } => {
|
||||
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)) {
|
||||
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)) {
|
||||
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 = (
|
||||
@@ -240,7 +293,7 @@ const normalizeSong = (
|
||||
: null,
|
||||
playCount: item.playCount || 0,
|
||||
playlistItemId,
|
||||
releaseDate: normalizeReleaseDate(item),
|
||||
releaseDate: normalizeReleaseDate(item).date,
|
||||
releaseYear: item.year || null,
|
||||
sampleRate: item.sampleRate || null,
|
||||
size: item.size,
|
||||
@@ -303,9 +356,7 @@ const normalizeAlbum = (
|
||||
pathReplaceWith?: string,
|
||||
): Album => {
|
||||
const releaseDate = normalizeReleaseDate(item);
|
||||
const releaseYear = releaseDate ? parseInt(releaseDate.split('-')[0]) : null;
|
||||
const originalDate = normalizeOriginalDate(item);
|
||||
const originalYear = originalDate ? parseInt(originalDate.split('-')[0]) : null;
|
||||
|
||||
return {
|
||||
...parseAlbumTags(item),
|
||||
@@ -341,12 +392,12 @@ const normalizeAlbum = (
|
||||
lastPlayedAt: normalizePlayDate(item),
|
||||
mbzId: item.mbzAlbumId || null,
|
||||
name: item.name,
|
||||
originalDate,
|
||||
originalYear,
|
||||
originalDate: originalDate.date,
|
||||
originalYear: originalDate.year,
|
||||
playCount: item.playCount || 0,
|
||||
releaseDate,
|
||||
releaseDate: releaseDate.date,
|
||||
releaseType: item.mbzAlbumType || null,
|
||||
releaseYear,
|
||||
releaseYear: releaseDate.year,
|
||||
size: item.size,
|
||||
songCount: item.songCount,
|
||||
songs: item.songs
|
||||
|
||||
Reference in New Issue
Block a user