import { Injectable } from '@angular/core'; import { ServiceHelper } from 'app/helper/service-helper'; @Injectable({ providedIn: 'root' }) export class SpotifyService { // protected _playlists: Array = []; // protected spotifyWebApi = require('spotify-web-api-node'); // constructor( // protected offsetHelper: ServiceHelper.OfssetHelper, // ) { } // public async setUserPlaylists(): Promise { // return new Promise( // (resolve, reject) => { // // get All Playlists of user // this.getAllUserPlaylists().then( // (playlists) => { // this.resolvePlaylists(playlists).then(resolvedPlaylists => { // this._playlists = resolvedPlaylists as Object[]; // resolve(this._playlists); // }); // }, // (err) => { // reject(err); // }); // }); // } // public get playlists(): Array { // return this._playlists; // } // public getPlaylistById(playlistId: string): Object | null { // return this._playlists.find((playlist) => { // return playlist['id'] === playlistId; // }); // } // protected enlistPlaylistInQueue(playlist: Object) { // console.debug(`Too many Requests save ${playlist} in Queue`); // // TODO enlist Playlist in DB // } // protected async getAllUserPlaylists(pagingObject?: Object): Promise> { // return new Promise>(async (resolve, reject) => { // let playlists = new Array(); // this.spotifyWebApi.getUserPlaylists({ offset: !!pagingObject ? pagingObject['offset'] : 0 }).then( // async (paginatePlaylistsResponse) => { // if (!paginatePlaylistsResponse) { // reject(`Can't get Playlists of current user, response empty.`); // } // playlists = paginatePlaylistsResponse.body.items; // pagingObject = paginatePlaylistsResponse.body; // if (paginatePlaylistsResponse.body.next) { // const offset = this.offsetHelper.getNextOffsetFromUrl(paginatePlaylistsResponse.body.next); // if (offset === -1) { // resolve(playlists); // } // pagingObject['offset'] = offset; // this.getAllUserPlaylists(pagingObject).then((paginatePlaylists) => { // playlists = playlists.concat(paginatePlaylists); // resolve(playlists); // }, // (err) => { // reject(err); // }); // return; // } // resolve(playlists); // }, // (err) => { // if (err.statusCode === ServiceHelper.SPOTIFY_STAUS_CODES.TOO_MANY) { // playlists.forEach(playlist => { // this.enlistPlaylistInQueue(playlist) // }); // resolve(); // return; // } // reject(`Can't get Playlists of current user ${err}`); // } // ); // }); // } // protected async resolvePlaylists(playlists: Array): Promise { // const getPlaylistTracksPromises = Array>(); // for (const playlist of playlists) { // getPlaylistTracksPromises.push( // this.resolvePlaylist(playlist) // ); // } // return Promise.all(getPlaylistTracksPromises); // } // protected resolvePlaylist( // playlist, // pagingObject? // ): Promise { // return new Promise(async (resolve, reject) => { // this.spotifyWebApi.getPlaylistTracks(playlist.id, { offset: !!pagingObject ? pagingObject.offset : 0 }).then( // (tracksResponse) => { // const fullPlaylist = ServiceHelper.GenericHelper.deepClone(playlist); // if (!playlist) { // resolve(fullPlaylist); // return; // } // fullPlaylist.tracks = tracksResponse.body; // pagingObject = tracksResponse.body; // if (tracksResponse.body.next) { // const offset = this.offsetHelper.getNextOffsetFromUrl(tracksResponse.body.next); // if (offset === -1) { // resolve(fullPlaylist); // return; // } // pagingObject.offset = offset; // this.resolvePlaylist(fullPlaylist, pagingObject).then( // (fullTracksResponse) => { // if (fullTracksResponse) { // fullPlaylist.tracks.items = fullPlaylist.tracks.items.concat(fullTracksResponse['tracks'].items); // } // resolve(fullPlaylist); // }, // (err) => { // reject(err); // }); // return; // } // resolve(fullPlaylist); // }, (err) => { // if (err.statusCode === ServiceHelper.SPOTIFY_STAUS_CODES.TOO_MANY) { // this.enlistPlaylistInQueue(playlist) // resolve(); // return; // } // reject(`Can't get Playlist: ${playlist.name}. ${err}`); // }) // }); // } }