-
Notifications
You must be signed in to change notification settings - Fork 59
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
hooks can now interrupt or redirect actions, and initiate related actions, by printing json on stdout with commands mainly to mitigate limitations such as ShareX/ShareX#3992 xbr/xau can redirect uploads to other destinations with `reloc` and most hooks can initiate indexing or deletion of additional files by giving a list of vpaths in json-keys `idx` or `del` there are limitations; * xbu/xau effects don't apply to ftp, tftp, smb * xau will intentionally fail if a reloc destination exists * xau effects do not apply to up2k also provides more details for hooks: * xbu/xau: basic-uploader vpath with filename * xbr/xar: add client ip
- Loading branch information
Showing
15 changed files
with
793 additions
and
175 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
#!/usr/bin/env python3 | ||
|
||
import json | ||
import os | ||
import sys | ||
|
||
|
||
_ = r""" | ||
relocate/redirect incoming uploads according to file extension | ||
example usage as global config: | ||
--xbu j,c1,bin/hooks/reloc-by-ext.py | ||
parameters explained, | ||
xbu = execute before upload | ||
j = this hook needs upload information as json (not just the filename) | ||
c1 = this hook returns json on stdout, so tell copyparty to read that | ||
example usage as a volflag (per-volume config): | ||
-v srv/inc:inc:r:rw,ed:c,xbu=j,c1,bin/hooks/reloc-by-ext.py | ||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ||
(share filesystem-path srv/inc as volume /inc, | ||
readable by everyone, read-write for user 'ed', | ||
running this plugin on all uploads with the params explained above) | ||
example usage as a volflag in a copyparty config file: | ||
[/inc] | ||
srv/inc | ||
accs: | ||
r: * | ||
rw: ed | ||
flags: | ||
xbu: j,c1,bin/hooks/reloc-by-ext.py | ||
note: this only works with the basic uploader (sharex and such), | ||
does not work with up2k / dragdrop into browser | ||
note: this could also work as an xau hook (after-upload), but | ||
because it doesn't need to read the file contents its better | ||
as xbu (before-upload) since that's safer / less buggy | ||
""" | ||
|
||
|
||
PICS = "avif bmp gif heic heif jpeg jpg jxl png psd qoi tga tif tiff webp" | ||
VIDS = "3gp asf avi flv mkv mov mp4 mpeg mpeg2 mpegts mpg mpg2 nut ogm ogv rm ts vob webm wmv" | ||
MUSIC = "aac aif aiff alac amr ape dfpwm flac m4a mp3 ogg opus ra tak tta wav wma wv" | ||
|
||
|
||
def main(): | ||
inf = json.loads(sys.argv[1]) | ||
vdir, fn = os.path.split(inf["vp"]) | ||
|
||
try: | ||
fn, ext = fn.rsplit(".", 1) | ||
except: | ||
# no file extension; abort | ||
return | ||
|
||
ext = ext.lower() | ||
|
||
## | ||
## some example actions to take; pick one by | ||
## selecting it inside the print at the end: | ||
## | ||
|
||
# create a subfolder named after the filetype and move it into there | ||
into_subfolder = {"vp": ext} | ||
|
||
# move it into a toplevel folder named after the filetype | ||
into_toplevel = {"vp": "/" + ext} | ||
|
||
# move it into a filetype-named folder next to the target folder | ||
into_sibling = {"vp": "../" + ext} | ||
|
||
# move images into "/just/pics", vids into "/just/vids", | ||
# music into "/just/tunes", and anything else as-is | ||
if ext in PICS.split(): | ||
by_category = {"vp": "/just/pics"} | ||
elif ext in VIDS.split(): | ||
by_category = {"vp": "/just/vids"} | ||
elif ext in MUSIC.split(): | ||
by_category = {"vp": "/just/tunes"} | ||
else: | ||
by_category = {} | ||
|
||
# now choose the effect to apply; can be any of these: | ||
# into_subfolder into_toplevel into_sibling by_category | ||
effect = into_subfolder | ||
print(json.dumps({"reloc": effect})) | ||
|
||
|
||
if __name__ == "__main__": | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.