mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 00:52:16 -06:00
fix upload-abort in shares; closes #347
This commit is contained in:
parent
9c19753546
commit
6d6d79fcbc
|
@ -5363,6 +5363,7 @@ class HttpCli(object):
|
|||
else:
|
||||
shr_dbv = None
|
||||
|
||||
wret: dict[str, Any] = {}
|
||||
ret: list[dict[str, Any]] = []
|
||||
t0 = time.time()
|
||||
lim = time.time() - self.args.unpost
|
||||
|
@ -5384,7 +5385,13 @@ class HttpCli(object):
|
|||
x = self.conn.hsrv.broker.ask(
|
||||
"up2k.get_unfinished_by_user", self.uname, "" if bad_xff else self.ip
|
||||
)
|
||||
uret = x.get()
|
||||
zdsa: dict[str, Any] = x.get()
|
||||
uret: list[dict[str, Any]] = []
|
||||
if "timeout" in zdsa:
|
||||
wret["nou"] = 1
|
||||
else:
|
||||
uret = zdsa["f"]
|
||||
nu = len(uret)
|
||||
|
||||
if not self.args.unpost:
|
||||
allvols = []
|
||||
|
@ -5430,6 +5437,8 @@ class HttpCli(object):
|
|||
|
||||
if len(ret) > 2000:
|
||||
ret = ret[:2000]
|
||||
if len(ret) >= 2000:
|
||||
wret["oc"] = 1
|
||||
|
||||
for rv in ret:
|
||||
rv["vp"] = quotep(rv["vp"])
|
||||
|
@ -5449,6 +5458,13 @@ class HttpCli(object):
|
|||
)
|
||||
rv["vp"] += "?k=" + fk[:nfk]
|
||||
|
||||
if not allvols:
|
||||
wret["noc"] = 1
|
||||
ret = []
|
||||
|
||||
nc = len(ret)
|
||||
ret = uret + ret
|
||||
|
||||
if shr_dbv:
|
||||
# translate vpaths from share-target to share-url
|
||||
# to satisfy access checks
|
||||
|
@ -5463,12 +5479,11 @@ class HttpCli(object):
|
|||
for v in ret:
|
||||
v["vp"] = self.args.SR + v["vp"]
|
||||
|
||||
if not allvols:
|
||||
ret = [{"kinshi": 1}]
|
||||
|
||||
jtxt = '{"u":%s,"c":%s}' % (uret, json.dumps(ret, separators=(",\n", ": ")))
|
||||
zi = len(uret.split('\n"pd":')) - 1
|
||||
self.log("%s #%d+%d %.2fsec" % (lm, zi, len(ret), time.time() - t0))
|
||||
wret["f"] = ret
|
||||
wret["nu"] = nu
|
||||
wret["nc"] = nc
|
||||
jtxt = json.dumps(wret, separators=(",\n", ": "))
|
||||
self.log("%s #%d+%d %.2fsec" % (lm, nu, nc, time.time() - t0))
|
||||
self.reply(jtxt.encode("utf-8", "replace"), mime="application/json")
|
||||
return True
|
||||
|
||||
|
|
|
@ -399,12 +399,14 @@ class Up2k(object):
|
|||
|
||||
return "{}"
|
||||
|
||||
def get_unfinished_by_user(self, uname, ip) -> str:
|
||||
def get_unfinished_by_user(self, uname, ip) -> dict[str, Any]:
|
||||
# returns dict due to ExceptionalQueue
|
||||
if PY2 or not self.reg_mutex.acquire(timeout=2):
|
||||
return '[{"timeout":1}]'
|
||||
return {"timeout":1}
|
||||
|
||||
ret: list[tuple[int, str, int, int, int]] = []
|
||||
userset = set([(uname or "\n"), "*"])
|
||||
n = 1000
|
||||
try:
|
||||
for ptop, tab2 in self.registry.items():
|
||||
cfg = self.flags.get(ptop, {}).get("u2abort", 1)
|
||||
|
@ -419,7 +421,6 @@ class Up2k(object):
|
|||
or (addr and addr != job["addr"])
|
||||
):
|
||||
continue
|
||||
|
||||
zt5 = (
|
||||
int(job["t0"]),
|
||||
djoin(job["vtop"], job["prel"], job["name"]),
|
||||
|
@ -428,6 +429,9 @@ class Up2k(object):
|
|||
len(job["hash"]),
|
||||
)
|
||||
ret.append(zt5)
|
||||
n -= 1
|
||||
if not n:
|
||||
break
|
||||
finally:
|
||||
self.reg_mutex.release()
|
||||
|
||||
|
@ -444,7 +448,7 @@ class Up2k(object):
|
|||
}
|
||||
for (at, vp, sz, nn, nh) in ret
|
||||
]
|
||||
return json.dumps(ret2, separators=(",\n", ": "))
|
||||
return {"f": ret2}
|
||||
|
||||
def get_unfinished(self) -> str:
|
||||
if PY2 or not self.reg_mutex.acquire(timeout=0.5):
|
||||
|
|
|
@ -12526,29 +12526,19 @@ var unpost = (function () {
|
|||
return ebi('op_unpost').innerHTML = '<p>' + L.badreply + ':</p>' + unpre(this.responseText);
|
||||
}
|
||||
|
||||
if (ores.u.length == 1 && ores.u[0].timeout) {
|
||||
if (ores.nou)
|
||||
html.push('<p>' + L.un_nou + '</p>');
|
||||
ores.u = [];
|
||||
}
|
||||
|
||||
if (ores.c.length == 1 && ores.c[0].kinshi) {
|
||||
if (ores.noc)
|
||||
html.push('<p>' + L.un_noc + '</p>');
|
||||
ores.c = [];
|
||||
}
|
||||
|
||||
for (var a = 0; a < ores.u.length; a++)
|
||||
ores.u[a].k = 'u';
|
||||
|
||||
for (var a = 0; a < ores.c.length; a++)
|
||||
ores.c[a].k = 'c';
|
||||
|
||||
var res = ores.u.concat(ores.c);
|
||||
var res = ores.f;
|
||||
|
||||
if (res.length) {
|
||||
if (res.length == 2000)
|
||||
if (ores.of)
|
||||
html.push("<p>" + L.un_max);
|
||||
else
|
||||
html.push("<p>" + L.un_avail.format(ores.c.length, ores.u.length));
|
||||
html.push("<p>" + L.un_avail.format(ores.nc, ores.nu));
|
||||
|
||||
html.push("<br />" + L.un_m2 + "</p>");
|
||||
html.push("<table><thead><tr><td></td><td>time</td><td>size</td><td>done</td><td>file</td></tr></thead><tbody>");
|
||||
|
@ -12565,7 +12555,7 @@ var unpost = (function () {
|
|||
'<a me="' + me + '" class="n' + a + '" n2="' + (a + mods[b]) +
|
||||
'" href="#">' + L.un_next.format(Math.min(mods[b], res.length - a)) + '</a></td></tr>');
|
||||
|
||||
var done = res[a].k == 'c';
|
||||
var done = res[a].pd === undefined;
|
||||
html.push(
|
||||
'<tr><td><a me="' + me + '" class="n' + a + '" href="#">' + (done ? L.un_del : L.un_abrt) + '</a></td>' +
|
||||
'<td>' + unix2iso(res[a].at) + '</td>' +
|
||||
|
|
Loading…
Reference in a new issue