next lyric fix

This commit is contained in:
stjet
2025-01-05 10:01:47 +00:00
parent 942e5c37e7
commit c605315530

View File

@@ -24,7 +24,7 @@
padding-left: 15px; padding-left: 15px;
} }
#captions-box { #captions-box {
height: 1em; min-height: 4.5em;
} }
.artist-song-filter { .artist-song-filter {
padding-left: 15px; padding-left: 15px;
@@ -39,7 +39,7 @@
padding-left: 2px; padding-left: 2px;
} }
.q-item-button { .q-item-button {
margin-left: 5px; margin-right: 5px;
} }
label:hover > .add-to-queue-btns { label:hover > .add-to-queue-btns {
display: inline-block; display: inline-block;
@@ -128,6 +128,7 @@
let queue = []; let queue = [];
let queue_id_counter = 0; let queue_id_counter = 0;
let show_title = false; let show_title = false;
let get_next_lyric = true;
let in_queue_ele = document.getElementById("in-queue"); let in_queue_ele = document.getElementById("in-queue");
let empty_ele = document.getElementById("empty-queue"); let empty_ele = document.getElementById("empty-queue");
let audio_ele = document.getElementById("audio"); let audio_ele = document.getElementById("audio");
@@ -172,6 +173,18 @@
if (active_cue) { if (active_cue) {
captions_box.appendChild(active_cue.getCueAsHTML()); captions_box.appendChild(active_cue.getCueAsHTML());
} }
if (get_next_lyric) {
//00:00:03.500 --> 00:00:08.200
const ct = audio_ele.currentTime;
const fi = Array.from(captions_ele.track.cues).findIndex((cue) => ct < cue.startTime);
if (fi !== -1) {
let next_lyric = document.createElement("DIV");
next_lyric.classList.add("next-lyric");
next_lyric.innerText = "Next: ";
next_lyric.appendChild(captions_ele.track.cues[fi].getCueAsHTML());
captions_box.appendChild(next_lyric);
}
}
}); });
function add_to_queue(name) { function add_to_queue(name) {
@@ -181,9 +194,14 @@
//<template> is not supported in IE. Yes, I know this is for TOR browser, but still feels wrong. also its not that useful here //<template> is not supported in IE. Yes, I know this is for TOR browser, but still feels wrong. also its not that useful here
let queue_item = document.createElement("DIV"); let queue_item = document.createElement("DIV");
queue_item.id = queue_id; queue_item.id = queue_id;
let queue_name = document.createElement("B"); let queue_remove = document.createElement("BUTTON");
queue_name.innerText = name; queue_remove.className = "q-item-button";
queue_item.appendChild(queue_name); queue_remove.innerText = "x";
queue_remove.onclick = () => {
document.getElementById(queue_id).remove();
queue = queue.filter((item) => item[1] !== queue_id);
};
queue_item.appendChild(queue_remove);
let queue_up = document.createElement("BUTTON"); let queue_up = document.createElement("BUTTON");
queue_up.className = "q-item-button"; queue_up.className = "q-item-button";
queue_up.innerText = "^"; queue_up.innerText = "^";
@@ -199,14 +217,9 @@
in_queue_ele.insertBefore(qir, in_queue_ele.children.item(i-1)); in_queue_ele.insertBefore(qir, in_queue_ele.children.item(i-1));
}; };
queue_item.appendChild(queue_up); queue_item.appendChild(queue_up);
let queue_remove = document.createElement("BUTTON"); let queue_name = document.createElement("B");
queue_remove.className = "q-item-button"; queue_name.innerText = name;
queue_remove.innerText = "Remove From Queue"; queue_item.appendChild(queue_name);
queue_remove.onclick = () => {
document.getElementById(queue_id).remove();
queue = queue.filter((item) => item[1] !== queue_id);
};
queue_item.appendChild(queue_remove);
in_queue_ele.appendChild(queue_item); in_queue_ele.appendChild(queue_item);
queue_id_counter++; queue_id_counter++;
} }
@@ -272,13 +285,25 @@
} }
function add_playlist(playlist_songs) { function add_playlist(playlist_songs) {
let randomized = []; //preprocess to expand *
while (randomized.length < playlist_songs.length) { let playlist_process = [];
let rand = Math.floor(Math.random() * playlist_songs.length); for (const song of playlist_songs) {
if (!randomized.includes(playlist_songs[rand])) { const song_split = song.split("/");
randomized.push(playlist_songs[rand]); if (song_split[1] === "*") {
playlist_process.push(...playable_songs.filter((song) => song.startsWith(`${song_split[0]}/`)));
} else {
playlist_process.push(song);
} }
} }
playlist_songs = playlist_process;
//add to queue
let randomized = [];
const psl = playlist_songs.length;
for (let u = 0; u < psl; u++) {
let rand = Math.floor(Math.random() * playlist_songs.length);
randomized.push(playlist_songs[rand]);
playlist_songs.splice(rand, 1);
}
for (const n of randomized) { for (const n of randomized) {
add_to_queue(n); add_to_queue(n);
} }