#!/bin/sh # Blueman Mount Script for Slackware # by Zarren Spry & Robby Workman # varables DEBUG=${DEBUG:-"1"} if [ ! -z $DEBUG ];then dbg_msg="Check /var/log/messages for errors." else dbg_msg="Enable *DEBUG* for error log." fi device_addr=$1 device_name=$(hcitool name $device_addr) own_name=$(basename $0) basedir=${basedir:-/root/.gvfs} dir=${basedir} browser=${browser:-"xdg-open"} progress_bar_counter=0 max_tries=5 # Check for kdialog if which kdialog3 1>/dev/null 2>/dev/null; then messagetype="kdialog" else messagetype="gtkdialog" export p_file="progress.tmp" export m_file="message.tmp" touch $p_file touch $m_file echo "0" > $p_file fi # Fix broken pipe when canceled trap killscript INT killscript() { rm ./*.tmp exit 0 } # Gtkdialog abstraction gtkbox_interactive() { export messagebox=' progress p_file done ' } gtkmessage() { I=$IFS; IFS="" for STATEMENT in $(gtkdialog --center --program=messagebox); do eval $STATEMENT done IFS=$I } # Gtkdialog progress control loop if [ "$messagetype" = "gtkdialog" ]; then progress(){ while : do percentage=$(cat $p_file) text=$(cat $m_file) echo $percentage echo $text if [ $percentage = 100 ]; then killscript break fi sleep 0.3 done } message(){ echo $MSG_TXT > $m_file } export -f progress killscript fi # End gtkdialog abstraction # Mount function mount_device () { loop=0 while [ $loop -lt $max_tries ] do if [ "$messagetype" = "gtkdialog" ]; then let progress_bar_counter=$progress_bar_counter+17 echo $progress_bar_counter > $p_file fi [ ! -z $DEBUG ] && logger -i -t $own_name "Perform $loop try to mount device $device_name to $dir using gvfs." [ ! -z $DEBUG ] && logger -i -t $own_name "Execute: gvfs-mount obex://["$device_addr"]" out=$(gvfs-mount obex://["$device_addr"] 2>&1) [ ! -z $DEBUG ] && logger -i -t $own_name "$out" mounts=$(ls $dir | grep $device_name) [ ! -z $DEBUG ] && logger -i -t $own_name "Found $mounts mounted inside $dir" if [ "$mounts" = "$device_name" ] ;then MSG_TXT="Successfully mounted $device_name to $dir" if [ $messagetype == "kdialog" ]; then kdialog --passivepopup "$MSG_TXT" 2 elif [ $messagetype == "gtkdialog" ]; then message $"$MSG_TXT" echo "99" > $p_file sleep 2 echo "100" > $p_file fi [ ! -z $DEBUG ] && logger -i -t $own_name "Open $dir/$device_name with $browser" out=$($browser $dir/$device_name 2>&1) [ ! -z $DEBUG ] && logger -i -t $own_name "$out" exit 0 else [ ! -z $DEBUG ] && logger -i -t $own_name "Failed to mount $device_name to $dir/$device_name from try $loop " if [ $loop -ne 4 ]; then MSG_TXT="Attempt $loop to mount $device_name to $dir failed. Retrying, please wait ..." else MSG_TXT="Failed to mount $device_name to $dir. $dbg_msg" sleep 3 echo "100" > $p_file fi if [ $messagetype == "kdialog" ]; then kdialog --passivepopup "$MSG_TXT" 3 elif [ $messagetype == "gtkdialog" ]; then message $"$MSG_TXT" fi fi sleep 2 ((loop += 1)) done } # Unmount function umount_device () { mounts=$(ls $dir | grep $device_name) if [ "$mounts" = "$device_name" ] ;then [ ! -z $DEBUG ] && logger -i -t $own_name "Performing umount of $dir/$device_name." out=$(gvfs-mount -u obex://[$device_addr] 2>&1) [ ! -z $DEBUG ] && logger -i -t $own_name "$out" if [ -d $dir/$device_name ] ;then [ ! -z $DEBUG ] && logger -i -t $own_name "$device_name failed to unmount. Please perform its umount manually." MSG_TXT="Failed to umount $dir - $dbg_msg" if [ $messagetype == "kdialog" ]; then kdialog --passivepopup "$MSG_TXT" 3 elif [ $messagetype == "gtkdialog" ]; then message $"$MSG_TXT" echo "99" > $p_file rm ./*.tmp echo "100" > $p_file exit 1 fi else [ ! -z $DEBUG ] && logger -i -t $own_name "Successfully unmounted $device_name." fi else [ ! -z $DEBUG ] && logger -i -t $own_name "$dir is not mounted - no need to perform umount..." fi } # Main MSG_TXT="Mount device is in progress... Please wait..." if [ $messagetype == "kdialog" ]; then kdialog --passivepopup "$MSG_TXT" 4 elif [ $messagetype == "gtkdialog" ]; then message $"$MSG_TXT" gtkbox_interactive gtkmessage& fi umount_device mount_device