82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env bash
 | |
| shopt -s nullglob
 | |
| 
 | |
| # Defaults for XDG
 | |
| if ! [[ "$XDG_RUNTIME_DIR" ]]; then
 | |
| 	XDG_RUNTIME_DIR="/run/user/$UID"
 | |
| fi
 | |
| 
 | |
| # Defaults
 | |
| cfg_workdir="$XDG_RUNTIME_DIR/ufwd"
 | |
| cfg_scan_delay='30'
 | |
| 
 | |
| msg() { printf '%s\n' "$*"; }
 | |
| err() { echo "$*" >&2; }
 | |
| 
 | |
| usage() {
 | |
| 	printf 'Usage: ufwd [-hn] [-d workdir] -D [check delay]\n'
 | |
| 	printf '   -h            # Show this message.\n'
 | |
| 	printf '   -n            # Enable notifications with notify-send. Must be installed.\n'
 | |
| 	printf '   -d [path]     # Set the dir that is to be watched.\n'
 | |
| 	printf '   -D [sec]      # Set the check interval.\n'
 | |
| }
 | |
| 
 | |
| main() {
 | |
| 	while (( $# )); do
 | |
| 		case "$1" in
 | |
| 			(--help|-h) usage; return 0;;
 | |
| 
 | |
| 			(--workdir|-d) cfg_workdir="$2"; shift;;
 | |
| 			(--scan-delay|-D) cfg_scan_delay="$2"; shift;;
 | |
| 
 | |
| 			(--notify|-n) flag_enable_notifications=1;;
 | |
| 
 | |
| 			(--clipboard|-c) flag_enable_clipboard=1;;
 | |
| 
 | |
| 			(--) shift; break;;
 | |
| 			(-*)
 | |
| 				err "Unknown key: $1"
 | |
| 				usage
 | |
| 				return 1
 | |
| 			;;
 | |
| 
 | |
| 			(*) break;;
 | |
| 		esac
 | |
| 		shift
 | |
| 	done
 | |
| 
 | |
| 	if (( flag_enable_notifications )); then
 | |
| 		if type -P notify-send &>/dev/null; then
 | |
| 			msg "Found notify-send."
 | |
| 		else
 | |
| 			err "notify-send not found in PATH, disabling notifications."
 | |
| 			flag_enable_notifications=0
 | |
| 		fi
 | |
| 	fi
 | |
| 
 | |
| 	mkdir -p "$cfg_workdir" || return 1
 | |
| 	cd "$cfg_workdir" || return 1
 | |
| 
 | |
| 	while read -r dir action path; do
 | |
| 		upload_output=$( ufw "$@" -R "$dir$path" )
 | |
| 		upload_return=$?
 | |
| 
 | |
| 		if (( flag_enable_notifications )); then
 | |
| 			if (( $upload_return )); then
 | |
| 				notify-send 'ufwd' "File upload failed: $upload_output"
 | |
| 			else
 | |
| 				notify-send 'ufwd' "File uploaded: $upload_output"
 | |
| 			fi
 | |
| 		fi
 | |
| 
 | |
| 		if (( flag_enable_clipboard )); then
 | |
| 			read -r fl <<< "$upload_output"
 | |
| 			xclip <<< "$fl"
 | |
| 		fi
 | |
| 
 | |
| 		printf '%s\n' "$upload_output"
 | |
| 	done < <( inotifywait -m -e create "$cfg_workdir" )
 | |
| }
 | |
| 
 | |
| main "$@"
 |