| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 | 
							
- // custom modules
 
- const global = require('./global');
 
- var io = global.io;
 
- function Station (id, data) {
 
- 	const self = this;
 
- 	//TODO Add startedAt and timePaused
 
- 	let playlist = data.playlist;
 
- 	let currentSong = playlist[0];
 
- 	let currentSongIndex = data.currentSongIndex;
 
- 	let paused = data.paused;
 
- 	let locked = data.locked;
 
- 	let skipVotes = data.skipVotes;
 
- 	let users = data.users;
 
- 	let displayName = data.displayName;
 
- 	let description = data.description;
 
- 	let timer;
 
- 	let nsp = io.of('/' + id);
 
- 	nsp.on('connection', socket => {
 
- 		console.log('someone connected');
 
- 	});
 
- 	this.skipSong = () => {
 
- 		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 global.Timer(() => {
 
- 				console.log("Skip!");
 
- 				self.skipSong();
 
- 			}, currentSong.duration, paused);
 
- 			nsp.emit("skippedSong", currentSong);
 
- 		}
 
- 	};
 
- 	this.toggleVoteSkip = 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
 
- 		nsp.emit("voteSkip", skipVotes);
 
- 	};
 
- 	this.retrievePlaylist = () => {
 
- 		//TODO Use Rethink to get the Playlist for this station
 
- 	};
 
- 	this.pause = () => {
 
- 		if (!paused) {
 
- 			paused = true;
 
- 			timer.pause();
 
- 			nsp.emit("pause");
 
- 		}
 
- 	};
 
- 	this.unpause = () => {
 
- 		if (paused) {
 
- 			paused = false;
 
- 			timer.resume();
 
- 			nsp.emit("unpause");
 
- 		}
 
- 	};
 
- 	this.isPaused = () => {
 
- 		return paused;
 
- 	};
 
- 	this.getCurrentSong = () => {
 
- 		return currentSong;
 
- 	};
 
- 	this.lock = () => {
 
- 		if (!locked) {
 
- 			locked = true;
 
- 			nsp.emit("lock");
 
- 		}
 
- 	};
 
- 	this.unlock = () => {
 
- 		if (locked) {
 
- 			locked = false;
 
- 			nsp.emit("unlocked");
 
- 		}
 
- 	};
 
- 	this.isLocked = () => {
 
- 		return locked;
 
- 	};
 
- 	this.updateDisplayName = newDisplayName => {
 
- 		//TODO Update RethinkDB
 
- 		displayName = newDisplayName;
 
- 		nsp.emit("updateDisplayName", newDisplayName);
 
- 	};
 
- 	this.updateDescription = newDescription => {
 
- 		//TODO Update RethinkDB
 
- 		description = newDescription;
 
- 		nsp.emit("updateDescription", newDescription);
 
- 	};
 
- 	this.getId = () => {
 
- 		return id;
 
- 	};
 
- 	this.getDisplayName = () => {
 
- 		return displayName;
 
- 	};
 
- 	this.getDescription = () => {
 
- 		return description;
 
- 	};
 
- 	this.addUser = user => {
 
- 		users.add(user);
 
- 		nsp.emit("updateUsers", users);
 
- 	};
 
- 	this.removeUser = user => {
 
- 		users.splice(users.indexOf(user), 1);
 
- 		nsp.emit("updateUsers", users);
 
- 	};
 
- 	this.getUsers = () => {
 
- 		return users;
 
- 	};
 
- 	this.skipSong();
 
- }
 
- module.exports = {
 
- 	stations: [],
 
- 	initStation: (id, data) => {
 
- 		if (!this.getStation(id)) {
 
- 			let station = new Station(id, data);
 
- 			this.stations.push(station);
 
- 			return station;
 
- 		}
 
- 		else {
 
- 			return false;
 
- 		}
 
- 	},
 
- 	getStation: id => {
 
- 		let s = null;
 
- 		this.stations.forEach(function (station) {
 
- 			if (station.id == id) s = station;
 
- 		});
 
- 		return s;
 
- 	},
 
- 	getStations: () => {
 
- 		return this.stations;
 
- 	},
 
- 	// creates a brand new station
 
- 	createStation: data => {
 
- 		//TODO: add createStation functionality
 
- 		this.initStation(null, data);
 
- 	},
 
- 	// loads a station from the database
 
- 	loadStation: id => {
 
- 		//TODO: Get the data from RethinkDB
 
- 		this.initStation(id, {
 
- 			playlist: [
 
- 				{
 
- 					mid: "3498fd83",
 
- 					duration: 20000,
 
- 					title: "Test1"
 
- 				},
 
- 				{
 
- 					mid: "3498fd83434",
 
- 					duration: 10000,
 
- 					title: "Test2"
 
- 				}
 
- 			],
 
- 			currentSongIndex: 0,
 
- 			paused: false,
 
- 			locked: false,
 
- 			skipVotes: [],
 
- 			users: [],
 
- 			displayName: "",
 
- 			description: ""
 
- 		});
 
- 	}
 
- };
 
 
  |