UNPKG

cody-music

Version:

mac osx spotify and itunes music player controller, spotify audio features, itunes and spotify genre, and playlist control

47 lines (39 loc) 1.56 kB
import { CodyResponse, Track } from "./models"; import { MusicUtil } from "./util"; import { MusicClient } from "./client"; const musicClient = MusicClient.getInstance(); const musicUtil = new MusicUtil(); export class AlbumService { private static instance: AlbumService; private constructor() { // } static getInstance() { if (!AlbumService.instance) { AlbumService.instance = new AlbumService(); } return AlbumService.instance; } async getSpotifyAlbumTracks(albumId: string): Promise<Track[]> { // i.e. https://api.spotify.com/v1/albums/1xVP4eFcagXNtQMvEXfyeV/tracks?offset=0&limit=50 const id = musicUtil.createSpotifyAlbumIdFromUri(albumId); const tracks: Track[] = []; // response: { href: <origapi>, items: [ { artists: [], available_markets, disc_number, duration_ms, explicit, external_urls, href, id, name, preview_url, track_number, type, uri } ] } const api = `/v1/albums/${id}/tracks`; const qsOptions = { offset: 0, limit: 50 }; let codyResp: CodyResponse = await musicClient.spotifyApiGet(api, qsOptions); // check if the token needs to be refreshed if (codyResp.status === 401) { // refresh the token await musicClient.refreshSpotifyToken(); // try again codyResp = await musicClient.spotifyApiGet(api, qsOptions); } if (musicUtil.isResponseOkWithData(codyResp) && codyResp.data.items) { codyResp.data.items.forEach((track: any) => { tracks.push(musicUtil.buildTrack(track)); }); } return tracks; } }