#!/bin/bash

# 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.

# Author: Jun Kobayashi <jkbys@ubuntu.com>
# Bugs to: https://bugs.launchpad.net/ubuntu-jp-improvement

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

CURRENT_RELEASE="10.04"
NEXT_RELEASE="10.10"

RELEASE_CODE="lucid"
NEXT_RELEASE_CODE="maverick"

DOC_DIR="/usr/share/doc/ubuntu-ja-setup-helper/"
REPO_DIR="/etc/apt/sources.list.d/"

UBUNTU_JA_REPO="deb http://archive.ubuntulinux.jp/ubuntu ${RELEASE_CODE} main"
UBUNTU_JA_NONFREE_REPO="deb http://archive.ubuntulinux.jp/ubuntu-ja ${RELEASE_CODE}-non-free/"
JAREPO[0]=$UBUNTU_JA_REPO
JAREPO[1]=$UBUNTU_JA_NONFREE_REPO
NUMJAREPO=2

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

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

eval `apt-config shell ARCH APT::Architecture`

PACKAGE_gimp="グラフィック編集ソフトウェア"
PACKAGE_ebview="辞書ブラウザ"
PACKAGE_edict_fpw="和英辞書"
PACKAGE_gjiten="日本語辞書"
PACKAGE_thunderbird="Thunderbirdメール/ニュースクライアント"
PACKAGE_thunderbird_locale_ja="Thunderbirdの日本語表記データ"
PACKAGE_sylpheed="Sylpheedメールクライアント"
PACKAGE_epiphany_browser="GNOMEウェブブラウザ"
PACKAGE_kazehakase="風博士ウェブブラウザ"
PACKAGE_spamassassin_rules_ja="spamassassin用 日本語フィルタルール"
PACKAGE_flashplugin_installer="【推奨】Adobe Flash Player（Firefox用プラグイン）"
PACKAGE_latex_env_ja="LaTeX日本語環境"
PACKAGE_latex_extra_ja="LaTeX日本語環境拡張"
PACKAGE_jd="2chブラウザ JD"
PACKAGE_lha_sjis="Shift_JISファイル名対応LHA"
PACKAGE_adobereader_jpn_ipamonafont="Adobe Reader用IPAモナーフォント"
PACKAGE_ttf_umefont="梅フォント"
PACKAGE_ttf_konatu="小夏フォント"
PACKAGE_otf_ipafont="IPAフォント"
PACKAGE_ttf_ipamonafont="IPAモナーフォント"
PACKAGE_adobereader_jpn="【推奨】Adobe Reader日本語版"
PACKAGE_lv="多言語対応のlessライクなファイルビューワ"
PACKAGE_scim_anthy="SCIMとAnthyによる日本語入力"
PACKAGE_scim_bridge_client_gtk="scim-bridgeのGTKクライアント"
PACKAGE_scim_tegaki="SCIMによる手書き入力"
PACKAGE_tegaki_zinnia_japanese="Zinna用日本語手書きモデルデータ"

for i in ${!PACKAGE_*} ; do
  p=${i##PACKAGE_}
  PACKAGES="$PACKAGES ${p//_/-}"
done

function install_menu {
	SELECTIONS=$(/usr/bin/dpkg --get-selections $PACKAGES)

	universe_packages=`
		 ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
		   --text="MainおよびUniverseコンポーネントからパッケージを追加・削除することができます。
追加するパッケージを選択してください。選択を解除したパッケージは削除されます。
これらのパッケージは、フリーなライセンスのもと配布されています。" \
		   --column="" --column="パッケージ名" --column="解説" \
		   $(check_installed gimp) "$(kaisetsu gimp)"\
		   $(check_installed ebview) "$(kaisetsu ebview)"\
		   $(check_installed edict-fpw) "$(kaisetsu edict-fpw)"\
		   $(check_installed gjiten) "$(kaisetsu gjiten)"\
		   $(check_installed thunderbird) "$(kaisetsu thunderbird)"\
		   $(check_installed thunderbird-locale-ja) "$(kaisetsu thunderbird-locale-ja)"\
		   $(check_installed sylpheed) "$(kaisetsu sylpheed)"\
		   $(check_installed epiphany-browser) "$(kaisetsu epiphany-browser)"\
		   $(check_installed spamassassin-rules-ja) "$(kaisetsu spamassassin-rules-ja)"\
		   $(check_installed otf-ipafont) "$(kaisetsu otf-ipafont)"\
		   $(check_installed ttf-umefont) "$(kaisetsu ttf-umefont)"\
		   $(check_installed ttf-konatu) "$(kaisetsu ttf-konatu)"\
		   $(check_installed lv) "$(kaisetsu lv)"\
		   $(check_installed scim-anthy) "$(kaisetsu scim-anthy)"\
		   $(check_installed scim-tegaki) "$(kaisetsu scim-tegaki)"\
		   $(check_installed tegaki-zinnia-japanese) "$(kaisetsu tegaki-zinnia-japanese)"\
		 || echo 'abort' ) | sed -e 's/|/ /g'
	`
	echo "$universe_packages" | grep -q '^abort$' && abort "中止されました。"

	if [ "$ARCH" == "i386" ] ; then
		multiverse_packages=`
			 ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
			   --text="Multiverseコンポーネントからパッケージを追加・削除することができます。
	追加するパッケージを選択してください。選択を解除したパッケージは削除されます。
	なお、これらのパッケージには、利用や配布に制限があります。" \
			   --column="" --column="パッケージ名" --column="解説" \
			   $(check_installed flashplugin-installer) "$(kaisetsu flashplugin-installer)" \
			 || echo 'abort' ) | sed -e 's/|/ /g'
		`
		echo "$multiverse_packages" | grep -q '^abort$' && abort "中止されました。"
	fi

	japanese_packages=`
		 ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
		   --text="Japanese Teamのレポジトリからパッケージを追加・削除することができます。
追加するパッケージを選択してください。選択を解除したパッケージは削除されます。
なお、これらのパッケージはUbuntuの正式サポート対象ではありません。
これらのパッケージは、フリーなライセンスのもと配布されています。" \
		   --column="" --column="パッケージ名" --column="解説" \
		   $(check_installed scim-bridge-client-gtk) "$(kaisetsu scim-bridge-client-gtk)"\
		   $(check_installed latex-env-ja) "$(kaisetsu latex-env-ja)" \
		   $(check_installed latex-extra-ja) "$(kaisetsu latex-extra-ja)" \
		   $(check_installed jd) "$(kaisetsu jd)" \
		 || echo 'abort' ) | sed -e 's/|/ /g'
	`
	echo "$japanese_packages" | grep -q '^abort$' && abort "中止されました。"

	if [ "$ARCH" == "i386" ] ; then
		japanese_nonfree_packages=`
			 ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
			   --text="Japanese Teamのnon-freeレポジトリからパッケージをインストールすることができます。
追加するパッケージを選択してください。選択を解除したパッケージは削除されます。
なお、これらのパッケージはUbuntuの正式サポート対象ではありません。
また、これらのパッケージには、利用や配布に制限があります。" \
			   --column="" --column="パッケージ名" --column="解説" \
			   $(check_installed ttf-ipamonafont) "$(kaisetsu ttf-ipamonafont)" \
			   $(check_installed lha-sjis) "$(kaisetsu lha-sjis)" \
			   $(check_installed adobereader-jpn) "$(kaisetsu adobereader-jpn)" \
			   $(check_installed adobereader-jpn-ipamonafont) "$(kaisetsu adobereader-jpn-ipamonafont)" \
			 || echo 'abort' ) | sed -e 's/|/ /g'
		`
	else
		japanese_nonfree_packages=`
			 ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
			   --text="Japanese Teamのnon-freeレポジトリからパッケージをインストールすることができます。
追加するパッケージを選択してください。選択を解除したパッケージは削除されます。
なお、これらのパッケージはUbuntuの正式サポート対象ではありません。
また、これらのパッケージには、利用や配布に制限があります。" \
			   --column="" --column="パッケージ名" --column="解説" \
			   $(check_installed ttf-ipamonafont) "$(kaisetsu ttf-ipamonafont)" \
			 || echo 'abort' ) | sed -e 's/|/ /g'
		`
	fi
	echo "$japanese_nonfree_packages" | grep -q '^abort$' && abort "中止されました。"

	packages="${universe_packages} ${multiverse_packages} ${japanese_packages} ${japanese_nonfree_packages}"
	if [[ `echo "$packages"| wc -w` -le 0 ]] ; then
		$ZENITY_CMD --info --text \
"パッケージは選択されませんでした。
$TITLEを終了します。"
		exit 0
	fi

	if [[ `echo "$universe_packages" | wc -w` -gt 0 ]] || [[ `echo "$japanese_packages" | wc -w` -gt 0 ]] ; then
		$SP_CMD -e universe
	fi

	if [[ `echo "$multiverse_packages" | wc -w` -gt 0 ]] ; then
		$SP_CMD -e multiverse
	fi

	if [[ `echo "$japanese_packages" | wc -w` -gt 0 ]] ||
	   [[ `echo "$japanese_nonfree_packages" | wc -w` -gt 0 ]] ; then
		i=0
		while [[ $i < $NUMJAREPO ]]; do
			grep_sources "${JAREPO[$i]}"
			if [[ $? == 1 ]]; then
				copy_ja=1
			fi
			let "i += 1"
		done
		[[ $copy_ja -eq 1 ]] && cp -a ${DOC_DIR}/ubuntu-ja.list ${REPO_DIR}
	fi

	SYSTEM_LANG=$(source /etc/default/locale && echo $LANG)
	if [[ "$(source /etc/default/locale && echo $LANG)" == "ja_JP.UTF-8" ]] ; then
		/usr/bin/fontconfig-voodoo -s ja_JP
	fi
	reload_sources
	install_packages "$packages"

	echo "$japanese_packages" | grep -q 'latex-extra-ja' 2>&1 > /dev/null
	if [[ $? -eq 0 ]] ; then
		/usr/sbin/jisftconfig add
	fi
}

function check_installed {
	echo "$SELECTIONS" | grep -q -E "$1[[:space:]]+install\$"
	if [[ $? -eq 0 ]] ; then
  		echo True $1
	else
  		echo False $1
	fi
}

function kaisetsu {
	p=PACKAGE_${1//-/_}
	eval echo \$$p
}

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

function reload_sources {
	MSG=`$SYNAPTIC_CMD --update-at-startup`
	if [ $? -ne 0 ] ; then
		$ZENITY_CMD --info --text \
"パッケージ情報の更新に失敗しました。
Synapticパッケージマネージャやアップデートマネージャなど、
他のパッケージマネージャが動作している場合、それらを
終了させてから再度このプログラムを実行してください。"
		return -1
	elif [ ! -z $MSG ] ; then
		$ZENITY_CMD --info --text \
"Synapticパッケージマネージャが次のメッセージを出力しました:
$MSG"
	fi
	return 0
}

function install_packages {
	if [ -f  $INSTALL_TMPLIST ] ; then
		rm $INSTALL_TMPLIST
	fi
	for i in ${!PACKAGE_*} ; do
		p=${i##PACKAGE_}
		name=${p//_/-}
		echo "$1" | grep -q -E "\b$name\b"
		if [ $? -eq 0 ] ; then
			echo -e "${name}\tinstall" >> $INSTALL_TMPLIST
		else
			echo -e "${name}\tdeinstall" >> $INSTALL_TMPLIST
		fi
	done
	MSG=`$SYNAPTIC_CMD --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を開始します。
パッケージをインストールするために、インターネット接続が必要です。
接続していない場合は、先にネットワーク設定を行ってください。
また、Synapticパッケージ・マネージャやアップデート・マネージャを終了してください。
続行してよろしいですか？"
	return $?
}

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

function abort {
	reason="$1"
	$ZENITY_CMD --info --text="$reason
$TITLEを終了します。"
	exit -1
}

function upgrade {
	$ZENITY_CMD --question --text="プログラムのアップグレードが必要です。
以下の処理を実行してよろしいですか？
・ソフトウェアの配布元の更新
・パッケージのアップデート" || abort "中止されました"
	wget https://www.ubuntulinux.jp/sources.list.d/${NEXT_RELEASE_CODE}.list -O /etc/apt/sources.list.d/ubuntu-ja.list && \
	wget -q https://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | apt-key add - &&
	wget -q https://www.ubuntulinux.jp/ubuntu-jp-ppa-keyring.gpg -O- | sudo apt-key add - || \
		abort "新しいリポジトリの追加に失敗しました。
インターネット接続を確認してから再実行してください。
それでもうまくいかない場合は、しばらくしてから実行してください。"
	reload_sources || abort
	$ZENITY_CMD --info --text="アップデート・マネージャを起動します。
パッケージをアップデートしてください。"
	/usr/bin/update-manager
	$ZENITY_CMD --info --text="$TITLEを終了します。
アップデートが完了した場合は、再度セットアップ・ヘルパを実行してください。
完了していない場合は、先にアップデートを完了させてください。"
	exit 0
}

#
# Main Routine
#

start
if [ $? -ne 0 ] ; then
	exit 0
fi
if [ -f /etc/lsb-release ] ; then
  source /etc/lsb-release
  if [ "$DISTRIB_RELEASE" == "$NEXT_RELEASE" ] ; then
    upgrade
  elif [ "$DISTRIB_RELEASE" != "$CURRENT_RELEASE" ] ; then
    abort "バージョン $DISTRIB_RELEASE には対応していません。"
  fi
fi
if [ -x /usr/bin/software-properties-gtk ] ; then
  SP_CMD=/usr/bin/software-properties-gtk
elif [ -x /usr/bin/software-properties-kde ] ; then
  SP_CMD=/usr/bin/software-properties-kde
else
  abort "software-properties-gtk もしくは software-properties-kde をインストールしてから再度実行してください。"
fi
install_menu
finish

exit 0
