diff --git a/contrib/plugins/up2k-hooks.js b/contrib/plugins/up2k-hooks.js new file mode 100644 index 00000000..dedf54e0 --- /dev/null +++ b/contrib/plugins/up2k-hooks.js @@ -0,0 +1,45 @@ +// hooks into up2k + +function up2k_namefilter(good_files, nil_files, bad_files, hooks) { + // is called when stuff is dropped into the browser, + // after iterating through the directory tree and discovering all files, + // before the upload confirmation dialogue is shown + + // good_files will successfully upload + // nil_files are empty files and will show an alert in the final hook + // bad_files are unreadable and cannot be uploaded + var file_lists = [good_files, nil_files, bad_files]; + + // build a list of filenames + var filenames = []; + for (var lst of file_lists) + for (var ent of lst) + filenames.push(ent[1]); + + toast.inf(5, "running database query..."); + + // simulate delay while passing the list to some api for checking + setTimeout(function () { + + // only keep webm files as an example + var new_lists = []; + for (var lst of file_lists) { + var keep = []; + new_lists.push(keep); + + for (var ent of lst) + if (/\.webm$/.test(ent[1])) + keep.push(ent); + } + + // finally, call the next hook in the chain + [good_files, nil_files, bad_files] = new_lists; + hooks[0](good_files, nil_files, bad_files, hooks.slice(1)); + + }, 1000); +} + +// register +up2k_hooks.push(function () { + up2k.gotallfiles.unshift(up2k_namefilter); +}); diff --git a/copyparty/web/up2k.js b/copyparty/web/up2k.js index 2fdc1971..24ff1b75 100644 --- a/copyparty/web/up2k.js +++ b/copyparty/web/up2k.js @@ -15,6 +15,7 @@ function goto_up2k() { // chrome requires https to use crypto.subtle, // usually it's undefined but some chromes throw on invoke var up2k = null, + up2k_hooks = [], sha_js = window.WebAssembly ? 'hw' : 'ac', // ff53,c57,sa11 m = 'will use ' + sha_js + ' instead of native sha512 due to'; @@ -578,6 +579,12 @@ function fsearch_explain(n) { function up2k_init(subtle) { + var r = { + "init_deps": init_deps, + "set_fsearch": set_fsearch, + "gotallfiles": [gotallfiles] // hooks + }; + function showmodal(msg) { ebi('u2notbtn').innerHTML = msg; ebi('u2btn').style.display = 'none'; @@ -696,6 +703,10 @@ function up2k_init(subtle) { var pvis = new U2pvis("bz", '#u2cards', uc), donut = new Donut(uc, st); + r.ui = pvis; + r.st = st; + r.uc = uc; + var bobslice = null; if (window.File) bobslice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice; @@ -906,7 +917,8 @@ function up2k_init(subtle) { if (!dirs.length) { if (!pf.length) - return gotallfiles(good, nil, bad); + // call first hook, pass list of remaining hooks to call + return r.gotallfiles[0](good, nil, bad, r.gotallfiles.slice(1)); console.log("retry pf, " + pf.length); setTimeout(function () { @@ -2123,7 +2135,12 @@ function up2k_init(subtle) { if (parallel_uploads < 1) bumpthread(1); - return { "init_deps": init_deps, "set_fsearch": set_fsearch, "ui": pvis, "st": st, "uc": uc } + setTimeout(function () { + for (var a = 0; a < up2k_hooks.length; a++) + up2k_hooks[a](); + }, 1); + + return r; }