// ==UserScript==
// @name Volafile Upload-Helper
// @author Arnold François Lecherche and a Vola anon named Adonis
// @namespace gf.qytechs.cn
// @icon https://volafile.org/favicon.ico
// @version 1.01
// @description Helps Volafile users avoid certain problematic servers when uploading files, shows what server each file was uploaded to on hover, and allows raising the parallel-upload limit, up to 10.
// @include http://volafile.org/*
// @include http://*.volafile.org/*
// @include https://volafile.org/*
// @include https://*.volafile.org/*
// @grant none
// @run-at document-end
// @copyright 2021 Arnold François Lecherche
// ==/UserScript==
(function (w, d, M) {
'use strict';
var a = false, dlcss = d.createElement('style'),
nbRegEx = /^(?:[a-zA-Z0-9-]{3,},)*[a-zA-Z0-9-]{3,}|none$|^$/,
commasRegExp = /,+$/, commaRegExp = /,/g, extRegExp = /\..+/,
c, ulmenu, ub, r, ex, up, ftt, k;
function getStatusText(t) {
var server, name, blocklist, dl, dlclass;
if (this.upload.currentAttempt && this.upload.currentAttempt.info && this.upload.file.size > 1e3) {
server = this.upload.currentAttempt.info.server;
name = this.file.dom.nameElement;
blocklist = new RegExp((c.ulblock || 'none').replace(commasRegExp, '').replace(commaRegExp, '\\\.|') + '\\\.');
if (blocklist.test(server.replace(extRegExp, '.'))) {
this.upload.tries -= 0.9;
name.className = 'file_name';
this.upload.currentAttempt.abort();
} else {
dl = this.upload.currentAttempt.info.server.replace(extRegExp, '');
dlclass = 'dl_' + dl;
if (!name.classList.contains('dlnum')) {
name.classList.add('dlnum', dlclass);
if (dlcss.textContent.indexOf(dlclass) === -1) dlcss.textContent += '\n.' + dlclass + ':after{content:" \u2022 ' + dl + '\xA0"}';
}
}
}
return this.getStatusText_2(t);
}
function remove() {
if ('undefined' === typeof e) return;
e.removeTimeout = null;
e.forceRemove();
}
function setRemoveTimeout(t) {
if (this.error) {
this.file.dom.nameElement.innerHTML += ' • [<b>UPLOAD FAILED</b>]';
return;
}
if (this.removeTimeout) w.clearTimeout(this.removeTimeout);
this.removeTimeout = w.setTimeout(remove, t);
}
function isUploading() {
var uppy = [up.uploadQueue.uploadQueue, up.runningUploads], i = uppy.length, j;
while (i--) {
j = uppy[i].length;
while (j--) {
uppy[i][j].getStatusText_2 = uppy[i][j].getStatusText_2 || uppy[i][j].getStatusText;
uppy[i][j].getStatusText = getStatusText;
uppy[i][j].setRemoveTimeout = setRemoveTimeout;
}
}
return this.runningUploads.length > 0 || this.uploadQueue.length() > 0;
}
function addFileInfo(t, e) {
var dl, dlclass, a, name;
if (e && e.id && e.thumb) {
dl = e.thumb.server.replace(extRegExp, '');
dlclass = 'dl_' + dl;
a = t.layout.elem;
name = a.querySelector('.file_name');
if (name && !name.classList.contains('dlnum')) {
name.classList.add('dlnum', dlclass);
if (dlcss.textContent.indexOf(dlclass) === -1) dlcss.textContent += '\n.' + dlclass + ':after{content:" \u2022 ' + dl + '\xA0"}';
//ex.filelist.files_by_id[e.id].name += '@' + dl + '$';
//a.href = a.href.replace('//volafile.org', '//'+e.thumb.server);
}
}
this.addFileInfo_2(t, e);
}
function set_mcu() {
var mcu = M.floor(prompt('config.max_concurrent_uploads', c.max_concurrent_uploads));
if (mcu != mcu || mcu < 1 || mcu > 10) return;
this.innerText = '⮅ ' + (c.max_concurrent_uploads = mcu);
}
function set_block() {
var block = prompt('Enter a comma-separated list of server prefixes to block, e.g. "dl8" or "dl7,dl8" (without quotes).', c.ulblock);
if (block === null || block === false || !nbRegEx.test(block)) return;
this.innerText = '⦸ ' + (c.ulblock = block);
}
function init() {
if (a) return k && w.clearInterval(k);
else k = k || w.setInterval(init, 1e3);
c = w.config;
if (!c) return;
ulmenu = d.getElementById('ulmenu') || d.createElement('div');
r = w.RoomInstance;
if (!r) return;
ex = r.extensions;
up = ex.upload;
up.isUploading = isUploading;
ftt = ex.fileTooltips;
ftt.addFileInfo_2 = ftt.addFileInfo_2 || ftt.addFileInfo;
ftt.addFileInfo = addFileInfo;
ulmenu.id = 'ulmenu';
ulmenu.setAttribute('style', 'display:inline-block;font-size:0.9em');
ulmenu.innerHTML = '<a class="button" id="ul_mcu" title="set max concurrent uploads">⮅</a> ' +
'<a class="button" id="ul_block" title="set upload blacklist">⦸</a> ';
ub = d.getElementById('upload_container');
ub.insertBefore(ulmenu, ub.firstChild);
d.getElementById('ul_mcu').addEventListener('click', set_mcu, false);
d.getElementById('ul_block').addEventListener('click', set_block, false);
a = true;
if (k) w.clearInterval(k);
}
dlcss.textContent = '.dlnum:after {font-style:italic;opacity:0.5}';
d.documentElement.appendChild(dlcss);
init();
d.addEventListener('DOMContentLoaded', init, false);
w.addEventListener('load', init, false);
})(window, document, Math);