|  | @@ -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) {
 |