copyparty 1.16.3__py3-none-any.whl → 1.16.4__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/__version__.py CHANGED
@@ -1,8 +1,8 @@
1
1
  # coding: utf-8
2
2
 
3
- VERSION = (1, 16, 3)
3
+ VERSION = (1, 16, 4)
4
4
  CODENAME = "COPYparty"
5
- BUILD_DT = (2024, 12, 4)
5
+ BUILD_DT = (2024, 12, 7)
6
6
 
7
7
  S_VERSION = ".".join(map(str, VERSION))
8
8
  S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
copyparty/up2k.py CHANGED
@@ -3077,7 +3077,8 @@ class Up2k(object):
3077
3077
  if cur:
3078
3078
  dupe = (cj["prel"], cj["name"], cj["lmod"])
3079
3079
  try:
3080
- self.dupesched[src].append(dupe)
3080
+ if dupe not in self.dupesched[src]:
3081
+ self.dupesched[src].append(dupe)
3081
3082
  except:
3082
3083
  self.dupesched[src] = [dupe]
3083
3084
 
@@ -4652,6 +4653,13 @@ class Up2k(object):
4652
4653
  t = "forgetting partial upload {} ({})"
4653
4654
  p = self._vis_job_progress(job)
4654
4655
  self.log(t.format(wark, p))
4656
+
4657
+ src = djoin(ptop, vrem)
4658
+ zi = len(self.dupesched.pop(src, []))
4659
+ if zi:
4660
+ t = "...and forgetting %d links in dupesched"
4661
+ self.log(t % (zi,))
4662
+
4655
4663
  assert wark
4656
4664
  del reg[wark]
4657
4665
 
copyparty/web/a/u2c.py CHANGED
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env python3
2
2
  from __future__ import print_function, unicode_literals
3
3
 
4
- S_VERSION = "2.6"
5
- S_BUILD_DT = "2024-11-10"
4
+ S_VERSION = "2.7"
5
+ S_BUILD_DT = "2024-12-06"
6
6
 
7
7
  """
8
8
  u2c.py: upload to copyparty
@@ -1031,8 +1031,8 @@ class Ctl(object):
1031
1031
  handshake(self.ar, file, False)
1032
1032
 
1033
1033
  def _fancy(self):
1034
+ atexit.register(self.cleanup_vt100)
1034
1035
  if VT100 and not self.ar.ns:
1035
- atexit.register(self.cleanup_vt100)
1036
1036
  ss.scroll_region(3)
1037
1037
 
1038
1038
  Daemon(self.hasher)
@@ -1040,6 +1040,7 @@ class Ctl(object):
1040
1040
  Daemon(self.handshaker)
1041
1041
  Daemon(self.uploader)
1042
1042
 
1043
+ last_sp = -1
1043
1044
  while True:
1044
1045
  with self.exit_cond:
1045
1046
  self.exit_cond.wait(0.07)
@@ -1078,6 +1079,12 @@ class Ctl(object):
1078
1079
  else:
1079
1080
  txt = " "
1080
1081
 
1082
+ if not VT100: # OSC9;4 (taskbar-progress)
1083
+ sp = int(self.up_b * 100 / self.nbytes) or 1
1084
+ if last_sp != sp:
1085
+ last_sp = sp
1086
+ txt += "\033]9;4;1;%d\033\\" % (sp,)
1087
+
1081
1088
  if not self.up_br:
1082
1089
  spd = self.hash_b / ((time.time() - self.t0) or 1)
1083
1090
  eta = (self.nbytes - self.hash_b) / (spd or 1)
@@ -1095,6 +1102,8 @@ class Ctl(object):
1095
1102
  tail = "\033[K\033[u" if VT100 and not self.ar.ns else "\r"
1096
1103
 
1097
1104
  t = "%s eta @ %s/s, %s, %d# left\033[K" % (self.eta, spd, sleft, nleft)
1105
+ if not self.hash_b:
1106
+ t = " now hashing..."
1098
1107
  eprint(txt + "\033]0;{0}\033\\\r{0}{1}".format(t, tail))
1099
1108
 
1100
1109
  if self.ar.wlist:
@@ -1115,7 +1124,10 @@ class Ctl(object):
1115
1124
  handshake(self.ar, file, False)
1116
1125
 
1117
1126
  def cleanup_vt100(self):
1118
- ss.scroll_region(None)
1127
+ if VT100:
1128
+ ss.scroll_region(None)
1129
+ else:
1130
+ eprint("\033]9;4;0\033\\")
1119
1131
  eprint("\033[J\033]0;\033\\")
1120
1132
 
1121
1133
  def cb_hasher(self, file, ofs):
@@ -1536,6 +1548,38 @@ source file/folder selection uses rsync syntax, meaning that:
1536
1548
  except:
1537
1549
  pass
1538
1550
 
1551
+ # msys2 doesn't uncygpath absolute paths with whitespace
1552
+ if not VT100:
1553
+ zsl = []
1554
+ for fn in ar.files:
1555
+ if re.search("^/[a-z]/", fn):
1556
+ fn = r"%s:\%s" % (fn[1:2], fn[3:])
1557
+ zsl.append(fn.replace("/", "\\"))
1558
+ ar.files = zsl
1559
+
1560
+ fok = []
1561
+ fng = []
1562
+ for fn in ar.files:
1563
+ if os.path.exists(fn):
1564
+ fok.append(fn)
1565
+ elif VT100:
1566
+ fng.append(fn)
1567
+ else:
1568
+ # windows leaves glob-expansion to the invoked process... okayyy let's get to work
1569
+ from glob import glob
1570
+
1571
+ fns = glob(fn)
1572
+ if fns:
1573
+ fok.extend(fns)
1574
+ else:
1575
+ fng.append(fn)
1576
+
1577
+ if fng:
1578
+ t = "some files/folders were not found:\n %s"
1579
+ raise Exception(t % ("\n ".join(fng),))
1580
+
1581
+ ar.files = fok
1582
+
1539
1583
  if ar.drd:
1540
1584
  ar.dr = True
1541
1585
 
Binary file
Binary file
copyparty/web/up2k.js.gz CHANGED
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: copyparty
3
- Version: 1.16.3
3
+ Version: 1.16.4
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
@@ -1,6 +1,6 @@
1
1
  copyparty/__init__.py,sha256=iRCNvMPg6k9WG_O2uCtlkD4vWogH8EgP9elp9XwSIJs,2610
2
2
  copyparty/__main__.py,sha256=fA4D0yAs6twyBcawN9lM7CtHuFagTsQloljWX9MZ1j0,113240
3
- copyparty/__version__.py,sha256=WuW67uQvM6-1HFurfiG1K1FKFNg68jqdRY83bRFPOxY,251
3
+ copyparty/__version__.py,sha256=PSHPFmB4WReQ90GVjo2tS3ZE1I6F3Z2igIEoAOtf4ZQ,251
4
4
  copyparty/authsrv.py,sha256=CIK5OKl38LehdAt4hidCMpsATdJhPABJPkJStpQpp9U,103405
5
5
  copyparty/broker_mp.py,sha256=QdOXXvV2Xn6J0CysEqyY3GZbqxQMyWnTpnba-a5lMc0,4987
6
6
  copyparty/broker_mpw.py,sha256=PpSS4SK3pItlpfD8OwVr3QmJEPKlUgaf2nuMOozixgU,3347
@@ -31,7 +31,7 @@ copyparty/tftpd.py,sha256=FRCALO3PigoBlwUrqxoKHM_xk7wT2O0GPG1TvNRtjOY,13606
31
31
  copyparty/th_cli.py,sha256=o6FMkerYvAXS455z3DUossVztu_nzFlYSQhs6qN6Jt8,4636
32
32
  copyparty/th_srv.py,sha256=LBcB4LpsF-H7L52Z0Dhn9LogRjJVPp1GKa8MeIMIBnw,29596
33
33
  copyparty/u2idx.py,sha256=kF4TE-j78Faq_f4vGh5So5raYDYLt2UDpza6yBA3f54,13687
34
- copyparty/up2k.py,sha256=cCJrXr8ism5V5Kv0XOEjio5q5OtLKodr0cx2Wq01LUs,174179
34
+ copyparty/up2k.py,sha256=KQZcpqWRwjvmJLFEo3ejVWDroQi10jQdvgxuASDpUlY,174476
35
35
  copyparty/util.py,sha256=UyaYXfVO4nOkqhSMi9SZn2zK2W9texb9CL9rsqMak8I,95135
36
36
  copyparty/bos/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
37
37
  copyparty/bos/bos.py,sha256=Wb7eWsXJgR5AFlBR9ZOyKrLTwy-Kct9RrGiOu4Jo37Y,1622
@@ -55,9 +55,9 @@ copyparty/stolen/ifaddr/_posix.py,sha256=-67NdfGrCktfQPakT2fLbjl2U00QMvyBGkSvrUu
55
55
  copyparty/stolen/ifaddr/_shared.py,sha256=uNC4SdEIgdSLKvuUzsf1aM-H1Xrc_9mpLoOT43YukGs,6206
56
56
  copyparty/stolen/ifaddr/_win32.py,sha256=EE-QyoBgeB7lYQ6z62VjXNaRozaYfCkaJBHGNA8QtZM,4026
57
57
  copyparty/web/baguettebox.js.gz,sha256=_amC3ipOrXKEFz8DsVP-JEl49VjMQYiKyF78eWfG-uk,7965
58
- copyparty/web/browser.css.gz,sha256=1BN6qfX6Zai3osSbW0Y5WFcqD4D7wiWYOVEb8zXYu9w,11643
58
+ copyparty/web/browser.css.gz,sha256=kurx_iA-KxLYx8PqJsn0bJVjkAxP-0YTOHSV9l_oouo,11645
59
59
  copyparty/web/browser.html,sha256=KCkZ_LwzQnj9xhXKYptAxp6W3nVGiDoSJ4ioZDo7rQ0,4827
60
- copyparty/web/browser.js.gz,sha256=bJ0hs0hUG1cXPvRN8_5ApLConOK05yr3JBomPEOfOdM,89343
60
+ copyparty/web/browser.js.gz,sha256=7YbcHLByMAc71j3nKKUrCEExAzfenYnHPBSrnJ8iJFA,89833
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
@@ -80,12 +80,12 @@ copyparty/web/splash.js.gz,sha256=EEfsi9YGtPTYRB6MPX8Dfg4YyfqncI9ldJS7_MGVOhs,27
80
80
  copyparty/web/svcs.html,sha256=P5YZimYLeQMT0uz6u3clQSNZRc5Zs0Ok-ffcbcGSYuc,11762
81
81
  copyparty/web/svcs.js.gz,sha256=k81ZvZ3I-f4fMHKrNGGOgOlvXnCBz0mVjD-8mieoWCA,520
82
82
  copyparty/web/ui.css.gz,sha256=v8U-1tetZzuzTpITjq8NWj1gg3jEiYDIIE8aE0dx63k,2800
83
- copyparty/web/up2k.js.gz,sha256=fDOT5g-LaF4WvXcceIFTc0pGhp1XPb6-W0vAdwIAKmg,23289
83
+ copyparty/web/up2k.js.gz,sha256=vB3hLpRZzVStcN2-NAGjFdfroxFPbFvKss4vxVYyy1c,23371
84
84
  copyparty/web/util.js.gz,sha256=MMDIZbxzBwBYE5eYLzhGGpC7h257oEFZaBKZwJ4uhc8,15077
85
85
  copyparty/web/w.hash.js.gz,sha256=l3GpSJD6mcU-1CRWkIj7PybgbjlfSr8oeO3vortIrQk,1105
86
86
  copyparty/web/a/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
87
87
  copyparty/web/a/partyfuse.py,sha256=9p5Hpg_IBiSimv7j9kmPhCGpy-FLXSRUOYnLjJ5JifU,28049
88
- copyparty/web/a/u2c.py,sha256=XqEFjWBiczcPsDpym74kkqg5o15Fuc7GThHfh5j0puA,50357
88
+ copyparty/web/a/u2c.py,sha256=1XcH5XfC2UuGrpTnLVHCe4KFU0Vl6uC02CZz04rvKOc,51612
89
89
  copyparty/web/a/webdav-cfg.bat,sha256=Y4NoGZlksAIg4cBMb7KdJrpKC6Nx97onaTl6yMjaimk,1449
90
90
  copyparty/web/dd/2.png,sha256=gJ14XFPzaw95L6z92fSq9eMPikSQyu-03P1lgiGe0_I,258
91
91
  copyparty/web/dd/3.png,sha256=4lho8Koz5tV7jJ4ODo6GMTScZfkqsT05yp48EDFIlyg,252
@@ -106,9 +106,9 @@ copyparty/web/deps/prismd.css.gz,sha256=ObUlksQVr-OuYlTz-I4B23TeBg2QDVVGRnWBz8cV
106
106
  copyparty/web/deps/scp.woff2,sha256=w99BDU5i8MukkMEL-iW0YO9H4vFFZSPWxbkH70ytaAg,8612
107
107
  copyparty/web/deps/sha512.ac.js.gz,sha256=lFZaCLumgWxrvEuDr4bqdKHsqjX82AbVAb7_F45Yk88,7033
108
108
  copyparty/web/deps/sha512.hw.js.gz,sha256=UAed2_ocklZCnIzcSYz2h4P1ycztlCLj-ewsRTud2lU,7939
109
- copyparty-1.16.3.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
110
- copyparty-1.16.3.dist-info/METADATA,sha256=VqCIFTrKFy5pOGmG5MAKvnE0_E2Arydg0dS4yhu3Zwo,140656
111
- copyparty-1.16.3.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
112
- copyparty-1.16.3.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
113
- copyparty-1.16.3.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
114
- copyparty-1.16.3.dist-info/RECORD,,
109
+ copyparty-1.16.4.dist-info/LICENSE,sha256=gOr4h33pCsBEg9uIy9AYmb7qlocL4V9t2uPJS5wllr0,1072
110
+ copyparty-1.16.4.dist-info/METADATA,sha256=yo6iBPRZrSl4VBK6h32czwBccoFewYTRoSFVaOOYr5s,140656
111
+ copyparty-1.16.4.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
112
+ copyparty-1.16.4.dist-info/entry_points.txt,sha256=4zw6a3rqASywQomiYLObjjlxybaI65LYYOTJwgKz7b0,128
113
+ copyparty-1.16.4.dist-info/top_level.txt,sha256=LnYUPsDyk-8kFgM6YJLG4h820DQekn81cObKSu9g-sI,10
114
+ copyparty-1.16.4.dist-info/RECORD,,