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

216 lines
6.8 KiB
JavaScript
Raw Normal View History

import * as helpers from '../../helpers';
export default function reducer(mopidy = {}, action){
2017-10-10 13:05:28 +13:00
switch (action.type){
2018-11-02 16:10:38 +13:00
case 'MOPIDY_SET':
return Object.assign({}, mopidy, action.data);
2016-11-06 15:47:37 +13:00
case 'MOPIDY_CONNECT':
case 'MOPIDY_CONNECTING':
2018-11-02 16:10:38 +13:00
return Object.assign({}, mopidy, {
connected: false,
connecting: true
});
case 'MOPIDY_CONNECTED':
2018-11-02 16:10:38 +13:00
return Object.assign({}, mopidy, {
connected: true,
connecting: false,
restart_running: false,
upgrade_running: false
});
case 'MOPIDY_DISCONNECTED':
2018-11-02 16:10:38 +13:00
return Object.assign({}, mopidy, {
connected: false,
connecting: false
});
case 'MOPIDY_CHANGE_TRACK':
return Object.assign({}, mopidy, {
tlid: action.tlid
});
case 'MOPIDY_URI_SCHEMES':
2016-11-06 18:29:49 +13:00
return Object.assign({}, mopidy, {
uri_schemes: action.uri_schemes
2016-11-06 18:29:49 +13:00
});
2018-11-02 16:10:38 +13:00
case 'MOPIDY_RESTART_STARTED':
return Object.assign({}, mopidy, { restart_running: true });
case 'MOPIDY_RESTART_FINISHED':
return Object.assign({}, mopidy, { restart_running: false });
case 'MOPIDY_UPGRADE_STARTED':
return Object.assign({}, mopidy, { upgrade_running: true });
case 'MOPIDY_UPGRADE_FINISHED':
return Object.assign({}, mopidy, { upgrade_running: false });
case 'MOPIDY_LOCAL_SCAN_STARTED':
return Object.assign({}, mopidy, { local_scan_running: true });
case 'MOPIDY_LOCAL_SCAN_FINISHED':
return Object.assign({}, mopidy, { local_scan_running: false });
/**
2016-11-06 18:29:49 +13:00
* State-oriented actions
**/
case 'MOPIDY_PLAY_STATE':
return Object.assign({}, mopidy, {
play_state: action.play_state
});
case 'MOPIDY_CONSUME':
return Object.assign({}, mopidy, {
consume: action.consume
});
case 'MOPIDY_RANDOM':
return Object.assign({}, mopidy, {
random: action.random
});
case 'MOPIDY_REPEAT':
return Object.assign({}, mopidy, {
repeat: action.repeat
});
2016-11-06 18:29:49 +13:00
case 'MOPIDY_VOLUME':
return Object.assign({}, mopidy, {
volume: action.volume
2016-11-06 18:29:49 +13:00
});
2017-05-19 11:33:06 +12:00
case 'MOPIDY_MUTE':
return Object.assign({}, mopidy, {
mute: action.mute
2017-05-19 11:33:06 +12:00
});
case 'MOPIDY_TIME_POSITION':
2016-11-06 18:29:49 +13:00
return Object.assign({}, mopidy, {
time_position: action.time_position
2016-11-06 18:29:49 +13:00
});
case 'MOPIDY_QUEUE_HISTORY':
var history = [];
for (var i = 0; i < action.tracks.length; i++){
2017-02-10 09:06:41 +13:00
history.push(Object.assign(
{},
action.tracks[i][1],
2017-02-10 09:06:41 +13:00
{
played_at: action.tracks[i][0],
2017-02-10 09:06:41 +13:00
type: 'history'
}
))
}
return Object.assign({}, mopidy, {
queue_history: history
});
2016-11-06 18:29:49 +13:00
/**
* Directories
* This also facilitates all backend-only music providers (SoundCloud, Dirble, etc)
2016-11-06 18:29:49 +13:00
**/
case 'MOPIDY_DIRECTORY_FLUSH':
return Object.assign({}, mopidy, {
directory: null
});
case 'MOPIDY_DIRECTORY_LOADED':
2016-11-01 07:37:18 +13:00
return Object.assign({}, mopidy, {
directory: action.directory
2016-11-01 07:37:18 +13:00
});
/**
* Library
**/
case 'MOPIDY_LIBRARY_PLAYLISTS_LOADED':
if (mopidy.library_playlists){
var uris = [...mopidy.library_playlists,...action.uris]
} else {
var uris = action.uris
}
return Object.assign({}, mopidy, { library_playlists: helpers.removeDuplicates(uris) })
case 'MOPIDY_LIBRARY_PLAYLISTS_LOADED_ALL':
return Object.assign({}, mopidy, { library_playlists_loaded_all: true })
2017-08-22 20:44:36 +12:00
case 'MOPIDY_LIBRARY_PLAYLIST_CREATED':
var library_playlists = [];
2017-08-22 20:44:36 +12:00
if (mopidy.library_playlists){
library_playlists = Object.assign([], mopidy.library_playlists);
2017-08-22 20:44:36 +12:00
}
library_playlists.push(action.key);
2017-08-22 20:44:36 +12:00
return Object.assign({}, mopidy, { library_playlists: library_playlists })
case 'MOPIDY_LIBRARY_PLAYLIST_DELETED':
var library_playlists = []
if (mopidy.library_playlists){
library_playlists = Object.assign([], mopidy.library_playlists);
library_playlists.splice(library_playlists.indexOf(action.uri), 1);
2017-08-22 20:44:36 +12:00
}
return Object.assign({}, mopidy, { library_playlists: library_playlists })
case 'MOPIDY_LIBRARY_ARTISTS_LOADED':
if (mopidy.library_artists){
var uris = [...mopidy.library_artists,...action.uris]
} else {
var uris = action.uris
}
return Object.assign({}, mopidy, { library_artists: helpers.removeDuplicates(uris) })
case 'MOPIDY_CLEAR_LIBRARY_ARTISTS':
return Object.assign({}, mopidy, { library_artists: null })
case 'MOPIDY_LIBRARY_ALBUMS_LOADED':
if (mopidy.library_albums){
var uris = [...mopidy.library_albums,...action.uris]
} else {
var uris = action.uris
}
return Object.assign({}, mopidy, { library_albums: helpers.removeDuplicates(uris) })
case 'MOPIDY_CLEAR_LIBRARY_ALBUMS':
return Object.assign({}, mopidy, { library_albums: null })
/**
* Searching
**/
case 'MOPIDY_CLEAR_SEARCH_RESULTS':
return Object.assign({}, mopidy, { search_results: {} });
case 'MOPIDY_SEARCH_RESULTS_LOADED':
// Fetch or create our container
if (mopidy.search_results){
var search_results = Object.assign({}, mopidy.search_results)
} else {
var search_results = {}
}
2017-09-04 21:04:11 +12:00
if (search_results[action.context]){
search_results[action.context] = [...search_results[action.context], ...action.results]
} else {
search_results[action.context] = action.results
}
return Object.assign({}, mopidy, { search_results: search_results });
default:
return mopidy
}
}