copyparty 1.18.7__py3-none-any.whl → 1.18.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- copyparty/__main__.py +1 -0
- copyparty/__version__.py +2 -2
- copyparty/authsrv.py +2 -1
- copyparty/httpcli.py +63 -20
- copyparty/svchub.py +2 -0
- copyparty/up2k.py +9 -5
- copyparty/util.py +15 -2
- copyparty/web/a/u2c.py +3 -1
- copyparty/web/browser.html +1 -1
- copyparty/web/browser.js.gz +0 -0
- copyparty/web/rups.html +1 -0
- copyparty/web/rups.js.gz +0 -0
- copyparty/web/shares.html +1 -0
- copyparty/web/shares.js.gz +0 -0
- copyparty/web/splash.js.gz +0 -0
- copyparty/web/up2k.js.gz +0 -0
- copyparty/web/util.js.gz +0 -0
- {copyparty-1.18.7.dist-info → copyparty-1.18.9.dist-info}/METADATA +2 -1
- {copyparty-1.18.7.dist-info → copyparty-1.18.9.dist-info}/RECORD +23 -23
- {copyparty-1.18.7.dist-info → copyparty-1.18.9.dist-info}/WHEEL +0 -0
- {copyparty-1.18.7.dist-info → copyparty-1.18.9.dist-info}/entry_points.txt +0 -0
- {copyparty-1.18.7.dist-info → copyparty-1.18.9.dist-info}/licenses/LICENSE +0 -0
- {copyparty-1.18.7.dist-info → copyparty-1.18.9.dist-info}/top_level.txt +0 -0
copyparty/__main__.py
CHANGED
@@ -1540,6 +1540,7 @@ def add_ui(ap, retry):
|
|
1540
1540
|
ap2 = ap.add_argument_group('ui options')
|
1541
1541
|
ap2.add_argument("--grid", action="store_true", help="show grid/thumbnails by default (volflag=grid)")
|
1542
1542
|
ap2.add_argument("--gsel", action="store_true", help="select files in grid by ctrl-click (volflag=gsel)")
|
1543
|
+
ap2.add_argument("--localtime", action="store_true", help="default to local timezone instead of UTC")
|
1543
1544
|
ap2.add_argument("--lang", metavar="LANG", type=u, default="eng", help="language; one of the following: \033[32meng nor chi\033[0m")
|
1544
1545
|
ap2.add_argument("--theme", metavar="NUM", type=int, default=0, help="default theme to use (0..7)")
|
1545
1546
|
ap2.add_argument("--themes", metavar="NUM", type=int, default=8, help="number of themes installed")
|
copyparty/__version__.py
CHANGED
copyparty/authsrv.py
CHANGED
@@ -2766,6 +2766,7 @@ class AuthSrv(object):
|
|
2766
2766
|
"dth3x": vf["th3x"],
|
2767
2767
|
"dvol": self.args.au_vol,
|
2768
2768
|
"idxh": int(self.args.ih),
|
2769
|
+
"dutc": not self.args.localtime,
|
2769
2770
|
"themes": self.args.themes,
|
2770
2771
|
"turbolvl": self.args.turbo,
|
2771
2772
|
"nosubtle": self.args.nosubtle,
|
@@ -3444,7 +3445,7 @@ def expand_config_file(
|
|
3444
3445
|
ipath += " -> " + fp
|
3445
3446
|
ret.append("#\033[36m opening cfg file{}\033[0m".format(ipath))
|
3446
3447
|
|
3447
|
-
cfg_lines = read_utf8(log, fp, True).split("\n")
|
3448
|
+
cfg_lines = read_utf8(log, fp, True).replace("\t", " ").split("\n")
|
3448
3449
|
if True: # diff-golf
|
3449
3450
|
for oln in [x.rstrip() for x in cfg_lines]:
|
3450
3451
|
ln = oln.split(" #")[0].strip()
|
copyparty/httpcli.py
CHANGED
@@ -107,6 +107,7 @@ from .util import (
|
|
107
107
|
sendfile_py,
|
108
108
|
set_fperms,
|
109
109
|
stat_resource,
|
110
|
+
str_anchor,
|
110
111
|
ub64dec,
|
111
112
|
ub64enc,
|
112
113
|
ujoin,
|
@@ -906,7 +907,7 @@ class HttpCli(object):
|
|
906
907
|
if status == 304:
|
907
908
|
self.out_headers.pop("Content-Length", None)
|
908
909
|
self.out_headers.pop("Content-Type", None)
|
909
|
-
self.out_headerlist
|
910
|
+
self.out_headerlist[:] = []
|
910
911
|
if self.k304():
|
911
912
|
self.keepalive = False
|
912
913
|
else:
|
@@ -2928,7 +2929,7 @@ class HttpCli(object):
|
|
2928
2929
|
msg = "new password OK"
|
2929
2930
|
|
2930
2931
|
redir = (self.args.SRS + "?h") if ok else ""
|
2931
|
-
h2 = '<a href="' + self.args.SRS + '?h">
|
2932
|
+
h2 = '<a href="' + self.args.SRS + '?h">continue</a>'
|
2932
2933
|
html = self.j2s("msg", h1=msg, h2=h2, redir=redir)
|
2933
2934
|
self.reply(html.encode("utf-8"))
|
2934
2935
|
return True
|
@@ -2956,7 +2957,8 @@ class HttpCli(object):
|
|
2956
2957
|
dst += "_=1#" + html_escape(uhash, True, True)
|
2957
2958
|
|
2958
2959
|
_, msg = self.get_pwd_cookie(pwd)
|
2959
|
-
|
2960
|
+
h2 = '<a href="' + dst + '">continue</a>'
|
2961
|
+
html = self.j2s("msg", h1=msg, h2=h2, redir=dst)
|
2960
2962
|
self.reply(html.encode("utf-8"))
|
2961
2963
|
return True
|
2962
2964
|
|
@@ -2969,7 +2971,7 @@ class HttpCli(object):
|
|
2969
2971
|
self.get_pwd_cookie("x")
|
2970
2972
|
|
2971
2973
|
dst = self.args.SRS + "?h"
|
2972
|
-
h2 = '<a href="' + dst + '">
|
2974
|
+
h2 = '<a href="' + dst + '">continue</a>'
|
2973
2975
|
html = self.j2s("msg", h1="ok bye", h2=h2, redir=dst)
|
2974
2976
|
self.reply(html.encode("utf-8"))
|
2975
2977
|
return True
|
@@ -3093,6 +3095,20 @@ class HttpCli(object):
|
|
3093
3095
|
if "fperms" in vfs.flags:
|
3094
3096
|
set_fperms(f, vfs.flags)
|
3095
3097
|
|
3098
|
+
dbv, vrem = vfs.get_dbv(rem)
|
3099
|
+
self.conn.hsrv.broker.say(
|
3100
|
+
"up2k.hash_file",
|
3101
|
+
dbv.realpath,
|
3102
|
+
dbv.vpath,
|
3103
|
+
dbv.flags,
|
3104
|
+
vrem,
|
3105
|
+
sanitized,
|
3106
|
+
self.ip,
|
3107
|
+
bos.stat(fn).st_mtime,
|
3108
|
+
self.uname,
|
3109
|
+
True,
|
3110
|
+
)
|
3111
|
+
|
3096
3112
|
vpath = "{}/{}".format(self.vpath, sanitized).lstrip("/")
|
3097
3113
|
self.redirect(vpath, "?edit")
|
3098
3114
|
return True
|
@@ -5331,15 +5347,16 @@ class HttpCli(object):
|
|
5331
5347
|
raise Pebkac(500, "sqlite3 not found on server; unpost is disabled")
|
5332
5348
|
raise Pebkac(500, "server busy, cannot unpost; please retry in a bit")
|
5333
5349
|
|
5334
|
-
|
5335
|
-
|
5336
|
-
lm = "ups %r" % (
|
5350
|
+
sfilt = self.uparam.get("filter") or ""
|
5351
|
+
nfi, vfi = str_anchor(sfilt)
|
5352
|
+
lm = "ups %d%r" % (nfi, sfilt)
|
5337
5353
|
|
5338
5354
|
if self.args.shr and self.vpath.startswith(self.args.shr1):
|
5339
5355
|
shr_dbv, shr_vrem = self.vn.get_dbv(self.rem)
|
5340
5356
|
else:
|
5341
5357
|
shr_dbv = None
|
5342
5358
|
|
5359
|
+
wret = {}
|
5343
5360
|
ret = []
|
5344
5361
|
t0 = time.time()
|
5345
5362
|
lim = time.time() - self.args.unpost
|
@@ -5361,7 +5378,13 @@ class HttpCli(object):
|
|
5361
5378
|
x = self.conn.hsrv.broker.ask(
|
5362
5379
|
"up2k.get_unfinished_by_user", self.uname, "" if bad_xff else self.ip
|
5363
5380
|
)
|
5364
|
-
|
5381
|
+
zdsa = x.get()
|
5382
|
+
uret = []
|
5383
|
+
if "timeout" in zdsa:
|
5384
|
+
wret["nou"] = 1
|
5385
|
+
else:
|
5386
|
+
uret = zdsa["f"]
|
5387
|
+
nu = len(uret)
|
5365
5388
|
|
5366
5389
|
if not self.args.unpost:
|
5367
5390
|
allvols = []
|
@@ -5386,8 +5409,14 @@ class HttpCli(object):
|
|
5386
5409
|
q = "select sz, rd, fn, at from up where ip=? and at>? order by at desc"
|
5387
5410
|
for sz, rd, fn, at in cur.execute(q, (self.ip, lim)):
|
5388
5411
|
vp = "/" + "/".join(x for x in [vol.vpath, rd, fn] if x)
|
5389
|
-
if
|
5390
|
-
|
5412
|
+
if nfi == 0 or (nfi == 1 and vfi in vp):
|
5413
|
+
pass
|
5414
|
+
elif nfi == 2:
|
5415
|
+
if not vp.startswith(vfi):
|
5416
|
+
continue
|
5417
|
+
elif nfi == 3:
|
5418
|
+
if not vp.endswith(vfi):
|
5419
|
+
continue
|
5391
5420
|
|
5392
5421
|
n -= 1
|
5393
5422
|
if not n:
|
@@ -5407,6 +5436,8 @@ class HttpCli(object):
|
|
5407
5436
|
|
5408
5437
|
if len(ret) > 2000:
|
5409
5438
|
ret = ret[:2000]
|
5439
|
+
if len(ret) >= 2000:
|
5440
|
+
wret["oc"] = 1
|
5410
5441
|
|
5411
5442
|
for rv in ret:
|
5412
5443
|
rv["vp"] = quotep(rv["vp"])
|
@@ -5426,6 +5457,13 @@ class HttpCli(object):
|
|
5426
5457
|
)
|
5427
5458
|
rv["vp"] += "?k=" + fk[:nfk]
|
5428
5459
|
|
5460
|
+
if not allvols:
|
5461
|
+
wret["noc"] = 1
|
5462
|
+
ret = []
|
5463
|
+
|
5464
|
+
nc = len(ret)
|
5465
|
+
ret = uret + ret
|
5466
|
+
|
5429
5467
|
if shr_dbv:
|
5430
5468
|
# translate vpaths from share-target to share-url
|
5431
5469
|
# to satisfy access checks
|
@@ -5439,12 +5477,11 @@ class HttpCli(object):
|
|
5439
5477
|
for v in ret:
|
5440
5478
|
v["vp"] = self.args.SR + v["vp"]
|
5441
5479
|
|
5442
|
-
|
5443
|
-
|
5444
|
-
|
5445
|
-
jtxt =
|
5446
|
-
|
5447
|
-
self.log("%s #%d+%d %.2fsec" % (lm, zi, len(ret), time.time() - t0))
|
5480
|
+
wret["f"] = ret
|
5481
|
+
wret["nu"] = nu
|
5482
|
+
wret["nc"] = nc
|
5483
|
+
jtxt = json.dumps(wret, separators=(",\n", ": "))
|
5484
|
+
self.log("%s #%d+%d %.2fsec" % (lm, nu, nc, time.time() - t0))
|
5448
5485
|
self.reply(jtxt.encode("utf-8", "replace"), mime="application/json")
|
5449
5486
|
return True
|
5450
5487
|
|
@@ -5459,8 +5496,8 @@ class HttpCli(object):
|
|
5459
5496
|
raise Pebkac(500, "server busy, cannot list recent uploads; please retry")
|
5460
5497
|
|
5461
5498
|
sfilt = self.uparam.get("filter") or ""
|
5462
|
-
|
5463
|
-
lm = "ru %r" % (sfilt
|
5499
|
+
nfi, vfi = str_anchor(sfilt)
|
5500
|
+
lm = "ru %d%r" % (nfi, sfilt)
|
5464
5501
|
self.log(lm)
|
5465
5502
|
|
5466
5503
|
ret = []
|
@@ -5495,8 +5532,14 @@ class HttpCli(object):
|
|
5495
5532
|
q = "select sz, rd, fn, ip, at from up where at>0 order by at desc"
|
5496
5533
|
for sz, rd, fn, ip, at in cur.execute(q):
|
5497
5534
|
vp = "/" + "/".join(x for x in [vol.vpath, rd, fn] if x)
|
5498
|
-
if
|
5499
|
-
|
5535
|
+
if nfi == 0 or (nfi == 1 and vfi in vp):
|
5536
|
+
pass
|
5537
|
+
elif nfi == 2:
|
5538
|
+
if not vp.startswith(vfi):
|
5539
|
+
continue
|
5540
|
+
elif nfi == 3:
|
5541
|
+
if not vp.endswith(vfi):
|
5542
|
+
continue
|
5500
5543
|
|
5501
5544
|
if not dots and "/." in vp:
|
5502
5545
|
continue
|
copyparty/svchub.py
CHANGED
@@ -1016,6 +1016,8 @@ class SvcHub(object):
|
|
1016
1016
|
except:
|
1017
1017
|
raise Exception("invalid --mv-retry [%s]" % (self.args.mv_retry,))
|
1018
1018
|
|
1019
|
+
al.js_utc = "false" if al.localtime else "true"
|
1020
|
+
|
1019
1021
|
al.tcolor = al.tcolor.lstrip("#")
|
1020
1022
|
if len(al.tcolor) == 3: # fc5 => ffcc55
|
1021
1023
|
al.tcolor = "".join([x * 2 for x in al.tcolor])
|
copyparty/up2k.py
CHANGED
@@ -395,12 +395,14 @@ class Up2k(object):
|
|
395
395
|
|
396
396
|
return "{}"
|
397
397
|
|
398
|
-
def get_unfinished_by_user(self, uname, ip)
|
398
|
+
def get_unfinished_by_user(self, uname, ip) :
|
399
|
+
# returns dict due to ExceptionalQueue
|
399
400
|
if PY2 or not self.reg_mutex.acquire(timeout=2):
|
400
|
-
return
|
401
|
+
return {"timeout": 1}
|
401
402
|
|
402
403
|
ret = []
|
403
404
|
userset = set([(uname or "\n"), "*"])
|
405
|
+
n = 1000
|
404
406
|
try:
|
405
407
|
for ptop, tab2 in self.registry.items():
|
406
408
|
cfg = self.flags.get(ptop, {}).get("u2abort", 1)
|
@@ -415,7 +417,6 @@ class Up2k(object):
|
|
415
417
|
or (addr and addr != job["addr"])
|
416
418
|
):
|
417
419
|
continue
|
418
|
-
|
419
420
|
zt5 = (
|
420
421
|
int(job["t0"]),
|
421
422
|
djoin(job["vtop"], job["prel"], job["name"]),
|
@@ -424,6 +425,9 @@ class Up2k(object):
|
|
424
425
|
len(job["hash"]),
|
425
426
|
)
|
426
427
|
ret.append(zt5)
|
428
|
+
n -= 1
|
429
|
+
if not n:
|
430
|
+
break
|
427
431
|
finally:
|
428
432
|
self.reg_mutex.release()
|
429
433
|
|
@@ -440,7 +444,7 @@ class Up2k(object):
|
|
440
444
|
}
|
441
445
|
for (at, vp, sz, nn, nh) in ret
|
442
446
|
]
|
443
|
-
return
|
447
|
+
return {"f": ret2}
|
444
448
|
|
445
449
|
def get_unfinished(self) :
|
446
450
|
if PY2 or not self.reg_mutex.acquire(timeout=0.5):
|
@@ -2812,7 +2816,7 @@ class Up2k(object):
|
|
2812
2816
|
# v5a -> v5b
|
2813
2817
|
# store rd+fn rather than warks to support nohash vols
|
2814
2818
|
try:
|
2815
|
-
cur.execute("select
|
2819
|
+
cur.execute("select c, w, rd, fn from iu limit 1").fetchone()
|
2816
2820
|
return
|
2817
2821
|
except:
|
2818
2822
|
pass
|
copyparty/util.py
CHANGED
@@ -2310,6 +2310,21 @@ def ujoin(rd , fn ) :
|
|
2310
2310
|
return rd or fn
|
2311
2311
|
|
2312
2312
|
|
2313
|
+
def str_anchor(txt) :
|
2314
|
+
if not txt:
|
2315
|
+
return 0, ""
|
2316
|
+
txt = txt.lower()
|
2317
|
+
a = txt.startswith("^")
|
2318
|
+
b = txt.endswith("$")
|
2319
|
+
if not b:
|
2320
|
+
if not a:
|
2321
|
+
return 1, txt # ~
|
2322
|
+
return 2, txt[1:] # ^
|
2323
|
+
if not a:
|
2324
|
+
return 3, txt[:-1] # $
|
2325
|
+
return 4, txt[1:-1] # ^$
|
2326
|
+
|
2327
|
+
|
2313
2328
|
def log_reloc(
|
2314
2329
|
log ,
|
2315
2330
|
re ,
|
@@ -4104,8 +4119,6 @@ def load_resource(E , name , mode="rb") :
|
|
4104
4119
|
ap = os.path.join(E.mod, name)
|
4105
4120
|
|
4106
4121
|
if PY2:
|
4107
|
-
import codecs
|
4108
|
-
|
4109
4122
|
return codecs.open(ap, "r", encoding=enc) # type: ignore
|
4110
4123
|
|
4111
4124
|
return open(ap, mode, encoding=enc)
|
copyparty/web/a/u2c.py
CHANGED
@@ -52,6 +52,7 @@ if PY2:
|
|
52
52
|
|
53
53
|
sys.dont_write_bytecode = True
|
54
54
|
bytes = str
|
55
|
+
files_decoder = lambda s: unicode(s, "utf8")
|
55
56
|
else:
|
56
57
|
from urllib.parse import quote_from_bytes as quote
|
57
58
|
from urllib.parse import unquote_to_bytes as unquote
|
@@ -61,6 +62,7 @@ else:
|
|
61
62
|
from queue import Queue
|
62
63
|
|
63
64
|
unicode = str
|
65
|
+
files_decoder = unicode
|
64
66
|
|
65
67
|
|
66
68
|
WTF8 = "replace" if PY2 else "surrogateescape"
|
@@ -1530,7 +1532,7 @@ source file/folder selection uses rsync syntax, meaning that:
|
|
1530
1532
|
""")
|
1531
1533
|
|
1532
1534
|
ap.add_argument("url", type=unicode, help="server url, including destination folder")
|
1533
|
-
ap.add_argument("files", type=
|
1535
|
+
ap.add_argument("files", type=files_decoder, nargs="+", help="files and/or folders to process")
|
1534
1536
|
ap.add_argument("-v", action="store_true", help="verbose")
|
1535
1537
|
ap.add_argument("-a", metavar="PASSWD", help="password or $filepath")
|
1536
1538
|
ap.add_argument("-s", action="store_true", help="file-search (disables upload)")
|
copyparty/web/browser.html
CHANGED
@@ -110,7 +110,7 @@
|
|
110
110
|
<tr><td>{{ f.lead }}</td><td><a href="{{ f.href }}">{{ f.name|e }}</a></td><td>{{ f.sz }}</td>
|
111
111
|
{%- if f.tags is defined %}
|
112
112
|
{%- for k in taglist %}<td>{{ f.tags[k]|e }}</td>{%- endfor %}
|
113
|
-
{%- endif %}<td>{{ f.ext
|
113
|
+
{%- endif %}<td>{{ f.ext }}</td><td>{{ f.dt }}</td></tr>
|
114
114
|
{%- endfor %}
|
115
115
|
|
116
116
|
</tbody>
|
copyparty/web/browser.js.gz
CHANGED
Binary file
|
copyparty/web/rups.html
CHANGED
copyparty/web/rups.js.gz
CHANGED
Binary file
|
copyparty/web/shares.html
CHANGED
copyparty/web/shares.js.gz
CHANGED
Binary file
|
copyparty/web/splash.js.gz
CHANGED
Binary file
|
copyparty/web/up2k.js.gz
CHANGED
Binary file
|
copyparty/web/util.js.gz
CHANGED
Binary file
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: copyparty
|
3
|
-
Version: 1.18.
|
3
|
+
Version: 1.18.9
|
4
4
|
Summary: Portable file server with accelerated resumable uploads, deduplication, WebDAV, FTP, zeroconf, media indexer, video thumbnails, audio transcoding, and write-only folders
|
5
5
|
Author-email: ed <copyparty@ocv.me>
|
6
6
|
License: MIT
|
@@ -210,6 +210,7 @@ just run **[copyparty-sfx.py](https://github.com/9001/copyparty/releases/latest/
|
|
210
210
|
* or install [on arch](#arch-package) ╱ [on NixOS](#nixos-module) ╱ [through nix](#nix-package)
|
211
211
|
* or if you are on android, [install copyparty in termux](#install-on-android)
|
212
212
|
* or maybe you have a [synology nas / dsm](./docs/synology-dsm.md)
|
213
|
+
* or if you have [uv](https://docs.astral.sh/uv/) installed, run `uv tool run copyparty`
|
213
214
|
* or if your computer is messed up and nothing else works, [try the pyz](#zipapp)
|
214
215
|
* or if your OS is dead, give the [bootable flashdrive / cd-rom](https://a.ocv.me/pub/stuff/edcd001/enterprise-edition/) a spin
|
215
216
|
* or if you don't trust copyparty yet and want to isolate it a little, then...
|
@@ -1,7 +1,7 @@
|
|
1
1
|
copyparty/__init__.py,sha256=4aJw_Mt3eSNMV8sJ95Nh4ris-tBUYhCOV094Rnxa5Xo,2651
|
2
|
-
copyparty/__main__.py,sha256=
|
3
|
-
copyparty/__version__.py,sha256=
|
4
|
-
copyparty/authsrv.py,sha256=
|
2
|
+
copyparty/__main__.py,sha256=voGZLR6chtYQGJgsfjcUYk9rhRGU3zwnpbRSfMpPNXE,127673
|
3
|
+
copyparty/__version__.py,sha256=vPZH_BWBXQ3lZl1cfIPpgNLx29TvHsPpesL3B_9BvfA,248
|
4
|
+
copyparty/authsrv.py,sha256=CHKI5MmroVe7s1oTDkCBG18aFOhpuFbDmqcVMuK5j-E,122551
|
5
5
|
copyparty/broker_mp.py,sha256=QdOXXvV2Xn6J0CysEqyY3GZbqxQMyWnTpnba-a5lMc0,4987
|
6
6
|
copyparty/broker_mpw.py,sha256=PpSS4SK3pItlpfD8OwVr3QmJEPKlUgaf2nuMOozixgU,3347
|
7
7
|
copyparty/broker_thr.py,sha256=fjoYtpSscUA7-nMl4r1n2R7UK3J9lrvLS3rUZ-iJzKQ,1721
|
@@ -11,7 +11,7 @@ copyparty/cfg.py,sha256=THceFupFmsZWF8iJKDDHR_XUEU3TNQgDRJB50iLiC1k,15734
|
|
11
11
|
copyparty/dxml.py,sha256=vu5uZQtwvwoqnFHbULs2Zh_y2DETu0T-ENpMZ1i2CV4,2505
|
12
12
|
copyparty/fsutil.py,sha256=NC_CJC4TDag399vVDH9_uQfdfpTMwRFLNxERSWhlVvs,4594
|
13
13
|
copyparty/ftpd.py,sha256=S0w6iMR8AlzLc_Aqn-TKuUJ-vNbmeQF6SQs614-NFOE,18107
|
14
|
-
copyparty/httpcli.py,sha256=
|
14
|
+
copyparty/httpcli.py,sha256=sY5MjJYYj2Q3nrlvTMl-a7QOJrVcSI_tlgUeRnzqACg,232778
|
15
15
|
copyparty/httpconn.py,sha256=IA9fdCjigawZ4kWhgvVN3nSiy5pb3W2qaE6rFqUYdq0,6943
|
16
16
|
copyparty/httpsrv.py,sha256=MCNjOEH_xM2qXCLGcoN6W0RhWlikv68-zBx0nICIheU,18864
|
17
17
|
copyparty/ico.py,sha256=-7QjF_jIxnPo4Vr0oUPksQ_U_Ef0HRsSPm3s71idOz8,3879
|
@@ -24,15 +24,15 @@ copyparty/smbd.py,sha256=Czo8SRkkl4ndCwEUe9Cbr8v0YOnyQHzubGSguPizuTc,14651
|
|
24
24
|
copyparty/ssdp.py,sha256=R1Z61GZOxBMF2Sk4RTxKWMOemogmcjEWG-CvLihd45k,7023
|
25
25
|
copyparty/star.py,sha256=tV5BbX6AiQ7N4UU8DYtSTckNYeoeey4DBqq4LjfymbY,3818
|
26
26
|
copyparty/sutil.py,sha256=E65jAaOzHlJYnqsOKDMPVT8kALPUVexpkSStWBdItkY,3231
|
27
|
-
copyparty/svchub.py,sha256=
|
27
|
+
copyparty/svchub.py,sha256=lAa-4HfD1LSv3Sn3pOtgLWGHyPhtGDXSCzGvpVB21E0,49140
|
28
28
|
copyparty/szip.py,sha256=9srQzjsTBrBadf6QMh4YRAL70rkZLevAOHqXWK5jvr8,8846
|
29
29
|
copyparty/tcpsrv.py,sha256=BCOqlT_mRu1ibHJpPzvf9c4h83AnIMEfd8nBBednCCg,20484
|
30
30
|
copyparty/tftpd.py,sha256=QuPcdx77gLmEpit3lLc0x4Px6BrBBKJpJl4VqINc5O8,14254
|
31
31
|
copyparty/th_cli.py,sha256=IEX5tCb0gw9Z2aRIDL9bwdvJ6g5jhWZ8OEAAz16_xN4,5426
|
32
32
|
copyparty/th_srv.py,sha256=S6ChazjXwXevUxkAajwIwHzA16PyNIwv6kYRFakvLmY,32759
|
33
33
|
copyparty/u2idx.py,sha256=4Y5OOPyVkc-pS0z6e3p4StXAMnjHobSOMmMsvNUTD34,13674
|
34
|
-
copyparty/up2k.py,sha256=
|
35
|
-
copyparty/util.py,sha256=
|
34
|
+
copyparty/up2k.py,sha256=QGB2D8ZKlgyAFaY6qoa-KMd_RComhW6F2kP2ukgEsyQ,179269
|
35
|
+
copyparty/util.py,sha256=XQN86nmxN4RgWWw4k1dIbWeIAR_Dqh_7Z4X9WobwRFI,105732
|
36
36
|
copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
37
37
|
copyparty/bos/bos.py,sha256=DYt5mJJNt-935rU7HRm8kt_whpcVSI0uSphvD7PXrJo,2247
|
38
38
|
copyparty/bos/path.py,sha256=yEjCq2ki9CvxA5sCT8pS0keEXwugs0ZeUyUhdBziOCI,777
|
@@ -56,8 +56,8 @@ copyparty/stolen/ifaddr/_shared.py,sha256=uNC4SdEIgdSLKvuUzsf1aM-H1Xrc_9mpLoOT43
|
|
56
56
|
copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
|
57
57
|
copyparty/web/baguettebox.js.gz,sha256=MxRofvhXjmUN7RtXtC17_9AlROVNUT-66WwJ_pHLY9c,8258
|
58
58
|
copyparty/web/browser.css.gz,sha256=29D3F4uB-VMd6uJo-SxWAwLfn08jcETYZm0SOJFJLAE,11847
|
59
|
-
copyparty/web/browser.html,sha256=
|
60
|
-
copyparty/web/browser.js.gz,sha256=
|
59
|
+
copyparty/web/browser.html,sha256=lhelkXI8_HGfuqo_5b6XEGzf8VNodOMXE9kbv31JtbM,4790
|
60
|
+
copyparty/web/browser.js.gz,sha256=crq0Io0MHZFAOfX7tfWSnp1CixbsNPa7FaGIUT3T-gA,170979
|
61
61
|
copyparty/web/browser2.html,sha256=NRUZ08GH-e2YcGXcoz0UjYg6JIVF42u4IMX4HHwWTmg,1587
|
62
62
|
copyparty/web/cf.html,sha256=lJThtNFNAQT1ClCHHlivAkDGE0LutedwopXD62Z8Nys,589
|
63
63
|
copyparty/web/dbg-audio.js.gz,sha256=Ma-KZtK8LnmiwNvNKFKXMPYl_Nn_3U7GsJ6-DRWC2HE,688
|
@@ -73,23 +73,23 @@ copyparty/web/mde.js.gz,sha256=kN2eUSvr4mFuksfK4-4LimJmWdwsao39Sea2lWtu8L0,2224
|
|
73
73
|
copyparty/web/msg.css.gz,sha256=u90fXYAVrMD-jqwf5XFVC1ptSpSHZUe8Mez6PX101P8,300
|
74
74
|
copyparty/web/msg.html,sha256=w9CM3hkLLGJX9fWEaG4gSbTOPe2GcPqW8BpSCDiFzOI,977
|
75
75
|
copyparty/web/rups.css.gz,sha256=pWklsym27oGGr-8tYQR7WnZvGZElAgCwLzlwTDErNAM,647
|
76
|
-
copyparty/web/rups.html,sha256=
|
77
|
-
copyparty/web/rups.js.gz,sha256=
|
76
|
+
copyparty/web/rups.html,sha256=36UfDfHYMltw7_qAWGUGeRF8zaCSw2EjclhsymW94n0,1512
|
77
|
+
copyparty/web/rups.js.gz,sha256=99RaGb6fhpER4_eNyauN7yOhA8NFcO4qNKazlnyrano,854
|
78
78
|
copyparty/web/shares.css.gz,sha256=SdPlZCBwz9tkPkgEo5pSPDOZSI079njxEfkJ64-iW3c,547
|
79
|
-
copyparty/web/shares.html,sha256=
|
80
|
-
copyparty/web/shares.js.gz,sha256=
|
79
|
+
copyparty/web/shares.html,sha256=ZZ9BIuzhbVtJCAZOb_PAaEY_z9jo8i93QEJolNDHX3g,2578
|
80
|
+
copyparty/web/shares.js.gz,sha256=KEOx1OxQeEQNHNjsPXCvtWGFIRQSKy_tP7XSvreNCXk,966
|
81
81
|
copyparty/web/splash.css.gz,sha256=S8_A7JJl71xACRBYGzafeaD82OacW6Fa7oKPiNyrhAs,1087
|
82
82
|
copyparty/web/splash.html,sha256=0MvDe1lKfGqczi7d4nKjWjG0cRVyvs8J6sDEj3DCPSI,6376
|
83
|
-
copyparty/web/splash.js.gz,sha256=
|
83
|
+
copyparty/web/splash.js.gz,sha256=8GtUHvIQiOpa3VosmovP4zJT3qTV6lENrJCDtPSZuiY,6278
|
84
84
|
copyparty/web/svcs.html,sha256=mamJdq0hsmHqG2BQsf9jg8G9bAl338wUhUZ2WtXOlGQ,14865
|
85
85
|
copyparty/web/svcs.js.gz,sha256=AYatNKyT_bKRWX8sb3WD_iujBY3L4P7HWBrsuMctsLs,722
|
86
86
|
copyparty/web/ui.css.gz,sha256=e3iIflzddmjoyPrun_1jsu9j7fbdonNQLyhEE2oKKOQ,2819
|
87
|
-
copyparty/web/up2k.js.gz,sha256=
|
88
|
-
copyparty/web/util.js.gz,sha256=
|
87
|
+
copyparty/web/up2k.js.gz,sha256=aoq6uXrL77zlYQnx9y9VNUVL7YBOHc4u-zFlIrQSX14,24811
|
88
|
+
copyparty/web/util.js.gz,sha256=nqWl2JXpw9nVirYbwm4zpWPnonLBLpqHB6g8vncJ86Q,15499
|
89
89
|
copyparty/web/w.hash.js.gz,sha256=cFH6Xo4YRgH9Wr7RmHMSEfpuTmmIvEmzmSvv4RLmyPU,1193
|
90
90
|
copyparty/web/a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
91
91
|
copyparty/web/a/partyfuse.py,sha256=9p5Hpg_IBiSimv7j9kmPhCGpy-FLXSRUOYnLjJ5JifU,28049
|
92
|
-
copyparty/web/a/u2c.py,sha256=
|
92
|
+
copyparty/web/a/u2c.py,sha256=f_KR1ZhOjJYBnyYlJbBXY-TnNITeT7HOf0R3pR_9DIM,53248
|
93
93
|
copyparty/web/a/webdav-cfg.bat,sha256=Y4NoGZlksAIg4cBMb7KdJrpKC6Nx97onaTl6yMjaimk,1449
|
94
94
|
copyparty/web/dd/2.png,sha256=gJ14XFPzaw95L6z92fSq9eMPikSQyu-03P1lgiGe0_I,258
|
95
95
|
copyparty/web/dd/3.png,sha256=4lho8Koz5tV7jJ4ODo6GMTScZfkqsT05yp48EDFIlyg,252
|
@@ -110,9 +110,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV
|
|
110
110
|
copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
|
111
111
|
copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
|
112
112
|
copyparty/web/deps/sha512.hw.js.gz,sha256=UAed2_ocklZCnIzcSYz2h4P1ycztlCLj-ewsRTud2lU,7939
|
113
|
-
copyparty-1.18.
|
114
|
-
copyparty-1.18.
|
115
|
-
copyparty-1.18.
|
116
|
-
copyparty-1.18.
|
117
|
-
copyparty-1.18.
|
118
|
-
copyparty-1.18.
|
113
|
+
copyparty-1.18.9.dist-info/licenses/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
|
114
|
+
copyparty-1.18.9.dist-info/METADATA,sha256=C696ifH8fB2Wc9FgyFvi21nc4kvfwMZ0WUn_WPBTnUo,167834
|
115
|
+
copyparty-1.18.9.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
116
|
+
copyparty-1.18.9.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
|
117
|
+
copyparty-1.18.9.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
|
118
|
+
copyparty-1.18.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|