From c9b384f00904caa7545a366b8e00efeb17486977 Mon Sep 17 00:00:00 2001
From: Raffaele Mancuso <54762742+raffaem@users.noreply.github.com>
Date: Mon, 2 Jan 2023 17:53:47 +0100
Subject: [PATCH] [kdeconnect] Various improvements (#1551)

- Support multiple devices paired and available at the same time
- Filter out non-regular files
---
 plugins/kdeconnect | 33 ++++++++++++++++++++++++++++-----
 1 file changed, 28 insertions(+), 5 deletions(-)

diff --git a/plugins/kdeconnect b/plugins/kdeconnect
index 52441d34..dea3c2d4 100755
--- a/plugins/kdeconnect
+++ b/plugins/kdeconnect
@@ -8,7 +8,7 @@
 #   - Alternatively, select the files and folders you would like to send, and activate the plugin.
 #
 # Shell: POSIX compliant
-# Author: juacq97, raffaem
+# Author: juacq97, raffaem, N-R-K
 
 # If you want system notification, put this equal to 1
 notify=0
@@ -21,17 +21,40 @@ note() {
 	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() {
-	xargs -0 -I{} kdeconnect-cli --name "$devname" --share {}
+	filter_files | xargs -0 -I{} kdeconnect-cli --name "$devname" --share {}
 	note "Files sent"
 }
 
-devname=$(kdeconnect-cli --list-available --name-only 2>/dev/null | awk NR==1)
-if [ -z "$devname" ]; then
-	note "No devices available"
+# 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"
-- 
2.51.0