2019-03-29 04:43:18 +08:00
|
|
|
import * as mpd from "./lib/mpd.js";
|
|
|
|
import * as html from "./lib/html.js";
|
|
|
|
import * as pubsub from "./lib/pubsub.js";
|
|
|
|
import * as ui from "./lib/ui.js";
|
2019-03-31 05:05:33 +08:00
|
|
|
import * as conf from "./conf.js";
|
2019-03-29 04:43:18 +08:00
|
|
|
|
|
|
|
let node;
|
2019-04-15 00:09:42 +08:00
|
|
|
const decoder = new TextDecoder("utf-8");
|
|
|
|
|
|
|
|
function decodeChunk(byteArray) {
|
|
|
|
return decoder.decode(byteArray);
|
|
|
|
}
|
2019-03-29 04:43:18 +08:00
|
|
|
|
|
|
|
async function onClick(e) {
|
|
|
|
let url = prompt("Please enter a YouTube URL:");
|
|
|
|
if (!url) { return; }
|
|
|
|
|
2019-03-31 05:05:33 +08:00
|
|
|
let button = e.target;
|
|
|
|
button.disabled = true;
|
|
|
|
|
|
|
|
let p = node.querySelector("p");
|
|
|
|
p.textContent = "";
|
|
|
|
|
2019-03-29 04:43:18 +08:00
|
|
|
let body = new URLSearchParams();
|
|
|
|
body.set("url", url);
|
|
|
|
let response = await fetch("/youtube", {method:"POST", body});
|
2019-03-31 05:05:33 +08:00
|
|
|
|
2019-04-15 00:09:42 +08:00
|
|
|
let reader = response.body.getReader();
|
|
|
|
while (true) {
|
|
|
|
let { done, value } = await reader.read();
|
|
|
|
if (done) { break; }
|
|
|
|
p.textContent += decodeChunk(value);
|
|
|
|
}
|
|
|
|
reader.releaseLock();
|
2019-03-31 05:05:33 +08:00
|
|
|
|
2019-04-15 00:09:42 +08:00
|
|
|
button.disabled = false;
|
2019-03-31 05:05:33 +08:00
|
|
|
if (response.status == 200) {
|
|
|
|
mpd.command(`update ${mpd.escape(conf.ytPath)}`);
|
|
|
|
}
|
2019-03-29 04:43:18 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
export async function activate() {}
|
|
|
|
|
|
|
|
export function init(n) {
|
|
|
|
node = n;
|
|
|
|
|
2019-03-29 05:52:57 +08:00
|
|
|
let button = node.querySelector(".go").addEventListener("click", onClick);
|
2019-03-29 04:43:18 +08:00
|
|
|
}
|