| 
					
				 | 
			
			
				@@ -1,3 +1,136 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+<script setup lang="ts"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { ref, computed, onMounted } from "vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useStore } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import Toast from "toasters"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import SongItem from "@/components/SongItem.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import SearchQueryItem from "@/components/SearchQueryItem.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import PlaylistTabBase from "@/components/PlaylistTabBase.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// import SearchYoutube from "@/mixins/SearchYoutube.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// import SearchMusare from "@/mixins/SearchMusare.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useSearchYoutube } from "@/composables/useSearchYoutube"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import { useSearchMusare } from "@/composables/useSearchMusare"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const store = useStore(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { youtubeSearch, searchForSongs, loadMoreSongs } = useSearchYoutube(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { musareSearch, searchForMusareSongs } = useSearchMusare(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const { socket } = store.state.websockets; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const props = defineProps({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	modalUuid: { type: String, default: "" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sector: { type: String, default: "station" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	disableAutoRequest: { type: Boolean, default: false } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const tab = ref("songs"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const sitename = ref("Musare"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const tabs = ref({}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const loggedIn = computed(() => store.state.user.auth.loggedIn); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const role = computed(() => store.state.user.auth.role); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const userId = computed(() => store.state.user.auth.userId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const station = computed({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (props.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return this.$store.state.modals.manageStation[props.modalUuid] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.station; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return this.$store.state.station.station; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	set(station) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (props.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.$store.commit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				`modals/manageStation/${props.modalUuid}/updateStation`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		else this.$store.commit("station/updateStation", station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const blacklist = computed({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 	get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 		if (props.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 			return this.$store.state.modals.manageStation[props.modalUuid] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 				.blacklist; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 		return this.$store.state.station.blacklist; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 	set(blacklist) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 		if (props.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 			this.$store.commit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 				`modals/manageStation/${props.modalUuid}/setBlacklist`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 				blacklist 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 		else this.$store.commit("station/setBlacklist", blacklist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const songsList = computed({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (props.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return this.$store.state.modals.manageStation[props.modalUuid] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				.songsList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return this.$store.state.station.songsList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	set(songsList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if (props.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			this.$store.commit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				`modals/manageStation/${props.modalUuid}/updateSongsList`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				songsList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		else this.$store.commit("station/updateSongsList", songsList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const musareResultsLeftCount = computed( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	() => musareSearch.value.count - musareSearch.value.results.length 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const nextPageMusareResultsCount = computed(() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Math.min(musareSearch.value.pageSize, musareResultsLeftCount.value) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const songsInQueue = computed(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (station.value.currentSong) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return songsList.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.map(song => song.youtubeId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			.concat(station.value.currentSong.youtubeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return songsList.value.map(song => song.youtubeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// const currentUserQueueSongs = computed( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 	() => 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 		songsList.value.filter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 			queueSong => queueSong.requestedBy === userId.value 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// 		).length 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// ); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const showTab = _tab => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tabs.value[`${_tab}-tab`].scrollIntoView({ block: "nearest" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	tab.value = _tab; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+const addSongToQueue = (youtubeId, index) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	socket.dispatch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		"stations.addToQueue", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		station.value._id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		youtubeId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (res.status !== "success") new Toast(`Error: ${res.message}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				if (index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					youtubeSearch.value.songs.results[index].isAddedToQueue = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+						true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				new Toast(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+onMounted(async () => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	sitename.value = await lofig.get("siteSettings.sitename"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	showTab("songs"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	<div class="station-playlists"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		<p class="top-info has-text-centered"> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -7,7 +140,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 			<div class="tab-selection"> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					class="button is-default" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					ref="songs-tab" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					:ref="el => (tabs['songs-tab'] = el)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					:class="{ selected: tab === 'songs' }" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					@click="showTab('songs')" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -16,7 +149,7 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				<button 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					v-if="!disableAutoRequest" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					class="button is-default" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					ref="autorequest-tab" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+					:ref="el => (tabs['autorequest-tab'] = el)" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					:class="{ selected: tab === 'autorequest' }" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 					@click="showTab('autorequest')" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 				> 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -182,150 +315,6 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 		</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 	</div> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 </template> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-<script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import { mapState, mapGetters } from "vuex"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import Toast from "toasters"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import SongItem from "@/components/SongItem.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import SearchQueryItem from "@/components/SearchQueryItem.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import PlaylistTabBase from "@/components/PlaylistTabBase.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import SearchYoutube from "@/mixins/SearchYoutube.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-import SearchMusare from "@/mixins/SearchMusare.vue"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-export default { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	components: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SongItem, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		SearchQueryItem, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		PlaylistTabBase 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	mixins: [SearchYoutube, SearchMusare], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	props: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		modalUuid: { type: String, default: "" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		sector: { type: String, default: "station" }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		disableAutoRequest: { type: Boolean, default: false } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	data() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			tab: "songs", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			sitename: "Musare" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	computed: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		station: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (this.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return this.$store.state.modals.manageStation[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						this.modalUuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					].station; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return this.$store.state.station.station; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			set(station) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (this.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.$store.commit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						`modals/manageStation/${this.modalUuid}/updateStation`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						station 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else this.$store.commit("station/updateStation", station); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		blacklist: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (this.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return this.$store.state.modals.manageStation[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						this.modalUuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					].blacklist; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return this.$store.state.station.blacklist; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			set(blacklist) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (this.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.$store.commit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						`modals/manageStation/${this.modalUuid}/setBlacklist`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						blacklist 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else this.$store.commit("station/setBlacklist", blacklist); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		songsList: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			get() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (this.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					return this.$store.state.modals.manageStation[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						this.modalUuid 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					].songsList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return this.$store.state.station.songsList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			set(songsList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				if (this.sector === "manageStation") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					this.$store.commit( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						`modals/manageStation/${this.modalUuid}/updateSongsList`, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						songsList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				else this.$store.commit("station/updateSongsList", songsList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		musareResultsLeftCount() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return this.musareSearch.count - this.musareSearch.results.length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		nextPageMusareResultsCount() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return Math.min( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.musareSearch.pageSize, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.musareResultsLeftCount 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		songsInQueue() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if (this.station.currentSong) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				return this.songsList 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					.map(song => song.youtubeId) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					.concat(this.station.currentSong.youtubeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return this.songsList.map(song => song.youtubeId); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		currentUserQueueSongs() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return this.songsList.filter( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				queueSong => queueSong.requestedBy === this.userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			).length; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapState("user", { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			loggedIn: state => state.auth.loggedIn, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			role: state => state.auth.role, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			userId: state => state.auth.userId 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		...mapGetters({ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			socket: "websockets/getSocket" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	async mounted() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.sitename = await lofig.get("siteSettings.sitename"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		this.showTab("songs"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	methods: { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		showTab(tab) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.$refs[`${tab}-tab`].scrollIntoView({ block: "nearest" }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.tab = tab; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		}, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		addSongToQueue(youtubeId, index) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			this.socket.dispatch( 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				"stations.addToQueue", 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				this.station._id, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				youtubeId, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				res => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					if (res.status !== "success") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						new Toast(`Error: ${res.message}`); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						if (index) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							this.youtubeSearch.songs.results[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-								index 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-							].isAddedToQueue = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-						new Toast(res.message); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-					} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-</script> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 <style lang="less" scoped> 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 .night-mode { 
			 |