tubearchivist/tubearchivist/static/progress.js

85 lines
2.5 KiB
JavaScript

/**
* 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;
if (dlProgress['status']) {
console.log('start interval');
buildDownloadMessage(dlProgress);
handleInterval();
};
console.log(JSON.stringify(dlProgress));
};
req.send();
}
// set interval until no more messages
function handleInterval() {
var watchDownload = setInterval(function() {
var req = new XMLHttpRequest();
req.responseType = 'json';
req.open('GET', '/downloads/progress', true);
req.onload = function() {
var dlProgress = req.response;
if (dlProgress['status']) {
console.log('continue interval');
buildDownloadMessage(dlProgress);
} else {
console.log('stop interval');
clearInterval(watchDownload);
location.reload();
};
console.log(JSON.stringify(dlProgress));
};
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'];
// 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.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);
};
function animate(elementId, animationClass) {
var toAnimate = document.getElementById(elementId);
if (toAnimate.className !== animationClass) {
toAnimate.className = animationClass;
console.log(elementId, animationClass);
}
}