mirror of
https://github.com/9001/copyparty.git
synced 2025-08-20 02:12:20 -06:00
30% faster tags listing
This commit is contained in:
parent
2ae99ecfa0
commit
3108139d51
|
@ -2613,43 +2613,29 @@ class HttpCli(object):
|
||||||
rd = fe["rd"]
|
rd = fe["rd"]
|
||||||
del fe["rd"]
|
del fe["rd"]
|
||||||
if not icur:
|
if not icur:
|
||||||
break
|
continue
|
||||||
|
|
||||||
if vn != dbv:
|
if vn != dbv:
|
||||||
_, rd = vn.get_dbv(rd)
|
_, rd = vn.get_dbv(rd)
|
||||||
|
|
||||||
q = "select w from up where rd = ? and fn = ?"
|
q = "select mt.k, mt.v from up inner join mt on mt.w = substr(up.w,1,16) where up.rd = ? and up.fn = ? and +mt.k != 'x'"
|
||||||
r = None
|
|
||||||
try:
|
try:
|
||||||
r = icur.execute(q, (rd, fn)).fetchone()
|
r = icur.execute(q, (rd, fn))
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
if "database is locked" in str(ex):
|
if "database is locked" in str(ex):
|
||||||
break
|
break
|
||||||
|
|
||||||
try:
|
try:
|
||||||
args = s3enc(idx.mem_cur, rd, fn)
|
args = s3enc(idx.mem_cur, rd, fn)
|
||||||
r = icur.execute(q, args).fetchone()
|
r = icur.execute(q, args)
|
||||||
except:
|
except:
|
||||||
t = "tag list error, {}/{}\n{}"
|
t = "tag read error, {}/{}\n{}"
|
||||||
self.log(t.format(rd, fn, min_ex()))
|
self.log(t.format(rd, fn, min_ex()))
|
||||||
break
|
break
|
||||||
|
|
||||||
tags: dict[str, Any] = {}
|
fe["tags"] = {k: v for k, v in r}
|
||||||
fe["tags"] = tags
|
|
||||||
|
|
||||||
if not r:
|
_ = [tagset.add(k) for fe in files for k in fe["tags"]]
|
||||||
continue
|
|
||||||
|
|
||||||
w = r[0][:16]
|
|
||||||
q = "select k, v from mt where w = ? and +k != 'x'"
|
|
||||||
try:
|
|
||||||
for k, v in icur.execute(q, (w,)):
|
|
||||||
tagset.add(k)
|
|
||||||
tags[k] = v
|
|
||||||
except:
|
|
||||||
t = "tag read error, {}/{} [{}]:\n{}"
|
|
||||||
self.log(t.format(rd, fn, w, min_ex()))
|
|
||||||
break
|
|
||||||
|
|
||||||
if icur:
|
if icur:
|
||||||
taglist = [k for k in vn.flags.get("mte", "").split(",") if k in tagset]
|
taglist = [k for k in vn.flags.get("mte", "").split(",") if k in tagset]
|
||||||
|
|
Loading…
Reference in a new issue