|
#!/usr/bin/env bash
|
|
# dmenu_kdeconnect.sh is a script based off of these scripts
|
|
# [polybar-kdeconnect] https://github.com/HackeSta/polybar-kdeconnect
|
|
# [polybar-kdeconnect-scripts] https://github.com/witty91/polybar-kdeconnect-scripts
|
|
# Added features
|
|
# - Removed polybar as a Dependencies (since I use dwm)
|
|
# - Integration with a variety of file managers
|
|
# - Implementation as one simplified shell script
|
|
# - utilize sh instead of bash
|
|
|
|
#TODO
|
|
# 1. Allow different dmenu colors based on the battery percentage
|
|
# 2. Make the script no sh complaint
|
|
# 3. Implement a contacts list to make sms messaging easier
|
|
|
|
# Dependancies
|
|
# -dmenu
|
|
# -kdeconnect
|
|
# -zenity, nnn, or ranger
|
|
# -qt5-tools
|
|
# -dbus
|
|
# -dunst
|
|
|
|
# options
|
|
# nnn
|
|
# zenity
|
|
# ranger
|
|
Picker='lf'
|
|
|
|
# Color Settings of dmenu
|
|
COLOR_DISCONNECTED='#000' # Device Disconnected
|
|
COLOR_NEWDEVICE='#ff0' # New Device
|
|
COLOR_BATTERY_90='#fff' # Battery >= 90
|
|
COLOR_BATTERY_80='#ccc' # Battery >= 80
|
|
COLOR_BATTERY_70='#aaa' # Battery >= 70
|
|
COLOR_BATTERY_60='#888' # Battery >= 60
|
|
COLOR_BATTERY_50='#666' # Battery >= 50
|
|
COLOR_BATTERY_LOW='#f00' # Battery < 50
|
|
|
|
# Icons shown in dmenu
|
|
ICON_SMARTPHONE=''
|
|
ICON_TABLET=''
|
|
SEPERATOR='|'
|
|
|
|
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
|
|
|
|
ping -q -c 1 1.1.1.1 > /dev/null || "$(notify-send "check internet connection" && exit)"
|
|
|
|
show_devices (){
|
|
IFS=$','
|
|
devices=""
|
|
# for all the devices avalable
|
|
for device in $(dbus-send --print-reply --session --dest=org.mconnect /org/mconnect/manager org.mconnect.DeviceManager.ListDevices | cut -f1 -d"[" | cut -f1 -d "]" | tail -2); do
|
|
#get the device info
|
|
deviceobj=$(echo "$device" | cut -f2 -d"\"" | tr -d '\n' | xargs)
|
|
devicename=$(dbus-send --print-reply --session --dest=org.mconnect "$deviceobj" org.freedesktop.DBus.Properties.Get string:org.mconnect.Device string:Name | grep -E string | cut -f2 -d"\"")
|
|
isreach="$(dbus-send --print-reply --session --dest=org.mconnect "$deviceobj" org.freedesktop.DBus.Properties.Get string:org.mconnect.Device string:IsConnected | grep -E boolean | cut -b 26-)"
|
|
devicetype=$(dbus-send --print-reply --session --dest=org.mconnect "$deviceobj" org.freedesktop.DBus.Properties.Get string:org.mconnect.Device string:DeviceType | grep -E string | cut -f2 -d"\"")
|
|
istrust="$(dbus-send --print-reply --session --dest=org.mconnect "$deviceobj" org.freedesktop.DBus.Properties.Get string:org.mconnect.Device string:Allowed | grep -E boolean | cut -b 26-)"
|
|
if [ "$isreach" = "true" ] && [ "$istrust" = "true" ];then
|
|
#is connected
|
|
battery="$(dbus-send --print-reply --session --dest=org.mconnect $deviceobj org.freedesktop.DBus.Properties.Get string:org.mconnect.Device.Battery string:Level | grep -e uint32 | cut -b 25-)%"
|
|
icon=$(get_icon $battery $devicetype)
|
|
# colors="$(get_colors $battery)"
|
|
# echo "$colors"
|
|
show_menu "$devicename | $battery $icon" $deviceobj $battery
|
|
devices+="$devicename $battery $icon $SEPERATOR"
|
|
elif [ "$isreach" = "false" ] && [ "$istrust" = "true" ];then
|
|
#nothing is found
|
|
devices+="$(get_icon -1 $devicetype)$SEPERATOR"
|
|
else
|
|
#found but not yet paired
|
|
icon=$(get_icon -2 $devicetype)
|
|
show_pmenu $devicename $deviceobj
|
|
devices+="$devicename $icon $SEPERATOR"
|
|
fi
|
|
done
|
|
}
|
|
|
|
SendKeys(){
|
|
output="?"
|
|
TEMPFILE=$XDG_RUNTIME_DIR/VimFloat
|
|
> $TEMPFILE
|
|
st -t "vim-anywhere" -n 'popup' -e "${EDITOR:-vi}" -c 'startinsert' $TEMPFILE
|
|
xsel -i < $TEMPFILE
|
|
output=$(xsel -o)
|
|
notify-send "$output"
|
|
kdeconnect-cli --device "$*" -k "$output"
|
|
}
|
|
|
|
#displays a menu for the connected device
|
|
show_menu () {
|
|
optionNum=5
|
|
options=$(printf "Send SMS\\nSend File\\nSend Text\\nSend URL\\nDisconnect\\n")
|
|
menu=$(echo $options | dmenu -i -p $1 -l $optionNum )
|
|
case "$menu" in
|
|
*'Send File')
|
|
mkdir -p $XDG_RUNTIME_DIR/lf/
|
|
rm -rf $XDG_RUNTIME_DIR/lf/sentfile
|
|
st -c ranger -e lf -selection-path "$XDG_RUNTIME_DIR/lf/sentfile"
|
|
if [ -f $XDG_RUNTIME_DIR/lf/sentfile ]; then
|
|
mconnectctl share-file "$2" "$(cat $XDG_RUNTIME_DIR/lf/sentfile)"
|
|
fi;;
|
|
*'Send SMS' )
|
|
message=$(echo 'OTW' | dmenu -i -p "Msg to send")
|
|
recipient=$(echo '14039199518' | dmenu -i -p "Recipient's phone #")
|
|
mconnectctl send-sms "$2" "$message" "$recipient" ;;
|
|
*'Send URL' )
|
|
message=$(echo 'Clipboard' | dmenu -i -p "Enter Url:")
|
|
if [ "$message" = "Clipboard" ]; then
|
|
message=$(sselp)
|
|
fi
|
|
mconnectctl share-url "$2" "$message";;
|
|
*'Send Text' )
|
|
message=$(echo 'Clipboard' | dmenu -i -p "Enter Text:")
|
|
if [ "$message" = "Clipboard" ]; then
|
|
message=$(sselp)
|
|
fi
|
|
mconnectctl share-text "$2" "$message";;
|
|
*'Disconnect' )
|
|
mconnectctl disallow-device "$2"
|
|
esac
|
|
}
|
|
|
|
show_pmenu () {
|
|
menu="$(printf "Pair Device" | dmenu -i -p "$1" )"
|
|
case "$menu" in
|
|
*'Pair Device') mconnectctl allow-device $2 ;;
|
|
esac
|
|
}
|
|
|
|
get_icon () {
|
|
if [ "$2" = "tablet" ]
|
|
then
|
|
ICON=$ICON_TABLET
|
|
else
|
|
ICON=$ICON_SMARTPHONE
|
|
fi
|
|
echo $ICON
|
|
}
|
|
show_devices
|
|
#vim:ft=sh
|