diff --git a/copyparty/cfg.py b/copyparty/cfg.py index 9737f92b..4768db09 100644 --- a/copyparty/cfg.py +++ b/copyparty/cfg.py @@ -144,6 +144,7 @@ flagcats = { "maxb=1g,300": "max 1 GiB over 5min (suffixes: b, k, m, g, t)", "vmaxb=1g": "total volume size max 1 GiB (suffixes: b, k, m, g, t)", "vmaxn=4k": "max 4096 files in volume (suffixes: b, k, m, g, t)", + "medialinks": "return medialinks for non-up2k uploads (not hotlinks)", "rand": "force randomized filenames, 9 chars long by default", "nrand=N": "randomized filenames are N chars long", "u2ts=fc": "[f]orce [c]lient-last-modified or [u]pload-time", diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 9d2f74b7..4a72beb1 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -646,8 +646,12 @@ class HttpCli(object): if not self._check_nonfatal(pex, post): self.keepalive = False - em = str(ex) - msg = em if pex is ex else min_ex() + if pex is ex: + em = msg = str(ex) + else: + em = repr(ex) + msg = min_ex() + if pex.code != 404 or self.do_log: self.log( "%s\033[0m, %s" % (msg, self.vpath), @@ -1904,6 +1908,9 @@ class HttpCli(object): 0 if ANYWIN else bos.stat(path).st_ino, )[: vfs.flags["fk"]] + if "media" in self.uparam or "medialinks" in vfs.flags: + vsuf += "&v" if vsuf else "?v" + vpath = "/".join([x for x in [vfs.vpath, rem, fn] if x]) vpath = quotep(vpath) @@ -2685,6 +2692,9 @@ class HttpCli(object): 0 if ANYWIN or not ap else bos.stat(ap).st_ino, )[: vfs.flags["fk"]] + if "media" in self.uparam or "medialinks" in vfs.flags: + vsuf += "&v" if vsuf else "?v" + vpath = "{}/{}".format(upload_vpath, lfn).strip("/") rel_url = quotep(self.args.RS + vpath) + vsuf msg += 'sha512: {} // {} // {} bytes // {} {}\n'.format( @@ -4163,6 +4173,9 @@ class HttpCli(object): add_og = True og_fn = "" + if "v" in self.uparam: + add_og = og_ua = True + if "b" in self.uparam: self.out_headers["X-Robots-Tag"] = "noindex, nofollow" @@ -4286,7 +4299,7 @@ class HttpCli(object): (abspath.endswith(".md") or self.can_delete) and "nohtml" not in vn.flags and ( - "v" in self.uparam + ("v" in self.uparam and abspath.endswith(".md")) or "edit" in self.uparam or "edit2" in self.uparam ) diff --git a/docs/devnotes.md b/docs/devnotes.md index 1625871c..885bcf1d 100644 --- a/docs/devnotes.md +++ b/docs/devnotes.md @@ -141,6 +141,7 @@ authenticate using header `Cookie: cppwd=foo` or url param `&pw=foo` | GET | `?ups&filter=f` | ...where URL contains `f` | | GET | `?mime=foo` | specify return mimetype `foo` | | GET | `?v` | render markdown file at URL | +| GET | `?v` | open image/video/audio in mediaplayer | | GET | `?txt` | get file at URL as plaintext | | GET | `?txt=iso-8859-1` | ...with specific charset | | GET | `?th` | get image/video at URL as thumbnail | @@ -169,6 +170,7 @@ authenticate using header `Cookie: cppwd=foo` or url param `&pw=foo` | mPOST | | `f=FILE` | upload `FILE` into the folder at URL | | mPOST | `?j` | `f=FILE` | ...and reply with json | | mPOST | `?replace` | `f=FILE` | ...and overwrite existing files | +| mPOST | `?media` | `f=FILE` | ...and return medialink (not hotlink) | | mPOST | | `act=mkdir`, `name=foo` | create directory `foo` at URL | | POST | `?delete` | | delete URL recursively | | jPOST | `?delete` | `["/foo","/bar"]` | delete `/foo` and `/bar` recursively |