'use strict'; const Promise = require("bluebird"); const bhttp = require("bhttp"); const events = require("events"); function getHighestMediaID(items) { return Math.max.apply(null, items.map(item => item.media_id)); } module.exports = function createPlaylist(url) { let queuedTracks = []; let lastKnownID = 0; function getNewTracks() { return Promise.try(() => { console.log("CHECKING for new tracks..."); return bhttp.get(url); }).then((response) => { let newTracks = response.body.filter((track) => { return track.media_id > lastKnownID; }); if (newTracks.length > 0) { console.log(`FOUND ${newTracks.length} new tracks!`); queuedTracks = queuedTracks.concat(newTracks); lastKnownID = getHighestMediaID(response.body); } else { console.log("NO new tracks found.") } }); } return Promise.try(() => { return bhttp.get(url); }).then((response) => { lastKnownID = getHighestMediaID(response.body) - 2; return Object.assign(new events.EventEmitter(), { reportFinished: function() { return Promise.try(() => { return getNewTracks(); }).then(() => { if (queuedTracks.length > 0) { this.emit("track", queuedTracks.shift()); } else { return Promise.try(() => { return Promise.delay(5000); }).then(() => { return this.reportFinished(); }) } }); } }); }) };