TlTrack borked
This commit is contained in:
@ -178,8 +178,7 @@ export default class Track extends React.Component{
|
|||||||
)
|
)
|
||||||
track_columns.push(
|
track_columns.push(
|
||||||
<span className="col duration" key="duration">
|
<span className="col duration" key="duration">
|
||||||
{track.duration_ms ? <Dater type="length" data={track.duration_ms} /> : null}
|
{track.duration ? <Dater type="length" data={track.duration} /> : null}
|
||||||
{track.length ? <Dater type="length" data={track.length} /> : null}
|
|
||||||
</span>
|
</span>
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -166,24 +166,68 @@ export let getTrackIcon = function(current_track = false, core = false){
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a track's icon
|
* Format tracks into our universal format
|
||||||
* @param track object
|
*
|
||||||
* @return string
|
* @param tracks = array
|
||||||
|
* @return array
|
||||||
**/
|
**/
|
||||||
export let flattenTracks = function(tracks){
|
export let formatTracks = function(tracks){
|
||||||
var flattened = []
|
|
||||||
for(var i = 0; i < tracks.length; i++){
|
// Handle single recoreds
|
||||||
flattened.push(Object.assign(
|
var singular = false;
|
||||||
{},
|
if (tracks.constructor !== Array){
|
||||||
tracks[i].track,
|
tracks = [tracks];
|
||||||
{
|
singular = true;
|
||||||
added_by: tracks[i].added_by,
|
}
|
||||||
added_at: tracks[i].added_at
|
|
||||||
}
|
var formatted = [];
|
||||||
))
|
for (var i = 0; i < tracks.length; i++){
|
||||||
|
|
||||||
|
// Nested track object (eg in spotify playlist)
|
||||||
|
if (tracks[i].track){
|
||||||
|
var track = Object.assign({}, tracks[i].track);
|
||||||
|
|
||||||
|
// Copy supporting values
|
||||||
|
if (tracks[i].added_by){
|
||||||
|
track.added_by = tracks[i].added_by;
|
||||||
|
}
|
||||||
|
if (tracks[i].added_at){
|
||||||
|
track.added_at = tracks[i].added_at;
|
||||||
|
}
|
||||||
|
if (tracks[i].tlid){
|
||||||
|
track.tlid = tracks[i].tlid;
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
var track = Object.assign({}, tracks[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (track.duration_ms){
|
||||||
|
track.duration = track.duration_ms;
|
||||||
|
} else if (track.length){
|
||||||
|
track.duration = track.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (track.track_no){
|
||||||
|
track.track_number = track.track_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (track.disc_no){
|
||||||
|
track.disc_number = track.disc_no;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (track.release_date){
|
||||||
|
track.date = track.release_date;
|
||||||
|
}
|
||||||
|
|
||||||
|
formatted.push(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
return flattened
|
if (singular){
|
||||||
|
return formatted[0];
|
||||||
|
} else {
|
||||||
|
return formatted;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -15,9 +15,9 @@ export default function reducer(core = {}, action){
|
|||||||
if (!action.data ) return core
|
if (!action.data ) return core
|
||||||
|
|
||||||
var tracklist = []
|
var tracklist = []
|
||||||
for(var i = 0; i < action.data.length; i++){
|
for (var i = 0; i < action.data.length; i++){
|
||||||
|
|
||||||
var tltrack = action.data[i]
|
var tltrack = helpers.formatTracks(action.data[i]);
|
||||||
|
|
||||||
// load our metadata (if we have any for that tlid)
|
// load our metadata (if we have any for that tlid)
|
||||||
if (core.queue_metadata !== undefined && core.queue_metadata['tlid_'+tltrack.tlid] !== undefined){
|
if (core.queue_metadata !== undefined && core.queue_metadata['tlid_'+tltrack.tlid] !== undefined){
|
||||||
@ -34,9 +34,11 @@ export default function reducer(core = {}, action){
|
|||||||
tlid: tltrack.tlid,
|
tlid: tltrack.tlid,
|
||||||
playing: (core.current_track && tltrack.tlid == core.current_track.tlid )
|
playing: (core.current_track && tltrack.tlid == core.current_track.tlid )
|
||||||
})
|
})
|
||||||
tracklist.push(track )
|
tracklist.push(track)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tracklist = helpers.formatTracks(tracklist);
|
||||||
|
|
||||||
return Object.assign({}, core, { current_tracklist: tracklist });
|
return Object.assign({}, core, { current_tracklist: tracklist });
|
||||||
|
|
||||||
case 'MOPIDY_CURRENTTLTRACK':
|
case 'MOPIDY_CURRENTTLTRACK':
|
||||||
@ -70,18 +72,18 @@ export default function reducer(core = {}, action){
|
|||||||
|
|
||||||
var tracks = Object.assign({}, core.tracks)
|
var tracks = Object.assign({}, core.tracks)
|
||||||
if (tracks[action.key]){
|
if (tracks[action.key]){
|
||||||
var track = Object.assign({}, tracks[action.key], action.track)
|
var track = Object.assign(
|
||||||
|
{},
|
||||||
|
tracks[action.key],
|
||||||
|
helpers.formatTracks(action.track)
|
||||||
|
);
|
||||||
} else {
|
} else {
|
||||||
var track = Object.assign({}, action.track)
|
var track = Object.assign(
|
||||||
|
{},
|
||||||
|
helpers.formatTracks(action.track)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Standardise components
|
|
||||||
if (!track.track_number && track.track_no) track.track_number = track.track_no;
|
|
||||||
if (!track.disc_number && track.disc_no) track.disc_number = track.disc_no;
|
|
||||||
if (!track.duration && track.duration_ms) track.duration = track.duration_ms;
|
|
||||||
if (!track.duration && track.length) track.duration = track.length;
|
|
||||||
if (!track.date && track.release_date) track.date = track.release_date;
|
|
||||||
|
|
||||||
tracks[action.key] = track
|
tracks[action.key] = track
|
||||||
return Object.assign({}, core, { tracks: tracks });
|
return Object.assign({}, core, { tracks: tracks });
|
||||||
|
|
||||||
@ -90,10 +92,14 @@ export default function reducer(core = {}, action){
|
|||||||
|
|
||||||
for (var i = 0; i < action.tracks.length; i++){
|
for (var i = 0; i < action.tracks.length; i++){
|
||||||
var track = action.tracks[i]
|
var track = action.tracks[i]
|
||||||
if (typeof(tracks[track.uri]) !== 'undefined'){
|
if (tracks[track.uri] !== undefined){
|
||||||
track = Object.assign({}, tracks[track.uri], track)
|
track = Object.assign(
|
||||||
|
{},
|
||||||
|
tracks[track.uri],
|
||||||
|
track
|
||||||
|
);
|
||||||
}
|
}
|
||||||
tracks[track.uri] = track
|
tracks[track.uri] = helpers.formatTracks(track);
|
||||||
}
|
}
|
||||||
|
|
||||||
return Object.assign({}, core, { tracks: tracks });
|
return Object.assign({}, core, { tracks: tracks });
|
||||||
@ -191,7 +197,9 @@ export default function reducer(core = {}, action){
|
|||||||
var album = Object.assign({}, action.album)
|
var album = Object.assign({}, action.album)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
album.tracks = helpers.formatTracks(album.tracks);
|
||||||
albums[action.key] = album
|
albums[action.key] = album
|
||||||
|
|
||||||
return Object.assign({}, core, { albums: albums });
|
return Object.assign({}, core, { albums: albums });
|
||||||
|
|
||||||
case 'ALBUMS_LOADED':
|
case 'ALBUMS_LOADED':
|
||||||
@ -202,6 +210,8 @@ export default function reducer(core = {}, action){
|
|||||||
if (albums[album.uri]){
|
if (albums[album.uri]){
|
||||||
album = Object.assign({}, albums[album.uri], album)
|
album = Object.assign({}, albums[album.uri], album)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
album.tracks = helpers.formatTracks(album.tracks);
|
||||||
albums[album.uri] = album
|
albums[album.uri] = album
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -344,7 +354,7 @@ export default function reducer(core = {}, action){
|
|||||||
existing_playlist,
|
existing_playlist,
|
||||||
action.playlist,
|
action.playlist,
|
||||||
{
|
{
|
||||||
tracks: tracks
|
tracks: helpers.formatTracks(tracks)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
@ -393,7 +403,7 @@ export default function reducer(core = {}, action){
|
|||||||
existing_playlist,
|
existing_playlist,
|
||||||
loaded_playlist,
|
loaded_playlist,
|
||||||
{
|
{
|
||||||
tracks: tracks
|
tracks: helpers.formatTracks(tracks)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -412,7 +422,7 @@ export default function reducer(core = {}, action){
|
|||||||
{},
|
{},
|
||||||
playlists[action.key],
|
playlists[action.key],
|
||||||
{
|
{
|
||||||
tracks: [...playlists[action.key].tracks, ...helpers.flattenTracks(action.data.items)],
|
tracks: [...playlists[action.key].tracks, ...helpers.formatTracks(action.data.items)],
|
||||||
tracks_more: action.data.next,
|
tracks_more: action.data.next,
|
||||||
tracks_total: action.data.total
|
tracks_total: action.data.total
|
||||||
}
|
}
|
||||||
@ -437,7 +447,7 @@ export default function reducer(core = {}, action){
|
|||||||
|
|
||||||
case 'PLAYLIST_TRACKS':
|
case 'PLAYLIST_TRACKS':
|
||||||
var playlists = Object.assign([], core.playlists)
|
var playlists = Object.assign([], core.playlists)
|
||||||
var playlist = Object.assign({}, playlists[action.key], { tracks: action.tracks })
|
var playlist = Object.assign({}, playlists[action.key], { tracks: helpers.formatTracks(action.tracks) })
|
||||||
|
|
||||||
playlists[action.key] = playlist
|
playlists[action.key] = playlist
|
||||||
return Object.assign({}, core, { playlists: playlists });
|
return Object.assign({}, core, { playlists: playlists });
|
||||||
@ -552,7 +562,7 @@ export default function reducer(core = {}, action){
|
|||||||
} else {
|
} else {
|
||||||
var tracks = []
|
var tracks = []
|
||||||
}
|
}
|
||||||
if (action.tracks) tracks = [...tracks, ...action.tracks]
|
if (action.tracks) tracks = [...tracks, ...helpers.formatTracks(action.tracks)]
|
||||||
|
|
||||||
// more tracks
|
// more tracks
|
||||||
if (typeof(action.tracks_more) !== 'undefined') var tracks_more = action.tracks_more
|
if (typeof(action.tracks_more) !== 'undefined') var tracks_more = action.tracks_more
|
||||||
|
|||||||
@ -302,6 +302,7 @@ export function getTrack(uri){
|
|||||||
images: response.album.images
|
images: response.album.images
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
dispatch({
|
dispatch({
|
||||||
type: 'TRACK_LOADED',
|
type: 'TRACK_LOADED',
|
||||||
key: uri,
|
key: uri,
|
||||||
@ -395,7 +396,7 @@ export function getFeaturedPlaylists(){
|
|||||||
},
|
},
|
||||||
error => {
|
error => {
|
||||||
dispatch(coreActions.handleException(
|
dispatch(coreActions.handleException(
|
||||||
'Could not load featured tracks',
|
'Could not load featured playlists',
|
||||||
error
|
error
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
@ -1470,7 +1471,7 @@ export function getPlaylist(uri){
|
|||||||
response,
|
response,
|
||||||
{
|
{
|
||||||
can_edit: (getState().spotify.me && response.owner.id == getState().spotify.me.id),
|
can_edit: (getState().spotify.me && response.owner.id == getState().spotify.me.id),
|
||||||
tracks: helpers.flattenTracks(response.tracks.items),
|
tracks: response.tracks.items,
|
||||||
tracks_more: response.tracks.next,
|
tracks_more: response.tracks.next,
|
||||||
tracks_total: response.tracks.total,
|
tracks_total: response.tracks.total,
|
||||||
description: description
|
description: description
|
||||||
|
|||||||
@ -100,7 +100,16 @@ class Track extends React.Component{
|
|||||||
|
|
||||||
renderLyricsSelector(){
|
renderLyricsSelector(){
|
||||||
if (!this.props.track.lyrics_results){
|
if (!this.props.track.lyrics_results){
|
||||||
return null;
|
return (
|
||||||
|
<div className="field lyrics-selector">
|
||||||
|
<div className="input">
|
||||||
|
<input type="text" disabled="disabled" value="Loading..." />
|
||||||
|
<div className="description">
|
||||||
|
Switch to another lyrics seach result
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
@ -139,15 +148,7 @@ class Track extends React.Component{
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
} else if (!this.props.track.lyrics){
|
} else if (this.props.track.lyrics){
|
||||||
return (
|
|
||||||
<div className="lyrics">
|
|
||||||
<div className="content">
|
|
||||||
<em className="grey-text">No lyrics available</em>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
return (
|
return (
|
||||||
<div className="lyrics">
|
<div className="lyrics">
|
||||||
<div className="content" dangerouslySetInnerHTML={{__html: this.props.track.lyrics}}></div>
|
<div className="content" dangerouslySetInnerHTML={{__html: this.props.track.lyrics}}></div>
|
||||||
@ -156,6 +157,8 @@ class Track extends React.Component{
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -26,6 +26,10 @@ select {
|
|||||||
&:active {
|
&:active {
|
||||||
background: rgba(255,255,255,0.2);
|
background: rgba(255,255,255,0.2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&:disabled {
|
||||||
|
opacity: 0.5;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
select {
|
select {
|
||||||
|
|||||||
Reference in New Issue
Block a user