88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
addEventListener('DOMContentLoaded', () => {
|
|
/** @type{HTMLInputElement} */
|
|
const urlField = document.getElementById('url')
|
|
/** @type{HTMLSelectElement} */
|
|
const site = document.getElementById('site-select')
|
|
|
|
document.getElementById('guess-site-btn').addEventListener('click', () => {
|
|
const url = urlField.value
|
|
if (url.includes('/watch?v=') || url.includes('/playlist?list=')) {
|
|
if (site.value == 'yt_proxied') {
|
|
return
|
|
}
|
|
site.value = 'youtube'
|
|
} else if (url.includes('://music.yandex.')) {
|
|
site.value = 'yandex'
|
|
}
|
|
})
|
|
|
|
const socket = new WebSocket('/ws')
|
|
|
|
const itemsDiv = document.getElementById('items-container')
|
|
let items = []
|
|
|
|
const logField = document.getElementById('log')
|
|
|
|
document.getElementById('items-btn').addEventListener('click', () => {
|
|
socket.send(JSON.stringify({
|
|
action: 'list',
|
|
site: site.value,
|
|
url: urlField.value,
|
|
}))
|
|
logField.textContent = '' // clear
|
|
})
|
|
|
|
document.getElementById('dl-btn').addEventListener('click', () => {
|
|
socket.send(JSON.stringify({
|
|
action: 'download',
|
|
site: site.value,
|
|
url: urlField.value,
|
|
items: items,
|
|
}))
|
|
items = []
|
|
logField.textContent = ''
|
|
})
|
|
|
|
socket.addEventListener('message', ev => {
|
|
const msg = JSON.parse(ev.data)
|
|
switch (msg.type) {
|
|
case 'items':
|
|
itemsDiv.textContent = ''
|
|
const len = msg.data.length
|
|
for (let i = 1; i <= len; i++) {
|
|
const itemElem = document.createElement('label')
|
|
const itemCheckbox = document.createElement('input')
|
|
itemCheckbox.type = 'checkbox'
|
|
itemCheckbox.addEventListener('change', () => {
|
|
if (itemCheckbox.checked) {
|
|
items.push(i)
|
|
} else {
|
|
items.splice(items.indexOf(i), 1)
|
|
}
|
|
})
|
|
itemElem.append(itemCheckbox)
|
|
itemText = document.createTextNode(msg.data[i - 1])
|
|
itemElem.append(itemText)
|
|
itemsDiv.append(itemElem)
|
|
}
|
|
break
|
|
case 'ydl_log':
|
|
const lineElem = document.createElement('span')
|
|
switch (msg.level) {
|
|
case 'warning':
|
|
lineElem.className = 'log-warning'
|
|
break
|
|
case 'error':
|
|
lineElem.className = 'log-error'
|
|
break
|
|
default: // add no classes if `debug` or some unknown level
|
|
break
|
|
}
|
|
lineElem.innerText = msg.data + '\n'
|
|
logField.append(lineElem)
|
|
break
|
|
case 'ydl_end':
|
|
break
|
|
}
|
|
})
|
|
})
|