Initial commit:

master
Sven Slootweg 7 years ago
commit 4996ea2409

1
.gitignore vendored

@ -0,0 +1 @@
node_modules

@ -0,0 +1,30 @@
'use strict';
const Promise = require("bluebird");
const childProcess = Promise.promisifyAll(require("child_process"));
const playlist = require("./playlist");
Promise.try(() => {
return playlist("https://media.pixelbar.nl/getjson.php");
}).then((playlist) => {
playlist.on("track", (track) => {
Promise.try(() => {
console.log("NOW PLAYING:", track.media_title);
return new Promise((resolve, reject) => {
let player = childProcess.spawn("mpv", ["--no-video", track.media_url]);
player.stdout.pipe(process.stdout);
player.stderr.pipe(process.stderr);
player.on("exit", () => {
resolve();
});
});
}).then(() => {
playlist.reportFinished();
});
});
playlist.reportFinished();
})

@ -0,0 +1,16 @@
{
"name": "pixelbar-mediaplayer",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "Sven Slootweg",
"license": "WTFPL",
"dependencies": {
"bhttp": "^1.2.4",
"bluebird": "^3.4.7",
"cheerio": "^0.22.0"
}
}

@ -0,0 +1,57 @@
'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();
})
}
});
}
});
})
};
Loading…
Cancel
Save