2021-09-05 17:10:14 +00:00
|
|
|
/**
|
2021-12-17 08:09:21 +00:00
|
|
|
* Handle multi channel notifications
|
2022-10-26 02:43:58 +00:00
|
|
|
*
|
2021-09-05 17:10:14 +00:00
|
|
|
*/
|
|
|
|
|
2022-10-26 02:43:58 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
|
|
checkMessages();
|
2021-09-05 17:10:14 +00:00
|
|
|
|
2021-12-05 09:42:33 +00:00
|
|
|
// page map to notification status
|
|
|
|
const messageTypes = {
|
2022-10-26 02:43:58 +00:00
|
|
|
download: ['message:download', 'message:add', 'message:rescan', 'message:playlistscan'],
|
|
|
|
channel: ['message:subchannel'],
|
|
|
|
channel_id: ['message:playlistscan'],
|
|
|
|
playlist: ['message:subplaylist'],
|
|
|
|
setting: ['message:setting'],
|
|
|
|
};
|
2021-09-05 17:10:14 +00:00
|
|
|
|
2021-12-05 09:42:33 +00:00
|
|
|
// start to look for messages
|
|
|
|
function checkMessages() {
|
2022-10-26 02:43:58 +00:00
|
|
|
let notifications = document.getElementById('notifications');
|
|
|
|
if (notifications) {
|
|
|
|
let dataOrigin = notifications.getAttribute('data');
|
|
|
|
getMessages(dataOrigin);
|
|
|
|
}
|
2021-09-05 17:10:14 +00:00
|
|
|
}
|
|
|
|
|
2021-12-05 09:42:33 +00:00
|
|
|
// get messages for page on timer
|
|
|
|
function getMessages(dataOrigin) {
|
2022-10-26 02:43:58 +00:00
|
|
|
fetch('/progress/')
|
|
|
|
.then(response => {
|
|
|
|
return response.json();
|
|
|
|
})
|
|
|
|
.then(responseData => {
|
|
|
|
let messages = buildMessage(responseData, dataOrigin);
|
|
|
|
if (messages.length > 0) {
|
|
|
|
// restart itself
|
|
|
|
setTimeout(function () {
|
|
|
|
getMessages(dataOrigin);
|
|
|
|
}, 3000);
|
|
|
|
}
|
2021-12-05 09:42:33 +00:00
|
|
|
});
|
|
|
|
}
|
2021-09-05 17:10:14 +00:00
|
|
|
|
2021-12-05 09:42:33 +00:00
|
|
|
// make div for all messages, return relevant
|
|
|
|
function buildMessage(responseData, dataOrigin) {
|
2022-10-26 02:43:58 +00:00
|
|
|
// filter relevan messages
|
|
|
|
let allMessages = responseData['messages'];
|
|
|
|
let messages = allMessages.filter(function (value) {
|
|
|
|
return messageTypes[dataOrigin].includes(value['status']);
|
|
|
|
}, dataOrigin);
|
|
|
|
// build divs
|
|
|
|
let notificationDiv = document.getElementById('notifications');
|
|
|
|
let nots = notificationDiv.childElementCount;
|
|
|
|
notificationDiv.innerHTML = '';
|
|
|
|
for (let i = 0; i < messages.length; i++) {
|
|
|
|
let messageData = messages[i];
|
|
|
|
let messageStatus = messageData['status'];
|
|
|
|
let messageBox = document.createElement('div');
|
|
|
|
let title = document.createElement('h3');
|
|
|
|
title.innerHTML = messageData['title'];
|
|
|
|
let message = document.createElement('p');
|
|
|
|
message.innerHTML = messageData['message'];
|
|
|
|
messageBox.appendChild(title);
|
|
|
|
messageBox.appendChild(message);
|
|
|
|
messageBox.classList.add(messageData['level'], 'notification');
|
|
|
|
notificationDiv.appendChild(messageBox);
|
|
|
|
if (messageStatus === 'message:download') {
|
|
|
|
checkDownloadIcons();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// reload page when no more notifications
|
|
|
|
if (nots > 0 && messages.length === 0) {
|
|
|
|
location.reload();
|
|
|
|
}
|
|
|
|
return messages;
|
2021-12-05 09:42:33 +00:00
|
|
|
}
|
2021-09-24 11:03:22 +00:00
|
|
|
|
2021-12-05 09:42:33 +00:00
|
|
|
// check if download icons are needed
|
|
|
|
function checkDownloadIcons() {
|
2022-10-26 02:43:58 +00:00
|
|
|
let iconBox = document.getElementById('downloadControl');
|
|
|
|
if (iconBox.childElementCount === 0) {
|
|
|
|
let downloadIcons = buildDownloadIcons();
|
|
|
|
iconBox.appendChild(downloadIcons);
|
|
|
|
}
|
2021-12-05 09:42:33 +00:00
|
|
|
}
|
2021-09-24 11:03:22 +00:00
|
|
|
|
|
|
|
// add dl control icons
|
|
|
|
function buildDownloadIcons() {
|
2022-10-26 02:43:58 +00:00
|
|
|
let downloadIcons = document.createElement('div');
|
|
|
|
downloadIcons.classList = 'dl-control-icons';
|
|
|
|
// stop icon
|
|
|
|
let stopIcon = document.createElement('img');
|
|
|
|
stopIcon.setAttribute('id', 'stop-icon');
|
|
|
|
stopIcon.setAttribute('title', 'Stop Download Queue');
|
|
|
|
stopIcon.setAttribute('src', '/static/img/icon-stop.svg');
|
|
|
|
stopIcon.setAttribute('alt', 'stop icon');
|
|
|
|
stopIcon.setAttribute('onclick', 'stopQueue()');
|
|
|
|
// kill icon
|
|
|
|
let killIcon = document.createElement('img');
|
|
|
|
killIcon.setAttribute('id', 'kill-icon');
|
|
|
|
killIcon.setAttribute('title', 'Kill Download Queue');
|
|
|
|
killIcon.setAttribute('src', '/static/img/icon-close.svg');
|
|
|
|
killIcon.setAttribute('alt', 'kill icon');
|
|
|
|
killIcon.setAttribute('onclick', 'killQueue()');
|
|
|
|
// stich together
|
|
|
|
downloadIcons.appendChild(stopIcon);
|
|
|
|
downloadIcons.appendChild(killIcon);
|
|
|
|
return downloadIcons;
|
2021-09-24 11:03:22 +00:00
|
|
|
}
|