#!/bin/bash
# charset ja_JP.UTF-8
# work on ja_JP.UTF-8 or ja_JP.eucJP

usage()
{
    cat<<EOF | nkf $nkfopt

ivman-umount:
    /media 以下にマウント中のリムーバブル・メディアを、アンマウントします。
使い方:
    ivman-umount    ※ オプションは有りません
※ ivman-umount は、ivman などにより一般ユーザーモードで /media 以下に
マウントされたリムーバブルメディアを検出し、選択的にアンマウントします。
起動した ivman-umount ダイアログから、アンマウントするメディアを選び
[OK] を押すと、該当メディアをアンマウントします。
[キャンセル] を押すと、選択の有無に関わらず、何もせず終了します。

EOF
}


case $LANG in
    ja_JP.eucJP)
	nkfopt="-e";;
    ja_JP.UTF-8|*)
	nkfopt="-w";;
esac

if [ ! $# == 0 ]; then
    usage
    exit 1
fi

if [ -z "`mount|grep -e \/media`" ]; then
    msg=`echo "マウント中のリムーバブル・メディアは有りません" | nkf $nkfopt`
    zenity --info --title="ivman-umount" \
	--text="$msg"
    exit 0
fi
# mount コマンドの出力の第一フィールド = デバイス名を取得
mntdev=(`mount|grep -e \/media | cut -d " " -f1`)
# mount コマンドの出力の第三フィールド以降 = マウントポイント以降を取得
mntpt=(`mount|grep -e \/media\/ | cut -d " " -f 3-`)
i=0
j=0
skp=0
mntpoint=""

# mount コマンドの出力の第三フィールド以降を加工
# ※ zenity に与える「マウントポイント文字列」中に、スペースを含められない
# ※ (項目の区切り文字として使われるので)為、スペースをアンダースコア
# ※ に置き換える
# ※ 副作用: マウントポイント文字列内に、"type " という文字列が含まれる
#            場合は、以降の文字は省かれる。
while [ -n "${mntpt[$i]}" ]; do
    if [ "${mntpt[$i]}" == "type" ]; then
	# 'type' を検出したら、次の '/media/' を検出するまでスキップ
	# ('type' の直前までを「マウントポイント文字列」とする)
	mntpoint="$mntpoint " # 区切り文字として " " を付加
	skp=1
	i=`expr $i \+ 1`
	j=`expr $j \+ 1`
	continue
    fi
    if [ -n "`echo ${mntpt[$i]} | grep -e \/media\/`" ]; then
	# '/media/' を検出したら 次の 'type' までをマウントポイント文字列とする
	mntpoint="$mntpoint${mntpt[$i]}"
	skp=0
	i=`expr $i \+ 1`
	continue
    fi
    [ $skp == 1 ] && i=`expr $i \+ 1` && continue
    # マウントポイント文字列中に ' '(スペース) を検出したら、
    # '_'(アンダースコア) に置き換える
    mntpoint="$mntpoint""_""${mntpt[$i]}"
    i=`expr $i \+ 1`
done
# 加工済みのスペースで区切られた文字列を、配列変数化
mntpoint=($mntpoint)

# "チェックフラグ" "デバイス名" "リスト番号" "マウントポイント文字列" を
# 合成し、zenity の List dialog の、各セルの値を作る
param=""
width=0
for (( i=0; i<$j; i++ )); do
    param="$param false $i ${mntdev[$i]} ""${mntpoint[$i]}"
    w="`echo "${mntpoint[$i]}" | wc -c`"
    expr $w \> $width > /dev/null && width="$w"
done

# zenity ウィンドウの大きさを決める (12pt を目安に)
width=`expr \( $width + 25 \) \* 8`
height=`expr \( 6 + $j \) \* 29`

# zenity の実行結果(選択されたリスト番号)を ans に代入
msg=`echo "アンマウントするデバイスを選択し\n[<b>OK</b>] を押して下さい" | nkf $nkfopt`
slct=`echo "選択" | nkf $nkfopt`
dvnm=`echo "デバイス名" | nkf $nkfopt`
mp=`echo "マウントポイント" | nkf $nkfopt`
ans=`zenity --height=$height --width=$width --list --title "ivman-umount" --text "$msg" --checklist --hide-column 2 --column "$slct" --column dummy --column "$dvnm" --column "$mp" $param`

# $ans 内の '|' を スペースに置換
ans=`echo $ans | sed 's/|/ /g'`

# "リスト番号" に該当する "デバイス名" をアンマウント
for i in $ans; do
    pumount ${mntdev[$i]}
    echo "${mntpoint[$i]} をアンマウントしました" | nkf "$nkfopt"
done

exit 0
