Files
Iris/src/js/services/spotify/middleware.js

149 lines
5.7 KiB
JavaScript
Raw Normal View History

2017-01-08 13:32:46 +13:00
var helpers = require('./../../helpers.js')
2016-12-14 08:29:24 +13:00
var spotifyActions = require('./actions.js')
var uiActions = require('../ui/actions.js')
const SpotifyMiddleware = (function(){
/**
* The actual middleware inteceptor
**/
return store => next => action => {
var state = store.getState();
switch(action.type){
2016-11-06 15:47:37 +13:00
case 'SPOTIFY_CONNECT':
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.getMe() )
break
2016-11-14 11:20:02 +13:00
case 'SPOTIFY_CREATE_PLAYLIST':
if( !store.getState().spotify.authorized ){
2016-12-14 08:29:24 +13:00
store.dispatch( uiActions.createNotification( "Must be logged in to Spotify to do that", 'bad' ) )
2016-11-14 11:20:02 +13:00
return
}
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.createPlaylist( action.name, action.is_private ))
2016-11-14 11:20:02 +13:00
break
case 'SPOTIFY_REMOVE_PLAYLIST_TRACKS':
2017-01-14 09:12:53 +13:00
var playlist = state.ui.playlists[action.uri]
if( !store.getState().spotify.authorized ){
2016-12-14 08:29:24 +13:00
store.dispatch( uiActions.createNotification( "Must be logged in to Spotify to do that", 'bad' ) )
return
}
if( !store.getState().spotify.me || store.getState().spotify.me.id != playlist.owner.id ){
2016-12-14 08:29:24 +13:00
store.dispatch( uiActions.createNotification( "You can't edit a playlist you don't own", 'bad' ) )
return
}
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.deleteTracksFromPlaylist( playlist.uri, playlist.snapshot_id, action.tracks_indexes ))
break
case 'SPOTIFY_ADD_PLAYLIST_TRACKS':
if( !store.getState().spotify.authorized ){
2016-12-14 08:29:24 +13:00
store.dispatch( uiActions.createNotification( "Must be logged in to Spotify to do that", 'bad' ) )
return
}
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.addTracksToPlaylist( action.playlist_uri, action.tracks_uris ))
break
2016-11-14 17:32:36 +13:00
case 'SPOTIFY_REORDER_PLAYLIST_TRACKS':
if( !store.getState().spotify.authorized ){
2016-12-14 08:29:24 +13:00
store.dispatch( uiActions.createNotification( "Must be logged in to Spotify to do that", 'bad' ) )
return
}
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.reorderPlaylistTracks( action.uri, action.range_start, action.range_length, action.insert_before, action.snapshot_id ))
break
2016-11-14 17:32:36 +13:00
case 'SPOTIFY_SAVE_PLAYLIST':
if( !store.getState().spotify.authorized ){
2016-12-14 08:29:24 +13:00
store.dispatch( uiActions.createNotification( "Must be logged in to Spotify to do that", 'bad' ) )
2016-11-14 17:32:36 +13:00
return
}
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.savePlaylist( action.uri, action.name, action.is_public ))
2016-11-14 17:32:36 +13:00
break
2016-10-24 21:26:01 +13:00
// when our mopidy server current track changes
2016-11-03 18:22:26 +13:00
case 'MOPIDY_CURRENTTLTRACK':
2016-10-24 21:26:01 +13:00
// proceed as usual so we don't inhibit default functionality
next(action)
2016-10-24 21:26:01 +13:00
// if the current track is a spotify track
2016-11-03 18:22:26 +13:00
if( action.data && action.data.track.uri.substring(0,14) == 'spotify:track:' ){
2016-12-14 08:29:24 +13:00
store.dispatch( spotifyActions.getTrack( action.data.track.uri ) )
2016-10-24 21:26:01 +13:00
}
2017-01-08 13:32:46 +13:00
break
// when our mopidy server current track changes
case 'RADIO':
2017-01-08 13:32:46 +13:00
// proceed as usual so we don't inhibit default functionality
next(action)
// only resolve if radio is enabled
if( action.data.radio.enabled ){
store.dispatch( spotifyActions.resolveRadioSeeds( action.data.radio ) )
}
break
2016-10-19 14:09:34 +13:00
case 'SPOTIFY_LIBRARY_ARTISTS_LOADED':
store.dispatch({
type: 'ARTISTS_LOADED',
artists: action.data.artists.items
});
store.dispatch({
type: 'LIBRARY_ARTISTS_LOADED',
uris: helpers.asURIs(action.data.artists.items),
more: action.data.artists.next,
total: action.data.artists.total
});
break
case 'SPOTIFY_LIBRARY_ALBUMS_LOADED':
var albums = []
for (var i = 0; i < action.data.items.length; i++){
albums.push(
Object.assign(
{},
action.data.items[i].album,
{
added_at: action.data.items[i].added_at,
tracks: action.data.items[i].album.tracks.items,
tracks_next: action.data.items[i].album.tracks.tracks_next,
tracks_total: action.data.items[i].album.tracks.tracks_total
}
)
)
}
store.dispatch({
type: 'ALBUMS_LOADED',
albums: albums
});
store.dispatch({
type: 'LIBRARY_ALBUMS_LOADED',
uris: helpers.asURIs(albums),
more: action.data.next,
total: action.data.total
});
break
// This action is irrelevant to us, pass it on to the next middleware
default:
return next(action);
}
}
})();
export default SpotifyMiddleware