|
@@ -16,6 +16,152 @@ const utils = require('./utils');
|
|
|
|
|
|
var dbConnection = null;
|
|
|
|
|
|
+
|
|
|
+// station stuff
|
|
|
+var stations = [];
|
|
|
+
|
|
|
+//TODO Find better name for this (createStation will be to add a station to the db)
|
|
|
+function makeStation(id) {
|
|
|
+ if (!getStation(id)) {
|
|
|
+ var station = new Station(id);
|
|
|
+ stations.push(station);
|
|
|
+ return station;
|
|
|
+ } else {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+function getStation(id) {
|
|
|
+ stations.forEach(function(station) {
|
|
|
+ this.station = station;
|
|
|
+ });
|
|
|
+ return this.station;
|
|
|
+}
|
|
|
+
|
|
|
+function Station(id) {
|
|
|
+ //TODO Add startedAt and timePaused
|
|
|
+ var self = this;
|
|
|
+ var playlist = [
|
|
|
+ {
|
|
|
+ mid: "3498fd83",
|
|
|
+ duration: 20000,
|
|
|
+ title: "Test1"
|
|
|
+ },
|
|
|
+ {
|
|
|
+ mid: "3498fd83434",
|
|
|
+ duration: 10000,
|
|
|
+ title: "Test2"
|
|
|
+ }
|
|
|
+ ];//TODO Get this from RethinkDB
|
|
|
+ var currentSong = playlist[0];
|
|
|
+ var currentSongIndex = 0;//TODO Get this from RethinkDB
|
|
|
+ var paused = true;//TODO Get this from RethinkDB
|
|
|
+ var locked = false;//TODO Get this from RethinkDB
|
|
|
+ var skipVotes = [];
|
|
|
+ var timer;
|
|
|
+
|
|
|
+ this.skipSong = function() {
|
|
|
+ if (playlist.length > 0) {
|
|
|
+ if (timer !== undefined) {
|
|
|
+ timer.pause();
|
|
|
+ }
|
|
|
+ if (currentSongIndex+1 < playlist.length) {
|
|
|
+ currentSongIndex++;
|
|
|
+ } else {
|
|
|
+ currentSongIndex = 0;
|
|
|
+ }
|
|
|
+ skipVotes = 0;
|
|
|
+ currentSong = playlist[currentSongIndex];
|
|
|
+ timer = new Timer(function() {
|
|
|
+ console.log("Skip!");
|
|
|
+ self.skipSong();
|
|
|
+ }, currentSong.duration, paused);
|
|
|
+
|
|
|
+ //io.emit("skipSong " + id, currentSong);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ this.toggleVoteSkip = function(userId) {
|
|
|
+ if (skipVotes.indexOf(userId) === -1) {
|
|
|
+ skipVotes.push(userId);
|
|
|
+ } else {
|
|
|
+ skipVotes = skipVotes.splice(skipVotes.indexOf(userId), 1);
|
|
|
+ }
|
|
|
+ //TODO Calculate if enough people voted to skip
|
|
|
+ //TODO Emit
|
|
|
+ };
|
|
|
+ this.retrievePlaylist = function() {
|
|
|
+ //TODO Use Rethink to get the Playlist for this room
|
|
|
+ };
|
|
|
+ this.pause = function() {
|
|
|
+ if (!paused) {
|
|
|
+ paused = true;
|
|
|
+ timer.pause();
|
|
|
+ }
|
|
|
+ //TODO Emit
|
|
|
+ };
|
|
|
+ this.unpause = function() {
|
|
|
+ if (paused) {
|
|
|
+ paused = false;
|
|
|
+ timer.resume();
|
|
|
+ }
|
|
|
+ //TODO Emit
|
|
|
+ };
|
|
|
+ this.isPaused = function() {
|
|
|
+ return paused;
|
|
|
+ };
|
|
|
+ this.getCurrentSong = function() {
|
|
|
+ return currentSong;
|
|
|
+ };
|
|
|
+ this.lock = function() {
|
|
|
+ if (!locked) {
|
|
|
+ locked = true;
|
|
|
+ }
|
|
|
+ //TODO Emit
|
|
|
+ };
|
|
|
+ this.unlock = function() {
|
|
|
+ if (locked) {
|
|
|
+ locked = false;
|
|
|
+ }
|
|
|
+ //TODO Emit
|
|
|
+ };
|
|
|
+ this.isLocked = function() {
|
|
|
+ return locked;
|
|
|
+ };
|
|
|
+ this.skipSong();
|
|
|
+}
|
|
|
+
|
|
|
+function Timer(callback, delay, paused) {
|
|
|
+ var timerId, start, remaining = delay;
|
|
|
+ var timeWhenPaused = 0;
|
|
|
+ var timePaused = Date.now();
|
|
|
+
|
|
|
+ this.pause = function () {
|
|
|
+ clearTimeout(timerId);
|
|
|
+ remaining -= Date.now() - start;
|
|
|
+ timePaused = Date.now();
|
|
|
+ };
|
|
|
+
|
|
|
+ this.resume = function () {
|
|
|
+ start = Date.now();
|
|
|
+ clearTimeout(timerId);
|
|
|
+ timerId = setTimeout(callback, remaining);
|
|
|
+ timeWhenPaused += Date.now() - timePaused;
|
|
|
+ };
|
|
|
+
|
|
|
+ this.resetTimeWhenPaused = function() {
|
|
|
+ timeWhenPaused = 0;
|
|
|
+ };
|
|
|
+
|
|
|
+ this.timeWhenPaused = function () {
|
|
|
+ return timeWhenPaused;
|
|
|
+ };
|
|
|
+
|
|
|
+ if (paused === false) {
|
|
|
+ this.resume();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
module.exports = {
|
|
|
|
|
|
setup: function (dbConn) {
|