mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 00:52:16 -06:00
125 lines
3.1 KiB
HTML
125 lines
3.1 KiB
HTML
<!DOCTYPE html><html lang="en"><head>
|
|
<meta charset="utf-8">
|
|
<title>multisearch</title>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<style>
|
|
|
|
html, body {
|
|
margin: 0;
|
|
padding: 0;
|
|
color: #ddd;
|
|
background: #222;
|
|
font-family: sans-serif;
|
|
}
|
|
body {
|
|
padding: 1em;
|
|
}
|
|
a {
|
|
color: #fc5;
|
|
}
|
|
ul {
|
|
line-height: 1.5em;
|
|
}
|
|
code {
|
|
color: #fc5;
|
|
border: 1px solid #444;
|
|
padding: .1em .2em;
|
|
font-family: sans-serif, sans-serif;
|
|
}
|
|
#src {
|
|
display: block;
|
|
width: calc(100% - 1em);
|
|
padding: .5em;
|
|
margin: 0;
|
|
}
|
|
td {
|
|
padding-left: 1em;
|
|
}
|
|
.hit,
|
|
.miss {
|
|
font-weight: bold;
|
|
padding-left: 0;
|
|
padding-top: 1em;
|
|
}
|
|
.hit {color: #af0;}
|
|
.miss {color: #f0c;}
|
|
.hit:before {content: '✅';}
|
|
.miss:before {content: '❌';}
|
|
|
|
</style></head><body>
|
|
<ul>
|
|
<li>paste a list of filenames (youtube rips) below and hit search</li>
|
|
<li>it will grab the youtube-id from the filenames and search for each id</li>
|
|
<li>filenames must be like <code>-YTID.webm</code> (youtube-dl style) or <code>[YTID].webm</code> (ytdlp style)</li>
|
|
</ul>
|
|
<textarea id="src"></textarea>
|
|
<button id="go">search</button>
|
|
<div id="res"></div>
|
|
<script>
|
|
|
|
var ebi = document.getElementById.bind(document);
|
|
function esc(txt) {
|
|
return txt.replace(/[&"<>]/g, function (c) {
|
|
return {
|
|
'&': '&',
|
|
'"': '"',
|
|
'<': '<',
|
|
'>': '>'
|
|
}[c];
|
|
});
|
|
}
|
|
|
|
ebi('go').onclick = async function() {
|
|
var queries = [];
|
|
for (var ln of ebi('src').value.split(/\n/g)) {
|
|
// filter the list of input files,
|
|
// only keeping youtube videos,
|
|
// meaning the filename ends with either
|
|
// [YOUTUBEID].EXTENSION or
|
|
// -YOUTUBEID.EXTENSION
|
|
var m = /[[-]([0-9a-zA-Z_-]{11})\]?\.(mp4|webm|mkv)$/.exec(ln);
|
|
if (!m || !(m = m[1]))
|
|
continue;
|
|
|
|
// create a search query for each line: name like *youtubeid*
|
|
queries.push([ln, `name like *${m}*`]);
|
|
}
|
|
|
|
var a = 0, html = ['<table>'], hits = [], misses = [];
|
|
for (var [fn, q] of queries) {
|
|
var r = await fetch('/?srch', {
|
|
method: 'POST',
|
|
body: JSON.stringify({'q': q})
|
|
});
|
|
r = await r.json();
|
|
|
|
var cl, tab2;
|
|
if (r.hits.length) {
|
|
tab2 = hits;
|
|
cl = 'hit';
|
|
}
|
|
else {
|
|
tab2 = misses;
|
|
cl = 'miss';
|
|
}
|
|
var h = `<tr><td class="${cl}" colspan="9">${esc(fn)}</td></tr>`;
|
|
tab2.push(h);
|
|
html.push(h);
|
|
for (var h of r.hits) {
|
|
var link = `<a href="/${h.rp}">${esc(decodeURIComponent(h.rp))}</a>`;
|
|
html.push(`<tr><td>${h.sz}</td><td>${link}</td></tr>`);
|
|
}
|
|
ebi('res').innerHTML = `searching, ${++a} / ${queries.length} done, ${hits.length} hits, ${misses.length} miss`;
|
|
}
|
|
html.push('<tr><td><h1>hits:</h1></td></tr>');
|
|
html = html.concat(hits);
|
|
|
|
html.push('<tr><td><h1>miss:</h1></td></tr>');
|
|
html = html.concat(misses);
|
|
|
|
html.push('</table>');
|
|
ebi('res').innerHTML = html.join('\n');
|
|
};
|
|
|
|
</script></body></html>
|