This commit is contained in:
Yaroslav Halchenko 2025-11-23 15:34:19 +01:00 committed by GitHub
commit c02e42e78d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
39 changed files with 118 additions and 85 deletions

25
.github/workflows/codespell.yml vendored Normal file
View file

@ -0,0 +1,25 @@
# Codespell configuration is within pyproject.toml
---
name: Codespell
on:
push:
branches: [hovudstraum]
pull_request:
branches: [hovudstraum]
permissions:
contents: read
jobs:
codespell:
name: Check for spelling errors
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Annotate locations with typos
uses: codespell-project/codespell-problem-matcher@v1
- name: Codespell
uses: codespell-project/actions-codespell@v2

View file

@ -986,7 +986,7 @@ specify `--shr /foobar` to enable this feature; a toplevel virtual folder named
* you can name it whatever, `foobar` is just an example * you can name it whatever, `foobar` is just an example
* if you're using config files, put `shr: /foobar` inside the `[global]` section instead * if you're using config files, put `shr: /foobar` inside the `[global]` section instead
users can delete their own shares in the controlpanel, and a list of privileged users (`--shr-adm`) are allowed to see and/or delet any share on the server users can delete their own shares in the controlpanel, and a list of privileged users (`--shr-adm`) are allowed to see and/or delete any share on the server
after a share has expired, it remains visible in the controlpanel for `--shr-rt` minutes (default is 1 day), and the owner can revive it by extending the expiration time there after a share has expired, it remains visible in the controlpanel for `--shr-rt` minutes (default is 1 day), and the owner can revive it by extending the expiration time there

View file

@ -9,7 +9,7 @@ from copyparty.util import fsenc, runcmd
uses exiftool to geotag images based on embedded gps coordinates in exif data uses exiftool to geotag images based on embedded gps coordinates in exif data
adds four new metadata keys: adds four new metadata keys:
.gps_lat = latitute .gps_lat = latitude
.gps_lon = longitude .gps_lon = longitude
.masl = meters above sea level .masl = meters above sea level
city = "city, subregion, region" city = "city, subregion, region"

View file

@ -151,7 +151,7 @@ def open_url(txt):
for _ in range(20): for _ in range(20):
sp.call(["xdotool", "key", "ctrl+w"]) # closes the open tab correctly sp.call(["xdotool", "key", "ctrl+w"]) # closes the open tab correctly
# else: # else:
# sp.call(["xdotool", "getactivewindow", "windowminimize"]) # minimizes the focused windo # sp.call(["xdotool", "getactivewindow", "windowminimize"]) # minimizes the focused window
# mpv is probably smart enough to use streamlink automatically # mpv is probably smart enough to use streamlink automatically
if try_mpv(txt): if try_mpv(txt):
@ -166,7 +166,7 @@ def open_url(txt):
# nope, # nope,
# close any error messages: # close any error messages:
sp.call(["xdotool", "search", "--name", "Error", "windowclose"]) sp.call(["xdotool", "search", "--name", "Error", "windowclose"])
# sp.call(["xdotool", "key", "ctrl+alt+d"]) # doesnt work at all # sp.call(["xdotool", "key", "ctrl+alt+d"]) # does not work at all
# sp.call(["xdotool", "keydown", "--delay", "100", "ctrl+alt+d"]) # sp.call(["xdotool", "keydown", "--delay", "100", "ctrl+alt+d"])
# sp.call(["xdotool", "keyup", "ctrl+alt+d"]) # sp.call(["xdotool", "keyup", "ctrl+alt+d"])
sp.call(["xdg-open", txt]) sp.call(["xdg-open", txt])

View file

@ -14,7 +14,7 @@
# then create a shortcut to that bat-file and move the shortcut here: # then create a shortcut to that bat-file and move the shortcut here:
# %appdata%\Microsoft\Windows\Start Menu\Programs\Startup # %appdata%\Microsoft\Windows\Start Menu\Programs\Startup
# #
# and now this will autorun on bootup # and now this will autorun on boot-up
Add-Type -TypeDefinition @" Add-Type -TypeDefinition @"

View file

@ -363,7 +363,7 @@ in
name: value: name: value:
lib.attrsets.nameValuePair (value.path) { lib.attrsets.nameValuePair (value.path) {
d = { d = {
#: in front of things means it wont change it if the directory already exists. #: in front of things means it won't change it if the directory already exists.
group = ":${cfg.group}"; group = ":${cfg.group}";
user = ":${cfg.user}"; user = ":${cfg.user}";
mode = ":${ mode = ":${

View file

@ -11,7 +11,7 @@ var hambagas = [
"https://www.youtube.com/watch?v=pFA3KGp4GuU" "https://www.youtube.com/watch?v=pFA3KGp4GuU"
]; ];
// keybaord, // keyboard,
// onscreen keyboard by @steinuil // onscreen keyboard by @steinuil
function initKeybaord(BASE_URL, HAMBAGA, consoleLog, consoleError) { function initKeybaord(BASE_URL, HAMBAGA, consoleLog, consoleError) {
document.querySelector('.keybaord-container').innerHTML = ` document.querySelector('.keybaord-container').innerHTML = `
@ -373,7 +373,7 @@ function initKeybaord(BASE_URL, HAMBAGA, consoleLog, consoleError) {
} }
// keybaord integration // keyboard integration
(function () { (function () {
var o = mknod('div'); var o = mknod('div');
clmod(o, 'keybaord-container', 1); clmod(o, 'keybaord-container', 1);

View file

@ -58,7 +58,7 @@ def set_pagesize(db_path):
# https://www.sqlite.org/pragma.html#pragma_page_size # https://www.sqlite.org/pragma.html#pragma_page_size
# `- disable wal; set pagesize; vacuum # `- disable wal; set pagesize; vacuum
# (copyparty will reenable wal if necessary) # (copyparty will re-enable wal if necessary)
with sqlite3.connect(db_path) as db: with sqlite3.connect(db_path) as db:
db.execute("pragma journal_mode=delete") db.execute("pragma journal_mode=delete")

View file

@ -1712,7 +1712,7 @@ def add_db_general(ap, hcores):
ap2.add_argument("--no-idx", metavar="PTN", type=u, default=noidx, help="regex: disable indexing of matching absolute-filesystem-paths during e2ds folder scan (must be specified as one big regex, not multiple times) (volflag=noidx)") ap2.add_argument("--no-idx", metavar="PTN", type=u, default=noidx, help="regex: disable indexing of matching absolute-filesystem-paths during e2ds folder scan (must be specified as one big regex, not multiple times) (volflag=noidx)")
ap2.add_argument("--no-dirsz", action="store_true", help="do not show total recursive size of folders in listings, show inode size instead; slightly faster (volflag=nodirsz)") ap2.add_argument("--no-dirsz", action="store_true", help="do not show total recursive size of folders in listings, show inode size instead; slightly faster (volflag=nodirsz)")
ap2.add_argument("--re-dirsz", action="store_true", help="if the directory-sizes in the UI are bonkers, use this along with \033[33m-e2dsa\033[0m to rebuild the index from scratch") ap2.add_argument("--re-dirsz", action="store_true", help="if the directory-sizes in the UI are bonkers, use this along with \033[33m-e2dsa\033[0m to rebuild the index from scratch")
ap2.add_argument("--no-dhash", action="store_true", help="disable rescan acceleration; do full database integrity check -- makes the db ~5%% smaller and bootup/rescans 3~10x slower") ap2.add_argument("--no-dhash", action="store_true", help="disable rescan acceleration; do full database integrity check -- makes the db ~5%% smaller and boot-up/rescans 3~10x slower")
ap2.add_argument("--re-dhash", action="store_true", help="force a cache rebuild on startup; enable this once if it gets out of sync (should never be necessary)") ap2.add_argument("--re-dhash", action="store_true", help="force a cache rebuild on startup; enable this once if it gets out of sync (should never be necessary)")
ap2.add_argument("--no-forget", action="store_true", help="never forget indexed files, even when deleted from disk -- makes it impossible to ever upload the same file twice -- only useful for offloading uploads to a cloud service or something (volflag=noforget)") ap2.add_argument("--no-forget", action="store_true", help="never forget indexed files, even when deleted from disk -- makes it impossible to ever upload the same file twice -- only useful for offloading uploads to a cloud service or something (volflag=noforget)")
ap2.add_argument("--forget-ip", metavar="MIN", type=int, default=0, help="remove uploader-IP from database (and make unpost impossible) \033[33mMIN\033[0m minutes after upload, for GDPR reasons. Default [\033[32m0\033[0m] is never-forget. [\033[32m1440\033[0m]=day, [\033[32m10080\033[0m]=week, [\033[32m43200\033[0m]=month. (volflag=forget_ip)") ap2.add_argument("--forget-ip", metavar="MIN", type=int, default=0, help="remove uploader-IP from database (and make unpost impossible) \033[33mMIN\033[0m minutes after upload, for GDPR reasons. Default [\033[32m0\033[0m] is never-forget. [\033[32m1440\033[0m]=day, [\033[32m10080\033[0m]=week, [\033[32m43200\033[0m]=month. (volflag=forget_ip)")

View file

@ -2657,7 +2657,7 @@ class AuthSrv(object):
for mtp in local_only_mtp: for mtp in local_only_mtp:
if mtp not in local_mte: if mtp not in local_mte:
t = 'volume "/{}" defines metadata tag "{}", but doesnt use it in "-mte" (or with "cmte" in its volflags)' t = 'volume "/{}" defines metadata tag "{}", but does not use it in "-mte" (or with "cmte" in its volflags)'
self.log(t.format(vol.vpath, mtp), 1) self.log(t.format(vol.vpath, mtp), 1)
errors = True errors = True

View file

@ -151,7 +151,7 @@ def _gen_srv(log: "RootLogger", args, netdevs: dict[str, Netdev]):
try: try:
expiry, inf = _read_crt(args, "srv.pem") expiry, inf = _read_crt(args, "srv.pem")
if "sans" not in inf: if "sans" not in inf:
raise Exception("no useable cert found") raise Exception("no usable cert found")
expired = time.time() + args.crt_sdays * 60 * 60 * 24 * 0.5 > expiry expired = time.time() + args.crt_sdays * 60 * 60 * 24 * 0.5 > expiry
if expired: if expired:

View file

@ -2103,7 +2103,7 @@ class HttpCli(object):
oh["Dav"] = "1, 2" oh["Dav"] = "1, 2"
oh["Ms-Author-Via"] = "DAV" oh["Ms-Author-Via"] = "DAV"
# winxp-webdav doesnt know what 204 is # winxp-webdav does not know what 204 is
self.send_headers(0, 200) self.send_headers(0, 200)
return True return True
@ -2342,7 +2342,7 @@ class HttpCli(object):
open_ka = {"fun": lzma.open, "preset": lv[alg]} open_ka = {"fun": lzma.open, "preset": lv[alg]}
open_a = ["wb"] open_a = ["wb"]
else: else:
self.log("fallthrough? thats a bug", 1) self.log("fallthrough? that's a bug", 1)
suffix = "-{:.6f}-{}".format(time.time(), self.dip()) suffix = "-{:.6f}-{}".format(time.time(), self.dip())
nameless = not fn nameless = not fn

View file

@ -322,7 +322,7 @@ class MDNS(MCast):
self.build_replies() self.build_replies()
Daemon(self.send_probes) Daemon(self.send_probes)
zf = time.time() + 2 zf = time.time() + 2
self.probing = zf # cant unicast so give everyone an extra sec self.probing = zf # can't unicast so give everyone an extra sec
self.unsolicited = [zf, zf + 1, zf + 3, zf + 7] # rfc-8.3 self.unsolicited = [zf, zf + 1, zf + 3, zf + 7] # rfc-8.3
try: try:

View file

@ -320,7 +320,7 @@ def parse_ffprobe(
if v2 is None or zf > v2: if v2 is None or zf > v2:
ret[rk] = zf ret[rk] = zf
except: except:
# sqlite doesnt care but the code below does # sqlite does not care but the code below does
if v1 not in ["N/A"]: if v1 not in ["N/A"]:
ret[rk] = v1 ret[rk] = v1
else: else:

View file

@ -41,7 +41,7 @@ class Adapter(object):
#: `{846EE342-7039-11DE-9D20-806E6F6E6963}`. #: `{846EE342-7039-11DE-9D20-806E6F6E6963}`.
self.name = name self.name = name
#: Human readable name of the adpater. On Linux this #: Human readable name of the adapter. On Linux this
#: is currently the same as :attr:`name`. On Windows #: is currently the same as :attr:`name`. On Windows
#: this is the name of the device. #: this is the name of the device.
self.nice_name = nice_name self.nice_name = nice_name

View file

@ -1338,7 +1338,7 @@ class SvcHub(object):
pass pass
self.shutdown() self.shutdown()
# cant join; eats signals on win10 # can't join; eats signals on win10
while not self.stopped: while not self.stopped:
time.sleep(0.1) time.sleep(0.1)
else: else:

View file

@ -119,7 +119,7 @@ def gen_hdr(
# infozip-macos: 0100 0000 a481 (spec-ver 1e03) file:644 # infozip-macos: 0100 0000 a481 (spec-ver 1e03) file:644
# infozip-macos: 0100 0100 0080 (spec-ver 1e03) file:000 # infozip-macos: 0100 0100 0080 (spec-ver 1e03) file:000
# win10-zip: 0000 2000 0000 (spec-ver xx00) FILE_ATTRIBUTE_ARCHIVE # win10-zip: 0000 2000 0000 (spec-ver xx00) FILE_ATTRIBUTE_ARCHIVE
ret += b"\x00\x00\x00\x00\xa4\x81" # unx ret += b"\x00\x00\x00\x00\xa4\x81" # unix
# ret += b"\x00\x00\x20\x00\x00\x00" # fat # ret += b"\x00\x00\x20\x00\x00\x00" # fat
# 4b local-header-ofs # 4b local-header-ofs

View file

@ -464,7 +464,7 @@ if (1)
"m3u_clip": "m3u playlist now copied to clipboard\n\nyou should create a new textfile named something.m3u and paste the playlist in that document; this will make it playable", "m3u_clip": "m3u playlist now copied to clipboard\n\nyou should create a new textfile named something.m3u and paste the playlist in that document; this will make it playable",
"gt_vau": "don't show videos, just play the audio\">🎧", "gt_vau": "don't show videos, just play the audio\">🎧",
"gt_msel": "enable file selection; ctrl-click a file to override$N$N<em>when active: doubleclick a file / folder to open it</em>$N$NHotkey: S\">multiselect", "gt_msel": "enable file selection; ctrl-click a file to override$N$N<em>when active: double-click a file / folder to open it</em>$N$NHotkey: S\">multiselect",
"gt_crop": "center-crop thumbnails\">crop", "gt_crop": "center-crop thumbnails\">crop",
"gt_3x": "hi-res thumbnails\">3x", "gt_3x": "hi-res thumbnails\">3x",
"gt_zoom": "zoom", "gt_zoom": "zoom",
@ -2238,7 +2238,7 @@ var vbar = (function () {
setTimeout(function () { setTimeout(function () {
if (IPHONE && mp.au && mul < 0.9 && mp.au.volume == 1) if (IPHONE && mp.au && mul < 0.9 && mp.au.volume == 1)
toast.inf(6, 'volume doesnt work because <a href="https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11" target="_blank">apple says no</a>'); toast.inf(6, 'volume does not work because <a href="https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/Using_HTML5_Audio_Video/Device-SpecificConsiderations/Device-SpecificConsiderations.html#//apple_ref/doc/uid/TP40009523-CH5-SW11" target="_blank">apple says no</a>');
}, 1); }, 1);
} }
can.onmousedown = function (e) { can.onmousedown = function (e) {

View file

@ -20,7 +20,7 @@
<a id="save" href="{{ arg_base }}edit" tt="Hotkey: ctrl-s">save</a> <a id="save" href="{{ arg_base }}edit" tt="Hotkey: ctrl-s">save</a>
<a id="sbs" href="#" tt="editor and preview side by side">sbs</a> <a id="sbs" href="#" tt="editor and preview side by side">sbs</a>
<a id="nsbs" href="#" tt="switch between editor and preview$NHotkey: ctrl-e">editor</a> <a id="nsbs" href="#" tt="switch between editor and preview$NHotkey: ctrl-e">editor</a>
<div id="toolsbox"> <div id="toolbox">
<a id="tools" href="#">tools</a> <a id="tools" href="#">tools</a>
<a id="fmt_table" href="#">prettify table (ctrl-k)</a> <a id="fmt_table" href="#">prettify table (ctrl-k)</a>
<a id="iter_uni" href="#">non-ascii: iterate (ctrl-u)</a> <a id="iter_uni" href="#">non-ascii: iterate (ctrl-u)</a>

View file

@ -19,7 +19,7 @@
<a id="xpnd" href="#">files</a> <a id="xpnd" href="#">files</a>
<a href="{{ r }}/?h">control-panel</a> <a href="{{ r }}/?h">control-panel</a>
<span>axs = perms (read,write,move,delet)</span> <span>axs = perms (read,write,move,delete)</span>
<span>nf = numFiles (0=dir)</span> <span>nf = numFiles (0=dir)</span>
<span>min/hrs = time left</span> <span>min/hrs = time left</span>

View file

@ -2294,7 +2294,7 @@ function xhrchk(xhr, prefix, e404, lvl, tag) {
var errtxt = ((xhr.response && xhr.response.err) || xhr.responseText) || '', var errtxt = ((xhr.response && xhr.response.err) || xhr.responseText) || '',
suf = '', suf = '',
fun = toast[lvl || 'err'], fun = toast[lvl || 'err'],
is_cf = /[Cc]loud[f]lare|>Just a mo[m]ent|#cf-b[u]bbles|Chec[k]ing your br[o]wser|\/chall[e]nge-platform|"chall[e]nge-error|nable Ja[v]aScript and cook/.test(errtxt); is_cf = /[Cc]loud[f]lare|>Just a mo[m]ent|#cf-b[u]bbles|Chec[k]ing your br[o]wser|\/chall[e]nge-platform|"chall[e]nge-error|nable Ja[v]aScript and cook/.test(errtxt); # codespell:ignore
if (errtxt.startsWith('<pre>')) if (errtxt.startsWith('<pre>'))
suf = '\n\nerror-details: «' + unpre(errtxt).split('\n')[0].trim() + '»'; suf = '\n\nerror-details: «' + unpre(errtxt).split('\n')[0].trim() + '»';

View file

@ -18,7 +18,7 @@
* does not include the smb-server, so antivirus doesn't think it's malware 7f5810f1 * does not include the smb-server, so antivirus doesn't think it's malware 7f5810f1
* english-only, because antivirus apparently hates certain translations too 7f5810f1 * english-only, because antivirus apparently hates certain translations too 7f5810f1
* renamed the webdav-config `.bat` to `.txt` because clearly only one of those are "dangerous" b624a387 * renamed the webdav-config `.bat` to `.txt` because clearly only one of those are "dangerous" b624a387
* show volumes with permssion `h` in the navpane fff7291d * show volumes with permission `h` in the navpane fff7291d
* #937 global-option `--notooltips` to default-disable tooltips a325353b * #937 global-option `--notooltips` to default-disable tooltips a325353b
## 🩹 bugfixes ## 🩹 bugfixes
@ -55,7 +55,7 @@
* audioplayer: show embedded coverart as fallback for cover.jpg in OS widgets 9746b4e2 * audioplayer: show embedded coverart as fallback for cover.jpg in OS widgets 9746b4e2
* #928 option to [hide certain ui-elements](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#hide-ui-elements), either with volflags or url-params 98da5cc5 * #928 option to [hide certain ui-elements](https://github.com/9001/copyparty/tree/hovudstraum/docs/rice#hide-ui-elements), either with volflags or url-params 98da5cc5
* #911 users can now avoid autoban according to permissions 6f02812a * #911 users can now avoid autoban according to permissions 6f02812a
* verbosity and permssion options for `?stack` 677fd8ee * verbosity and permission options for `?stack` 677fd8ee
* default is now admin-only; previously it was "admin or read+write" * default is now admin-only; previously it was "admin or read+write"
## 🩹 bugfixes ## 🩹 bugfixes
@ -452,12 +452,12 @@
* #567 .raw image thumbnails (thx @ar-nelson!) 0177a9b4 * #567 .raw image thumbnails (thx @ar-nelson!) 0177a9b4
* available in docker-images `iv` and `dj` * available in docker-images `iv` and `dj`
* #561 epub thumbnails (thx @Scotsguy!) 9435e6b2 * #561 epub thumbnails (thx @Scotsguy!) 9435e6b2
* #252 music thumbnails use embdded coverart if available 98d117b8 * #252 music thumbnails use embedded coverart if available 98d117b8
* thumbnails folder `.hist/th` must be deleted to take effect * thumbnails folder `.hist/th` must be deleted to take effect
* #530 show username of uploaders in file listings; requires `a` (admin) permission 4df033ec * #530 show username of uploaders in file listings; requires `a` (admin) permission 4df033ec
* #604 a new group `@acct` which automatically contains all known usernames 68907eaf * #604 a new group `@acct` which automatically contains all known usernames 68907eaf
* controlpanel has a dedicated "logout all sessions" button, similar to the logout-link in the browser f4a3fba2 * controlpanel has a dedicated "logout all sessions" button, similar to the logout-link in the browser f4a3fba2
* #397 accounts can be restricted to certian IPs 62e072a2 * #397 accounts can be restricted to certain IPs 62e072a2
* #504 automatic login through tailscale auth a4649d1e * #504 automatic login through tailscale auth a4649d1e
* #533 sticky qr-code with `--qr-pin 1` 1ebe06f5 * #533 sticky qr-code with `--qr-pin 1` 1ebe06f5
* #572 button to abort copy/move 715d374e * #572 button to abort copy/move 715d374e
@ -519,7 +519,7 @@
* if you have enabled password hashing (`ah-alg: argon2` or similar) then you will need to hash your passwords again after enabling usernames, hashing them as `username:password:` * if you have enabled password hashing (`ah-alg: argon2` or similar) then you will need to hash your passwords again after enabling usernames, hashing them as `username:password:`
* #468 add Greek translation (thx @chamdim!) 50f46187 392abd06 * #468 add Greek translation (thx @chamdim!) 50f46187 392abd06
* #471 add Czech translation (thx @kubakubakuba!) c9556583 * #471 add Czech translation (thx @kubakubakuba!) c9556583
* #515 support systemd socket acivation (thx @mati1210!) 9b9d2a92 * #515 support systemd socket activation (thx @mati1210!) 9b9d2a92
* #523 add QR-code to the connectpage bcc3b156 * #523 add QR-code to the connectpage bcc3b156
* #513 optional EOL-conversion for texteditor 8b31ed88 * #513 optional EOL-conversion for texteditor 8b31ed88
* controlpanel refresh-button now toggles automatic refresh 7ae84dea * controlpanel refresh-button now toggles automatic refresh 7ae84dea
@ -1081,7 +1081,7 @@ get the party going anywhere, anytime, no OS required! [download flashdrive imag
* option to specify max-size for download-as-zip/tar 494179bd 0a33336d * option to specify max-size for download-as-zip/tar 494179bd 0a33336d
* either the total download size (`--zipmaxs 500M`), and/or max number of files (`--zipmaxn 9k`) * either the total download size (`--zipmaxs 500M`), and/or max number of files (`--zipmaxn 9k`)
* applies to all uesrs by default; can also ignore limits for authorized users (`--zipmaxu`) * applies to all users by default; can also ignore limits for authorized users (`--zipmaxu`)
* errormessage can be customized with `--zipmaxt "winter is coming... but this download isn't"` * errormessage can be customized with `--zipmaxt "winter is coming... but this download isn't"`
* [appledoubles](https://a.ocv.me/pub/stuff/?doc=appledoubles-and-friends.txt) are detected and skipped when uploading with the browser-UI 78208405 * [appledoubles](https://a.ocv.me/pub/stuff/?doc=appledoubles-and-friends.txt) are detected and skipped when uploading with the browser-UI 78208405
* IdP-volumes can be filtered by group 9c2c4237 * IdP-volumes can be filtered by group 9c2c4237
@ -1536,7 +1536,7 @@ this release includes a build of [copyparty-winpe64.exe](https://github.com/9001
* webdav: support listing unmapped root with infinite recursion (Depth:0) 21a3f369 * webdav: support listing unmapped root with infinite recursion (Depth:0) 21a3f369
* embed current sort config into media URLs (gallery/music) 0f257c93 4cfdc4c5 01670827 * embed current sort config into media URLs (gallery/music) 0f257c93 4cfdc4c5 01670827
* ensures that anyone clicking your link will see the files in the same order as you * ensures that anyone clicking your link will see the files in the same order as you
* can be confgured serverside (`--hsortn`, volflag `hsortn`) and clientside (`#sort` in settings) * can be configured serverside (`--hsortn`, volflag `hsortn`) and clientside (`#sort` in settings)
* URL and UI options to disable checksum calculation of PUT, bup, basic uploads c5a000d2 * URL and UI options to disable checksum calculation of PUT, bup, basic uploads c5a000d2
* also allows [choosing either md5, sha1, sha256, or blake2](https://github.com/9001/copyparty/blob/hovudstraum/docs/devnotes.md#write) instead of the default sha512 * also allows [choosing either md5, sha1, sha256, or blake2](https://github.com/9001/copyparty/blob/hovudstraum/docs/devnotes.md#write) instead of the default sha512
* can give uploads a nice speed boost when copyparty is running on a potato * can give uploads a nice speed boost when copyparty is running on a potato
@ -2729,7 +2729,7 @@ probably last release before v1.10 (IdP), please watch warmly
* now possible to POST files without having to set the `act: bput` multipart field 9bc09ce9 * now possible to POST files without having to set the `act: bput` multipart field 9bc09ce9
* mainly to support [igloo irc](https://github.com/9001/copyparty#client-examples) and other simplistic upload clients * mainly to support [igloo irc](https://github.com/9001/copyparty#client-examples) and other simplistic upload clients
* try to point the linux oom-killer at FFmpeg so it doesn't kill innocent processes instead dc8e621d * try to point the linux oom-killer at FFmpeg so it doesn't kill innocent processes instead dc8e621d
* only works if copyparty has acces to /proc, so not in prisonparty, and maybe not in docker (todo) * only works if copyparty has access to /proc, so not in prisonparty, and maybe not in docker (todo)
* UX: * UX:
* do another search immediately if a search-filter gets unchecked a4239a46 * do another search immediately if a search-filter gets unchecked a4239a46
* several ie11 fixes (keyboard hotkeys and a working text editor) 2fd2c6b9 * several ie11 fixes (keyboard hotkeys and a working text editor) 2fd2c6b9
@ -3049,7 +3049,7 @@ just adding requested features, nothing important
* `--no-crop` and the `nocrop` volflag now sets the default value of this instead of forcing the setting * `--no-crop` and the `nocrop` volflag now sets the default value of this instead of forcing the setting
* thumbnail cleanup is now more granular, cleaning full-jpg separately from cropped-webp for example * thumbnail cleanup is now more granular, cleaning full-jpg separately from cropped-webp for example
* set default sort order with `--sort` or volflag `sort` * set default sort order with `--sort` or volflag `sort`
* one or more comma-separated values; `tags/Cirle,tags/.tn,tags/Artist,tags/Title,href` * one or more comma-separated values; `tags/Circle,tags/.tn,tags/Artist,tags/Title,href`
* see the column header tooltips in the browser to know what names (`id`) to use * see the column header tooltips in the browser to know what names (`id`) to use
* prefix a column name with `-` for descending sort * prefix a column name with `-` for descending sort
* specifying a sort order in the client will override all server-defined ones * specifying a sort order in the client will override all server-defined ones
@ -3215,7 +3215,7 @@ hello! it's been a while, an entire day even...
* iPhones and iPads are now able to... * iPhones and iPads are now able to...
* 9986136d play entire albums while the screen is off without the music randomly stopping * 9986136d play entire albums while the screen is off without the music randomly stopping
* apple keeps breaking AudioContext in new and interesting ways; time to give up (no more equalizer) * apple keeps breaking AudioContext in new and interesting ways; time to give up (no more equalizer)
* 1c0d9789 perform search queries and execude js code * 1c0d9789 perform search queries and execute js code
* by translating [smart-quotes](https://stackoverflow.com/questions/48678359/ios-11-safari-html-disable-smart-punctuation) into regular `'` and `"` characters * by translating [smart-quotes](https://stackoverflow.com/questions/48678359/ios-11-safari-html-disable-smart-punctuation) into regular `'` and `"` characters
* python 3.12 support * python 3.12 support
* technically a bugfix since it was added [a year ago](https://github.com/9001/copyparty/commit/32e22dfe) way before the first py3.12 alpha was released but turns out i botched it, oh well * technically a bugfix since it was added [a year ago](https://github.com/9001/copyparty/commit/32e22dfe) way before the first py3.12 alpha was released but turns out i botched it, oh well
@ -3699,7 +3699,7 @@ don't get excited! nothing new and revolutionary, but `xvol` and `xdev` changed
## bugfixes ## bugfixes
* more sqlite query-planner twiddling * more sqlite query-planner twiddling
* deleting files is MUCH faster now, and uploads / bootup might be a bit better too * deleting files is MUCH faster now, and uploads / boot-up might be a bit better too
* webdav optimizations / compliance * webdav optimizations / compliance
* should make some webdav clients run faster than before * should make some webdav clients run faster than before
* in very related news, the webdav-client in [rclone](https://github.com/rclone/rclone/) v1.63 ([currently beta](https://beta.rclone.org/?filter=latest)) will be ***FAST!*** * in very related news, the webdav-client in [rclone](https://github.com/rclone/rclone/) v1.63 ([currently beta](https://beta.rclone.org/?filter=latest)) will be ***FAST!***
@ -4054,7 +4054,7 @@ hello from warsaw airport (goodbye japan ;_;)
* browser ui didn't allow specifying number of threads for file search * browser ui didn't allow specifying number of threads for file search
* dont panic if a digit key is pressed while viewing an image * dont panic if a digit key is pressed while viewing an image
* workaround [linux kernel bug](https://utcc.utoronto.ca/~cks/space/blog/linux/KernelBindBugIn6016) causing log spam on dualstack * workaround [linux kernel bug](https://utcc.utoronto.ca/~cks/space/blog/linux/KernelBindBugIn6016) causing log spam on dualstack
* ~~related issue (also mostly harmless) will be fixed next relese 01077068~~ * ~~related issue (also mostly harmless) will be fixed next release 01077068~~
* they fixed it in linux 6.1 so these workarounds will be gone too * they fixed it in linux 6.1 so these workarounds will be gone too
@ -4199,7 +4199,7 @@ named after [that other thing](https://en.wikipedia.org/wiki/Tower_of_Babel), no
* display a server [qr-code](https://github.com/9001/copyparty#qr-code) [(screenshot)](https://user-images.githubusercontent.com/241032/194728533-6f00849b-c6ac-43c6-9359-83e454d11e00.png) on startup * display a server [qr-code](https://github.com/9001/copyparty#qr-code) [(screenshot)](https://user-images.githubusercontent.com/241032/194728533-6f00849b-c6ac-43c6-9359-83e454d11e00.png) on startup
* primarily for running copyparty on a phone and accessing it from another * primarily for running copyparty on a phone and accessing it from another
* optionally specify a path or password with `--qrl lootbox/?pw=hunter2` * optionally specify a path or password with `--qrl lootbox/?pw=hunter2`
* uses the server's exteral ip (default route) unless `--qri` specifies a domain / ip-prefix * uses the server's external ip (default route) unless `--qri` specifies a domain / ip-prefix
* classic cp437 `▄` `▀` for space efficiency; some misbehaving terminals / fonts need `--qrz 2` * classic cp437 `▄` `▀` for space efficiency; some misbehaving terminals / fonts need `--qrz 2`
* new permission `G` returns the filekey of uploaded files for users without read-access * new permission `G` returns the filekey of uploaded files for users without read-access
* when combined with permission `w` and volflag `fk`, uploaded files will not be accessible unless the filekey is provided in the url, and `G` provides the filekey to the uploader unlike `g` * when combined with permission `w` and volflag `fk`, uploaded files will not be accessible unless the filekey is provided in the url, and `G` provides the filekey to the uploader unlike `g`
@ -4420,7 +4420,7 @@ after two exciting releases, time for something boring
## new features ## new features
*but wait, there's more!*   not only do you get the [multithreaded file hashing](https://github.com/9001/copyparty/releases/tag/v1.3.11) but also -- *but wait, there's more!*   not only do you get the [multithreaded file hashing](https://github.com/9001/copyparty/releases/tag/v1.3.11) but also --
* faster bootup and volume reindexing when `-e2ds` (file indexing) is enabled * faster boot-up and volume reindexing when `-e2ds` (file indexing) is enabled
* `3x` faster is probably the average on most instances; more files per folder = faster * `3x` faster is probably the average on most instances; more files per folder = faster
* `9x` faster on a 36 TiB zfs music/media nas with `-e2ts` (metadata indexing), dropping from 46sec to 5sec * `9x` faster on a 36 TiB zfs music/media nas with `-e2ts` (metadata indexing), dropping from 46sec to 5sec
* and `34x` on another zfs box, 63sec -> 1.8sec * and `34x` on another zfs box, 63sec -> 1.8sec
@ -5151,7 +5151,7 @@ so far just mild annoyances, nothing bad
* last release broke folder listings if you left off the trailing slash in the url * last release broke folder listings if you left off the trailing slash in the url
* also fix the markdown-editor breadcrumbs which made that very obvious * also fix the markdown-editor breadcrumbs which made that very obvious
* when running without `-e2d`, don't proactively create symlinks for dupe uploads * when running without `-e2d`, don't proactively create symlinks for dupe uploads
* prevents the client from accidentally pushing superflous links * prevents the client from accidentally pushing superfluous links
* ui didn't update correctly when navigating into a folder with indexing disabled * ui didn't update correctly when navigating into a folder with indexing disabled
# other changes # other changes
@ -5268,7 +5268,7 @@ not super important but recommended
# new features # new features
* navigate into textfiles using hotkeys (`v, k`) * navigate into textfiles using hotkeys (`v, k`)
* close various UI elements by repeatedly hitting the Escape key * close various UI elements by repeatedly hitting the Escape key
* doubleclick files/folders to open them (in the grid view, when multiselect is enabled) * double-click files/folders to open them (in the grid view, when multiselect is enabled)
* `--s-wr-slp` sets a delay between socket writes, simulates a slow network during downloads * `--s-wr-slp` sets a delay between socket writes, simulates a slow network during downloads
* `--s-wr-sz` sets socket write size, default 256 KiB (was hardcoded 32 KiB until now) * `--s-wr-sz` sets socket write size, default 256 KiB (was hardcoded 32 KiB until now)
* this increase download speed by ~50% (to around 3 GiB/s) when running on windows / where sendfile is unavailable * this increase download speed by ~50% (to around 3 GiB/s) when running on windows / where sendfile is unavailable
@ -5337,7 +5337,7 @@ not super important but recommended
* supported formats: same as transcoder + `mp3` `ogg` `opus` * supported formats: same as transcoder + `mp3` `ogg` `opus`
* needs FFmpeg and FFprobe, can be disabled with `--no-athumb` * needs FFmpeg and FFprobe, can be disabled with `--no-athumb`
* **textfile viewer** * **textfile viewer**
* with syntax hilighting * with syntax highlighting
* can be disabled by deleting `web/deps/prism.js.gz` or building the sfx with `no-hl` * can be disabled by deleting `web/deps/prism.js.gz` or building the sfx with `no-hl`
* and list of textfiles in the navpane; toggle with hotkey `v` * and list of textfiles in the navpane; toggle with hotkey `v`
* **navpane context dock** * **navpane context dock**
@ -5427,7 +5427,7 @@ for future releases, you can use a script to automatically grab the latest sfx a
* latest gzip edition of the sfx: [v0.11.18](https://github.com/9001/copyparty/releases/tag/v0.11.18) * latest gzip edition of the sfx: [v0.11.18](https://github.com/9001/copyparty/releases/tag/v0.11.18)
## bugfixes ## bugfixes
* currently-playing song didn't hilight correctly * currently-playing song didn't highlight correctly
@ -5479,7 +5479,7 @@ thx to @Bevinsky and @icxes for the ux suggestions
* and `?raw` POST without content-type is now allowed * and `?raw` POST without content-type is now allowed
* file-listing is refreshed when all up2k uploads complete * file-listing is refreshed when all up2k uploads complete
* new option `--ign-ebind` to continue startup even if one of the IPs / ports couldn't be listened on * new option `--ign-ebind` to continue startup even if one of the IPs / ports couldn't be listened on
* new option `--ign-ebind-all` to run even if copyparty can't receieve any connections at all * new option `--ign-ebind-all` to run even if copyparty can't receive any connections at all
* maybe useful for monitoring folders and hashing new files on a timer or something * maybe useful for monitoring folders and hashing new files on a timer or something
## bugfixes ## bugfixes
@ -5562,7 +5562,7 @@ thx to @Bevinsky and @icxes for the ux suggestions
## bugfixes ## bugfixes
* race-condition initializing the up2k-client when dropping files into the browser and you're not using https * race-condition initializing the up2k-client when dropping files into the browser and you're not using https
* hilight active folder in the navpane even when the browser and copyparty disagrees on how to urlencode * highlight active folder in the navpane even when the browser and copyparty disagrees on how to urlencode
* hide prologue/epilogue while search results are open * hide prologue/epilogue while search results are open
* toasts could redefine css * toasts could redefine css
@ -5668,10 +5668,10 @@ thx to @Bevinsky and @icxes for the ux suggestions
* loss of access to anon-read/write folders after logging in * loss of access to anon-read/write folders after logging in
* affected filesearch, regular searching, and volume listings * affected filesearch, regular searching, and volume listings
* more aggressively `no-cache`, preventing cloudflare from eating api calls * more aggressively `no-cache`, preventing cloudflare from eating api calls
* after deleteing all files inside a folder, don't delete the folder itself * after deleting all files inside a folder, don't delete the folder itself
* was intended behavior but fairly confusing * was intended behavior but fairly confusing
* don't reshow tooltips when alt-tabbing * don't reshow tooltips when alt-tabbing
* accessibility: always hilight focused things * accessibility: always highlight focused things
* markdown-editor modification poller doesn't cause performance issues after having a document open for several months * markdown-editor modification poller doesn't cause performance issues after having a document open for several months
* mtp plugins [audio-bpm.py](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/audio-bpm.py) and [audio-key.py](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/audio-key.py) explicitly asks for just the first audio stream, which prevents ffmpeg from transcoding video (nice) * mtp plugins [audio-bpm.py](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/audio-bpm.py) and [audio-key.py](https://github.com/9001/copyparty/blob/hovudstraum/bin/mtag/audio-key.py) explicitly asks for just the first audio stream, which prevents ffmpeg from transcoding video (nice)
@ -6006,7 +6006,7 @@ note: `copyparty-sfx.py` is https://github.com/9001/copyparty/commit/5955940b wh
* image-thumbnails: apply rotation hints from exif * image-thumbnails: apply rotation hints from exif
* image-thumbnails: higher quality AND slightly smaller * image-thumbnails: higher quality AND slightly smaller
* fix loss of detail on resize * fix loss of detail on resize
* argument `--th-mt` specifices number of cores to use for thumbnailing * argument `--th-mt` specifies number of cores to use for thumbnailing
* default is 0 which means all cores * default is 0 which means all cores
## bugfixes ## bugfixes
@ -6616,7 +6616,7 @@ all these changelogs are sorted by importance btw so here's the least important
## new features ## new features
* video player -- click a webm/mp4 in the grid-view to play it * video player -- click a webm/mp4 in the grid-view to play it
* only does formats/codecs supported by your browser for now (thats the foreshadowing part) * only does formats/codecs supported by your browser for now (that's the foreshadowing part)
* `--th-clean 0` disables periodic cleanup of the thumbnail cache * `--th-clean 0` disables periodic cleanup of the thumbnail cache
## bugfixes ## bugfixes
@ -6793,7 +6793,7 @@ unless the upload was paused for 6 hours or more, it can probably be resumed by
## new features suggested by kipu ## new features suggested by kipu
* pause uploads by setting `parallel uploads` to `0` * pause uploads by setting `parallel uploads` to `0`
* increase max `parallel uploads` to 16 (using +/- buttons) and 64 (by manual text entry) to accomodate sad american internet connections * increase max `parallel uploads` to 16 (using +/- buttons) and 64 (by manual text entry) to accommodate sad american internet connections
* also look for `cover.jpg` and `cover.png` as folder thumbnails by default, adjustable with `--th-covers` * also look for `cover.jpg` and `cover.png` as folder thumbnails by default, adjustable with `--th-covers`
* change the description in the sfx so the corruption warning is the first plaintext you see * change the description in the sfx so the corruption warning is the first plaintext you see
@ -6947,7 +6947,7 @@ reason: [v0.11.12](https://github.com/9001/copyparty/releases/tag/v0.11.12) chan
## new features ## new features
* much faster filesearch in chrome * much faster filesearch in chrome
* skip hidden colums in the /np text * skip hidden columns in the /np text
* support cygpaths when pointing to mtag tools * support cygpaths when pointing to mtag tools
## bugfixes ## bugfixes
@ -7009,10 +7009,10 @@ this release includes [copyparty-sfx-gz.py](https://github.com/9001/copyparty/re
* hotkey `b` to toggle breadcrumbs / directory tree sidebar * hotkey `b` to toggle breadcrumbs / directory tree sidebar
* hotkey `p` is now play/pause * hotkey `p` is now play/pause
* hotkey `m` is now parent-directory * hotkey `m` is now parent-directory
* hilight the playing track in gallery mode too * highlight the playing track in gallery mode too
* toggle to disable the now-playing clipboard buttons * toggle to disable the now-playing clipboard buttons
* added lots of tooltips * added lots of tooltips
* threw aray the competing tooltip implementations and did a single ok one * threw array the competing tooltip implementations and did a single ok one
* more accurate error-messages on upload failures due to filesystem permissions * more accurate error-messages on upload failures due to filesystem permissions
* add another output to the sfx repacker (gzip-compressed python sfx) * add another output to the sfx repacker (gzip-compressed python sfx)
@ -7060,7 +7060,7 @@ this release includes [copyparty-sfx-gz.py](https://github.com/9001/copyparty/re
## new features ## new features
* media player can now continue into the next folder * media player can now continue into the next folder
* eq curve supports both positive and negative values (and scales down to avoid clipping) * eq curve supports both positive and negative values (and scales down to avoid clipping)
* browser columns now fully hide when hidden; reenable them in the settings tab * browser columns now fully hide when hidden; re-enable them in the settings tab
* other ux tweaks * other ux tweaks
* add some icons * add some icons
* tree control buttons remain visible when scrolling * tree control buttons remain visible when scrolling
@ -7184,7 +7184,7 @@ nothing really important happened since [v0.11.6](https://github.com/9001/copypa
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
# 2021-0608-0741 `v0.11.10` dont leave me hangin # 2021-0608-0741 `v0.11.10` dont leave me hanging
* drop-in upgrade, no additional steps since [v0.11.1](https://github.com/9001/copyparty/releases/tag/v0.11.1) * drop-in upgrade, no additional steps since [v0.11.1](https://github.com/9001/copyparty/releases/tag/v0.11.1)
* nothing really important since [v0.11.6](https://github.com/9001/copyparty/releases/tag/v0.11.6) * nothing really important since [v0.11.6](https://github.com/9001/copyparty/releases/tag/v0.11.6)
@ -7676,7 +7676,7 @@ not so strong anymore
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
# 2021-0315-0013 `v0.9.8` the strongest for a while # 2021-0315-0013 `v0.9.8` the strongest for a while
nothing more to add or fix for now (barely avoided adding bpm/tempo detection using keyfinder and vamp+qm since thats just too ridiculous) nothing more to add or fix for now (barely avoided adding bpm/tempo detection using keyfinder and vamp+qm since that's just too ridiculous)
* browser: correct music playback order after sorting * browser: correct music playback order after sorting
* browser: no more glitching on resize in non-tree-mode * browser: no more glitching on resize in non-tree-mode
@ -7958,7 +7958,7 @@ valvrave-stop.jpg
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
# 2020-1117-2258 `v0.5.4` edovprim # 2020-1117-2258 `v0.5.4` edovprim
(get it? becasue reverse proxy haha) (get it? because reverse proxy haha)
* reverse-proxy support * reverse-proxy support
* filetype column in the browser * filetype column in the browser

View file

@ -1248,7 +1248,7 @@
# if the directory-sizes in the UI are bonkers, use this along with -e2dsa to rebuild the index from scratch # if the directory-sizes in the UI are bonkers, use this along with -e2dsa to rebuild the index from scratch
re-dirsz re-dirsz
# disable rescan acceleration; do full database integrity check -- makes the db ~5% smaller and bootup/rescans 3~10x slower # disable rescan acceleration; do full database integrity check -- makes the db ~5% smaller and boot-up/rescans 3~10x slower
no-dhash no-dhash
# force a cache rebuild on startup; enable this once if it gets out of sync (should never be necessary) # force a cache rebuild on startup; enable this once if it gets out of sync (should never be necessary)

View file

@ -27,7 +27,7 @@ hls.on(Hls.Events.MEDIA_ATTACHED, function() {
general good news: general good news:
- doesn't need fixed-length segments; ok to let x264 pick optimal keyframes and slice on those - doesn't need fixed-length segments; ok to let x264 pick optimal keyframes and slice on those
- hls.js polls the m3u8 for new segments, scales the duration accordingly, seeking works great - hls.js polls the m3u8 for new segments, scales the duration accordingly, seeking works great
- the sfx will grow by 66 KiB since that's how small hls.js can get, wait thats not good - the sfx will grow by 66 KiB since that's how small hls.js can get, wait that's not good
# vod, creates m3u8 at the end, fixed keyframes, v bad # vod, creates m3u8 at the end, fixed keyframes, v bad
ffmpeg -hide_banner -threads 0 -flags -global_header -i ..\CowboyBebopMovie-OP1.webm -vf scale=1280:-4,format=yuv420p -ac 2 -c:a libopus -b:a 128k -c:v libx264 -preset slow -crf 24 -maxrate:v 5M -bufsize:v 10M -g 120 -keyint_min 120 -sc_threshold 0 -hls_time 4 -hls_playlist_type vod -hls_segment_filename v%05d.ts v.m3u8 ffmpeg -hide_banner -threads 0 -flags -global_header -i ..\CowboyBebopMovie-OP1.webm -vf scale=1280:-4,format=yuv420p -ac 2 -c:a libopus -b:a 128k -c:v libx264 -preset slow -crf 24 -maxrate:v 5M -bufsize:v 10M -g 120 -keyint_min 120 -sc_threshold 0 -hls_time 4 -hls_playlist_type vod -hls_segment_filename v%05d.ts v.m3u8

View file

@ -123,7 +123,7 @@ grep '"name": "2021-07-18 02-17-59.mkv"' fug.log | head -n 1 | sed -r 's/.*"hash
## ##
## js oneliners ## js one-liners
# get all up2k search result URLs # get all up2k search result URLs
var t=[]; var b=document.location.href.split('#')[0].slice(0, -1); document.querySelectorAll('#u2tab .prog a').forEach((x) => {t.push(b+encodeURI(x.getAttribute("href")))}); console.log(t.join("\n")); var t=[]; var b=document.location.href.split('#')[0].slice(0, -1); document.querySelectorAll('#u2tab .prog a').forEach((x) => {t.push(b+encodeURI(x.getAttribute("href")))}); console.log(t.join("\n"));
@ -133,7 +133,7 @@ var s=mknod('style');s.innerHTML='*[data-ln]:before {content:attr(data-ln)!impor
## ##
## bash oneliners ## bash one-liners
# get the size and video-id of all youtube vids in folder, assuming filename ends with -id.ext, and create a copyparty search query # get the size and video-id of all youtube vids in folder, assuming filename ends with -id.ext, and create a copyparty search query
find -maxdepth 1 -printf '%s %p\n' | sort -n | awk '!/-([0-9a-zA-Z_-]{11})\.(mkv|mp4|webm)$/{next} {sub(/\.[^\.]+$/,"");n=length($0);v=substr($0,n-10);print $1, v}' | tee /dev/stderr | awk 'BEGIN {p="("} {printf("%s name like *-%s.* ",p,$2);p="or"} END {print ")\n"}' | cat >&2 find -maxdepth 1 -printf '%s %p\n' | sort -n | awk '!/-([0-9a-zA-Z_-]{11})\.(mkv|mp4|webm)$/{next} {sub(/\.[^\.]+$/,"");n=length($0);v=substr($0,n-10);print $1, v}' | tee /dev/stderr | awk 'BEGIN {p="("} {printf("%s name like *-%s.* ",p,$2);p="or"} END {print ")\n"}' | cat >&2
@ -271,7 +271,7 @@ brew install python@2
pip install virtualenv pip install virtualenv
# fix firefox phantom breakpoints, # fix firefox phantom breakpoints,
# suggestions from bugtracker, doesnt work (debugger is not attachable) # suggestions from bugtracker, does not work (debugger is not attachable)
devtools settings >> advanced >> enable browser chrome debugging + enable remote debugging devtools settings >> advanced >> enable browser chrome debugging + enable remote debugging
burger > developer >> browser toolbox (ctrl-alt-shift-i) burger > developer >> browser toolbox (ctrl-alt-shift-i)
iframe btn topright >> chrome://devtools/content/debugger/index.html iframe btn topright >> chrome://devtools/content/debugger/index.html

View file

@ -72,7 +72,7 @@ okay now continue with one of these:
* open the `Package Center` and install the [Container Manager package](https://ocv.me/copyparty/doc/pics/dsm72-01.png) by `Docker Inc.` * open the `Package Center` and install the [Container Manager package](https://ocv.me/copyparty/doc/pics/dsm72-01.png) by `Docker Inc.`
* open the `Container Manager` app * open the `Container Manager` app
* go to the `Registry` tab and search for `copyparty` * go to the `Registry` tab and search for `copyparty`
* [doubleclick copyparty/ac](https://ocv.me/copyparty/doc/pics/dsm72-02.png) and keep the [default `latest`](https://ocv.me/copyparty/doc/pics/dsm72-03.png) when it asks you which tag to use * [double-click copyparty/ac](https://ocv.me/copyparty/doc/pics/dsm72-02.png) and keep the [default `latest`](https://ocv.me/copyparty/doc/pics/dsm72-03.png) when it asks you which tag to use
* switch to the `Container` tab and click `Create` * switch to the `Container` tab and click `Create`
* [choose `copyparty/ac:latest`](https://ocv.me/copyparty/doc/pics/dsm72-04.png) and click `Next` * [choose `copyparty/ac:latest`](https://ocv.me/copyparty/doc/pics/dsm72-04.png) and click `Next`
@ -93,7 +93,7 @@ if you're using DSM 7.1 or older, then you don't have [Container Manager](https:
* open the `Package Center` and install the [Docker package](https://ocv.me/copyparty/doc/pics/dsm71-01.png) by `Docker Inc.` * open the `Package Center` and install the [Docker package](https://ocv.me/copyparty/doc/pics/dsm71-01.png) by `Docker Inc.`
* open the `Docker` app * open the `Docker` app
* go to the `Registry` tab and search for `copyparty` * go to the `Registry` tab and search for `copyparty`
* [doubleclick copyparty/ac](https://ocv.me/copyparty/doc/pics/dsm71-02.png) and keep the [default `latest`](https://ocv.me/copyparty/doc/pics/dsm71-03.png) when it asks you which tag to use * [double-click copyparty/ac](https://ocv.me/copyparty/doc/pics/dsm71-02.png) and keep the [default `latest`](https://ocv.me/copyparty/doc/pics/dsm71-03.png) when it asks you which tag to use
* switch to the `Container` tab and click `Create` * switch to the `Container` tab and click `Create`
* [choose `copyparty/ac:latest`](https://ocv.me/copyparty/doc/pics/dsm71-04.png) and `Next` * [choose `copyparty/ac:latest`](https://ocv.me/copyparty/doc/pics/dsm71-04.png) and `Next`
* in the [Network](https://ocv.me/copyparty/doc/pics/dsm71-05.png) window, keep the default `Use the selected networks: [x] bridge` * in the [Network](https://ocv.me/copyparty/doc/pics/dsm71-05.png) window, keep the default `Use the selected networks: [x] bridge`

View file

@ -17,7 +17,7 @@ server creates session id and replies with the same json:
secretsalt, name, size, *hash secretsalt, name, size, *hash
]))[:32].replace('+','-').replace('/','_') ]))[:32].replace('+','-').replace('/','_')
cilent uploads each chunk: client uploads each chunk:
POST application/octet-stream POST application/octet-stream
X-Up2k-Hash: fUGShzwcSAmw5IbQ3y_2TUrI8a89LYQO-kW0o0rRcU0 X-Up2k-Hash: fUGShzwcSAmw5IbQ3y_2TUrI8a89LYQO-kW0o0rRcU0
X-Up2k-Wark: CVNt9EYhgTFHU3xiK6gL-0ciJFopshvo X-Up2k-Wark: CVNt9EYhgTFHU3xiK6gL-0ciJFopshvo

View file

@ -82,9 +82,9 @@ currently up to date with [awesome-selfhosted](https://github.com/awesome-selfho
<&Kethsar> copyparty is very much bloat ed, so yeah <&Kethsar> copyparty is very much bloat ed, so yeah
``` ```
the table headers in the matrixes below are the different softwares, with a quick review of each software in the next section the table headers in the matrixes below are the different software, with a quick review of each software in the next section
the softwares, the software,
[a]: https://github.com/9001/copyparty "copyparty" [a]: https://github.com/9001/copyparty "copyparty"
[b]: https://github.com/rejetto/hfs2/ "hfs2" [b]: https://github.com/rejetto/hfs2/ "hfs2"
@ -114,7 +114,7 @@ the softwares,
* `l` = [sftpgo][l] * `l` = [sftpgo][l]
* `m` = [arozos][m] * `m` = [arozos][m]
some softwares not in the matrixes, some software not in the matrixes,
* [updog](#updog) * [updog](#updog)
* [goshs](#goshs) * [goshs](#goshs)
* [gimme-that](#gimmethat) * [gimme-that](#gimmethat)
@ -259,7 +259,7 @@ symbol legend,
* you can successfully play `$'\355\221'` with mpv through mounting a remote copyparty server with rclone, pog * you can successfully play `$'\355\221'` with mpv through mounting a remote copyparty server with rclone, pog
* `a`/copyparty remarks: * `a`/copyparty remarks:
* extremely minimal samba/cifs server * extremely minimal samba/cifs server
* netscape 4 / ie6 support is mostly listed as a joke altho some people have actually found it useful ([ie4 tho](https://user-images.githubusercontent.com/241032/118192791-fb31fe00-b446-11eb-9647-898ea8efc1f7.png)) * netscape 4 / ie6 support is mostly listed as a joke although some people have actually found it useful ([ie4 tho](https://user-images.githubusercontent.com/241032/118192791-fb31fe00-b446-11eb-9647-898ea8efc1f7.png))
* `l`/sftpgo translates mojibake filenames into valid utf-8 (information loss) * `l`/sftpgo translates mojibake filenames into valid utf-8 (information loss)
* `m`/arozos has readonly-support for older browsers; no uploading * `m`/arozos has readonly-support for older browsers; no uploading

View file

@ -163,3 +163,11 @@ follow_imports = "silent"
[[tool.mypy.overrides]] [[tool.mypy.overrides]]
no_implicit_reexport = false no_implicit_reexport = false
[tool.codespell]
# Ref: https://github.com/codespell-project/codespell#using-a-config-file
skip = '.git*,*.svg,*.lock,*.css,*.min.*,tl,pyproject.toml,*.patch'
check-hidden = true
# ignore camelcase
ignore-regex = '(\b[a-z]+[A-Z][A-Za-z0-9]*\b|\[[a-z]\][a-z]+\b)'
ignore-words-list = 'caf,cips,ans,ded,wark,warks,halp,ser,oen,datas,slin,nd,te,pres,ths,wast,clen,fo,nin,fils,tre,tred,tread,noice,unick,memers,idel'

View file

@ -27,7 +27,7 @@ set -e
# 270004 copyparty-extras/sfx-lite/copyparty-sfx.py # 270004 copyparty-extras/sfx-lite/copyparty-sfx.py
# 293159 copyparty-extras/sfx-lite/copyparty-sfx-gz.py # 293159 copyparty-extras/sfx-lite/copyparty-sfx-gz.py
# `- also removed the codemirror markdown editor # `- also removed the codemirror markdown editor
# and the text-viewer syntax hilighting, # and the text-viewer syntax highlighting,
# only essential features remaining # only essential features remaining
# #
# 646297 copyparty-extras/copyparty-1.0.14.tar.gz # 646297 copyparty-extras/copyparty-1.0.14.tar.gz

View file

@ -1,4 +1,4 @@
copyparty is availabe in these repos: copyparty is available in these repos:
* https://hub.docker.com/u/copyparty * https://hub.docker.com/u/copyparty
* https://github.com/9001?tab=packages&repo_name=copyparty * https://github.com/9001?tab=packages&repo_name=copyparty

View file

@ -79,7 +79,7 @@ smoketest() {
# two-for-one: # two-for-one:
# 1) smoketest copyparty even starts # 1) smoketest copyparty even starts
# 2) build any bytecode we missed # 2) build any bytecode we missed
# this tends to race other builders (alle gode ting er tre) # this tends to race other builders (alle gode ting er tre) # codespell:ignore
cd /z cd /z
python3 -m copyparty \ python3 -m copyparty \
--ign-ebind -p$((1024+RANDOM)),$((1024+RANDOM)),$((1024+RANDOM)) \ --ign-ebind -p$((1024+RANDOM)),$((1024+RANDOM)),$((1024+RANDOM)) \

View file

@ -133,7 +133,7 @@ filt=
) 2> >(tee $a.err | sed "s/^/$aa:/" >&2) > >(tee $a.out | sed "s/^/$aa:/") & ) 2> >(tee $a.err | sed "s/^/$aa:/" >&2) > >(tee $a.out | sed "s/^/$aa:/") &
done done
[ -e err ] && { [ -e err ] && {
echo somethign died, echo something died,
cat err cat err
pkill -P $$ pkill -P $$
exit 1 exit 1
@ -144,7 +144,7 @@ filt=
done done
wait wait
[ -e err ] && { [ -e err ] && {
echo somethign died, echo something died,
cat err cat err
pkill -P $$ pkill -P $$
exit 1 exit 1

View file

@ -243,7 +243,7 @@ necho() {
rm -rf pyftpdlib-* pyftpdlib/test rm -rf pyftpdlib-* pyftpdlib/test
patch -s -p1 <../scripts/patches/pyftpdlib-win313.patch patch -s -p1 <../scripts/patches/pyftpdlib-win313.patch
patch -s -p1 <../scripts/patches/pyftpdlib-fe80.patch patch -s -p1 <../scripts/patches/pyftpdlib-fe80.patch
for f in pyftpdlib/_async{hat,ore}.py; do for f in pyftpdlib/_async{hat,ore}.py; do # codespell:ignore
[ -e "$f" ] || continue; [ -e "$f" ] || continue;
iawk 'NR<4||NR>27||!/^#/;NR==4{print"# license: https://opensource.org/licenses/ISC\n"}' $f iawk 'NR<4||NR>27||!/^#/;NR==4{print"# license: https://opensource.org/licenses/ISC\n"}' $f
done done

View file

@ -137,10 +137,10 @@ dist/copyparty.exe --version
csum=$(sha512sum <dist/copyparty.exe | cut -c-56) csum=$(sha512sum <dist/copyparty.exe | cut -c-56)
curl -fkT dist/copyparty.exe -HPW:wark https://192.168.123.1:3923/copyparty$esuf.exe >uplod.log curl -fkT dist/copyparty.exe -HPW:wark https://192.168.123.1:3923/copyparty$esuf.exe >upload.log
cat uplod.log cat upload.log
grep -q $csum uplod.log && echo upload OK || { grep -q $csum upload.log && echo upload OK || {
echo UPLOAD FAILED echo UPLOAD FAILED
exit 1 exit 1
} }

View file

@ -7,13 +7,13 @@ https://pypi.org/project/pywin32-ctypes/#files
https://github.com/git-for-windows/git/releases/latest https://github.com/git-for-windows/git/releases/latest
https://github.com/upx/upx/releases/latest https://github.com/upx/upx/releases/latest
# win10 additionals # win10 additional
https://pypi.org/project/Jinja2/#files https://pypi.org/project/Jinja2/#files
https://pypi.org/project/MarkupSafe/#files https://pypi.org/project/MarkupSafe/#files
https://pypi.org/project/mutagen/#files https://pypi.org/project/mutagen/#files
https://pypi.org/project/Pillow/#files https://pypi.org/project/Pillow/#files
# win7 additionals # win7 additional
https://pypi.org/project/future/#files https://pypi.org/project/future/#files
https://pypi.org/project/importlib-metadata/#files https://pypi.org/project/importlib-metadata/#files
https://pypi.org/project/pip/#files https://pypi.org/project/pip/#files

View file

@ -36,10 +36,10 @@ $APPDATA/python/python37/scripts/pyinstaller -y --clean --upx-dir=. up2k.spec
csum=$(sha512sum <dist/u2c.exe | cut -c-56) csum=$(sha512sum <dist/u2c.exe | cut -c-56)
curl -fkT dist/u2c.exe -HPW:wark https://192.168.123.1:3923/ >uplod.log curl -fkT dist/u2c.exe -HPW:wark https://192.168.123.1:3923/ >upload.log
cat uplod.log cat upload.log
grep -q $csum uplod.log && echo upload OK || { grep -q $csum upload.log && echo upload OK || {
echo UPLOAD FAILED echo UPLOAD FAILED
exit 1 exit 1
} }

View file

@ -490,7 +490,7 @@ Ls.hmn = {
"m3u_clip": "m3u playlist now copied to clipboard\n\nyou should create a new textfile named something.m3u and paste the playlist in that document; this will make it playable", "m3u_clip": "m3u playlist now copied to clipboard\n\nyou should create a new textfile named something.m3u and paste the playlist in that document; this will make it playable",
"gt_vau": "don't show videos, just play the audio\">🎧", "gt_vau": "don't show videos, just play the audio\">🎧",
"gt_msel": "enable file selection; ctrl-click a file to override$N$N&lt;em&gt;when active: doubleclick a file / folder to open it&lt;/em&gt;$N$NHotkey: S\">multiselect", "gt_msel": "enable file selection; ctrl-click a file to override$N$N&lt;em&gt;when active: double-click a file / folder to open it&lt;/em&gt;$N$NHotkey: S\">multiselect",
"gt_crop": "center-crop thumbnails\">crop", "gt_crop": "center-crop thumbnails\">crop",
"gt_3x": "hi-res thumbnails\">3x", "gt_3x": "hi-res thumbnails\">3x",
"gt_zoom": "zoom", "gt_zoom": "zoom",

View file

@ -30,7 +30,7 @@ finally ./except/these/ones.md
### also-this.md ### also-this.md
whic hshoud be ./except/also-this.md which should be ./except/also-this.md