| 
					
				 | 
			
			
				@@ -39,6 +39,40 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	<main-footer></main-footer> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	<div class="modal fade" id="queue" tabindex="-1" role="dialog" aria-labelledby="queue-modal"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		<div class="modal-dialog modal-large" role="document"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			<div class="modal-content"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<div class="modal-header"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<h5 class="modal-title">Add to Musare</h5> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<div class="modal-body"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<input class="form-control" type="text" placeholder="YouTube Query / Video ID / Video link / Playlist link" v-model="queueQuery"/> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<button type="button" class="btn btn-primary" @click="submitQueueQuery()">Search</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<button type="button" class="btn btn-error" @click="clearQueueQuery()" v-if="queueQueryActive">Clear List</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<div v-if="queueQueryActive"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<h2>Queue Results</h2> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<div v-for="item in queueQueryResults"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<h5>{{item.title}}</h5> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<button @click='addItemToItems(item.id)'>Add</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<br> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<hr> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<div class="row"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<h2>Items to add</h2> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						<div v-for="item in queueItems"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<h5>{{item.title}}</h5> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							<br> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				<div class="modal-footer"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					<button type="button" class="btn btn-primary left" data-dismiss="modal" @click="addItemsToQueue()">Add items to queue</button> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <script> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -60,7 +94,11 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				image: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				likes: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				dislikes: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				interval: 0 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				interval: 0, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				queueQuery: "", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				queueQueryActive: false, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				queueQueryResults: [], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				queueItems: [] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		methods: { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -197,6 +235,88 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			toggleDislike: function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				let local = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				local.stationSocket.emit("toggleDislike");//TODO Add code here to see if this was a success or not 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			addItemToItems: function(id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let local = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let ids = local.queueItems.map(function(item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					return item.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let item; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				local.queueQueryResults.forEach(function(result) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (result.id === id) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						console.log(result); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						item = result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (ids.indexOf(id) === -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					console.log(item, 222); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					local.queueItems.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					local.queueQuery = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					local.queueQueryActive = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					local.queueQueryResults = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					//TODO Error 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			addItemsToQueue: function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let local = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let items = local.queueItems; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				local.socket.emit("/songs/queue/addSongs/:songs", items, function(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					console.log(data); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (!data.err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						local.queueItems = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						$('#queue').modal('hide'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			submitQueueQuery: function() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let local = this; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				let query = local.queueQuery; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				local.socket.emit("/youtube/getVideos/:query", query, function(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					if (!data.err) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						/*queueQueryActive: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						 queueQueryResults:*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						if (data.type === "playlist") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							let added = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							let duplicate = 0; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							let items = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							let ids = local.queueItems.map(function(item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								return item.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							data.items.forEach(function(item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if (ids.indexOf(item.id) === -1) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									items.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									added++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									duplicate++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							//TODO Give result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							local.queueItems = local.queueItems.concat(items); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} else if (data.type === "video") { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							let ids = local.queueItems.map(function(item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								return item.id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							if (data.item !== undefined) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								if (ids.indexOf(data.item.id)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+									local.queueItems.push(data.item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							//TODO Give result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							local.queueQueryResults = []; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							data.items.forEach(function(item) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+								local.queueQueryResults.push(item); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							//TODO Give result 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+							local.queueQueryActive = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		ready: function() { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -205,7 +325,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				local.youtubeReady(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			let socket = this.$parent.socket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			local.socket = this.$parent.socket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			local.stationSocket = io.connect('http://dev.musare.com/edm'); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			local.stationSocket.on("skippedSong", function(currentSong) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				console.log("SKIPPED SONG"); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -229,7 +349,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			$("#volumeSlider").val(volume); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			// TODO: Remove this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			socket.emit("/stations/join/:id", "edm", function(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			local.socket.emit("/stations/join/:id", "edm", function(data) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				local.currentSong = data.data.currentSong; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				local.paused = data.data.paused; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				local.timePaused = data.data.timePaused; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -246,6 +366,10 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <style lang="sass"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	.modal-large { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		width: 75%; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	.station { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		flex: 1 0 auto; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		padding-top: 4.5vw; 
			 |