mirror of
https://github.com/koel/koel
synced 2024-12-22 02:23:14 +00:00
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
import _ from 'lodash';
|
|
|
|
import config from '../config';
|
|
import albumStore from './album';
|
|
import sharedStore from './shared';
|
|
|
|
export default {
|
|
state: {
|
|
artists: [],
|
|
},
|
|
|
|
/**
|
|
* Init the store.
|
|
*
|
|
* @param array artists The array of artists we got from the server.
|
|
*/
|
|
init(artists = null) {
|
|
if (artists) {
|
|
this.state.artists = artists;
|
|
} else {
|
|
this.state.artists = sharedStore.state.artists;
|
|
}
|
|
|
|
// Init the album store. This must be called prior to the next logic,
|
|
// because we're using some data from the album store later.
|
|
albumStore.init(this.state.artists);
|
|
|
|
// Traverse through artists array to get the cover and number of songs for each.
|
|
_.each(this.state.artists, artist => {
|
|
this.getCover(artist);
|
|
|
|
artist.songCount = _.reduce(artist.albums, (count, album) => {
|
|
return count + album.songs.length;
|
|
}, 0);
|
|
});
|
|
},
|
|
|
|
all() {
|
|
return this.state.artists;
|
|
},
|
|
|
|
/**
|
|
* Get all songs performed by an artist.
|
|
*
|
|
* @param object artist
|
|
*
|
|
* @return array
|
|
*/
|
|
getSongsByArtist(artist) {
|
|
if (!artist.songs) {
|
|
artist.songs = _.reduce(artist.albums, (songs, album) => {
|
|
return songs.concat(album.songs);
|
|
}, []);
|
|
}
|
|
|
|
return artist.songs;
|
|
},
|
|
|
|
/**
|
|
* Get the artist's cover
|
|
*
|
|
* @param object artist
|
|
*
|
|
* @return string
|
|
*/
|
|
getCover(artist) {
|
|
artist.cover = config.unknownCover;
|
|
|
|
artist.albums.every(album => {
|
|
// If there's a "real" cover, use it.
|
|
if (album.cover != config.unknownCover) {
|
|
artist.cover = album.cover;
|
|
|
|
// I want to break free.
|
|
return false;
|
|
}
|
|
});
|
|
|
|
return artist.cover;
|
|
},
|
|
};
|