mirror of
https://github.com/9001/copyparty.git
synced 2025-08-18 01:22:13 -06:00
add option to load more search results
This commit is contained in:
parent
5b0f7ff506
commit
2ab1325c90
|
@ -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")
|
||||||
|
|
|
@ -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()
|
||||||
|
|
|
@ -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("//"):
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
|
}
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue