summaryrefslogtreecommitdiffstats
path: root/blueman_open
blob: f51a881fc9cc76b644252f9c64a36d548caac180 (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
#!/bin/sh

# varables

DEBUG=${DEBUG:-""}
if [ ! -z $DEBUG ];then
  dbg_msg="Check /var/log/messages for errors."
else
  dbg_msg="Enable *DEBUG* for error log."
fi

device_addr=$1
own_name=$(basename $0)
basedir=${basedir:-/mnt}
dir=${basedir}/$device_addr
browser=${browser:-"xdg-open"}

count=0

# Check for kdialog

if which kdialog 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

#gtkdialog abstraction

gtkbox_interactive() {
  export messagebox='
    <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>
    '
}
gtkmessage() {
	I=$IFS; IFS=""
	for STATEMENT in $(gtkdialog --center --program=messagebox); do
		eval $STATEMENT
	done
	IFS=$I
}

#gtkdialog progress counter

if [ "$messagetype" = "gtkdialog" ]; then
  progress(){
    while :
    do
      sleep 0.3
      percentage=$(cat $p_file) 
      text=$(cat $m_file)
      echo $percentage
      echo $text
      if [ $percentage = 100 ]; then
	rm *.tmp
	exit 0
      fi
   done
  }

  message(){
      echo $MSG_TXT > $m_file
  }
fi


export -f progress

# End gtkdialog abstraction

# mount function

mount_device ()
{
  i=0
  LIMIT=5
  while [ $i -lt $LIMIT ]
  do
    let count=$count+17 
    echo "$count" > $p_file
    printf "$i "
    [ ! -z $DEBUG ] && logger -i -t $own_name "Perform $i try to mount device $device_addr to $dir using obexfs"
    [ ! -z $DEBUG ] && logger -i -t $own_name "Execute: obexfs -b $device_addr -B 10 $dir"
    out=$(obexfs -b $device_addr $dir 2>&1)
    [ ! -z $DEBUG ] && logger -i -t $own_name "$out"
    mounts=$(grep $dir /proc/mounts | wc -l)
    [ ! -z $DEBUG ] && logger -i -t $own_name "Found $mounts mounted $dir inside /proc/mounts"
    
    if [ $mounts -ne 0 ] ;then
      MSG_TXT="Successfully mounted $device_addr 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 with $browser"
      out=$($browser $dir 2>&1)
      [ ! -z $DEBUG ] && logger -i -t $own_name "$out"
      exit 0
    else
      logger -i -t $own_name "Failed to mount $device_addr to $dir from try $i "
    fi
    sleep 1
    ((i += 1))
  done
  if [ $mounts -eq 0 ] ;then
    MSG_TXT="Failed to mount $device_addr to $dir. $dbg_msg"
    if [ $messagetype == "kdialog" ]; then
      kdialog --passivepopup "$MSG_TXT" 4
    elif [ $messagetype == "gtkdialog" ]; then
      message $"$MSG_TXT"
      echo "99" > $p_file
      sleep 4
      echo "100" > $p_file
    fi
  fi
}

# unmount function

umount_device ()
{
  mounts=$(grep $dir /proc/mounts | wc -l)
  if [ $mounts -ne 0 ] ;then
    [ ! -z $DEBUG ] && logger -i -t $own_name "Perform umount of $dir if it's already mounted."
    out=$(fusermount -uz $dir 2>&1)
    [ ! -z $DEBUG ] && logger -i -t $own_name "$out"
    mounts=$(cat /proc/mounts |grep $dir|wc -l)
      if [ $mounts -eq 0 ] ;then
        [ ! -z $DEBUG ] && logger -i -t $own_name "Successfully unmounted $dir."
      else
        logger -i -t $own_name "$dir is already mounted.  Failed to umount $dir.$out.  Please perform its umount manually."
        MSG_TXT="Failed to umount $dir - $dbg_msg"
	if [ $messagetype == "kdialog" ]; then
	  kdialog --passivepopup "$MSG_TXT" 4
	elif [ $messagetype == "gtkdialog" ]; then
	  message $"$MSG_TXT"
	  echo "99" > $p_file
	  sleep 4
	  count=5
	fi
        exit
      fi
  else
    [ ! -z $DEBUG ] && logger -i -t $own_name "$dir is not mounted - no need to perform umount..."
  fi
}

# mkdir function

create_dir ()
{
  [ ! -z $DEBUG ] && logger -i -t $own_name "Create directory $dir to mount the device by bluetooth..."
  out=$(mkdir -p $dir 2>&1)
  [ ! -z $DEBUG ] && logger -i -t $own_name "$out"
}

#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

create_dir
umount_device
mount_device