82 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.6 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;;
 | 
						|
 | 
						|
			(--) 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 sleep "$cfg_scan_delay"; do
 | 
						|
		for i in *; do
 | 
						|
			upload_output=$( ufw "$@" -R "$i" )
 | 
						|
			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
 | 
						|
 | 
						|
			printf '%s\n' "$upload_output"
 | 
						|
		done
 | 
						|
	done
 | 
						|
}
 | 
						|
 | 
						|
main "$@"
 |