#!/bin/bash -x

# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 2 of the License, or (at your option)
# any later version.

# Bugs to: Jun Kobayashi <fm4j-kbys@asahi-net.or.jp>

TITLE="日本語版セットアップヘルパ"
ZENITY_CMD="zenity --title=$TITLE"

UBUNTU_REPO="deb http://.*archive.ubuntu.com/ubuntu/\{0,1\} dapper"
UBUNTU_UPDATES_REPO="deb http://.*archive.ubuntu.com/ubuntu/\{0,1\} dapper-updates"
UBUNTU_SECURITY_REPO="deb http://security.ubuntu.com/ubuntu/\{0,1\} dapper-security"
REPO[0]=$UBUNTU_REPO
REPO[1]=$UBUNTU_UPDATES_REPO
REPO[2]=$UBUNTU_SECURITY_REPO
NUMREPO=3

UBUNTU_JA_REPO="deb http://archive.ubuntulinux.jp/ubuntu-ja dapper/"
UBUNTU_JA_JA_REPO="deb http://archive.ubuntulinux.jp/ubuntu-ja dapper-ja/"
JAREPO[0]=$UBUNTU_JA_REPO
JAREPO[1]=$UBUNTU_JA_JA_REPO
NUMJAREPO=2

SOURCESLIST="/etc/apt/sources.list"
SYNAPTICCMD="/usr/sbin/synaptic --hide-main-window --non-interactive -t $TITLE"

INSTALL_TMPLIST="/tmp/ubuntu-ja-setup-helper.install"

ADMIN=0

function install_menu {
	universe_packages=`
	         $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Universeコンポーネントからアプリケーションをインストールすることができます。
以下のアプリケーションはフリーソフトウェアです。" \
	           --column="" --column="パッケージ名" --column="解説" \
	           TRUE	ebview			"辞書ブラウザ" \
	           TRUE	edict-fpw		"和英辞書" \
	           TRUE	gjiten			"日本語辞書" \
	           FALSE	sylpheed	"Sylpheedメールクライアント" \
	           FALSE	kazehakase	"風博士ウェブブラウザ" \
	         | sed -e 's/|/ /g'
	`
	multiverse_packages=`
	         $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Multiverseコンポーネントからアプリケーションをインストールすることができます。
インストールするパッケージを選択してください。
以下のアプリケーションは無償で利用することができますが、使用条件や再配布などに制限があります。" \
	           --column="" --column="パッケージ名" --column="解説" \
	           TRUE	flashplugin-nonfree	"Mozilla/Firefox用Flash Playerプラグイン（一次配布元から取得）" \
	           TRUE	sun-java5-plugin	"Mozilla/Firefox用Javaプラグイン" \
	           FALSE	msttcorefonts		"Microsoft TrueType core fontsインストーラ" \
	         | sed -e 's/|/ /g'
	`
	japanese_packages=`
	         $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Japanese Teamのレポジトリからアプリケーションをインストールすることができます。
インストールするパッケージを選択してください。" \
	           --column="" --column="パッケージ名" --column="解説" \
	           TRUE	realplayer		"Real Player 10 (一次配布元から取得)" \
	           TRUE	adobereader-jpn		"Adobe Reader 日本語版 (一次配布元から取得)" \
	           TRUE	adobereader-jpn-ipamonafont	"Adobe Reader用IPAモナーフォント" \
	           TRUE	lha-sjis		"Shift-JISファイル名対応lha" \
		   FALSE	skype		"Skype(一次配布元から取得)" \
		   FALSE	ochusha		"2chブラウザ おちゅ〜しゃ" \
	         | sed -e 's/|/ /g'
	`
	if [ `echo "$universe_packages"| wc -w` -gt 0 ] ; then
		COMPONENTS="universe"
	fi
	if [ `echo "$multiverse_packages"| wc -w` -gt 0 ] ; then
		COMPONENTS="$COMPONENTS multiverse"
	fi
	if [ -n "$COMPONENTS" ] ; then
		add_components "$COMPONENTS"
	fi
	if [ `echo "$japanese_packages"| wc -w` -gt 0 ] ; then
		add_ja_repositories
	fi
	packages="${universe_packages} ${multiverse_packages} ${japanese_packages}"
	if [ `echo "$packages"| wc -w` -le 0 ] ; then
		$ZENITY_CMD --info --text \
"パッケージは選択されませんでした。
$TITLEを終了します。"
		exit 1
	fi
	reload_sources
	install_packages "$packages"
	dpkg-query -s adobereader-jpn | grep "installed" 2>&1 > /dev/null
	if [ $? -eq 0 ] ; then
		perl -p -i.ubuntu-ja-old -e 's/^application\/pdf=.*$/application\/pdf=AdobeReader.desktop/' /etc/gnome/defaults.list
		update-desktop-database /usr/share/applications
	fi
}

function add_components {
	components="$1"
	for c in $components; do
		i=0
		while [[ $i < $NUMREPO ]]; do
			PATTERN="^[ \t]*${REPO[$i]}[ \t]\+.*$c"
			if ! grep -q "$PATTERN" $SOURCESLIST; then
				r="${REPO[$i]//\//\\/}"
				echo "Add $c to $r"
				sed -i -e "s/^\([ \t]*${r}[ \t]\+.*\)$/\1 ${c}/" $SOURCESLIST
			fi
			let "i += 1"
		done
	done
}

function add_ja_repositories {
	i=0
	sourcesok=0
	while [[ $i < $NUMJAREPO ]]; do
		grep_sources "${JAREPO[$i]}"
		if [[ $? == 1 ]]; then
			echo "${JAREPO[$i]}" >> $SOURCESLIST
		fi
		let "i += 1"
	done
}

function grep_sources {
	repo="$1"
	if grep -q "^\s*$repo" $SOURCESLIST; then
		exitstatus=0
	else
		exitstatus=1
	fi
	
	return $exitstatus
}

function reload_sources {
	$SYNAPTICCMD --update-at-startup
	return
}

function install_packages {
	packages="$1"
	echo インストールされるパッケージ - \[$packages\]
	if [ -f  $INSTALL_TMPLIST ] ; then
		rm $INSTALL_TMPLIST
	fi
	for p in $packages
	do
		echo -e "${p}\tinstall" >> $INSTALL_TMPLIST
	done
	MSG=`$SYNAPTICCMD --set-selections < $INSTALL_TMPLIST`
        if [ $? -ne 0 ] ; then
		$ZENITY_CMD --info --text \
"インストールに失敗しました。
Synapticパッケージマネージャやアップデートマネージャなど、
他のパッケージマネージャが動作している場合、それらを
終了させてから再度このプログラムを実行してください。"
	elif [ ! -z $MSG ] ; then
		$ZENITY_CMD --info --text \
"Synapticパッケージマネージャが次のメッセージを出力しました:
$MSG"
	fi
	rm $INSTALL_TMPLIST
	return 0
}

function start {
	$ZENITY_CMD --question --text="$TITLEを開始します。
パッケージをインストールするために、インターネット接続が必要です。
接続していない場合は、先にネットワーク設定を行ってください。"
	return $?
}

function finish {
	$ZENITY_CMD --question --text="$TITLEを終了します。"
	return $?
}



#
# Main Routine
#

start
if [ $? -ne 0 ] ; then
	exit 0
fi
install_menu
finish

exit 0
