mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 00:52:16 -06:00
add another up2k-hook example
This commit is contained in:
parent
76b1857e4e
commit
bd2d88c96e
69
contrib/plugins/up2k-hook-ytid.js
Normal file
69
contrib/plugins/up2k-hook-ytid.js
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
// way more specific example --
|
||||||
|
// assumes all files dropped into the uploader have a youtube-id somewhere in the filename,
|
||||||
|
// locates the youtube-ids and passes them to an API which returns a list of IDS which should be uploaded
|
||||||
|
|
||||||
|
function up2k_namefilter(good_files, nil_files, bad_files, hooks) {
|
||||||
|
var filenames = [],
|
||||||
|
file_lists = [good_files, nil_files, bad_files];
|
||||||
|
|
||||||
|
for (var lst of file_lists)
|
||||||
|
for (var ent of lst)
|
||||||
|
filenames.push(ent[1]);
|
||||||
|
|
||||||
|
var yt_ids = new Set();
|
||||||
|
for (var lst of file_lists)
|
||||||
|
for (var ent of lst) {
|
||||||
|
var m, name = ent[1];
|
||||||
|
while (true) {
|
||||||
|
// some ytdl fork did %(title)-%(id).%(ext) ...
|
||||||
|
m = /(?:^|[^\w])([\w-]{11})(?:$|[^\w-])/.exec(name);
|
||||||
|
if (!m)
|
||||||
|
break;
|
||||||
|
|
||||||
|
yt_ids.add(m[1]);
|
||||||
|
name = name.replace(m[1], '');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toast.inf(5, `running query for ${yt_ids.size} videos...`);
|
||||||
|
|
||||||
|
var xhr = new XHR();
|
||||||
|
xhr.open('POST', '/ytq', true);
|
||||||
|
xhr.setRequestHeader('Content-Type', 'text/plain');
|
||||||
|
xhr.onload = xhr.onerror = function () {
|
||||||
|
if (this.status != 200)
|
||||||
|
return toast.err(0, `sorry, database query failed ;_;\n\nplease let us know so we can look at it, thx!!\n\nerror ${this.status}: ${(this.response && this.response.err) || this.responseText}`);
|
||||||
|
|
||||||
|
var new_lists = [],
|
||||||
|
ptn = new RegExp(this.responseText.trim().split('\n').join('|') || '\n'),
|
||||||
|
nothing_to_do = true,
|
||||||
|
n_skip = 0;
|
||||||
|
|
||||||
|
for (var lst of file_lists) {
|
||||||
|
var keep = [];
|
||||||
|
new_lists.push(keep);
|
||||||
|
|
||||||
|
for (var ent of lst)
|
||||||
|
if (ptn.exec(ent[1]))
|
||||||
|
keep.push(ent);
|
||||||
|
else
|
||||||
|
n_skip++;
|
||||||
|
|
||||||
|
if (keep.length)
|
||||||
|
nothing_to_do = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nothing_to_do)
|
||||||
|
return modal.alert('Good news -- turns out we already have all those videos.\n\nBut thank you for checking in!');
|
||||||
|
else if (n_skip)
|
||||||
|
toast.inf(0, `skipped ${n_skip} files which already exist on the server`);
|
||||||
|
|
||||||
|
[good_files, nil_files, bad_files] = new_lists;
|
||||||
|
hooks[0](good_files, nil_files, bad_files, hooks.slice(1));
|
||||||
|
};
|
||||||
|
xhr.send(Array.from(yt_ids).join('\n'));
|
||||||
|
}
|
||||||
|
|
||||||
|
up2k_hooks.push(function () {
|
||||||
|
up2k.gotallfiles.unshift(up2k_namefilter);
|
||||||
|
});
|
Loading…
Reference in a new issue