diff --git a/copyparty/__init__.py b/copyparty/__init__.py index 44ddd3c9..6baaaf5f 100644 --- a/copyparty/__init__.py +++ b/copyparty/__init__.py @@ -55,7 +55,7 @@ except: zs = """ web/a/partyfuse.py web/a/u2c.py -web/a/webdav-cfg.bat +web/a/webdav-cfg.txt web/baguettebox.js web/browser.css web/browser.html @@ -125,6 +125,11 @@ web/util.js web/w.hash.js """ RES = set(zs.strip().split("\n")) +RESM = { + "web/a/partyfuse.txt": "web/a/partyfuse.py", + "web/a/u2c.txt": "web/a/u2c.py", + "web/a/webdav-cfg.bat": "web/a/webdav-cfg.txt", +} class EnvParams(object): diff --git a/copyparty/httpcli.py b/copyparty/httpcli.py index 48887cee..40bff7cb 100644 --- a/copyparty/httpcli.py +++ b/copyparty/httpcli.py @@ -30,7 +30,7 @@ try: except: pass -from .__init__ import ANYWIN, RES, TYPE_CHECKING, EnvParams, unicode +from .__init__ import ANYWIN, RES, RESM, TYPE_CHECKING, EnvParams, unicode from .__version__ import S_VERSION from .authsrv import LEELOO_DALLAS, VFS # typechk from .bos import bos @@ -1275,6 +1275,20 @@ class HttpCli(object): else: return self.tx_res(res_path) + if res_path in RESM: + ap = self.E.mod_ + RESM[res_path] + if ( + "txt" not in self.uparam + and "mime" not in self.uparam + and not self.ouparam.get("dl") + ): + # return mimetype matching request extension + self.ouparam["dl"] = res_path.split("/")[-1] + if bos.path.exists(ap) or bos.path.exists(ap + ".gz"): + return self.tx_file(ap) + else: + return self.tx_res(res_path) + self.tx_404() return False @@ -4179,8 +4193,11 @@ class HttpCli(object): # force download if "dl" in self.ouparam: - cdis = gen_content_disposition(os.path.basename(req_path)) - self.out_headers["Content-Disposition"] = cdis + cdis = self.ouparam["dl"] or req_path + zs = gen_content_disposition(os.path.basename(cdis)) + self.out_headers["Content-Disposition"] = zs + else: + cdis = req_path # # if-modified @@ -4246,7 +4263,7 @@ class HttpCli(object): elif "mime" in self.uparam: mime = str(self.uparam.get("mime")) else: - mime = guess_mime(req_path) + mime = guess_mime(cdis) logmsg += unicode(status) + logtail @@ -4354,8 +4371,11 @@ class HttpCli(object): # force download if "dl" in self.ouparam: - cdis = gen_content_disposition(os.path.basename(req_path)) - self.out_headers["Content-Disposition"] = cdis + cdis = self.ouparam["dl"] or req_path + zs = gen_content_disposition(os.path.basename(cdis)) + self.out_headers["Content-Disposition"] = zs + else: + cdis = req_path # # if-modified @@ -4483,7 +4503,7 @@ class HttpCli(object): elif "rmagic" in self.vn.flags: mime = guess_mime(req_path, fs_path) else: - mime = guess_mime(req_path) + mime = guess_mime(cdis) if "nohtml" in self.vn.flags and "html" in mime: mime = "text/plain; charset=utf-8" diff --git a/copyparty/web/Makefile b/copyparty/web/Makefile index 99fd53f2..01ec4637 100644 --- a/copyparty/web/Makefile +++ b/copyparty/web/Makefile @@ -2,8 +2,9 @@ # which should help on really slow connections # but then why are you using copyparty in the first place -pk: $(addsuffix .gz, $(wildcard tl/*.js *.js *.css)) -un: $(addsuffix .un, $(wildcard tl/*.gz *.gz)) +pk: $(addsuffix .gz, $(wildcard tl/*.js *.js *.css) \ + a/partyfuse.py a/u2c.py a/webdav-cfg.txt ) +un: $(addsuffix .un, $(wildcard tl/*.gz *.gz a/*.gz)) %.gz: % pigz -11 -J 34 -I 573 $< diff --git a/copyparty/web/a/webdav-cfg.bat b/copyparty/web/a/webdav-cfg.txt similarity index 100% rename from copyparty/web/a/webdav-cfg.bat rename to copyparty/web/a/webdav-cfg.txt diff --git a/copyparty/web/svcs.html b/copyparty/web/svcs.html index f07a8fb6..a0bed2c7 100644 --- a/copyparty/web/svcs.html +++ b/copyparty/web/svcs.html @@ -64,7 +64,7 @@
= with (space)if you want to use the native WebDAV client in windows instead (slow and buggy), first run webdav-cfg.bat to remove the 47 MiB filesize limit (also fixes latency and password login), then connect:
+if you want to use the native WebDAV client in windows instead (slow and buggy), first run webdav-cfg.bat to remove the 47 MiB filesize limit (also fixes latency and password login), then connect:
{%- if un %}
net use w: http{{ s }}://{{ ep }}/{{ rvp }}{% if accs %} {{ pw }} /user:{{ b_un }}{% endif %}
diff --git a/pyproject.toml b/pyproject.toml
index 6041a3ce..c5d41e31 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -96,7 +96,8 @@ copyparty = [
"web/*.xml",
"web/tl/*.js",
"web/tl/*.gz",
- "web/a/*.bat",
+ "web/a/*.txt",
+ "web/a/*.gz",
"web/deps/*.gz",
"web/deps/*.woff*",
]
diff --git a/scripts/make-sfx.sh b/scripts/make-sfx.sh
index e9aa80fb..36d5a792 100755
--- a/scripts/make-sfx.sh
+++ b/scripts/make-sfx.sh
@@ -571,7 +571,7 @@ gzres() {
$pk "$f" &
done < <(
find -printf '%s %p\n' |
- grep -E '\.(js|css)$' |
+ grep -E '\.(js|css)$|/web/a/[^_].*\.(py|txt)$' |
grep -vF /deps/ |
sort -nr
)
diff --git a/scripts/sfx.ls b/scripts/sfx.ls
index 3505ee63..59a13916 100644
--- a/scripts/sfx.ls
+++ b/scripts/sfx.ls
@@ -66,7 +66,7 @@ copyparty/web/a,
copyparty/web/a/__init__.py,
copyparty/web/a/partyfuse.py,
copyparty/web/a/u2c.py,
-copyparty/web/a/webdav-cfg.bat,
+copyparty/web/a/webdav-cfg.txt,
copyparty/web/baguettebox.js,
copyparty/web/browser.css,
copyparty/web/browser.html,