#!/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="8.04"
NEXT_RELEASE="8.10"
NEXT_LTS_RELEASE="10.04"

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-ja hardy/"
UBUNTU_JA_JA_REPO="deb http://archive.ubuntulinux.jp/ubuntu-ja hardy-ja/"
JAREPO[0]=$UBUNTU_JA_REPO
JAREPO[1]=$UBUNTU_JA_JA_REPO
NUMJAREPO=2

MEDIBUNTU_REPO="deb http://packages.medibuntu.org/ hardy free non-free"

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"

function install_menu {
	universe_packages=`
	         ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Universeコンポーネントからアプリケーションをインストールすることができます。
以下のアプリケーションはフリーソフトウェアです。" \
	           --column="" --column="パッケージ名" --column="解説" \
	           FALSE	ebview			"辞書ブラウザ" \
	           FALSE	edict-fpw		"和英辞書" \
	           FALSE	gjiten			"日本語辞書" \
	           FALSE	thunderbird	"Thunderbirdメール/ニュースクライアント" \
	           FALSE	sylpheed	"Sylpheedメールクライアント" \
	           FALSE	epiphany-browser	"GNOMEウェブブラウザ" \
	           FALSE	kazehakase	"風博士ウェブブラウザ" \
		   FALSE	spamassassin-rules-ja	"spamassassin用 日本語フィルタルール" \
	         || echo 'abort' ) | sed -e 's/|/ /g'
	`
	echo "$universe_packages" | grep -q 'abort' && abort "中止されました。"

	multiverse_packages=`
	         ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Multiverseコンポーネントからパッケージをインストールすることができます。
ubuntu-restricted-extrasパッケージをインストールすることにより、マルチメディアコーデック、Javaプラグイン、
Adobe Flashプラグインなどがセットアップされます。
これらのソフトウェアは、各国の法律で利用や配布が制限されています。
ライセンスについては http://www.ubuntu.com/ubuntu/licensing を参照してください。" \
	           --column="" --column="パッケージ名" --column="解説" \
	           TRUE	ubuntu-restricted-extras	"制限付き拡張パッケージ" \
	           TRUE	xpdf-japanese			"xpdfの日本語サポート" \
	           TRUE	poppler-data			"PDFレンダリングライブラリ 日中韓フォントサポート" \
	         || echo 'abort' ) | sed -e 's/|/ /g'
	`
	echo "$multiverse_packages" | grep -q 'abort' && abort "中止されました。"

	japanese_packages=`
	         ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Japanese Teamのレポジトリからアプリケーションをインストールすることができます。
インストールするパッケージを選択してください。
なお、以下のパッケージはUbuntuの正式サポート対象ではありません。
また、利用に際して使用許諾条件への同意が必要な場合があります。" \
	           --column="" --column="パッケージ名" --column="解説" \
	           TRUE	lha-sjis		"Shift-JISファイル名対応LHA" \
	           FALSE	realplayer		"Real Player 10 (一次配布元から取得)" \
	           FALSE	adobereader-jpn		"Adobe Reader 日本語版 (一次配布元から取得)" \
	           FALSE	adobereader-jpn-ipamonafont	"Adobe Reader用IPAモナーフォント" \
		   FALSE	emacs-env-ja	"Emacs日本語環境" \
		   FALSE	latex-env-ja	"LaTeX日本語環境" \
		   FALSE	latex-extra-ja	"LaTeX日本語環境拡張" \
		   FALSE	jd		"2chブラウザ JD" \
	         || echo 'abort' ) | sed -e 's/|/ /g'
	`
	echo "$japanese_packages" | grep -q 'abort' && abort "中止されました。"

	medibuntu_packages=`
	         ( $ZENITY_CMD --list --checklist --height=500 --width=700 \
	           --text="Medibuntuのレポジトリからアプリケーションをインストールすることができます。
インストールするパッケージを選択してください。
なお、以下のパッケージはUbuntuの正式サポート対象ではありません。
また、利用に際して使用許諾条件への同意が必要な場合があります。" \
	           --column="" --column="パッケージ名" --column="解説" \
		   FALSE	skype	"Skype インターネット電話" \
	         || echo 'abort' ) | sed -e 's/|/ /g'
	`
	echo "$medibuntu_packages" | grep -q 'abort' && abort "中止されました。"

	packages="${universe_packages} ${multiverse_packages} ${japanese_packages} ${medibuntu_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 ]] ; 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

	if [[ `echo "$medibuntu_packages" | wc -w` -gt 0 ]] ; then
		grep_sources "$MEDIBUNTU_REPO"
		if [[ $? == 1 ]] ; then
			wget http://www.medibuntu.org/sources.list.d/hardy.list -O /etc/apt/sources.list.d/medibuntu.list && \
			wget -q http://packages.medibuntu.org/medibuntu-key.gpg -O - | apt-key add -
		fi
	fi

	reload_sources
	install_packages "$packages"

        echo "$japanese_packages" | grep -q 'adobereader-jpn' 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

        echo "$japanese_packages" | grep -q 'latex-extra-ja' 2>&1 > /dev/null
	if [[ $? -eq 0 ]] ; then
		/usr/sbin/jisftconfig add
		$ZENITY_CMD --info --text \
"LaTeXでjarticleなどのクラスファイルを利用可能な状態にするため、jisftconfig add コマンドを実行しました。"
	fi

        echo "$japanese_packages" | grep -q 'emacs-env-ja' 2>&1 > /dev/null
	if [[ $? -eq 0 ]] && [ -f /usr/share/doc/emacs-env-ja/dot.emacs.example ] && [ ! -f /home/${SUDO_USER}/.emacs ] ; then
		$ZENITY_CMD --info --text \
".emacs のサンプルとして /usr/share/doc/emacs-env-ja/dot.emacs.example がインストールされています。
必要に応じて、ホームディレクトリにコピーして利用してください。"
	fi
}

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 {
	packages="$1"
	remove_packages="$2"
	echo インストールされるパッケージ - \[$packages\]
	echo 削除されるパッケージ - \[$remove_packages\]
	if [ -f  $INSTALL_TMPLIST ] ; then
		rm $INSTALL_TMPLIST
	fi
	for p in $packages
	do
		echo -e "${p}\tinstall" >> $INSTALL_TMPLIST
	done
	for p in $remove_packages
	do
		echo -e "${p}\tdeinstall" >> $INSTALL_TMPLIST
	done
cat $INSTALL_TMPLIST
	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 --question --text="$reason
$TITLEを終了します。"
	exit -1
}

function upgrade {
	$ZENITY_CMD --question --text="プログラムのアップグレードが必要です。
以下の処理を実行してよろしいですか？
・不要なパッケージの削除
・ソフトウェアの配布元の更新
・パッケージのアップデート" || abort "中止されました"
	/usr/bin/dpkg --get-selections 'ubuntu-conffiles-ja' 2>&1 | grep -q -E "[[:space:]]+install\$"
	if [[ $? -eq 0 ]] ; then
		/usr/bin/apt-get --assume-yes --purge remove ubuntu-conffiles-ja > /dev/null || \
			abort "不要な ubuntu-conffiles-ja パッケージの削除に失敗しました。
Synapticパッケージマネージャやアップデートマネージャなど、
他のパッケージマネージャが動作している場合、それらを
終了させてから再度このプログラムを実行してください。
それでもうまくいかない場合は、ubuntu-conffiles-ja 
パッケージを削除してから実行してください。"
	fi
	wget http://www.ubuntulinux.jp/sources.list.d/intrepid.list -O /etc/apt/sources.list.d/ubuntu-ja.list && \
	wget -q http://www.ubuntulinux.jp/ubuntu-ja-archive-keyring.gpg -O- | 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" == "$NEXT_LTS_RELEASE" ] ; then
  elif [ "$DISTRIB_RELEASE" != "$CURRENT_RELEASE" ] ; then
    abort "バージョン $CURRENT_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
