2017-08-02 10:53:30 +12:00
|
|
|
|
|
|
|
|
import * as helpers from '../../helpers'
|
|
|
|
|
|
|
|
|
|
export default function reducer(core = {}, action){
|
2017-10-10 13:05:28 +13:00
|
|
|
switch (action.type){
|
2017-08-02 10:53:30 +12:00
|
|
|
|
2017-08-05 22:25:25 +12:00
|
|
|
case 'CORE_SET':
|
|
|
|
|
return Object.assign({}, core, action.data)
|
|
|
|
|
|
2017-08-02 10:53:30 +12:00
|
|
|
/**
|
|
|
|
|
* Current track and tracklist
|
|
|
|
|
**/
|
|
|
|
|
|
2017-11-10 15:56:01 +13:00
|
|
|
case 'CURRENT_TRACK_LOADED':
|
|
|
|
|
return Object.assign({}, core, {
|
2018-04-12 15:55:39 +12:00
|
|
|
current_track: action.track,
|
|
|
|
|
current_track_uri: action.uri
|
|
|
|
|
});
|
|
|
|
|
|
2018-04-23 08:13:24 +12:00
|
|
|
case 'CLEAR_CURRENT_TRACK':
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
current_track: null,
|
|
|
|
|
current_track_uri: null
|
|
|
|
|
});
|
|
|
|
|
|
2018-04-12 15:55:39 +12:00
|
|
|
case 'NEXT_TRACK_LOADED':
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
next_track_uri: action.uri
|
2017-11-10 15:56:01 +13:00
|
|
|
});
|
2017-08-02 10:53:30 +12:00
|
|
|
|
2017-11-10 15:56:01 +13:00
|
|
|
case 'QUEUE_LOADED':
|
2017-08-02 10:53:30 +12:00
|
|
|
return Object.assign({}, core, {
|
2017-11-17 20:25:43 +13:00
|
|
|
queue: action.tracks
|
2017-08-02 10:53:30 +12:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
case 'PUSHER_QUEUE_METADATA':
|
|
|
|
|
case 'PUSHER_QUEUE_METADATA_CHANGED':
|
|
|
|
|
var tracklist = Object.assign([], core.current_tracklist)
|
2017-10-10 13:05:28 +13:00
|
|
|
for(var i = 0; i < tracklist.length; i++){
|
2017-08-02 10:53:30 +12:00
|
|
|
|
|
|
|
|
// load our metadata (if we have any for that tlid)
|
2018-04-01 21:26:42 +12:00
|
|
|
if (action.queue_metadata['tlid_'+tracklist[i].tlid] !== undefined){
|
2017-08-02 10:53:30 +12:00
|
|
|
tracklist[i] = Object.assign(
|
|
|
|
|
{},
|
|
|
|
|
tracklist[i],
|
|
|
|
|
action.queue_metadata['tlid_'+tracklist[i].tlid],
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return Object.assign({}, core, { current_tracklist: tracklist, queue_metadata: action.queue_metadata });
|
|
|
|
|
|
2018-04-01 21:26:42 +12:00
|
|
|
case 'PUSHER_RADIO_LOADED':
|
2017-08-02 10:53:30 +12:00
|
|
|
case 'PUSHER_RADIO_STARTED':
|
|
|
|
|
case 'PUSHER_RADIO_CHANGED':
|
|
|
|
|
case 'PUSHER_RADIO_STOPPED':
|
|
|
|
|
return Object.assign({}, core, { seeds_resolved: false }, { radio: action.radio })
|
|
|
|
|
|
|
|
|
|
case 'RADIO_SEEDS_RESOLVED':
|
|
|
|
|
var radio = Object.assign({}, core.radio, { resolved_seeds: action.resolved_seeds })
|
|
|
|
|
return Object.assign({}, core, { radio: radio })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Categories
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
case 'CATEGORY_LOADED':
|
|
|
|
|
var categories = Object.assign([], core.categories)
|
|
|
|
|
|
|
|
|
|
if (categories[action.key]){
|
|
|
|
|
var category = Object.assign({}, categories[action.key], action.category)
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var category = Object.assign({}, action.category)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
categories[action.key] = category
|
|
|
|
|
return Object.assign({}, core, { categories: categories });
|
|
|
|
|
|
|
|
|
|
case 'CATEGORIES_LOADED':
|
|
|
|
|
var categories = Object.assign([], core.categories)
|
|
|
|
|
|
|
|
|
|
for (var i = 0; i < action.categories.length; i++){
|
|
|
|
|
var key = 'category:'+action.categories[i].id
|
|
|
|
|
if (categories[key]){
|
|
|
|
|
var category = Object.assign({}, categories[key], action.categories[i])
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var category = Object.assign({}, action.categories[i])
|
|
|
|
|
}
|
|
|
|
|
categories[key] = category
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return Object.assign({}, core, { categories: categories });
|
|
|
|
|
|
|
|
|
|
case 'CATEGORY_PLAYLISTS_LOADED':
|
|
|
|
|
var categories = Object.assign([], core.categories)
|
|
|
|
|
var playlists_uris = []
|
|
|
|
|
if (categories[action.key].playlists_uris) playlists_uris = categories[action.key].playlists_uris
|
|
|
|
|
|
|
|
|
|
var category = Object.assign(
|
|
|
|
|
{},
|
|
|
|
|
categories[action.key],
|
|
|
|
|
{
|
|
|
|
|
playlists_uris: [...playlists_uris, ...action.uris],
|
|
|
|
|
playlists_more: action.more,
|
|
|
|
|
playlists_total: action.total
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
categories[action.key] = category
|
|
|
|
|
return Object.assign({}, core, { categories: categories });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2017-11-08 21:13:32 +13:00
|
|
|
* Index updates
|
|
|
|
|
* These actions are only ever called by middleware after we've digested one more many assets
|
|
|
|
|
* and appended to their relevant index.
|
2017-08-02 10:53:30 +12:00
|
|
|
**/
|
|
|
|
|
|
2017-11-08 21:13:32 +13:00
|
|
|
case 'UPDATE_TRACKS_INDEX':
|
|
|
|
|
return Object.assign({}, core, { tracks: action.tracks });
|
2017-08-02 10:53:30 +12:00
|
|
|
|
2017-11-08 21:13:32 +13:00
|
|
|
case 'UPDATE_ALBUMS_INDEX':
|
|
|
|
|
return Object.assign({}, core, { albums: action.albums });
|
2017-10-18 17:03:59 +13:00
|
|
|
|
2017-11-08 21:13:32 +13:00
|
|
|
case 'UPDATE_ARTISTS_INDEX':
|
|
|
|
|
return Object.assign({}, core, { artists: action.artists });
|
2017-08-02 10:53:30 +12:00
|
|
|
|
2017-11-08 21:13:32 +13:00
|
|
|
case 'UPDATE_PLAYLISTS_INDEX':
|
|
|
|
|
return Object.assign({}, core, { playlists: action.playlists });
|
2017-08-02 10:53:30 +12:00
|
|
|
|
2017-11-08 21:13:32 +13:00
|
|
|
case 'UPDATE_USERS_INDEX':
|
|
|
|
|
return Object.assign({}, core, { users: action.users });
|
2017-10-18 17:03:59 +13:00
|
|
|
|
2017-08-02 10:53:30 +12:00
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'NEW_RELEASES_LOADED':
|
|
|
|
|
if (!action.uris){
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
new_releases: null,
|
|
|
|
|
new_releases_more: null,
|
|
|
|
|
new_releases_total: null
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var new_releases = []
|
|
|
|
|
if (core.new_releases) new_releases = Object.assign([], core.new_releases)
|
|
|
|
|
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
new_releases: [...new_releases, ...action.uris],
|
|
|
|
|
new_releases_more: action.more,
|
|
|
|
|
new_releases_total: action.total
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'ARTIST_ALBUMS_LOADED':
|
|
|
|
|
var artists = Object.assign([], core.artists)
|
|
|
|
|
var albums_uris = []
|
|
|
|
|
if (artists[action.key].albums_uris) albums_uris = artists[action.key].albums_uris
|
|
|
|
|
|
|
|
|
|
var artist = Object.assign(
|
|
|
|
|
{},
|
|
|
|
|
artists[action.key],
|
|
|
|
|
{
|
|
|
|
|
albums_uris: [...albums_uris, ...action.uris],
|
|
|
|
|
albums_more: action.more,
|
|
|
|
|
albums_total: action.total
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
artists[action.key] = artist
|
|
|
|
|
return Object.assign({}, core, { artists: artists });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
case 'USER_PLAYLISTS_LOADED':
|
|
|
|
|
var users = Object.assign([], core.users)
|
|
|
|
|
var playlists_uris = []
|
|
|
|
|
if (users[action.key] && users[action.key].playlists_uris) playlists_uris = users[action.key].playlists_uris
|
|
|
|
|
|
|
|
|
|
var artist = Object.assign(
|
|
|
|
|
{},
|
|
|
|
|
users[action.key],
|
|
|
|
|
{
|
|
|
|
|
playlists_uris: [...playlists_uris, ...action.uris],
|
|
|
|
|
playlists_more: action.more,
|
|
|
|
|
playlists_total: action.total
|
|
|
|
|
}
|
|
|
|
|
)
|
|
|
|
|
users[action.key] = artist
|
|
|
|
|
return Object.assign({}, core, { users: users });
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Playlists
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
case 'PLAYLIST_TRACKS':
|
|
|
|
|
var playlists = Object.assign([], core.playlists)
|
2017-12-21 08:38:21 +13:00
|
|
|
var playlist = Object.assign({}, playlists[action.key], { tracks_uris: action.tracks_uris })
|
2017-08-02 10:53:30 +12:00
|
|
|
|
|
|
|
|
playlists[action.key] = playlist
|
|
|
|
|
return Object.assign({}, core, { playlists: playlists });
|
|
|
|
|
|
|
|
|
|
case 'LIBRARY_PLAYLISTS_LOADED':
|
|
|
|
|
if (core.library_playlists){
|
|
|
|
|
var library_playlists = [...core.library_playlists, ...action.uris]
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var library_playlists = action.uris
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
library_playlists = helpers.removeDuplicates(library_playlists)
|
|
|
|
|
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
library_playlists: library_playlists,
|
|
|
|
|
library_playlists_started: true
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Genres
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
case 'SPOTIFY_GENRES_LOADED':
|
|
|
|
|
return Object.assign({}, core, {genres: action.genres})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Search results
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
|
|
case 'SEARCH_STARTED':
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
search_results: {
|
|
|
|
|
artists_uris: [],
|
|
|
|
|
albums_uris: [],
|
|
|
|
|
playlists_uris: [],
|
|
|
|
|
tracks: [],
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
case 'SEARCH_RESULTS_LOADED':
|
|
|
|
|
|
|
|
|
|
// artists
|
|
|
|
|
if (core.search_results && core.search_results.artists_uris){
|
|
|
|
|
var artists_uris = core.search_results.artists_uris
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var artists_uris = []
|
|
|
|
|
}
|
|
|
|
|
if (action.artists_uris) artists_uris = [...artists_uris, ...action.artists_uris]
|
|
|
|
|
|
|
|
|
|
// more tracks
|
|
|
|
|
if (typeof(action.artists_more) !== 'undefined') var artists_more = action.artists_more
|
|
|
|
|
else if (core.search_results && core.search_results.artists_more) var artists_more = core.search_results.artists_more
|
|
|
|
|
else var artists_more = null
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// albums
|
|
|
|
|
if (core.search_results && core.search_results.albums_uris){
|
|
|
|
|
var albums_uris = core.search_results.albums_uris
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var albums_uris = []
|
|
|
|
|
}
|
|
|
|
|
if (action.albums_uris) albums_uris = [...albums_uris, ...action.albums_uris]
|
|
|
|
|
|
|
|
|
|
// more tracks
|
|
|
|
|
if (typeof(action.albums_more) !== 'undefined') var albums_more = action.albums_more
|
|
|
|
|
else if (core.search_results && core.search_results.albums_more) var albums_more = core.search_results.albums_more
|
|
|
|
|
else var albums_more = null
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// playlists
|
|
|
|
|
if (core.search_results && core.search_results.playlists_uris){
|
|
|
|
|
var playlists_uris = core.search_results.playlists_uris
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var playlists_uris = []
|
|
|
|
|
}
|
|
|
|
|
if (action.playlists_uris) playlists_uris = [...playlists_uris, ...action.playlists_uris]
|
|
|
|
|
|
|
|
|
|
// more tracks
|
|
|
|
|
if (typeof(action.playlists_more) !== 'undefined') var playlists_more = action.playlists_more
|
|
|
|
|
else if (core.search_results && core.search_results.playlists_more) var playlists_more = core.search_results.playlists_more
|
|
|
|
|
else var playlists_more = null
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// tracks
|
|
|
|
|
if (core.search_results && core.search_results.tracks){
|
|
|
|
|
var tracks = core.search_results.tracks
|
2017-10-10 13:32:04 +13:00
|
|
|
} else {
|
2017-08-02 10:53:30 +12:00
|
|
|
var tracks = []
|
|
|
|
|
}
|
2017-10-18 17:03:59 +13:00
|
|
|
if (action.tracks) tracks = [...tracks, ...helpers.formatTracks(action.tracks)]
|
2017-08-02 10:53:30 +12:00
|
|
|
|
|
|
|
|
// more tracks
|
|
|
|
|
if (typeof(action.tracks_more) !== 'undefined') var tracks_more = action.tracks_more
|
|
|
|
|
else if (core.search_results && core.search_results.tracks_more) var tracks_more = core.search_results.tracks_more
|
|
|
|
|
else var tracks_more = null
|
|
|
|
|
|
|
|
|
|
return Object.assign({}, core, {
|
|
|
|
|
search_results: {
|
|
|
|
|
artists_more: artists_more,
|
|
|
|
|
artists_uris: helpers.removeDuplicates(artists_uris),
|
|
|
|
|
albums_more: albums_more,
|
|
|
|
|
albums_uris: helpers.removeDuplicates(albums_uris),
|
|
|
|
|
playlists_more: playlists_more,
|
|
|
|
|
playlists_uris: helpers.removeDuplicates(playlists_uris),
|
|
|
|
|
tracks: tracks,
|
|
|
|
|
tracks_more: tracks_more
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
default:
|
|
|
|
|
return core
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|