deemix-webui/src/data/search.js

114 lines
3.8 KiB
JavaScript

import { getPropertyWithFallback } from '@/utils/utils'
/**
* @typedef {object} FormattedSearchResult
* @property {FormattedData} data
* @property {boolean} hasLoaded
*/
/**
* @typedef {object} FormattedData
*/
/**
* @typedef {function} Formatter
* @returns {FormattedData} formattedData
*/
/**
* @param {FormattedData} track
*/
export function formatSingleTrack(track) {
let isTrackExplicit = getPropertyWithFallback(track, 'explicit_lyrics', 'EXPLICIT_LYRICS')
if (typeof isTrackExplicit === 'string') {
isTrackExplicit = isTrackExplicit !== '0'
}
return {
/* Track */
trackTitle: getPropertyWithFallback(track, 'title', 'SNG_TITLE'),
trackTitleVersion: getPropertyWithFallback(track, 'title_version', 'VERSION'),
trackPreview: getPropertyWithFallback(track, 'preview', 'MEDIA.0.HREF'),
trackDuration: getPropertyWithFallback(track, 'duration', 'DURATION'),
trackLink: getPropertyWithFallback(track, 'link') || `https://www.deezer.com/track/${track.SNG_ID}`,
isTrackExplicit,
/* Artist */
artistID: getPropertyWithFallback(track, 'artist.id', 'ART_ID'),
artistName: getPropertyWithFallback(track, 'artist.name', 'ART_NAME'),
/* Album */
albumID: getPropertyWithFallback(track, 'album.id', 'ALB_ID'),
albumTitle: getPropertyWithFallback(track, 'album.title', 'ALB_TITLE'),
albumPicture:
getPropertyWithFallback(track, 'album.cover_small') ||
`https://e-cdns-images.dzcdn.net/images/cover/${track.ALB_PICTURE}/56x56-000000-80-0-0.jpg`
}
}
export function formatAlbums(album) {
let isAlbumExplicit = getPropertyWithFallback(
album,
'explicit_lyrics',
'EXPLICIT_ALBUM_CONTENT.EXPLICIT_LYRICS_STATUS'
)
if ('number' === typeof isAlbumExplicit) {
isAlbumExplicit = isAlbumExplicit === 1
}
return {
/* Album */
albumID: getPropertyWithFallback(album, 'id', 'ALB_ID'),
albumTitle: getPropertyWithFallback(album, 'title', 'ALB_TITLE'),
albumCoverMedium:
getPropertyWithFallback(album, 'cover_medium') ||
`https://e-cdns-images.dzcdn.net/images/cover/${album.ALB_PICTURE}/156x156-000000-80-0-0.jpg`,
albumLink: getPropertyWithFallback(album, 'link') || `https://deezer.com/album/${album.ALB_ID}`,
albumTracks: getPropertyWithFallback(album, 'nb_tracks', 'NUMBER_TRACK'),
isAlbumExplicit,
/* Artist */
artistName: getPropertyWithFallback(album, 'artist.name', 'ART_NAME')
}
}
export function formatArtist(artist) {
return {
/* Artist */
artistID: getPropertyWithFallback(artist, 'id', 'ART_ID'),
artistName: getPropertyWithFallback(artist, 'name', 'ART_NAME'),
artistPictureMedium:
getPropertyWithFallback(artist, 'picture_medium') ||
`https://e-cdns-images.dzcdn.net/images/artist/${artist.ART_PICTURE}/156x156-000000-80-0-0.jpg`,
artistLink: getPropertyWithFallback(artist, 'link') || `https://deezer.com/artist/${artist.ART_ID}`,
// TODO Fix
artistAlbumsNumber: getPropertyWithFallback(artist, 'nb_album', 'NB_FAN')
}
}
export function formatPlaylist(playlist) {
return {
/* Playlist */
playlistID: getPropertyWithFallback(playlist, 'id', 'PLAYLIST_ID'),
playlistTitle: getPropertyWithFallback(playlist, 'title', 'TITLE'),
playlistPictureMedium:
getPropertyWithFallback(playlist, 'picture_medium') ||
`https://e-cdns-images.dzcdn.net/images/${playlist.PICTURE_TYPE}/${
playlist.PLAYLIST_PICTURE
}/156x156-000000-80-0-0.jpg`,
playlistLink: getPropertyWithFallback(playlist, 'link') || `https://deezer.com/playlist/${playlist.PLAYLIST_ID}`,
playlistTracksNumber: getPropertyWithFallback(playlist, 'nb_tracks', 'NB_SONG'),
/* Artist */
artistName: getPropertyWithFallback(playlist, 'user.name')
}
}
export function formatTitle(track) {
const hasTitleVersion = track.trackTitleVersion && track.trackTitle.indexOf(track.trackTitleVersion) === -1
return `${track.trackTitle}${hasTitleVersion ? ` ${track.trackTitleVersion}` : ''}`
}