summaryrefslogtreecommitdiffstats
path: root/blueman_open
blob: af5f3f31da7f8cf2c3658b75bdf93b2988e7cb47 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
#!/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:-$HOME/.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='
    <window title="Blueman_open" decorated="false">
      <vbox>
	<frame Blueman Open Device.>
	  <text>
	    <label>Mounting Bluetooth Devive ..</label>
	  </text>
	  <progressbar>
	    <input>progress p_file</input>  
	    <action type="exit">done</action>
	  </progressbar>
	</frame>
      </vbox>
    </window>
    '
}

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