Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/FoxxMD/multi-scrobbler. Scrobble plays from multiple sources to multiple clients docs.multi-scrobbler.app
deezer docker jellyfin koito lastfm listenbrainz maloja mopidy mpris music music-assistant plex scrobble self-hosted spotify subsonic tautulli youtube-music
Something went wrong. Try again.
1.8 kB · 58 lines
TypeScript
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859import type {AmbPlayObject, DateLike, PlayObject, PlayObjectMinimal, PlayPlatformId} from "./Atomic.ts";import dayjs from "dayjs";
export const sortByNewestDate = (aPlayDate: DateLike, bPlayDate: DateLike) => { if (aPlayDate === undefined && bPlayDate === undefined) { return 0; } if (aPlayDate === undefined) { return 1; } if (bPlayDate === undefined) { return -1; } const realA = typeof aPlayDate === 'string' ? dayjs(aPlayDate) : aPlayDate; const realB = typeof bPlayDate === 'string' ? dayjs(bPlayDate) : bPlayDate; return realA.isBefore(realB) ? 1 : -1;};
/** sorts playObj formatted objects by playDate in descending (newest first) order */export const sortByNewestPlayDateAccessor = (accessor: (play: AmbPlayObject<DateLike>) => DateLike) => (a: AmbPlayObject<DateLike>, b: AmbPlayObject<DateLike>) => { const aPlayDate = accessor(a); const bPlayDate = accessor(b); return sortByNewestDate(aPlayDate, bPlayDate);};
/** sorts playObj formatted objects by playDate in descending (newest first) order */export const sortByNewestPlayDate = sortByNewestPlayDateAccessor((play) => play.data?.playDate);
/** sorts playObj formatted objects by playDate in descending (newest first) order */export const sortByNewestSeenDate = sortByNewestPlayDateAccessor((play) => play.meta?.seenAt);
export const genGroupIdStr = (id: PlayPlatformId) => { return `${id[0]}-${id[1]}`;};
export const statefulInvariantTransform = (play: PlayObject, withIds?: boolean): PlayObjectMinimal => { const { meta, data, id, uid } = play; if(withIds) { return { data, meta, uid, id } } return { data, meta };};