#!/usr/bin/env sh

# Description: Send files or folders to your Android device using kdeconnect-cli.
#              kdeconnect must be configured on the Android device and the PC.
#
# Usage:
#   - Hover over a file or a folder and call the plugin.
#   - Alternatively, select the files and folders you would like to send, and activate the plugin.
#
# Shell: POSIX compliant
# Author: juacq97, raffaem, N-R-K

# If you want system notification, put this equal to 1
notify=0

note() {
	if [ $notify = 1 ]; then
		notify-send -a "Kdeconnect" "$1"
	else
		echo "[Kdeconnect] $1"
	fi
}

# kdeconnect doesn't cope with non-files
filter_files() {
	xargs -0 -I{} sh -c '
		if [ -f "{}" ]; then
			printf "%s\0" "{}";
		else
			printf "Error: not a regular file: %s\n" "{}" >&2;
		fi;'
}

send() {
	filter_files | xargs -0 -I{} kdeconnect-cli --name "$devname" --share {}
	note "Files sent"
}

# Select paired device
names=$(kdeconnect-cli --list-available --name-only 2>/dev/null)
if [ -z "$names" ]; then
	note "No devices paired and available"
	exit
fi

ndevs=$(printf "%s" "$names" | awk 'END{print NR}')
if [ "$ndevs" -eq 1 ]; then
	devname="$names"
else
	printf "%s" "$names" | awk '{ print NR ". " $0 }'
	printf "Pick a device: "
	read -r pick
	if [ -n "$pick" ] && [ "$pick" -eq "$pick" ]; then
		devname=$(printf '%s' "$names" | awk "NR==$pick")
	fi
fi

selection=${NNN_SEL:-${XDG_CONFIG_HOME:-$HOME/.config}/nnn/.selection}
if [ -s "$selection" ]; then
	send < "$selection"
	[ -p "$NNN_PIPE" ] && printf "-" > "$NNN_PIPE" # clear selection
elif [ -n "$1" ]; then
	printf "%s" "$1" | send
else
	note "No selection and no hovered file"
fi