queue.ts (3659B)
1 /* 2 This Script manages the queue for play. 3 */ 4 5 import { ref } from "vue"; 6 7 export interface Queue { 8 videoId: string; 9 SongName: string; 10 } 11 12 let queue: Queue[] = []; 13 const albumTitle = ref<string>("Unknown Album"); 14 let nextSong: string= ""; 15 const playerRenderKey = ref(0); 16 const isLoop = ref(false); 17 const isFavorite = ref(false); 18 let songIndex:number = 0; 19 20 function get_albumTitle(): string { 21 return albumTitle.value; 22 } 23 24 function get_next(){ 25 console.log("get_next was called"); 26 if (isLoop.value) { 27 console.log("loop is true"); 28 playerRenderKey.value += 1; 29 } else { 30 songIndex++; 31 if (queue[songIndex] === null) { 32 console.log("queue was ended"); 33 } else { 34 nextSong = queue[songIndex].videoId; 35 console.log("i will play " + nextSong); 36 playerRenderKey.value += 1; 37 } 38 } 39 } 40 41 function get_nowSong(): Queue { 42 const favoriteList: Queue[] = JSON.parse(localStorage.getItem("favorite") || "[]"); 43 for (let i = 0; i < favoriteList.length; i++) { 44 if (favoriteList[i].videoId === queue[songIndex]?.videoId) { 45 isFavorite.value = true; 46 break; 47 }else{ 48 isFavorite.value = false; 49 } 50 } 51 const currentSong: Queue = queue[songIndex]; 52 return currentSong; 53 } 54 55 function add_album(Album: Queue[], AlbumTitle: string) { 56 queue = [...Album]; 57 albumTitle.value = AlbumTitle; 58 console.log(queue.map((queue) => queue.SongName)); 59 playerRenderKey.value += 1; 60 } 61 62 function del_all() { 63 queue = []; 64 albumTitle.value = "Unknown Album"; 65 } 66 67 function get_playerRenderKey() { 68 return playerRenderKey; 69 } 70 71 function onLoopButton() { 72 isLoop.value = !isLoop.value; 73 console.log("loop is " + isLoop.value); 74 } 75 76 function get_queueTitleList(): string[] { 77 console.log("get_queueTitleList was called"); 78 console.log(queue.map((queue) => queue.SongName)); 79 return queue.map((map) => map.SongName); 80 } 81 82 function event_favorite(song: Queue | undefined) { 83 console.log("event_favorite was called"); 84 if (song === undefined) { 85 console.log("song is undefined"); 86 return; 87 } 88 89 if (!isFavorite.value) { 90 console.log("this song is already favorite"); 91 if (localStorage.getItem("favorite") === null) { 92 console.log("favorite is null"); 93 localStorage.setItem("favorite", JSON.stringify([song])); 94 } else { 95 console.log("favorite is " + localStorage.getItem("favorite")); 96 let favoriteList = JSON.parse(localStorage.getItem("favorite") || "[]"); 97 favoriteList.push(song); 98 localStorage.setItem("favorite", JSON.stringify(favoriteList)); 99 } 100 isFavorite.value = true; 101 } else { 102 console.log("this song is not favorite"); 103 let favoriteList: Queue[] = JSON.parse(localStorage.getItem("favorite") || "[]"); 104 for (let i = 0; i < favoriteList.length; i++) { 105 if (favoriteList[i].videoId === song.videoId) { 106 favoriteList.splice(i, 1); 107 localStorage.setItem("favorite", JSON.stringify(favoriteList)); 108 break; 109 } 110 } 111 isFavorite.value = false; 112 } 113 } 114 115 function play_in_queue(recivedIndex: number) { 116 songIndex = recivedIndex; 117 console.log("songIndex is "+songIndex+"(in play_in_queue()") 118 playerRenderKey.value++; 119 } 120 121 export default { 122 get_albumTitle, 123 get_next, 124 get_nowSong, 125 add_album, 126 del_all, 127 get_playerRenderKey, 128 onLoopButton, 129 get_queueTitleList, 130 event_favorite, 131 play_in_queue, 132 isLoop, 133 isFavorite, 134 queue, 135 };