mirror of
https://github.com/9001/copyparty.git
synced 2025-08-17 09:02:15 -06:00
v1.3.9
This commit is contained in:
parent
e31248f018
commit
4aaa111925
|
@ -675,7 +675,7 @@ def main(argv: Optional[list[str]] = None) -> None:
|
||||||
if argv is None:
|
if argv is None:
|
||||||
argv = sys.argv
|
argv = sys.argv
|
||||||
|
|
||||||
f = '\033[36mcopyparty v{} "\033[35m{}\033[36m" ({})\n{}\033[0;36m\n sqlite v{} | jinja2 v{} | pyftpd v{}\n\033[0m\n'
|
f = '\033[36mcopyparty v{} "\033[35m{}\033[36m" ({})\n{}\033[0;36m\n sqlite v{} | jinja2 v{} | pyftpd v{}\n\033[0m'
|
||||||
f = f.format(
|
f = f.format(
|
||||||
S_VERSION,
|
S_VERSION,
|
||||||
CODENAME,
|
CODENAME,
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
|
||||||
VERSION = (1, 3, 8)
|
VERSION = (1, 3, 9)
|
||||||
CODENAME = "god dag"
|
CODENAME = "god dag"
|
||||||
BUILD_DT = (2022, 7, 27)
|
BUILD_DT = (2022, 8, 4)
|
||||||
|
|
||||||
S_VERSION = ".".join(map(str, VERSION))
|
S_VERSION = ".".join(map(str, VERSION))
|
||||||
S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
|
S_BUILD_DT = "{0:04d}-{1:02d}-{2:02d}".format(*BUILD_DT)
|
||||||
|
|
|
@ -1036,7 +1036,7 @@ class AuthSrv(object):
|
||||||
vol.flags["fk"] = int(fk) if fk is not True else 8
|
vol.flags["fk"] = int(fk) if fk is not True else 8
|
||||||
have_fk = True
|
have_fk = True
|
||||||
|
|
||||||
if have_fk and re.match("^[0-9\.]+$", self.args.fk_salt):
|
if have_fk and re.match(r"^[0-9\.]+$", self.args.fk_salt):
|
||||||
self.log("filekey salt: {}".format(self.args.fk_salt))
|
self.log("filekey salt: {}".format(self.args.fk_salt))
|
||||||
|
|
||||||
for vol in vfs.all_vols.values():
|
for vol in vfs.all_vols.values():
|
||||||
|
|
|
@ -6,12 +6,12 @@ import re
|
||||||
import time
|
import time
|
||||||
|
|
||||||
from .__init__ import ANYWIN, MACOS
|
from .__init__ import ANYWIN, MACOS
|
||||||
from .bos import bos
|
|
||||||
from .authsrv import AXS, VFS
|
from .authsrv import AXS, VFS
|
||||||
|
from .bos import bos
|
||||||
from .util import chkcmd, min_ex
|
from .util import chkcmd, min_ex
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from typing import Any, Optional, Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
from .util import RootLogger
|
from .util import RootLogger
|
||||||
except:
|
except:
|
||||||
|
|
|
@ -20,7 +20,7 @@ try:
|
||||||
from types import FrameType
|
from types import FrameType
|
||||||
|
|
||||||
import typing
|
import typing
|
||||||
from typing import Optional, Union
|
from typing import Any, Optional, Union
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -467,7 +467,7 @@ class SvcHub(object):
|
||||||
if self.logf:
|
if self.logf:
|
||||||
self.logf.write(msg)
|
self.logf.write(msg)
|
||||||
|
|
||||||
def pr(self, *a, **ka):
|
def pr(self, *a: Any, **ka: Any) -> None:
|
||||||
with self.log_mutex:
|
with self.log_mutex:
|
||||||
print(*a, **ka)
|
print(*a, **ka)
|
||||||
|
|
||||||
|
|
|
@ -32,8 +32,8 @@ from .util import (
|
||||||
ProgressPrinter,
|
ProgressPrinter,
|
||||||
absreal,
|
absreal,
|
||||||
atomic_move,
|
atomic_move,
|
||||||
djoin,
|
|
||||||
db_ex_chk,
|
db_ex_chk,
|
||||||
|
djoin,
|
||||||
fsenc,
|
fsenc,
|
||||||
min_ex,
|
min_ex,
|
||||||
quotep,
|
quotep,
|
||||||
|
@ -143,7 +143,8 @@ class Up2k(object):
|
||||||
if self.sqlite_ver < (3, 9):
|
if self.sqlite_ver < (3, 9):
|
||||||
self.no_expr_idx = True
|
self.no_expr_idx = True
|
||||||
else:
|
else:
|
||||||
self.log("could not initialize sqlite3, will use in-memory registry only")
|
t = "could not initialize sqlite3, will use in-memory registry only"
|
||||||
|
self.log(t, 3)
|
||||||
|
|
||||||
if ANYWIN:
|
if ANYWIN:
|
||||||
# usually fails to set lastmod too quickly
|
# usually fails to set lastmod too quickly
|
||||||
|
|
|
@ -84,8 +84,6 @@ else:
|
||||||
from urllib import quote # pylint: disable=no-name-in-module
|
from urllib import quote # pylint: disable=no-name-in-module
|
||||||
from urllib import unquote # pylint: disable=no-name-in-module
|
from urllib import unquote # pylint: disable=no-name-in-module
|
||||||
|
|
||||||
_: Any = (mp, BytesIO, quote, unquote)
|
|
||||||
__all__ = ["mp", "BytesIO", "quote", "unquote"]
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
struct.unpack(b">i", b"idgi")
|
struct.unpack(b">i", b"idgi")
|
||||||
|
@ -258,6 +256,10 @@ VERSIONS = "copyparty v{} ({})\n{}\n sqlite v{} | jinja v{} | pyftpd v{}".form
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_: Any = (mp, BytesIO, quote, unquote, SQLITE_VER, JINJA_VER, PYFTPD_VER)
|
||||||
|
__all__ = ["mp", "BytesIO", "quote", "unquote", "SQLITE_VER", "JINJA_VER", "PYFTPD_VER"]
|
||||||
|
|
||||||
|
|
||||||
class Cooldown(object):
|
class Cooldown(object):
|
||||||
def __init__(self, maxage: float) -> None:
|
def __init__(self, maxage: float) -> None:
|
||||||
self.maxage = maxage
|
self.maxage = maxage
|
||||||
|
|
|
@ -824,7 +824,7 @@ ebi('op_cfg').innerHTML = (
|
||||||
' <a id="griden" class="tgl btn" href="#" tt="' + L.wt_grid + '">田 the grid</a>\n' +
|
' <a id="griden" class="tgl btn" href="#" tt="' + L.wt_grid + '">田 the grid</a>\n' +
|
||||||
' <a id="thumbs" class="tgl btn" href="#" tt="' + L.ct_thumb + '">🖼️ thumbs</a>\n' +
|
' <a id="thumbs" class="tgl btn" href="#" tt="' + L.ct_thumb + '">🖼️ thumbs</a>\n' +
|
||||||
' <a id="dotfiles" class="tgl btn" href="#" tt="' + L.ct_dots + '">dotfiles</a>\n' +
|
' <a id="dotfiles" class="tgl btn" href="#" tt="' + L.ct_dots + '">dotfiles</a>\n' +
|
||||||
' <a id="dir1st" class="tgl btn" href="#" tt="' + L.ct_dir1st + '">↑ dirs</a>\n' +
|
' <a id="dir1st" class="tgl btn" href="#" tt="' + L.ct_dir1st + '">📁 first</a>\n' +
|
||||||
' <a id="ireadme" class="tgl btn" href="#" tt="' + L.ct_readme + '">📜 readme</a>\n' +
|
' <a id="ireadme" class="tgl btn" href="#" tt="' + L.ct_readme + '">📜 readme</a>\n' +
|
||||||
' </div>\n' +
|
' </div>\n' +
|
||||||
'</div>\n' +
|
'</div>\n' +
|
||||||
|
|
|
@ -1,3 +1,133 @@
|
||||||
|
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
||||||
|
# 2022-0727-1407 `v1.3.8` more async
|
||||||
|
|
||||||
|
* read-only demo server at https://a.ocv.me/pub/demo/
|
||||||
|
* latest gzip edition of the sfx: [v1.0.14](https://github.com/9001/copyparty/releases/tag/v1.0.14#:~:text=release-specific%20notes)
|
||||||
|
|
||||||
|
## new features
|
||||||
|
* new arg `--df 4` and volflag `:c,df=4g` to guarantee 4 GiB free disk space by rejecting uploads
|
||||||
|
* some features no longer block new uploads while they're processing
|
||||||
|
* `-e2v` file integrity checker
|
||||||
|
* `-e2ts` initial tag scanner
|
||||||
|
* hopefully fixes a [deadlock](https://www.youtube.com/watch?v=DkKoMveT_jo&t=3s) someone ran into (but probably doesn't)
|
||||||
|
* (the "deadlock" link is an addictive demoscene banger -- the actual issue is #10)
|
||||||
|
* reduced the impact of some features which still do
|
||||||
|
* defer `--re-maxage` reindexing if there was a write (upload/rename/...) recently
|
||||||
|
* `--db-act` sets minimum idle period before reindex can start (default 10sec)
|
||||||
|
* bbox / image-viewer: add video hotkeys 0..9 to seek 0%..90%
|
||||||
|
* audio-player: add audio crossfeed (left-right channel mixer / vocal isolation)
|
||||||
|
* splashpage (`/?h`) shows time since the most recent write
|
||||||
|
|
||||||
|
## bugfixes
|
||||||
|
* a11y:
|
||||||
|
* enter-key should always trigger onclick
|
||||||
|
* only focus password box if in-bounds
|
||||||
|
* improve skip-to-files
|
||||||
|
* prisonparty: volume labeling in root folders
|
||||||
|
* other minor stuff
|
||||||
|
* forget deleted shadowed files from the db
|
||||||
|
* be less noisy if a client disconnects mid-reply
|
||||||
|
* up2k.js less eager to thrash slow server HDDs
|
||||||
|
|
||||||
|
## other changes
|
||||||
|
* show client's upload ETA in server log
|
||||||
|
* dump stacks and issue `lsof` on the db if a transaction is stuck
|
||||||
|
* will hopefully help if there's any more deadlocks
|
||||||
|
* [up2k-hook-ytid](https://github.com/9001/copyparty/blob/hovudstraum/contrib/plugins/up2k-hook-ytid.js) (the overengineered up2k.js plugin example) now has an mp4/webm/mkv metadata parser
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
||||||
|
# 2022-0716-1848 `v1.3.7` faster
|
||||||
|
|
||||||
|
* read-only demo server at https://a.ocv.me/pub/demo/
|
||||||
|
* latest gzip edition of the sfx: [v1.0.14](https://github.com/9001/copyparty/releases/tag/v1.0.14#:~:text=release-specific%20notes)
|
||||||
|
|
||||||
|
## new features
|
||||||
|
* `up2k.js`: **improved upload speeds!**
|
||||||
|
* **...when there's many small files** (or the browser is slow)
|
||||||
|
* add [potato mode](https://user-images.githubusercontent.com/241032/179336639-8ecc01ea-2662-4cb6-8048-5be3ad599f33.png) -- lightweight UI for faster uploads from slow boxes
|
||||||
|
* enables automatically if it detects a cpu bottleneck (not very accurate)
|
||||||
|
* **...on really fast connections (LAN / fiber)**
|
||||||
|
* batch progress updates to reduce repaints
|
||||||
|
* **...when there is a mix of big and small files**
|
||||||
|
* sort the uploads by size, smallest first, for optimal cpu/network usage
|
||||||
|
* can be overridden to alphabetical order in the settings tab
|
||||||
|
* new arg `--u2sort` changes the default + overrides the override button
|
||||||
|
* improve upload pacing when alphabetical order is enabled
|
||||||
|
* mainly affecting single files that are 300 GiB +
|
||||||
|
* `up2k.js`: add [up2k hooks](https://github.com/9001/copyparty/blob/hovudstraum/contrib/plugins/up2k-hooks.js)
|
||||||
|
* specify *client-side* rules to reject files as they are dropped into the browser
|
||||||
|
* not a hard-reject since people can use [up2k.py](https://github.com/9001/copyparty/blob/hovudstraum/bin/up2k.py) and whatnot, more like a hint
|
||||||
|
* `up2k.py`: add file integrity checker
|
||||||
|
* new arg `-e2v` to scan volumes and verify file checksums on startup
|
||||||
|
* `-e2vu` updates the db on mismatch, `-e2vp` panics
|
||||||
|
* uploads are blocked while the scan is running -- might get fixed at some point
|
||||||
|
* for now it prints a warning
|
||||||
|
* bbox / image-viewer: doubletap a picture to enter fullscreen mode
|
||||||
|
* md-editor: `ctrl-c/x` affects current line if no selection, and `ctrl-e` is fullscreen
|
||||||
|
* tag-parser plugins:
|
||||||
|
* add support for passing metadata from one mtp to another (parser dependencies)
|
||||||
|
* the `p` flag in [vidchk](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/vidchk.py) usage makes it run after the base parser, eating its output
|
||||||
|
* add [rclone uploader](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/rclone-upload.py) which optionally and by default depends on vidchk
|
||||||
|
|
||||||
|
## bugfixes
|
||||||
|
* sfx would crash if it got the same PID as recently (for example across two reboots)
|
||||||
|
* audio equalizer on recent chromes
|
||||||
|
* still can't figure out why chrome sometimes drops the mediasession
|
||||||
|
* bbox: don't attach click events to videos
|
||||||
|
* up2k.py:
|
||||||
|
* more sensible behavior w/ blank files
|
||||||
|
* avoid some extra directory scans when deleting files
|
||||||
|
* faster shutdown on `ctrl-c` during volume indexing
|
||||||
|
* warning from the thumbnail cleaner if the volume has no thumbnails
|
||||||
|
* `>fixing py2 support` `>2022`
|
||||||
|
|
||||||
|
## other changes
|
||||||
|
* up2k.js:
|
||||||
|
* sends a summary of the upload queue to [the server log](https://github.com/9001/copyparty#up2k)
|
||||||
|
* shows a toast while loading huge filedrops to indicate it's still alive
|
||||||
|
* sfx: disable guru meditation unless running on windows
|
||||||
|
* avoids hanging systemd on certain crashes
|
||||||
|
* logs the state of all threads if sqlite hits a timeout
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
||||||
|
# 2022-0706-0029 `v1.3.5` sup cloudflare
|
||||||
|
|
||||||
|
* read-only demo server at https://a.ocv.me/pub/demo/
|
||||||
|
* latest gzip edition of the sfx: [v1.0.14](https://github.com/9001/copyparty/releases/tag/v1.0.14#:~:text=release-specific%20notes)
|
||||||
|
|
||||||
|
## new features
|
||||||
|
* detect + recover from cloudflare ddos-protection memes during upload
|
||||||
|
* while carefully avoiding any mention of "DDoS" in the JS because enterprise firewalls do not enjoy that
|
||||||
|
* new option `--favico` to specify a default favicon
|
||||||
|
* set to `🎉` by default, which also enables the fancy upload progress donut 👌
|
||||||
|
* baguettebox (image/video viewer):
|
||||||
|
* toolbar button `⛶` to enter fullscreen mode (same as hotkey `F`)
|
||||||
|
* tap middle of screen to show/hide toolbar
|
||||||
|
* tap left/right-side of pics to navigate prev/next
|
||||||
|
* hotkeys `[` and `]` to set A-B loop in videos
|
||||||
|
* and [URL parameters](https://a.ocv.me/pub/demo/pics-vids/#gf-e2e482ae&t=4.2-6) for that + [initial seekpoint](https://a.ocv.me/pub/demo/pics-vids/#gf-c04bb0f6&t=26s) (same as the audio player)
|
||||||
|
|
||||||
|
## bugfixes
|
||||||
|
* when a tag-parser hits the timeout, `pkill` all its descendants too
|
||||||
|
* and a [new mtp flag](https://github.com/9001/copyparty/#file-parser-plugins) to override that; `kt` (kill tree, default), `km` (kill main, old default), `kn` (kill none)
|
||||||
|
* cpu-wasting spin while waiting for the final handful of files to finish tag-scraping
|
||||||
|
* detection of sparse-files support inside [prisonparty](https://github.com/9001/copyparty/tree/hovudstraum/bin#prisonpartysh) and other strict jails
|
||||||
|
* baguettebox (image/video viewer):
|
||||||
|
* crash on swipe during close
|
||||||
|
* didn't reset terminal color at the end of `?ls=v`
|
||||||
|
* don't try to thumbnail empty files (harmless but dumb)
|
||||||
|
|
||||||
|
## other changes
|
||||||
|
* ux improvements
|
||||||
|
* hide the uploads table until something happens
|
||||||
|
* bump codemirror to 5.65.6
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
|
||||||
# 2022-0627-2057 `v1.3.3` sdcardfs
|
# 2022-0627-2057 `v1.3.3` sdcardfs
|
||||||
|
|
||||||
|
|
|
@ -94,7 +94,7 @@ class Cfg(Namespace):
|
||||||
def __init__(self, a=None, v=None, c=None):
|
def __init__(self, a=None, v=None, c=None):
|
||||||
ka = {}
|
ka = {}
|
||||||
|
|
||||||
ex = "e2d e2ds e2dsa e2t e2ts e2tsr e2v e2vu e2vp ed emp force_js ihead no_acode no_athumb no_del no_logues no_mv no_readme no_robots no_scandir no_thumb no_vthumb no_zip nid nih nw"
|
ex = "e2d e2ds e2dsa e2t e2ts e2tsr e2v e2vu e2vp xdev xvol ed emp force_js ihead no_acode no_athumb no_del no_logues no_mv no_readme no_robots no_scandir no_thumb no_vthumb no_zip nid nih nw"
|
||||||
ka.update(**{k: False for k in ex.split()})
|
ka.update(**{k: False for k in ex.split()})
|
||||||
|
|
||||||
ex = "no_rescan no_sendfile no_voldump"
|
ex = "no_rescan no_sendfile no_voldump"
|
||||||
|
|
Loading…
Reference in a new issue