add option to load more search results

This commit is contained in:
ed 2022-04-28 21:55:01 +02:00
parent 5b0f7ff506
commit 2ab1325c90
5 changed files with 40 additions and 18 deletions

View file

@ -533,7 +533,7 @@ def run_argparse(argv, formatter):
ap2.add_argument("--no-idx", metavar="PTN", type=u, help="regex: disable indexing of matching paths during e2ds folder scans") ap2.add_argument("--no-idx", metavar="PTN", type=u, help="regex: disable indexing of matching paths during e2ds folder scans")
ap2.add_argument("--re-maxage", metavar="SEC", type=int, default=0, help="disk rescan volume interval, 0=off, can be set per-volume with the 'scan' volflag") ap2.add_argument("--re-maxage", metavar="SEC", type=int, default=0, help="disk rescan volume interval, 0=off, can be set per-volume with the 'scan' volflag")
ap2.add_argument("--srch-time", metavar="SEC", type=int, default=30, help="search deadline") ap2.add_argument("--srch-time", metavar="SEC", type=int, default=30, help="search deadline")
ap2.add_argument("--srch-hits", metavar="N", type=int, default=1000, help="max search results") ap2.add_argument("--srch-hits", metavar="N", type=int, default=7999, help="max search results")
ap2 = ap.add_argument_group('metadata db options') ap2 = ap.add_argument_group('metadata db options')
ap2.add_argument("-e2t", action="store_true", help="enable metadata indexing") ap2.add_argument("-e2t", action="store_true", help="enable metadata indexing")

View file

@ -875,8 +875,9 @@ class HttpCli(object):
else: else:
# search by query params # search by query params
q = body["q"] q = body["q"]
self.log("qj: " + q) n = body.get("n", self.args.srch_hits)
hits, taglist = idx.search(vols, q) self.log("qj: {} |{}|".format(q, n))
hits, taglist = idx.search(vols, q, n)
msg = len(hits) msg = len(hits)
idx.p_end = time.time() idx.p_end = time.time()

View file

@ -55,7 +55,7 @@ class U2idx(object):
uv = [wark[:16], wark] uv = [wark[:16], wark]
try: try:
return self.run_query(vols, uq, uv, True, False)[0] return self.run_query(vols, uq, uv, True, False, 99999)[0]
except: except:
raise Pebkac(500, min_ex()) raise Pebkac(500, min_ex())
@ -80,7 +80,7 @@ class U2idx(object):
self.cur[ptop] = cur self.cur[ptop] = cur
return cur return cur
def search(self, vols, uq): def search(self, vols, uq, lim):
"""search by query params""" """search by query params"""
if not HAVE_SQLITE3: if not HAVE_SQLITE3:
return [] return []
@ -222,11 +222,11 @@ class U2idx(object):
q += " lower({}) {} ? ) ".format(field, oper) q += " lower({}) {} ? ) ".format(field, oper)
try: try:
return self.run_query(vols, q, va, have_up, have_mt) return self.run_query(vols, q, va, have_up, have_mt, lim)
except Exception as ex: except Exception as ex:
raise Pebkac(500, repr(ex)) raise Pebkac(500, repr(ex))
def run_query(self, vols, uq, uv, have_up, have_mt): def run_query(self, vols, uq, uv, have_up, have_mt, lim):
done_flag = [] done_flag = []
self.active_id = "{:.6f}_{}".format( self.active_id = "{:.6f}_{}".format(
time.time(), threading.current_thread().ident time.time(), threading.current_thread().ident
@ -255,7 +255,7 @@ class U2idx(object):
self.log("qs: {!r} {!r}".format(uq, uv)) self.log("qs: {!r} {!r}".format(uq, uv))
ret = [] ret = []
lim = int(self.args.srch_hits) lim = min(lim, int(self.args.srch_hits))
taglist = {} taglist = {}
for (vtop, ptop, flags) in vols: for (vtop, ptop, flags) in vols:
cur = self.get_cur(ptop) cur = self.get_cur(ptop)
@ -278,7 +278,7 @@ class U2idx(object):
for hit in c: for hit in c:
w, ts, sz, rd, fn, ip, at = hit[:7] w, ts, sz, rd, fn, ip, at = hit[:7]
lim -= 1 lim -= 1
if lim <= 0: if lim < 0:
break break
if rd.startswith("//") or fn.startswith("//"): if rd.startswith("//") or fn.startswith("//"):

View file

@ -460,6 +460,9 @@ html.y #files tr:nth-child(2n+1) td+td {
#files thead th[style] { #files thead th[style] {
width: auto !important; width: auto !important;
} }
#files .srch_hdr a {
display: inline;
}
#path a { #path a {
margin: 0 0 0 -.2em; margin: 0 0 0 -.2em;
padding: 0 0 0 .4em; padding: 0 0 0 .4em;

View file

@ -2861,12 +2861,17 @@ var thegrid = (function () {
ths[a].className = cl; ths[a].className = cl;
} }
var uns = QS('#ggrid a[ref="unsearch"]');
if (uns) var sp = ['unsearch', 'moar'];
uns.onclick = function (e) { for (var a = 0; a < sp.length; a++)
ev(e); (function (a) {
ebi('unsearch').click(); var o = QS('#ggrid a[ref="' + sp[a] + '"]');
}; if (o)
o.onclick = function (e) {
ev(e);
ebi(sp[a]).click();
};
})(a);
}; };
r.tippen = function () { r.tippen = function () {
@ -3284,7 +3289,8 @@ document.onkeydown = function (e) {
var trs = [], var trs = [],
orig_url = null, orig_url = null,
orig_html = null; orig_html = null,
cap = 125;
for (var a = 0; a < sconf.length; a++) { for (var a = 0; a < sconf.length; a++) {
var html = ['<tr><td><br />' + sconf[a][0] + '</td>']; var html = ['<tr><td><br />' + sconf[a][0] + '</td>'];
@ -3338,6 +3344,7 @@ document.onkeydown = function (e) {
encode_query(); encode_query();
set_vq(); set_vq();
cap = 125;
clearTimeout(defer_timeout); clearTimeout(defer_timeout);
defer_timeout = setTimeout(try_search, 2000); defer_timeout = setTimeout(try_search, 2000);
@ -3460,7 +3467,7 @@ document.onkeydown = function (e) {
xhr.onreadystatechange = xhr_search_results; xhr.onreadystatechange = xhr_search_results;
xhr.ts = Date.now(); xhr.ts = Date.now();
xhr.q_raw = ebi('q_raw').value; xhr.q_raw = ebi('q_raw').value;
xhr.send(JSON.stringify({ "q": xhr.q_raw })); xhr.send(JSON.stringify({ "q": xhr.q_raw, "n": cap }));
} }
function xhr_search_results() { function xhr_search_results() {
@ -3493,7 +3500,9 @@ document.onkeydown = function (e) {
var html = mk_files_header(tagord), seen = {}; var html = mk_files_header(tagord), seen = {};
html.push('<tbody>'); html.push('<tbody>');
html.push('<tr><td>-</td><td colspan="42"><a href="#" id="unsearch"><big style="font-weight:bold">[❌] close search results</big></a></td></tr>'); html.push('<tr class="srch_hdr"><td>-</td><td><a href="#" id="unsearch"><big style="font-weight:bold">[❌] close search results</big></a> -- showing ' +
res.hits.length + ' hits' + (res.hits.length == cap ? ' -- <a href="#" id="moar">load more</a>' : '') + '</td></tr>');
for (var a = 0; a < res.hits.length; a++) { for (var a = 0; a < res.hits.length; a++) {
var r = res.hits[a], var r = res.hits[a],
ts = parseInt(r.ts), ts = parseInt(r.ts),
@ -3545,6 +3554,9 @@ document.onkeydown = function (e) {
sethash('q=' + uricom_enc(this.q_raw)); sethash('q=' + uricom_enc(this.q_raw));
ebi('unsearch').onclick = unsearch; ebi('unsearch').onclick = unsearch;
var m = ebi('moar');
if (m)
m.onclick = moar;
} }
function unsearch(e) { function unsearch(e) {
@ -3556,6 +3568,12 @@ document.onkeydown = function (e) {
sethash(''); sethash('');
reload_browser(); reload_browser();
} }
function moar(e) {
ev(e);
cap *= 2;
do_search();
}
})(); })();