]> Sergey Matveev's repositories - nnn.git/commitdiff
[kdeconnect] Various improvements (#1551)
authorRaffaele Mancuso <54762742+raffaem@users.noreply.github.com>
Mon, 2 Jan 2023 16:53:47 +0000 (17:53 +0100)
committerGitHub <noreply@github.com>
Mon, 2 Jan 2023 16:53:47 +0000 (22:23 +0530)
- Support multiple devices paired and available at the same time
- Filter out non-regular files

plugins/kdeconnect

index 52441d34c369a046854b6ec6dc0c26c6515d3673..dea3c2d41b762d65671fc5d72982463758d3b8de 100755 (executable)
@@ -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"