114 lines
3.8 KiB
JavaScript
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}` : ''}`
|
|
}
|