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("--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-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.add_argument("-e2t", action="store_true", help="enable metadata indexing")

View file

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

View file

@ -55,7 +55,7 @@ class U2idx(object):
uv = [wark[:16], wark]
try:
return self.run_query(vols, uq, uv, True, False)[0]
return self.run_query(vols, uq, uv, True, False, 99999)[0]
except:
raise Pebkac(500, min_ex())
@ -80,7 +80,7 @@ class U2idx(object):
self.cur[ptop] = cur
return cur
def search(self, vols, uq):
def search(self, vols, uq, lim):
"""search by query params"""
if not HAVE_SQLITE3:
return []
@ -222,11 +222,11 @@ class U2idx(object):
q += " lower({}) {} ? ) ".format(field, oper)
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:
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 = []
self.active_id = "{:.6f}_{}".format(
time.time(), threading.current_thread().ident
@ -255,7 +255,7 @@ class U2idx(object):
self.log("qs: {!r} {!r}".format(uq, uv))
ret = []
lim = int(self.args.srch_hits)
lim = min(lim, int(self.args.srch_hits))
taglist = {}
for (vtop, ptop, flags) in vols:
cur = self.get_cur(ptop)
@ -278,7 +278,7 @@ class U2idx(object):
for hit in c:
w, ts, sz, rd, fn, ip, at = hit[:7]
lim -= 1
if lim <= 0:
if lim < 0:
break
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] {
width: auto !important;
}
#files .srch_hdr a {
display: inline;
}
#path a {
margin: 0 0 0 -.2em;
padding: 0 0 0 .4em;

View file

@ -2861,12 +2861,17 @@ var thegrid = (function () {
ths[a].className = cl;
}
var uns = QS('#ggrid a[ref="unsearch"]');
if (uns)
uns.onclick = function (e) {
var sp = ['unsearch', 'moar'];
for (var a = 0; a < sp.length; a++)
(function (a) {
var o = QS('#ggrid a[ref="' + sp[a] + '"]');
if (o)
o.onclick = function (e) {
ev(e);
ebi('unsearch').click();
ebi(sp[a]).click();
};
})(a);
};
r.tippen = function () {
@ -3284,7 +3289,8 @@ document.onkeydown = function (e) {
var trs = [],
orig_url = null,
orig_html = null;
orig_html = null,
cap = 125;
for (var a = 0; a < sconf.length; a++) {
var html = ['<tr><td><br />' + sconf[a][0] + '</td>'];
@ -3338,6 +3344,7 @@ document.onkeydown = function (e) {
encode_query();
set_vq();
cap = 125;
clearTimeout(defer_timeout);
defer_timeout = setTimeout(try_search, 2000);
@ -3460,7 +3467,7 @@ document.onkeydown = function (e) {
xhr.onreadystatechange = xhr_search_results;
xhr.ts = Date.now();
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() {
@ -3493,7 +3500,9 @@ document.onkeydown = function (e) {
var html = mk_files_header(tagord), seen = {};
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++) {
var r = res.hits[a],
ts = parseInt(r.ts),
@ -3545,6 +3554,9 @@ document.onkeydown = function (e) {
sethash('q=' + uricom_enc(this.q_raw));
ebi('unsearch').onclick = unsearch;
var m = ebi('moar');
if (m)
m.onclick = moar;
}
function unsearch(e) {
@ -3556,6 +3568,12 @@ document.onkeydown = function (e) {
sethash('');
reload_browser();
}
function moar(e) {
ev(e);
cap *= 2;
do_search();
}
})();