previously, `xm` hooks would be called with the `txt` property
containing the url-decoded message
now, a new property `body` contains the original unmodified message,
to avoid any ambiguity caused by url-decoding
if any files are selected, the list of files is appended to
the `txt` field as lines, and as `sel` url-parameters in `body`
Co-authored-by: Carson Coder <carson@carsoncoder.com>
original commit: 2025-08-09, e9ddfcc
original commit: 2025-08-10, 7aa2148
Co-authored-by: Packingdustry <alois.mc@hotmail.com>
Co-authored-by: Andrew Lee <andrew@alee14.me>
Co-authored-by: A. Jakubiak <contact@jakubiak.fr>
previously, the target file would always be unlinked upon upload resume,
contrary to what the client expects (open for append).
when a client sends an APPE, pyftpdlib will `ftp_STOR(file, "a")` which
is something that should be allowed within the ftp-wt grace period
adds functionality to allow browsing .cbz directly in the browser, without downloading them and using a separate program. meant for quickly inspecting the contents, less so for reading.
adds two new api calls, ?zls and ?zget, which return a file listing of a zip file and a specific file in the archive, respectively.
uses the zipfile module, so no support for .cbr etc
stolen/dnslib/ can be deleted and replaced with system lib
NOTE: unvendoring dnslib will make it impossible to communicate with
devices which have a particular avahi bug; see 6c1cf68bca
move copyparty-original code to qrkode.py
stolen/qrcodegen.py can be deleted and replaced with system lib
this is safe and has minimal affect on functionality;
performance will be a tiny bit slower without the vendored copy