| 
														
															@@ -13,14 +13,6 @@ const stations = require('../stations'); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const songs = require('../songs'); 
														 | 
														
														 | 
														
															 const songs = require('../songs'); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 const hooks = require('./hooks'); 
														 | 
														
														 | 
														
															 const hooks = require('./hooks'); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-cache.sub('station.locked', stationId => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	io.io.to(`station.${stationId}`).emit("event:stations.locked"); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-}); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-cache.sub('station.unlocked', stationId => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	io.io.to(`station.${stationId}`).emit("event:stations.unlocked"); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-}); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 cache.sub('station.pause', stationId => { 
														 | 
														
														 | 
														
															 cache.sub('station.pause', stationId => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	io.io.to(`station.${stationId}`).emit("event:stations.pause"); 
														 | 
														
														 | 
														
															 	io.io.to(`station.${stationId}`).emit("event:stations.pause"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }); 
														 | 
														
														 | 
														
															 }); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -41,8 +33,34 @@ cache.sub('station.queueUpdate', stationId => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 cache.sub('station.create', stationId => { 
														 | 
														
														 | 
														
															 cache.sub('station.create', stationId => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	stations.initializeStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 	stations.initializeStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		console.log("*************", err, station); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		//TODO Emit to admin station page 
														 | 
														
														 | 
														
															 		//TODO Emit to admin station page 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		io.io.to('home').emit("event:stations.created", station); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		// TODO If community, check if on whitelist 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		console.log("*************", station.privacy); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		if (station.privacy === 'public') io.io.to('home').emit("event:stations.created", station); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		else { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			let sockets = io.io.to('home').sockets; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			console.log("*************", sockets.length); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			for (let socketId in sockets) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				let socket = sockets[socketId]; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				let session = sockets[socketId].session; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				console.log("*************", session); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				if (session.sessionId) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					cache.hget('sessions', session.sessionId, (err, session) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						console.log("*************", err, session); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						if (!err && session) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							console.log("*************"); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							db.models.user.findOne({_id: session.userId}, (err, user) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								console.log("*************", err, user.role, station.type, station.owner, session.userId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								if (user.role === 'admin') socket.emit("event:stations.created", station); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								else if (station.type === "community" && station.owner === session.userId) socket.emit("event:stations.created", station); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}); 
														 | 
														
														 | 
														
															 	}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }); 
														 | 
														
														 | 
														
															 }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -56,8 +74,6 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 * @return {{ status: String, stations: Array }} 
														 | 
														
														 | 
														
															 	 * @return {{ status: String, stations: Array }} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	 */ 
														 | 
														
														 | 
														
															 	 */ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	index: (session, cb) => { 
														 | 
														
														 | 
														
															 	index: (session, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		// TODO: the logic should be a bit more personalized to the users preferred genres 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		// and it should probably just a different cache table then 'stations' 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		cache.hgetall('stations', (err, stations) => { 
														 | 
														
														 | 
														
															 		cache.hgetall('stations', (err, stations) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err && err !== true) { 
														 | 
														
														 | 
														
															 			if (err && err !== true) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -72,6 +88,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			for (let prop in stations) { 
														 | 
														
														 | 
														
															 			for (let prop in stations) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				// TODO If community, check if on whitelist 
														 | 
														
														 | 
														
															 				// TODO If community, check if on whitelist 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				let station = stations[prop]; 
														 | 
														
														 | 
														
															 				let station = stations[prop]; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				console.log(station) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				if (station.privacy === 'public') add(true, station); 
														 | 
														
														 | 
														
															 				if (station.privacy === 'public') add(true, station); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				else if (!session.sessionId) add(false); 
														 | 
														
														 | 
														
															 				else if (!session.sessionId) add(false); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				else { 
														 | 
														
														 | 
														
															 				else { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -129,9 +146,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if (err && err !== true) { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				return cb({ status: 'error', message: 'An error occurred while joining the station' }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (err && err !== true) return cb({ status: 'error', message: 'An error occurred while joining the station' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (station) { 
														 | 
														
														 | 
														
															 			if (station) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -172,7 +187,10 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 									timePaused: station.timePaused, 
														 | 
														
														 | 
														
															 									timePaused: station.timePaused, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 									description: station.description, 
														 | 
														
														 | 
														
															 									description: station.description, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 									displayName: station.displayName, 
														 | 
														
														 | 
														
															 									displayName: station.displayName, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-									privacy: station.privacy 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+									privacy: station.privacy, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+									partyMode: station.partyMode, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+									owner: station.owner, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+									privatePlaylist: station.privatePlaylist 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 								} 
														 | 
														
														 | 
														
															 								} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 							}); 
														 | 
														
														 | 
														
															 							}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 						}); 
														 | 
														
														 | 
														
															 						}); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -187,7 +205,8 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 								timePaused: station.timePaused, 
														 | 
														
														 | 
														
															 								timePaused: station.timePaused, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 								description: station.description, 
														 | 
														
														 | 
														
															 								description: station.description, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 								displayName: station.displayName, 
														 | 
														
														 | 
														
															 								displayName: station.displayName, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-								privacy: station.privacy 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								privacy: station.privacy, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								owner: station.owner 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 							} 
														 | 
														
														 | 
														
															 							} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 						}); 
														 | 
														
														 | 
														
															 						}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 					} 
														 | 
														
														 | 
														
															 					} 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -234,7 +253,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	},*/ 
														 | 
														
														 | 
														
															 	},*/ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	forceSkip: hooks.adminRequired((session, stationId, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	forceSkip: hooks.ownerRequired((session, stationId, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err && err !== true) { 
														 | 
														
														 | 
														
															 			if (err && err !== true) { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -280,7 +299,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}, 
														 | 
														
														 | 
														
															 	}, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	updateDisplayName: hooks.adminRequired((session, stationId, newDisplayName, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	updateDisplayName: hooks.ownerRequired((session, stationId, newDisplayName, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		db.models.station.update({_id: stationId}, {$set: {displayName: newDisplayName}}, (err) => { 
														 | 
														
														 | 
														
															 		db.models.station.update({_id: stationId}, {$set: {displayName: newDisplayName}}, (err) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
														
														 | 
														
															 			if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			stations.updateStation(stationId, () => { 
														 | 
														
														 | 
														
															 			stations.updateStation(stationId, () => { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -290,7 +309,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	updateDescription: hooks.adminRequired((session, stationId, newDescription, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	updateDescription: hooks.ownerRequired((session, stationId, newDescription, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		db.models.station.update({_id: stationId}, {$set: {description: newDescription}}, (err) => { 
														 | 
														
														 | 
														
															 		db.models.station.update({_id: stationId}, {$set: {description: newDescription}}, (err) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
														
														 | 
														
															 			if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			stations.updateStation(stationId, () => { 
														 | 
														
														 | 
														
															 			stations.updateStation(stationId, () => { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -300,7 +319,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	updatePrivacy: hooks.adminRequired((session, stationId, newPrivacy, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	updatePrivacy: hooks.ownerRequired((session, stationId, newPrivacy, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		db.models.station.update({_id: stationId}, {$set: {privacy: newPrivacy}}, (err) => { 
														 | 
														
														 | 
														
															 		db.models.station.update({_id: stationId}, {$set: {privacy: newPrivacy}}, (err) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
														
														 | 
														
															 			if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			stations.updateStation(stationId, () => { 
														 | 
														
														 | 
														
															 			stations.updateStation(stationId, () => { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -310,7 +329,22 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	pause: hooks.adminRequired((session, stationId, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	updatePartyMode: hooks.ownerRequired((session, stationId, newPartyMode, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (err) return cb({ status: 'failure', message: err }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (station.partyMode === newPartyMode) return cb({ status: 'failure', message: 'The party mode was already ' + ((newPartyMode) ? 'enabled.' : 'disabled.') }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			db.models.station.update({_id: stationId}, {$set: {partyMode: newPartyMode}}, (err) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				if (err) return cb({ status: 'failure', message: 'Something went wrong when saving the station.' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				stations.updateStation(stationId, () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					//TODO Pub/sub for privacy change 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					stations.skipStation(stationId)(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					cb({ status: 'success', message: 'Successfully updated the party mode.' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				}) 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	pause: hooks.ownerRequired((session, stationId, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err && err !== true) { 
														 | 
														
														 | 
														
															 			if (err && err !== true) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				return cb({ status: 'error', message: 'An error occurred while pausing the station' }); 
														 | 
														
														 | 
														
															 				return cb({ status: 'error', message: 'An error occurred while pausing the station' }); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -336,7 +370,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	resume: hooks.adminRequired((session, stationId, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	resume: hooks.ownerRequired((session, stationId, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err && err !== true) { 
														 | 
														
														 | 
														
															 			if (err && err !== true) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				return cb({ status: 'error', message: 'An error occurred while resuming the station' }); 
														 | 
														
														 | 
														
															 				return cb({ status: 'error', message: 'An error occurred while resuming the station' }); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -360,14 +394,17 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	remove: hooks.adminRequired((session, stationId, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		db.models.station.remove({ _id: stationId }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		cache.hdel('stations', stationId, () => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			return cb({ status: 'success', message: 'Station successfully removed' }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	remove: hooks.ownerRequired((session, stationId, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		db.models.station.remove({ _id: stationId }, (err) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			console.log(err, stationId); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (err) return cb({status: 'failure', message: 'Something went wrong when deleting that station.'}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			cache.hdel('stations', stationId, () => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				return cb({ status: 'success', message: 'Station successfully removed' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	create: hooks.adminRequired((session, data, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	create: hooks.loginRequired((session, data, cb) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		async.waterfall([ 
														 | 
														
														 | 
														
															 		async.waterfall([ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			(next) => { 
														 | 
														
														 | 
														
															 			(next) => { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -385,61 +422,41 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			(station, next) => { 
														 | 
														
														 | 
														
															 			(station, next) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 				if (station) return next({ 'status': 'failure', 'message': 'A station with that id already exists' }); 
														 | 
														
														 | 
														
															 				if (station) return next({ 'status': 'failure', 'message': 'A station with that id already exists' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				const { _id, displayName, description, genres, playlist } = data; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				db.models.station.create({ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					_id, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					displayName, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					description, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					type: "official", 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					playlist, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					genres, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					currentSong: stations.defaultSong 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				}, next); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				const { _id, displayName, description, genres, playlist, type } = data; 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				if (type == 'official') { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					db.models.station.create({ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						_id, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						displayName, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						description, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						type, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						privacy: 'private', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						playlist, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						genres, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						currentSong: stations.defaultSong 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					}, next); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				} else if (type == 'community') { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					cache.hget('sessions', session.sessionId, (err, session) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						db.models.station.create({ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							_id, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							displayName, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							description, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							type, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							privacy: 'private', 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							owner: session.userId, 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							queue: [], 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							currentSong: null 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						}, next); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			} 
														 | 
														
														 | 
														
															 			} 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		], (err, station) => { 
														 | 
														
														 | 
														
															 		], (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if (err) {console.log(err); return cb({ 'status': 'failure', 'message': 'Something went wrong.'});} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			cache.pub('station.create', data._id); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (err) console.log(err); return cb({ 'status': 'failure', 'message': 'Something went wrong.'}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			return cb(null, { 'status': 'success', 'message': 'Successfully created station.' }); 
														 | 
														
														 | 
														
															 			return cb(null, { 'status': 'success', 'message': 'Successfully created station.' }); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		}); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	}), 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	createCommunity: hooks.loginRequired((session, data, cb) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		async.waterfall([ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			(next) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				return (data) ? next() : cb({ 'status': 'failure', 'message': 'Invalid data' }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			}, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			// check the cache for the station 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			(next) => cache.hget('stations', data._id, next), 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			// if the cached version exist 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			(station, next) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				if (station) return next({ 'status': 'failure', 'message': 'A station with that id already exists' }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				db.models.station.findOne({ _id: data._id }, next); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			}, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			(station, next) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				if (station) return next({ 'status': 'failure', 'message': 'A station with that id already exists' }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				const { _id, displayName, description } = data; 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				db.models.station.create({ 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					_id, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					displayName, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					description, 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					type: "community", 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					queue: [], 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-					currentSong: null 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-				}, next); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			} 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-		], (err, station) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			if (err) console.error(err); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			cache.pub('station.create', data._id); 
														 | 
														
														 | 
														
															 			cache.pub('station.create', data._id); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															-			return cb({ 'status': 'success', 'message': 'Successfully created station.' }); 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															- 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	addToQueue: hooks.loginRequired((session, stationId, songId, cb, userId) => { 
														 | 
														
														 | 
														
															 	addToQueue: hooks.loginRequired((session, stationId, songId, cb, userId) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err) return cb(err); 
														 | 
														
														 | 
														
															 			if (err) return cb(err); 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -481,7 +498,7 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															-	removeFromQueue: hooks.adminRequired((session, stationId, songId, cb, userId) => { 
														 | 
														
														 | 
														
															 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	removeFromQueue: hooks.ownerRequired((session, stationId, songId, cb, userId) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
														
														 | 
														
															 		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (err) return cb(err); 
														 | 
														
														 | 
														
															 			if (err) return cb(err); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 			if (station.type === 'community') { 
														 | 
														
														 | 
														
															 			if (station.type === 'community') { 
														 | 
													
												
											
										
											
												
													
														 | 
														
															@@ -513,4 +530,26 @@ module.exports = { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 		}); 
														 | 
														
														 | 
														
															 		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 	}), 
														 | 
														
														 | 
														
															 	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															  
														 | 
														
														 | 
														
															  
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	selectPrivatePlaylist: hooks.csOwnerRequired((session, stationId, playlistId, cb, userId) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		stations.getStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (err) return cb(err); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			if (station.type === 'community') { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				if (station.privatePlaylist === playlistId) return cb({'status': 'failure', 'message': 'That playlist is already selected.'}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				db.models.playlist.findOne({_id: playlistId}, (err, playlist) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					if (err) return cb(err); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					if (playlist) { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						db.models.station.update({_id: stationId}, {$set: {privatePlaylist: playlistId, currentSongIndex: 0}}, (err) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							if (err) return cb(err); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							stations.updateStation(stationId, (err, station) => { 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								if (err) return cb(err); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								stations.skipStation(stationId)(); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+								cb({'status': 'success', 'message': 'Playlist selected.'}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+							}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+						}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+					} else cb({'status': 'failure', 'message': 'Playlist not found.'}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+				}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+			} else cb({'status': 'failure', 'message': 'That station is not a community station.'}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+		}); 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+	}), 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 
														 | 
														
														 | 
														
															+ 
														 | 
													
												
											
												
													
														| 
														 | 
														
															 }; 
														 | 
														
														 | 
														
															 }; 
														 |