Files
Iris/src/js/services/core/reducer.js

282 lines
9.8 KiB
JavaScript
Raw Normal View History

import * as helpers from '../../helpers'
export default function reducer(core = {}, action){
2017-10-10 13:05:28 +13:00
switch (action.type){
case 'CORE_SET':
return Object.assign({}, core, action.data)
2018-07-02 21:37:24 +12:00
case 'CACHEBUST_HTTP_STREAM':
return Object.assign({}, core, {http_streaming_cachebuster: new Date().getTime()})
/**
* Current track and tracklist
**/
2017-11-10 15:56:01 +13:00
case 'CURRENT_TRACK_LOADED':
return Object.assign({}, core, {
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
});
case 'NEXT_TRACK_LOADED':
return Object.assign({}, core, {
next_track_uri: action.uri
2017-11-10 15:56:01 +13:00
});
2017-11-10 15:56:01 +13:00
case 'QUEUE_LOADED':
return Object.assign({}, core, {
queue: action.tracks
});
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++){
// load our metadata (if we have any for that tlid)
if (action.queue_metadata['tlid_'+tracklist[i].tlid] !== undefined){
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 });
case 'PUSHER_RADIO_LOADED':
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 })
/**
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.
**/
2018-08-12 20:59:00 +12:00
case 'TRACKS_LOADED':
var tracks = Object.assign({}, core.tracks);
for (var track of action.tracks){
2018-08-12 20:59:00 +12:00
tracks[track.uri] = track;
}
2018-08-12 20:59:00 +12:00
return Object.assign({}, core, { tracks: tracks });
2017-10-18 17:03:59 +13:00
2018-08-12 20:59:00 +12:00
case 'ALBUMS_LOADED':
var albums = Object.assign({}, core.albums);
for (var album of action.albums){
2018-08-12 20:59:00 +12:00
albums[album.uri] = album;
}
2018-08-12 20:59:00 +12:00
return Object.assign({}, core, { albums: albums });
2018-08-12 20:59:00 +12:00
case 'ARTISTS_LOADED':
var artists = Object.assign({}, core.artists);
for (var artist of action.artists){
2018-08-12 20:59:00 +12:00
artists[artist.uri] = artist;
}
2018-08-12 20:59:00 +12:00
return Object.assign({}, core, { artists: artists });
2018-08-12 20:59:00 +12:00
case 'PLAYLISTS_LOADED':
var playlists = Object.assign({}, core.playlists);
for (var playlist of action.playlists){
2018-08-12 20:59:00 +12:00
playlists[playlist.uri] = playlist;
}
2018-08-12 20:59:00 +12:00
return Object.assign({}, core, { playlists: playlists });
2017-10-18 17:03:59 +13:00
2018-08-12 20:59:00 +12:00
case 'USERS_LOADED':
var users = Object.assign({}, core.users);
for (var user of action.users){
2018-08-12 20:59:00 +12:00
users[user.uri] = user;
}
2018-08-12 20:59:00 +12:00
return Object.assign({}, core, { users: users });
case 'ARTIST_ALBUMS_LOADED':
2018-08-12 20:59:00 +12:00
var artists = Object.assign({}, core.artists)
var albums_uris = [];
if (artists[action.artist_uri].albums_uris){
albums_uris = artists[action.artist_uri].albums_uris;
}
var artist = Object.assign(
{},
2018-08-12 20:59:00 +12:00
artists[action.artist_uri],
{
2018-08-12 20:59:00 +12:00
albums_uris: [...albums_uris, ...action.albums_uris],
albums_more: action.more,
albums_total: action.total
}
)
2018-08-12 20:59:00 +12:00
artists[action.artist_uri] = artist
return Object.assign({}, core, { artists: artists });
case 'USER_PLAYLISTS_LOADED':
2018-08-12 20:59:00 +12:00
var users = Object.assign({}, core.users)
var existing_playlists_uris = [];
if (users[action.uri] && users[action.uri].playlists_uris){
existing_playlists_uris = users[action.uri].playlists_uris;
}
var playlists_uris = [...existing_playlists_uris, ...helpers.arrayOf('uri',action.playlists)]
var user = Object.assign(
{},
users[action.uri],
{
playlists_uris: playlists_uris,
playlists_more: action.more,
playlists_total: action.total
}
)
users[action.uri] = user;
return Object.assign({}, core, { users: users });
/**
* Playlists
**/
case 'PLAYLIST_TRACKS':
2018-08-12 20:59:00 +12:00
var playlists = Object.assign({}, core.playlists)
var playlist = Object.assign({}, playlists[action.key], { tracks_uris: action.tracks_uris })
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]
} else {
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
} else {
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
} else {
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
} else {
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
} else {
var tracks = []
}
2017-10-18 17:03:59 +13:00
if (action.tracks) tracks = [...tracks, ...helpers.formatTracks(action.tracks)]
// 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
}
}