mirror of https://github.com/Trivernis/whooshy.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.5 KiB
JavaScript
80 lines
2.5 KiB
JavaScript
5 years ago
|
function postLocData(postBody) {
|
||
|
let request = new XMLHttpRequest();
|
||
|
return new Promise((res, rej) => {
|
||
|
|
||
|
request.onload = () => {
|
||
|
res({
|
||
|
status: request.status,
|
||
|
data: request.responseText
|
||
|
});
|
||
|
};
|
||
|
|
||
|
request.onerror = () => {
|
||
|
rej(request.error);
|
||
|
};
|
||
|
|
||
|
request.open('POST', '#', true);
|
||
|
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
|
||
|
request.send(JSON.stringify(postBody));
|
||
|
});
|
||
|
}
|
||
|
|
||
|
async function startSubredditDownload(subredditName) {
|
||
|
let data = await postLocData({
|
||
|
subreddit: subredditName
|
||
|
});
|
||
|
return JSON.parse(data.data);
|
||
|
}
|
||
|
|
||
|
async function getDownloadStatus(downloadId) {
|
||
|
let data = await postLocData({
|
||
|
id: downloadId
|
||
|
});
|
||
|
return JSON.parse(data.data);
|
||
|
}
|
||
|
|
||
|
async function refreshDownloadInfo(downloadId) {
|
||
|
let response = await getDownloadStatus(downloadId);
|
||
|
|
||
|
let dlDiv = document.querySelector(`.download-container[dl-id='${downloadId}']`);
|
||
|
dlDiv.querySelector('.downloadStatus').innerText = response.status;
|
||
|
let subredditName = dlDiv.getAttribute('subreddit-name');
|
||
|
|
||
|
if (response.status === 'pending') {
|
||
|
setTimeout(() => refreshDownloadInfo(downloadId), 1000)
|
||
|
} else {
|
||
|
let dlLink = document.createElement('a');
|
||
|
dlLink.setAttribute('href', response.file);
|
||
|
dlLink.setAttribute('filename', `${subredditName}`);
|
||
|
for (let cNode of dlDiv.childNodes)
|
||
|
dlLink.appendChild(cNode);
|
||
|
dlDiv.appendChild(dlLink);
|
||
|
setTimeout(() => {
|
||
|
dlDiv.remove();
|
||
|
}, 30000);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
async function submitDownload() {
|
||
|
let subredditName = document.querySelector('#subreddit-input').value;
|
||
|
let response = await startSubredditDownload(subredditName);
|
||
|
|
||
|
let dlDiv = document.createElement('div');
|
||
|
dlDiv.setAttribute('class', 'download-container');
|
||
|
dlDiv.setAttribute('dl-id', response.id);
|
||
|
dlDiv.setAttribute('subreddit-name', subredditName);
|
||
|
document.querySelector('#download-list').prepend(dlDiv);
|
||
|
|
||
|
let subnameSpan = document.createElement('span');
|
||
|
subnameSpan.innerText = subredditName;
|
||
|
subnameSpan.setAttribute('class', 'subredditName');
|
||
|
dlDiv.appendChild(subnameSpan);
|
||
|
|
||
|
let dlStatusSpan = document.createElement('span');
|
||
|
dlStatusSpan.innerText = response.status;
|
||
|
dlStatusSpan.setAttribute('class', 'downloadStatus');
|
||
|
dlDiv.appendChild(dlStatusSpan);
|
||
|
|
||
|
await refreshDownloadInfo(response.id);
|
||
|
}
|