From 1e1ea3c090bc1c00abe2a821324d22efcd48e2c6 Mon Sep 17 00:00:00 2001 From: Jeevitha Kannan K S Date: Wed, 20 Nov 2024 00:29:19 +0530 Subject: [PATCH] Fix bluetooth errors The i variable is edited locally as pipe is used. It results in error when connecting to a device. The read -r at the last is not working for some reason so added the read -r for each if case. Removed unused action variable. --- core/tabs/utils/bluetooth-control.sh | 54 +++++++++++++--------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/core/tabs/utils/bluetooth-control.sh b/core/tabs/utils/bluetooth-control.sh index 6bfe266b..7545e914 100644 --- a/core/tabs/utils/bluetooth-control.sh +++ b/core/tabs/utils/bluetooth-control.sh @@ -3,7 +3,6 @@ . ../common-script.sh . ../common-service-script.sh -# Function to check Bluez is installed setupBluetooth() { printf "%b\n" "${YELLOW}Installing Bluez...${RC}" if ! command_exists bluetoothctl; then @@ -25,7 +24,6 @@ setupBluetooth() { startService bluetooth } -# Function to display the main menu main_menu() { while true; do clear @@ -52,7 +50,6 @@ main_menu() { done } -# Function to scan for devices scan_devices() { clear printf "%b\n" "${YELLOW}Scanning for devices...${RC}" @@ -65,16 +62,14 @@ scan_devices() { printf "%b\n" "$devices" fi printf "%b" "Press any key to return to the main menu..." - read -r dummy + read -r _ } -# Function to prompt for MAC address using numbers prompt_for_mac() { - action=$1 - command=$2 - prompt_msg=$3 - success_msg=$4 - failure_msg=$5 + command=$1 + prompt_msg=$2 + success_msg=$3 + failure_msg=$4 while true; do clear @@ -82,66 +77,67 @@ prompt_for_mac() { if [ -z "$devices" ]; then printf "%b\n" "${RED}No devices available. Please scan for devices first.${RC}" printf "%b" "Press any key to return to the main menu..." - read -r dummy + read -r _ return fi # Display devices with numbers - device_list=$(echo "$devices" | tr '\n' '\n') + device_list="$devices" i=1 echo "$device_list" | while IFS= read -r device; do printf "%d. %s\n" "$i" "$device" i=$((i + 1)) done printf "%b\n" "0. Exit to main menu" - printf "%b\n" "$prompt_msg" + printf "%b" "$prompt_msg" read -r choice - # Validate the choice - if echo "$choice" | grep -qE '^[0-9]+$' && [ "$choice" -le "$((i - 1))" ] && [ "$choice" -gt 0 ]; then + count=$(printf "%b" "$device_list" | wc -l) + count=$((count + 1)) + + if echo "$choice" | grep -qE '^[0-9]+$' && [ -n "$choice" ] && [ "$choice" -le "$count" ] && [ "$choice" -gt 0 ]; then device=$(echo "$device_list" | sed -n "${choice}p") mac=$(echo "$device" | awk '{print $2}') if bluetoothctl info "$mac" > /dev/null 2>&1; then - bluetoothctl "$command" "$mac" && { + if bluetoothctl "$command" "$mac"; then printf "%b\n" "${GREEN}$success_msg${RC}" break - } || { + else printf "%b\n" "${RED}$failure_msg${RC}" - } + read -r _ + + fi else printf "%b\n" "${RED}Invalid MAC address. Please try again.${RC}" + read -r _ + fi elif [ "$choice" -eq 0 ]; then return else printf "%b\n" "${RED}Invalid choice. Please try again.${RC}" + read -r _ + fi done - printf "%b" "Press any key to return to the main menu..." - read -r dummy } -# Function to pair with a device pair_device() { - prompt_for_mac "pair" "pair" "Enter the number of the device to pair: " "Pairing with device completed." "Failed to pair with device." + prompt_for_mac "pair" "Enter the number of the device to pair: " "Pairing with device completed." "Failed to pair with device." } -# Function to connect to a device connect_device() { - prompt_for_mac "connect" "connect" "Enter the number of the device to connect: " "Connecting to device completed." "Failed to connect to device." + prompt_for_mac "connect" "Enter the number of the device to connect: " "Connecting to device completed." "Failed to connect to device." } -# Function to disconnect from a device disconnect_device() { - prompt_for_mac "disconnect" "disconnect" "Enter the number of the device to disconnect: " "Disconnecting from device completed." "Failed to disconnect from device." + prompt_for_mac "disconnect" "Enter the number of the device to disconnect: " "Disconnecting from device completed." "Failed to disconnect from device." } -# Function to remove a device remove_device() { - prompt_for_mac "remove" "remove" "Enter the number of the device to remove: " "Removing device completed." "Failed to remove device." + prompt_for_mac "remove" "Enter the number of the device to remove: " "Removing device completed." "Failed to remove device." } -# Initialize checkEnv checkEscalationTool setupBluetooth