#!/bin/bash

#Fcitx Setup Helper
#Copyright 2013 AWASHIRO Ikuya <ikuya@fruitsbasket.info>
#
#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 3 of the License, or
#(at your option) any later version.
#
#This program is distributed in the hope that it will be useful,
#but WITHOUT ANY WARRANTY; without even the implied warranty of
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#GNU General Public License for more details.
#
#You should have received a copy of the GNU General Public License
#along with this program.  If not, see <http://www.gnu.org/licenses/>.

#テスト済Ubuntuフレーバー
#Ubuntu 13.10 (GNOME Flashback Session含む)
#Ubuntu GNOME 13.10  (GNOME Classic Session含む)
#Xubuntu 13.10
#Kubuntu 13.10

PKG_ZENITY=zenity
PKG_KDIALOG=kde-baseapps-bin
PKG_GSETTINGS=libglib2.0-bin
PKG_FCITX=fcitx
PKG_FCITX_MOZC=fcitx-mozc
PKG_FCITX_QT5=fcitx-libs-qt5
PKG_KCM_FCITX=kde-config-fcitx
PKG_IM_CONFIG=im-config
PKG_FCITX_FRONTEND_QT5=fcitx-frontend-qt5

# これであってる？
if ! dpkg -l | grep -qs "^ii  *${PKG_ZENITY} " && ! dpkg -l | grep -qs "^ii  *${PKG_KDIALOG} " ; then
    echo "zenityないしkdialogがインストールされていません。\n '${PKG_ZENITY}'ないし'${PKG_KDIALOG}'パッケージをインストールしてください" >&2
    exit 1
fi
 
if [ "${DESKTOP_SESSION}" = "kde-plasma" ]; then
	ERROR_DIALOG='kdialog --title="Fcitx　セットアップヘルパー" --error '
	INFO_DIALOG='kdialog --title="Fcitx　セットアップヘルパー" --msgbox '
	QUESTION_DIALOG='kdialog --title="Fcitx　セットアップヘルパー" --yesno '
	TEXTINFO='kdialog --title="Fcitx　セットアップヘルパー" --textbox '
else
	ERROR_DIALOG='zenity --title="Fcitx　セットアップヘルパー" --error --text='
	INFO_DIALOG='zenity --title="Fcitx　セットアップヘルパー" --info --text='
	QUESTION_DIALOG='zenity --title="Fcitx　セットアップヘルパー" --question --text='
	TEXTINFO='zenity --title="Fcitx-diagnoseの結果" --text-info --filename='
fi
# ${ERROR_DIALOG}"ほげ" ←使い方

if [ "${GDM_LANG}" = "ja" -o "${GDM_LANG}" = "ja_JP" ]; then
	:
else
       ${ERROR_DIALOG}"This program intends to run on Japanese environment. Sorry for inconvenience."
       exit 1
fi

# ":amd64"とか付くやつは後ろのスペースを取る
if ! dpkg -l | grep -qs "^ii  *${PKG_GSETTINGS} "; then
	LACKING="${PKG_GSETTINGS},"
fi
if ! dpkg -l | grep -qs "^ii  *${PKG_IM_CONFIG} "; then
	LACKING="${LACKING}${PKG_IM_CONFIG},"
fi
if ! dpkg -l | grep -qs "^ii  *${PKG_FCITX} "; then
	LACKING="${LACKING}${PKG_FCITX},"
fi
if ! dpkg -l | grep -qs "^ii  *${PKG_FCITX_MOZC}"; then
	LACKING="${LACKING}${PKG_FCITX_MOZC},"
fi
if ! dpkg -l | grep -qs "^ii  *${PKG_FCITX_QT5}"; then
	LACKING="${LACKING}${PKG_FCITX_QT5},"
fi
if ! dpkg -l | grep -qs "^ii  *${PKG_FCITX_FRONTEND_QT5}"; then
	LACKING="${LACKING}${PKG_FCITX_FRONTEND_QT5},"
fi
if [ "${DESKTOP_SESSION}" = "kde-plasma" ] && ! dpkg -l | grep -qs "^ii  *${PKG_KCM_FCITX} "; then
	LACKING="${LACKING}${PKG_KCM_FCITX},"
fi
if [ -n "${LACKING}" ]; then
	LACKING=`echo "${LACKING}" | sed -e "s/,*$//g"` 
	${ERROR_DIALOG}"${LACKING} パッケージがインストールされていません。インストールしてから再実行してください。"
	exit 1
fi

${QUESTION_DIALOG}"Fcitxをデフォルトにする設定を行いますか？ 「いいえ」をクリックすると、FcitxをIBusに戻すこともできます。"
if [ $? != "0" ]; then
	${QUESTION_DIALOG}"FcitxからIBusに戻しますか？"
	CANCEL=`echo $?`
fi
if [ "${CANCEL}" = "0" ]; then
	MODE=repair
elif [ "${CANCEL}" = "1" ]; then
	exit
fi

if [ "${MODE}" = "repair" ]; then
	if [ "${DESKTOP_SESSION}" = "ubuntu" ]  || [ "${DESKTOP_SESSION}" = "gnome-fallback" ] ; then
		gsettings set org.gnome.settings-daemon.plugins.keyboard active true
		gsettings set com.canonical.indicator.keyboard visible true
	elif [ "${DESKTOP_SESSION}" = "gnome" ] || [ "${DESKTOP_SESSION}" = "gnome-classic" ]; then
		gsettings set org.gnome.settings-daemon.plugins.keyboard active true
	fi
else
	if [ "${DESKTOP_SESSION}" = "ubuntu" ]  || [ "${DESKTOP_SESSION}" = "gnome-fallback" ] ; then
		gsettings set org.gnome.settings-daemon.plugins.keyboard active false
		gsettings set com.canonical.indicator.keyboard visible false
	elif [ "${DESKTOP_SESSION}" = "gnome" ] || [ "${DESKTOP_SESSION}" = "gnome-classic" ]; then
		gsettings set org.gnome.settings-daemon.plugins.keyboard active false
	fi
fi

INPUTSOURCE=`gsettings get org.gnome.desktop.wm.keybindings switch-input-source|grep -o \<.*\>`
if [ "${INPUTSOURCE}" = "<Primary>" ]; then
        gsettings set org.gnome.desktop.wm.keybindings switch-input-source "['<Super>space']"
        gsettings set org.gnome.desktop.wm.keybindings switch-input-source-backward "['<Super><Shift>space']"
fi

if [ "${MODE}" = "repair" ]; then
	im-config -n ibus
	${INFO_DIALOG}"IBusに戻しました。一旦ログアウトして再ログインしてください。Fcitxを使用しない場合は「自動起動するアプリケーション」(gnome-session-properties)など自動起動をオン/オフするアプリケーションを起動し、Fcitxのチェックを外してください"
else
	im-config -n fcitx
	${INFO_DIALOG}"Fcitx診断ツールを起動します。OKをクリックして少々お待ちください"
	DIAGNOSE=`mktemp`
	fcitx-diagnose > ${DIAGNOSE} 
	${TEXTINFO}${DIAGNOSE}
	rm ${DIAGNOSE}
	${INFO_DIALOG}"設定が完了しました。一旦ログアウトして再ログインしてください"
fi
