Upgrading Spotify's playlist URI format; Settings user objects and using formatUser + formatImages

This commit is contained in:
James Barnsley
2018-09-12 21:42:55 +12:00
parent a2531b10ef
commit 8ca97a7d50
14 changed files with 457 additions and 383 deletions

View File

@ -693,7 +693,8 @@ const CoreMiddleware = (function(){
var users_loaded = [];
for (var user of action.users){
user = helpers.formatUser(user);
if (users_index[user.uri]){
user = Object.assign({}, users_index[user.uri], user);
}

View File

@ -9,22 +9,32 @@ const GeniusMiddleware = (function(){
switch(action.type){
case 'GENIUS_ME_LOADED':
var me = helpers.formatUser(action.me);
Object.assign(
me,
{
uri: "genius:user:"+me.id
}
);
store.dispatch({
type: 'GENIUS_USER_LOADED',
user: action.me
});
action.me = me;
next(action);
break;
case 'GENIUS_USER_LOADED':
var user = Object.assign(
{},
action.user,
var user = helpers.formatUser(action.user);
Object.assign(
user,
{
uri: "genius:user:"+action.user.id
uri: "genius:user:"+user.id
}
);
store.dispatch(coreActions.userLoaded(user));
action.user = user;
next(action);
break;

View File

@ -8,14 +8,16 @@ const LastfmMiddleware = (function(){
switch(action.type){
case 'LASTFM_ME_LOADED':
var user = Object.assign(
{},
action.me,
var me = helpers.formatUser(action.me);
Object.assign(
me,
{
uri: "lastfm:user:"+action.me.name
uri: "lastfm:user:"+me.name
}
);
store.dispatch(coreActions.userLoaded(user));
store.dispatch(coreActions.userLoaded(me));
action.me = me;
next(action);
break;
default:

View File

@ -258,7 +258,7 @@ export function getMe(){
response => {
dispatch({
type: 'SPOTIFY_ME_LOADED',
data: response
me: response
});
},
error => {
@ -734,9 +734,9 @@ export function following(uri, method = 'GET'){
break
case 'playlist':
if (method == 'GET'){
endpoint = 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'/followers/contains?ids='+ getState().spotify.me.id
endpoint = 'playlists/'+ helpers.getFromUri('playlistid',uri) +'/followers/contains?ids='+ getState().spotify.me.id
} else {
endpoint = 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'/followers'
endpoint = 'playlists/'+ helpers.getFromUri('playlistid',uri) +'/followers'
}
break
}
@ -1471,7 +1471,7 @@ export function getPlaylist(uri){
return (dispatch, getState) => {
// get the main playlist object
sendRequest(dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'?market='+getState().spotify.country )
sendRequest(dispatch, getState, 'playlists/'+ helpers.getFromUri('playlistid',uri) +'?market='+getState().spotify.country )
.then(
response => {
@ -1607,7 +1607,7 @@ export function getPlaylistTracksAndPlay(uri, shuffle){
'Loading playlist tracks',
{
uri: uri,
next: 'users/'+ helpers.getFromUri('userid',uri) +'/playlists/'+ helpers.getFromUri('playlistid',uri) +'/tracks?market='+getState().spotify.country,
next: 'playlists/'+ helpers.getFromUri('playlistid',uri) +'/tracks?market='+getState().spotify.country,
shuffle: shuffle
}
))
@ -1687,7 +1687,7 @@ export function toggleFollowingPlaylist(uri, method){
if (method == 'DELETE' ) var new_state = 0
return (dispatch, getState) => {
sendRequest(dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) + '/playlists/'+ helpers.getFromUri('playlistid',uri) + '/followers', method )
sendRequest(dispatch, getState, 'playlists/'+ helpers.getFromUri('playlistid',uri) + '/followers', method )
.then(
response => {
dispatch({
@ -1708,7 +1708,7 @@ export function toggleFollowingPlaylist(uri, method){
export function addTracksToPlaylist(uri, tracks_uris){
return (dispatch, getState) => {
sendRequest(dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) + '/playlists/'+ helpers.getFromUri('playlistid',uri) + '/tracks', 'POST', { uris: tracks_uris } )
sendRequest(dispatch, getState, 'playlists/'+ helpers.getFromUri('playlistid',uri) + '/tracks', 'POST', { uris: tracks_uris } )
.then(
response => {
dispatch({
@ -1730,7 +1730,7 @@ export function addTracksToPlaylist(uri, tracks_uris){
export function deleteTracksFromPlaylist(uri, snapshot_id, tracks_indexes){
return (dispatch, getState) => {
sendRequest(dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) + '/playlists/'+ helpers.getFromUri('playlistid',uri) + '/tracks', 'DELETE', { snapshot_id: snapshot_id, positions: tracks_indexes } )
sendRequest(dispatch, getState, 'playlists/'+ helpers.getFromUri('playlistid',uri) + '/tracks', 'DELETE', { snapshot_id: snapshot_id, positions: tracks_indexes } )
.then(
response => {
dispatch({
@ -1752,7 +1752,7 @@ export function deleteTracksFromPlaylist(uri, snapshot_id, tracks_indexes){
export function reorderPlaylistTracks(uri, range_start, range_length, insert_before, snapshot_id){
return (dispatch, getState) => {
sendRequest(dispatch, getState, 'users/'+ helpers.getFromUri('userid',uri) + '/playlists/'+ helpers.getFromUri('playlistid',uri) + '/tracks', 'PUT', { uri: uri, range_start: range_start, range_length: range_length, insert_before: insert_before, snapshot_id: snapshot_id } )
sendRequest(dispatch, getState, 'playlists/'+ helpers.getFromUri('playlistid',uri) + '/tracks', 'PUT', { uri: uri, range_start: range_start, range_length: range_length, insert_before: insert_before, snapshot_id: snapshot_id } )
.then(
response => {
dispatch({

View File

@ -250,16 +250,16 @@ const SpotifyMiddleware = (function(){
case 'SPOTIFY_LIBRARY_PLAYLISTS_LOADED':
var playlists = []
for(var i = 0; i < action.playlists.length; i++){
var playlist = Object.assign(
{},
action.playlists[i],
for (var playlist of action.playlists){
Object.assign(
playlist,
{
uri: playlist.uri.replace(/spotify:user:([^:]*?):/i, "spotify:"),
source: 'spotify',
in_library: true, // assumed because we asked for library items
tracks_total: action.playlists[i].tracks.total
tracks_total: playlist.tracks.total
}
)
);
// remove our tracklist. It'll overwrite any full records otherwise
delete playlist.tracks
@ -463,30 +463,21 @@ const SpotifyMiddleware = (function(){
case 'SPOTIFY_ME_LOADED':
var me = Object.assign({}, helpers.formatUser(action.me));
// We've loaded 'me' and we are Anonymous currently
if (action.data && store.getState().pusher.username == 'Anonymous'){
if (action.data.display_name !== null){
var name = action.data.display_name;
} else {
var name = action.data.id;
}
// Use 'me' name as my Pusher username
store.dispatch(pusherActions.setUsername(name));
// We are Anonymous currently so use 'me' name as my Pusher username
if (store.getState().pusher.username == 'Anonymous'){
store.dispatch(pusherActions.setUsername(me.name));
}
if (store.getState().ui.allow_reporting){
var hashed_username = md5(action.data.id);
var hashed_username = md5(me.id);
ReactGA.set({userId: hashed_username});
ReactGA.event({category: 'Spotify', action: 'Authorization verified', label: hashed_username});
}
store.dispatch({
type: 'USERS_LOADED',
users: [action.data]
});
store.dispatch(coreActions.userLoaded(me));
action.me = me;
next(action);
break;

View File

@ -63,7 +63,7 @@ export default function reducer(spotify = {}, action){
});
case 'SPOTIFY_ME_LOADED':
return Object.assign({}, spotify, { me: action.data })
return Object.assign({}, spotify, { me: action.me })
case 'SPOTIFY_FEATURED_PLAYLISTS_LOADED':
return Object.assign({}, spotify, { featured_playlists: action.data })