tubearchivist/tubearchivist/static/progress.js

107 lines
3.3 KiB
JavaScript
Raw Normal View History

2021-09-05 17:10:14 +00:00
/**
* Handle progress bar on /download
*
*/
setTimeout(function(){
checkMessage();
}, 1000);
// initial check for messages
function checkMessage() {
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', '/downloads/progress', true);
req.onload = function() {
var dlProgress = req.response;
// var dlStatus = dlProgress['status'];
2021-09-05 17:10:14 +00:00
if (dlProgress['status']) {
buildDownloadMessage(dlProgress);
handleInterval();
// if (dlStatus == 'downloading') {
// buildDownloadIcons();
// };
2021-09-05 17:10:14 +00:00
};
};
req.send();
}
// set interval until no more messages
function handleInterval() {
var watchDownload = setInterval(function() {
var req = new XMLHttpRequest();
req.responseType = 'json';
2021-10-11 09:55:08 +00:00
req.open('GET', '/downloads/progress/', true);
2021-09-05 17:10:14 +00:00
req.onload = function() {
var dlProgress = req.response;
if (dlProgress['status']) {
buildDownloadMessage(dlProgress);
} else {
clearInterval(watchDownload);
location.reload();
};
};
req.send();
}, 3000);
};
// remove and set message
function buildDownloadMessage(dlProgress) {
var box = document.getElementById('downloadMessage');
box.innerHTML = '';
var dlStatus = dlProgress['status'];
var dlTitle = dlProgress['title'];
var dlMessage = dlProgress['message'];
var dlLevel = dlProgress['level'];
2021-09-05 17:10:14 +00:00
// animate
if (dlStatus === 'rescan') {
animate('rescan-icon', 'rotate-img');
} else if (dlStatus === 'downloading') {
animate('download-icon', 'bounce-img');
};
// div box
var box = document.getElementById('downloadMessage');
var message = document.createElement('div');
message.classList.add('download-progress');
message.classList.add(dlLevel);
2021-09-05 17:10:14 +00:00
message.id = 'progress';
message.setAttribute('data', dlStatus);
var title = document.createElement('h3');
title.innerHTML = dlTitle;
var messageText = document.createElement('p');
messageText.innerHTML = dlMessage;
message.appendChild(title);
message.appendChild(messageText);
box.appendChild(message);
if (dlStatus == 'downloading' && dlLevel != 'error') {
box.appendChild(buildDownloadIcons());
};
2021-09-05 17:10:14 +00:00
};
2021-09-24 11:03:22 +00:00
// add dl control icons
function buildDownloadIcons() {
var iconBox = document.createElement('div');
iconBox.classList = 'dl-control-icons';
2021-09-25 08:35:36 +00:00
// stop icon
2021-09-24 11:03:22 +00:00
var 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()');
2021-09-25 08:35:36 +00:00
// kill icon
var 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()');
2021-09-24 11:03:22 +00:00
// stich together
iconBox.appendChild(stopIcon);
2021-09-25 08:35:36 +00:00
iconBox.appendChild(killIcon);
return iconBox
2021-09-24 11:03:22 +00:00
}