diff --git a/src/shared/api/navidrome/navidrome-normalize.ts b/src/shared/api/navidrome/navidrome-normalize.ts index d67f9f51e..8e9f8c5f6 100644 --- a/src/shared/api/navidrome/navidrome-normalize.ts +++ b/src/shared/api/navidrome/navidrome-normalize.ts @@ -32,6 +32,22 @@ const normalizePlayDate = (item: WithDate): null | string => { return !item.playDate || item.playDate.includes('0001-') ? null : item.playDate; }; +const matchesFullDate = (date: string) => { + return Boolean(date.match(/^\d{4}-\d{2}-\d{2}$/)); +}; + +const normalizeReleaseDate = (item: { date?: string; releaseDate?: string }) => { + if (item.releaseDate && matchesFullDate(item.releaseDate)) { + return item.releaseDate; + } + + if (item.date && matchesFullDate(item.date)) { + return item.date; + } + + return null; +}; + const getArtists = ( item: | z.infer @@ -192,7 +208,7 @@ const normalizeSong = ( : null, playCount: item.playCount || 0, playlistItemId, - releaseDate: item.releaseDate ? new Date(item.releaseDate).toISOString() : null, + releaseDate: normalizeReleaseDate(item), releaseYear: item.year || null, sampleRate: item.sampleRate || null, size: item.size, @@ -285,9 +301,9 @@ const normalizeAlbum = ( lastPlayedAt: normalizePlayDate(item), mbzId: item.mbzAlbumId || null, name: item.name, - originalDate: item.originalDate ? new Date(item.originalDate).toISOString() : null, + originalDate: item.originalDate || null, playCount: item.playCount || 0, - releaseDate: item.releaseDate ? new Date(item.releaseDate).toISOString() : null, + releaseDate: normalizeReleaseDate(item), releaseYear: item.maxYear || null, size: item.size, songCount: item.songCount,