mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-08 13:00:13 +02:00
support original date display and sort (#1488)
This commit is contained in:
@@ -238,7 +238,7 @@ const normalizeSong = (
|
||||
peak: null,
|
||||
playCount: (item.UserData && item.UserData.PlayCount) || 0,
|
||||
playlistItemId: item.PlaylistItemId,
|
||||
releaseDate: item.PremiereDate ? item.PremiereDate : null,
|
||||
releaseDate: item.PremiereDate || null,
|
||||
releaseYear: item.ProductionYear || null,
|
||||
sampleRate,
|
||||
size,
|
||||
@@ -302,7 +302,8 @@ const normalizeAlbum = (
|
||||
lastPlayedAt: null,
|
||||
mbzId: item.ProviderIds?.MusicBrainzAlbum || null,
|
||||
name: item.Name,
|
||||
originalDate: null,
|
||||
originalDate: item.PremiereDate || null,
|
||||
originalYear: item.ProductionYear || null,
|
||||
participants: getPeople(item),
|
||||
playCount: item.UserData?.PlayCount || 0,
|
||||
recordLabels: item.Studios?.map((entry) => entry.Name) || [],
|
||||
|
||||
@@ -49,6 +49,26 @@ const normalizeReleaseDate = (item: { date?: string; releaseDate?: string }) =>
|
||||
return null;
|
||||
};
|
||||
|
||||
const normalizeOriginalDate = (item: {
|
||||
date?: string;
|
||||
originalDate?: string;
|
||||
releaseDate?: string;
|
||||
}) => {
|
||||
if (item.originalDate && matchesFullDate(item.originalDate)) {
|
||||
return item.originalDate;
|
||||
}
|
||||
|
||||
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<typeof ndType._response.album>
|
||||
@@ -282,6 +302,11 @@ const normalizeAlbum = (
|
||||
pathReplace?: string,
|
||||
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),
|
||||
...getArtists(item, false),
|
||||
@@ -316,11 +341,12 @@ const normalizeAlbum = (
|
||||
lastPlayedAt: normalizePlayDate(item),
|
||||
mbzId: item.mbzAlbumId || null,
|
||||
name: item.name,
|
||||
originalDate: item.originalDate || null,
|
||||
originalDate,
|
||||
originalYear,
|
||||
playCount: item.playCount || 0,
|
||||
releaseDate: normalizeReleaseDate(item),
|
||||
releaseDate,
|
||||
releaseType: item.mbzAlbumType || null,
|
||||
releaseYear: item.maxYear || null,
|
||||
releaseYear,
|
||||
size: item.size,
|
||||
songCount: item.songCount,
|
||||
songs: item.songs
|
||||
|
||||
@@ -458,17 +458,18 @@ const album = z.object({
|
||||
libraryId: z.number(),
|
||||
libraryName: z.string(),
|
||||
libraryPath: z.string(),
|
||||
maxOriginalYear: z.number().optional(),
|
||||
maxYear: z.number(),
|
||||
mbzAlbumArtistId: z.string().optional(),
|
||||
mbzAlbumId: z.string().optional(),
|
||||
mbzAlbumType: z.string().optional(),
|
||||
mbzReleaseGroupId: z.string().optional(),
|
||||
minOriginalYear: z.number().optional(),
|
||||
minYear: z.number(),
|
||||
name: z.string(),
|
||||
orderAlbumArtistName: z.string(),
|
||||
orderAlbumName: z.string(),
|
||||
originalDate: z.string().optional(),
|
||||
originalYear: z.number().optional(),
|
||||
participants: z.optional(participants),
|
||||
playCount: z.number().optional(),
|
||||
playDate: z.string().optional(),
|
||||
|
||||
@@ -265,6 +265,14 @@ const normalizeAlbum = (
|
||||
pathReplace?: string,
|
||||
pathReplaceWith?: string,
|
||||
): Album => {
|
||||
const releaseDate =
|
||||
item.releaseDate &&
|
||||
typeof item.releaseDate.year === 'number' &&
|
||||
typeof item.releaseDate.month === 'number' &&
|
||||
typeof item.releaseDate.day === 'number'
|
||||
? `${item.releaseDate.year}-${item.releaseDate.month}-${item.releaseDate.day}`
|
||||
: null;
|
||||
|
||||
return {
|
||||
_itemType: LibraryItem.ALBUM,
|
||||
_serverId: server?.id || 'unknown',
|
||||
@@ -289,17 +297,12 @@ const normalizeAlbum = (
|
||||
lastPlayedAt: null,
|
||||
mbzId: null,
|
||||
name: item.name,
|
||||
originalDate: null,
|
||||
originalDate: releaseDate,
|
||||
originalYear: item.year || null,
|
||||
participants: getParticipants(item),
|
||||
playCount: null,
|
||||
recordLabels: item.recordLabels?.map((item) => item.name) || [],
|
||||
releaseDate:
|
||||
item.releaseDate &&
|
||||
typeof item.releaseDate.year === 'number' &&
|
||||
typeof item.releaseDate.month === 'number' &&
|
||||
typeof item.releaseDate.day === 'number'
|
||||
? `${item.releaseDate.year}-${item.releaseDate.month}-${item.releaseDate.day}`
|
||||
: null,
|
||||
releaseDate,
|
||||
releaseType: getReleaseType(item),
|
||||
releaseTypes: item.releaseTypes || [],
|
||||
releaseYear: item.year || null,
|
||||
|
||||
@@ -139,7 +139,7 @@ export const getClientType = (): string => {
|
||||
}
|
||||
};
|
||||
|
||||
export const SEPARATOR_STRING = ' · ';
|
||||
export const SEPARATOR_STRING = ' • ';
|
||||
|
||||
export const sortSongList = (songs: Song[], sortBy: SongListSort, sortOrder: SortOrder) => {
|
||||
let results: Song[] = songs;
|
||||
@@ -419,13 +419,13 @@ export const sortAlbumList = (albums: Album[], sortBy: AlbumListSort, sortOrder:
|
||||
results,
|
||||
[
|
||||
(v) => {
|
||||
if (v.releaseDate) {
|
||||
return new Date(v.releaseDate).getTime();
|
||||
if (v.originalDate) {
|
||||
return new Date(v.originalDate).getTime();
|
||||
}
|
||||
|
||||
// Fallback to the first day of the release year
|
||||
if (v.releaseYear) {
|
||||
return new Date(v.releaseYear, 0, 1).getTime();
|
||||
if (v.originalYear) {
|
||||
return new Date(v.originalYear, 0, 1).getTime();
|
||||
}
|
||||
return 0;
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user