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>
 |