import $ from 'jquery'; import { map } from 'lodash'; import { playlistStore, favoriteStore } from '../stores'; import { ls } from '.'; export const download = { /** * Download individual song(s). * * @param {Array.|Object} songs */ fromSongs(songs) { songs = [].concat(songs); const ids = map(songs, 'id'); const params = $.param({ songs: ids }); return this.trigger(`songs?${params}`); }, /** * Download all songs in an album. * * @param {Object} album */ fromAlbum(album) { return this.trigger(`album/${album.id}`); }, /** * Download all songs performed by an artist. * * @param {Object} artist */ fromArtist(artist) { // It's safe to assume an artist always has songs. // After all, what's an artist without her songs? // (See what I did there? Yes, I'm advocating for women's rights). return this.trigger(`artist/${artist.id}`); }, /** * Download all songs in a playlist. * * @param {Object} playlist */ fromPlaylist(playlist) { if (!playlistStore.getSongs(playlist).length) { console.warn('Empty playlist.'); return; } return this.trigger(`playlist/${playlist.id}`); }, /** * Download all favorite songs. */ fromFavorites() { if (!favoriteStore.all.length) { console.warn("You don't like any song? Come on, don't be that grumpy."); return; } return this.trigger('favorites'); }, /** * Build a download link using a segment and trigger it. * * @param {string} uri The uri segment, corresponding to the song(s), * artist, playlist, or album. */ trigger(uri) { const sep = uri.indexOf('?') === -1 ? '?' : '&'; const frameId = `downloader${Date.now()}`; $(`