#!/bin/bash

# dic_syncのフロントエンドおよび設定用スクリプト

# 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: kobayashi mao <kobamao.jp@gmail.com>

title=dic_sync
zenity_cmd="zenity --title=$title"
break_up_text="設定は中止されました\n選択した項目は破棄されます"
break_up="$zenity_cmd --info --text $break_up_text"
online_dir="$HOME/Ubuntu One"
search_dic_log=`find "$online_dir"/.dic_sync/ -name "dic_log*"  | wc -l`

function config_onlinestorage
{
$zenity_cmd --question --text "同期に使用するオンラインストレージの設定を行います\n中止した場合、設定の変更は適応されません" --cancel-label="中止する" --ok-label="設定を続行"
if [ $? -eq 0 ]
	then
	chosen_online=$($zenity_cmd --list --text "同期に使用するオンラインストレージの選択\n下のいずれかから選択してください" --radiolist --hide-column 2 --column 選択 --column dummy --column 項目 true ubuntu_one "$HOME/Ubuntu Oneで同期する（推奨）" false shared "$HOME/Ubuntu One/Shared With Meで同期する" false user_chosen_storage "上記以外を使用する（非推奨）")
	{
	if [ -z $chosen_online ]
		then
		chosen_online="no_choise"
	fi
	}
	{
	if [ $chosen_online = ubuntu_one ]
		then
		echo "$HOME/Ubuntu One" > $HOME/.dic_sync/online_storage.conf
	elif [ $chosen_online = shared ]
		then
		echo "$HOME/Ubuntu One/Shared With Me" > $HOME/.dic_sync/online_storage.conf
	elif [ $chosen_online = user_chosen_storage ]
		then
		user_storage=$($zenity_cmd --entry --entry-text "$HOME" --text "下の入力ダイアログに同期に使用するオンラインストレージを絶対パスで入力してください\n（現在この機能は標準ではサポートされていません）")
		{
		if [ $? -eq 0 ]
			then
			echo "$user_storage" > $HOME/.dic_sync/online_storage.conf
		else
			$break_up
		fi
		}
	else
		$break_up
	fi
	}
else
	$break_up
fi
}

function config_name
{
$zenity_cmd --question --text "同期に使用するユーザー名の設定を行います\n中止した場合、設定の変更は適応されません\n\n仕様の関係から同期を行っている環境内で一つのユーザー名を複数環境で使用すると同期が正常にできません\n設定の際にはそれぞれの環境で使用するユーザー名が異なるようにしてください" --cancel-label="中止する" --ok-label="設定を続行"
if [ $? -eq 0 ]
	then
	{
	while true
	do
	chosen_name=$($zenity_cmd --entry --entry-text `id -n -u` --text "下の入力ダイアログに同期で使用するユーザー名を半角英数記号で入力してください")
		{
		if [ $? -eq 0 ] && [ $search_dic_log -gt 0 ]
			then
			cat "$online_dir"/.dic_sync/dic_log* | cut -f2 | sort | uniq > $HOME/.dic_sync/dic_log.temp
			cheker_name=`grep -F $chosen_name $HOME/.dic_sync/dic_log | wc -l`
			rm $HOME/.dic_sync/dic_log.temp
			{
			if [ $cheker_name -gt 0 ]
				then
				$zenity_cmd --question --text "入力されたユーザー名はすでに使用されています\nクリーンインストール等での再設定の場合は許可をクリックしてください\nそうでなく、他環境で使用されている場合には再入力をクリックして別の名前を入力してください" --cancel-label="再入力" --ok-label="許可"
				{
				if [ $? -eq 0 ]
					then
					echo "$chosen_name" > $HOME/.dic_sync/nickname.conf
					break
				elif [ $? -eq 1 ]
					then
					continue
				else
					$break_up
					break
				fi
				}
			else
				$break_up
				break
			fi
			}
		elif [ $? -eq 0 ]
			then
			echo "$chosen_name" > $HOME/.dic_sync/nickname.conf
			break
		else
			$break_up
			break
		fi
		}
	done
	}
else
	$break_up
fi
}

function config_crontab
{
$zenity_cmd --question --text "Anthy辞書の同期頻度を設定します\n同時起動環境同士で同期を行う場合には五分以上の間隔を開けることを推奨します\n毎時一回または毎日一回、毎週一回、毎月一回のいずれかから選択できます\n上記以外の頻度で同期を行う場合には直接crontabを編集してください\n中止した場合、設定の変更は適応されません" --cancel-label="中止する" --ok-label="設定を続行"
if [ $? -eq 0 ]
	then
		sync_repetiton=$($zenity_cmd --list --text "同期頻度の選択\n下のいずれかから選択してください" --radiolist --hide-column 2 --column 選択 --column dummy --column 項目 true hourly "毎時指定分に同期" false dayly "毎日指定時刻に同期" false weekly "毎週指定曜日の指定時刻に同期" false monthly "毎月指定日時に同期")
	{
	if [ "$sync_repetiton" = "hourly" ]
		then
		miniute=$($zenity_cmd --scale --text "毎時何分に同期するか選択してください（単位は分）" --min-value=0 --max-value=59 --value=30 --step 1)
		{
		if [ $? -eq 0 ]
			then
			$zenity_cmd --question --text "毎時$miniute分にAnthy辞書の同期を行います"
			{
			if [ $? -eq 0 ]
				then
				echo "$miniute * * * * /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
				crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
				cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
				rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
				crontab $HOME/.dic_sync/crontab
			else
				$break_up
			fi
			}
		else
			$break_up
		fi
		}
	elif [ "$sync_repetiton" = "dayly" ]
		then
		hour=$($zenity_cmd --scale --text "何時に同期するか選択してください（単位は時）" --min-value=0 --max-value=23 --value=12 --step 1)
		{
		if [ $? -eq 0 ]
			then
			miniute=$($zenity_cmd --scale --text "何分に同期するか選択してください（単位は分）" --min-value=0 --max-value=59 --value=30 --step 1)
			{
			if [ $? -eq 0 ]
				then
				$zenity_cmd --question --text "毎日$hour時$miniute分にAnthy辞書の同期を行います"
				{
				if [ $? -eq 0 ]
					then
					echo "$miniute $hour * * * /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
					crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
					cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
					rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
					crontab $HOME/.dic_sync/crontab
				else
					$break_up
				fi
				}
			else
				$break_up
			fi
			}
		else
			$break_up
		fi
		}
	elif [ "$sync_repetiton" = "weekly" ]
		then
		week=$($zenity_cmd --list --text "同期する曜日を選択してください" --radiolist --hide-column 2 --column 選択 --column dummy --column 項目 true 1 "月曜日" false 2 "火曜日" false 3 "水曜日" false 4 "木曜日" false 5 "金曜日" false 6 "土曜日" false 7 "日曜日")
		{
		if [ $? -eq 0 ]
			then
			hour=$($zenity_cmd --scale --text "何時に同期するか選択してください（単位は時）" --min-value=0 --max-value=23 --value=12 --step 1)
			{
			if [ $? -eq 0 ]
				then
				miniute=$($zenity_cmd --scale --text "何分に同期するか選択してください（単位は分）" --min-value=0 --max-value=59 --value=30 --step 1)
				{
				if [ $? -eq 0 ] && [ $week -eq 1 ]
					then
					$zenity_cmd --question --text "毎週月曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				elif [ $? -eq 0 ] && [ $week -eq 2 ]
					then
					$zenity_cmd --question --text "毎週火曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				elif [ $? -eq 0 ] && [ $week -eq 3 ]
					then
					$zenity_cmd --question --text "毎週水曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				elif [ $? -eq 0 ] && [ $week -eq 4 ]
					then
					$zenity_cmd --question --text "毎週木曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				elif [ $? -eq 0 ] && [ $week -eq 5 ]
					then
					$zenity_cmd --question --text "毎週金曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				elif [ $? -eq 0 ] && [ $week -eq 6 ]
					then
					$zenity_cmd --question --text "毎週土曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				elif [ $? -eq 0 ] && [ $week -eq 7 ]
					then
					$zenity_cmd --question --text "毎週日曜日$hour時$miniute分に同期する"
					{
					if [ $? -eq 0 ]
						then
						echo "$miniute $hour * * $week /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				else
					$break_up
				fi
				}
			else
				$break_up
			fi
			}
		else
			$break_up
		fi
		}
	elif [ "$sync_repetiton" = "monthly" ]
		then
		day=$($zenity_cmd --scale --text "何日に同期するか選択してください（単位は日）" --min-value=1 --max-value=31 --value=14 --step 1)
		{
		if [ $? -eq 0 ]
			then
			hour=$($zenity_cmd --scale --text "何時に同期するか選択してください（単位は時）" --min-value=0 --max-value=23 --value=12 --step 1)
			{
			if [ $? -eq 0 ]
				then
				miniute=$($zenity_cmd --scale --text "何分に同期するか選択してください（単位は分）" --min-value=0 --max-value=59 --value=30 --step 1)
				{
				if [ $? -eq 0 ]
					then
					$zenity_cmd --question --text "毎月$day日$hour時$miniute分に同期する"
					{
					if [ $0 -eq 0 ]
						then
						echo "$miniute $hour $day * * /usr/bin/dic-sync" > $HOME/.dic_sync/crontab.temp
						crontab -l | grep -s -v -F "/usr/bin/dic-sync" | grep -s -v -F "no crontab for" > $HOME/.dic_sync/crontab.keeping
						cat $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp > $HOME/.dic_sync/crontab
						rm $HOME/.dic_sync/crontab.keeping $HOME/.dic_sync/crontab.temp
						crontab $HOME/.dic_sync/crontab
					else
						$break_up
					fi
					}
				else
					$break_up
				fi
				}
			else
				$break_up
			fi
			}
		else
			$break_up
		fi
		}
	else
		$break_up
	fi
	}
else
	$break_up
fi
}

#
# main script
#

if [ ! -d $HOME/.dic_sync ]
	then
	mkdir $HOME/.dic_sync
fi
$zenity_cmd --question --text "Anthyのユーザー辞書の同期頻度や使用するストレージ、ユーザー名の設定を行います"
if [ $? -eq 0 ]
	then
	while true
	do
	chosen_conf=$($zenity_cmd --list --text "設定したい項目のラジオにチェックを入れてください" --checklist --hide-column 2 --column 選択 --column dummy --column 項目 true on_storage "同期に使用するオンラインストレージの選択" true user_name_conf "同期に使用するユーザー名を設定する" true sync_repet "辞書の同期頻度の設定")
	switcher_main="$?"
	{
	if [ -z $chosen_conf ]
		then
		chosen_conf="no_choise"
	fi
	}
	{
	if [ $chosen_conf = "on_storage|user_name_conf|sync_repet" ]
		then
		config_onlinestorage
		config_name
		config_crontab
		break
	elif [ $chosen_conf = "on_storage|user_name_conf" ]
		then
		config_onlinestorage
		config_name
		break
	elif [ $chosen_conf = "on_storage|sync_repet" ]
		then
		config_onlinestorage
		config_crontab
		break
	elif [ $chosen_conf = "user_name_conf|sync_repet" ]
		then
		config_name
		config_crontab
		break
	elif [ $chosen_conf = "on_storage" ]
		then
		config_onlinestorage
		break
	elif [ $chosen_conf = "user_name_conf" ]
		then
		config_name
		break
	elif [ $chosen_conf = "sync_repet" ]
		then
		config_crontab
		break
	elif [ $chosen_conf = "no_choise" ] && [ $switcher_main -eq 0 ]
		then
		$zenity_cmd --info --text "設定する項目を一つ以上選択してください"
		continue
	else
		$break_up
		break
	fi
	}
	done
else
	$break_up
fi

exit 0

# [ End of File ]
