From 78fa96f0f4748c5d9b7a600e3e8989f18c1b2020 Mon Sep 17 00:00:00 2001 From: ed Date: Sat, 8 Oct 2022 18:23:41 +0200 Subject: [PATCH] add unpost sanchk --- copyparty/ftpd.py | 2 +- copyparty/httpcli.py | 5 ++++- copyparty/up2k.py | 18 ++++++++++++++---- copyparty/web/browser.js | 2 +- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/copyparty/ftpd.py b/copyparty/ftpd.py index 3b41a270..a30196cd 100644 --- a/copyparty/ftpd.py +++ b/copyparty/ftpd.py @@ -204,7 +204,7 @@ class FtpFs(AbstractedFS): vp = join(self.cwd, path).lstrip("/") try: - self.hub.up2k.handle_rm(self.uname, self.h.remote_ip, [vp]) + self.hub.up2k.handle_rm(self.uname, self.h.remote_ip, [vp], []) except Exception as ex: raise FilesystemError(str(ex)) diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 3b8a50ca..791dcaee 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -2386,7 +2386,10 @@ class HttpCli(object): if not req: req = [self.vpath] - x = self.conn.hsrv.broker.ask("up2k.handle_rm", self.uname, self.ip, req) + nlim = int(self.uparam.get("lim") or 0) + lim = [nlim, nlim] if nlim else [] + + x = self.conn.hsrv.broker.ask("up2k.handle_rm", self.uname, self.ip, req, lim) self.loud_reply(x.get()) return True diff --git a/copyparty/up2k.py b/copyparty/up2k.py index d425a8c9..4fc6755e 100644 --- a/copyparty/up2k.py +++ b/copyparty/up2k.py @@ -371,7 +371,7 @@ class Up2k(object): if vp: fvp = "{}/{}".format(vp, fvp) - self._handle_rm(LEELOO_DALLAS, "", fvp) + self._handle_rm(LEELOO_DALLAS, "", fvp, []) nrm += 1 if nrm: @@ -2426,12 +2426,16 @@ class Up2k(object): v = (wark, int(ts), sz, rd, fn, ip or "", int(at or 0)) db.execute(sql, v) - def handle_rm(self, uname: str, ip: str, vpaths: list[str]) -> str: + def handle_rm(self, uname: str, ip: str, vpaths: list[str], lim: list[int]) -> str: n_files = 0 ok = {} ng = {} for vp in vpaths: - a, b, c = self._handle_rm(uname, ip, vp) + if lim and lim[0] <= 0: + self.log("hit delete limit of {} files".format(lim[1]), 3) + break + + a, b, c = self._handle_rm(uname, ip, vp, lim) n_files += a for k in b: ok[k] = 1 @@ -2445,7 +2449,7 @@ class Up2k(object): return "deleted {} files (and {}/{} folders)".format(n_files, iok, iok + ing) def _handle_rm( - self, uname: str, ip: str, vpath: str + self, uname: str, ip: str, vpath: str, lim: list[int] ) -> tuple[int, list[str], list[str]]: self.db_act = time.time() try: @@ -2504,6 +2508,12 @@ class Up2k(object): n_files = 0 for dbv, vrem, _, adir, files, rd, vd in g: for fn in [x[0] for x in files]: + if lim: + lim[0] -= 1 + if lim[0] < 0: + self.log("hit delete limit of {} files".format(lim[1]), 3) + break + n_files += 1 abspath = os.path.join(adir, fn) volpath = "{}/{}".format(vrem, fn).strip("/") diff --git a/copyparty/web/browser.js b/copyparty/web/browser.js index 5d98083b..9bf13827 100644 --- a/copyparty/web/browser.js +++ b/copyparty/web/browser.js @@ -6428,7 +6428,7 @@ var unpost = (function () { var xhr = new XHR(); xhr.n = n; xhr.n2 = n2; - xhr.open('POST', '/?delete', true); + xhr.open('POST', '/?delete&lim=1', true); xhr.onload = xhr.onerror = unpost_delete_cb; xhr.send(JSON.stringify(req)); };