Preliminary lastfm
This commit is contained in:
100
src/js/services/lastfm/actions.js
Executable file
100
src/js/services/lastfm/actions.js
Executable file
@ -0,0 +1,100 @@
|
||||
|
||||
var helpers = require('../../helpers.js')
|
||||
|
||||
/**
|
||||
* Send an ajax request to the Spotify API
|
||||
*
|
||||
* @param dispatch obj
|
||||
* @param getState obj
|
||||
* @param endpoint params = the url params to send
|
||||
**/
|
||||
const sendRequest = ( dispatch, getState, params ) => {
|
||||
return new Promise( (resolve, reject) => {
|
||||
|
||||
var url = '//ws.audioscrobbler.com/2.0/?format=json&api_key=4320a3ef51c9b3d69de552ac083c55e3&'+params
|
||||
|
||||
$.ajax({
|
||||
method: 'GET',
|
||||
cache: true,
|
||||
url: url
|
||||
}).then(
|
||||
response => resolve(response),
|
||||
(xhr, status, error) => {
|
||||
console.error( params+' failed', xhr.responseText)
|
||||
reject(error)
|
||||
}
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
export function getArtist( artist, mbid = false ){
|
||||
return (dispatch, getState) => {
|
||||
|
||||
dispatch({ type: 'LASTFM_ARTIST_LOADED', data: false });
|
||||
|
||||
if( mbid ){
|
||||
var params = 'method=artist.getInfo&mbid='+mbid
|
||||
}else{
|
||||
artist = encodeURIComponent( artist );
|
||||
var params = 'method=artist.getInfo&artist='+artist
|
||||
}
|
||||
sendRequest(dispatch, getState, params)
|
||||
.then(
|
||||
response => {
|
||||
if( response.artist ){
|
||||
dispatch({
|
||||
type: 'LASTFM_ARTIST_LOADED',
|
||||
data: response.artist
|
||||
});
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export function getAlbum( artist, album, mbid = false ){
|
||||
return (dispatch, getState) => {
|
||||
|
||||
dispatch({ type: 'LASTFM_ALBUM_LOADED', data: false });
|
||||
|
||||
if( mbid ){
|
||||
var params = 'method=album.getInfo&mbid='+mbid
|
||||
}else{
|
||||
artist = encodeURIComponent( artist )
|
||||
album = encodeURIComponent( album )
|
||||
var params = 'method=album.getInfo&album='+album+'&artist='+artist
|
||||
}
|
||||
sendRequest(dispatch, getState, params)
|
||||
.then(
|
||||
response => {
|
||||
if( response.album ){
|
||||
dispatch({
|
||||
type: 'LASTFM_ALBUM_LOADED',
|
||||
data: response.album
|
||||
});
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export function getTrack( artist, track ){
|
||||
return (dispatch, getState) => {
|
||||
|
||||
dispatch({ type: 'LASTFM_TRACK_LOADED', data: false });
|
||||
|
||||
artist = encodeURIComponent( artist );
|
||||
sendRequest(dispatch, getState, 'method=track.getInfo&track='+track+'&artist='+artist)
|
||||
.then(
|
||||
response => {
|
||||
if( response.track ){
|
||||
dispatch({
|
||||
type: 'LASTFM_TRACK_LOADED',
|
||||
data: response.track
|
||||
});
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
20
src/js/services/lastfm/reducer.js
Executable file
20
src/js/services/lastfm/reducer.js
Executable file
@ -0,0 +1,20 @@
|
||||
|
||||
export default function reducer(lastfm = {}, action){
|
||||
switch (action.type) {
|
||||
|
||||
case 'LASTFM_ARTIST_LOADED':
|
||||
return Object.assign({}, lastfm, { artist: action.data });
|
||||
|
||||
case 'LASTFM_ALBUM_LOADED':
|
||||
return Object.assign({}, lastfm, { album: action.data });
|
||||
|
||||
case 'LASTFM_TRACK_LOADED':
|
||||
return Object.assign({}, lastfm, { track: action.data });
|
||||
|
||||
default:
|
||||
return lastfm
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user