AddConfigHandler KopeteOptions
AddConfigHelp "LogoutKopete <boolean>" "Changes all locally running Kopete's status to offline before suspending."
AddConfigHelp "LoginKopete <boolean>" "Changes back Kopete's status to online after resuming."

LogoutKopete() {
	[ x"$LOGOUT_KOPETE" != "x1" ] && return 0

	if ! command -v dcop > /dev/null 2>&1 ; then
		vecho 0 'Cannot logout kopete. `dcop` program not found.'
		return 1 # abort, unless forced
	fi

	local avail_sessions
	local session

	# get all sessions (ignore non local ones!)
	avail_sessions=`dcop --all-users --list-sessions | grep '.DCOP.*__0'`

	[ -n "$avail_sessions" ] || return 0

	for session in $avail_sessions; do
		if pidof kopete > /dev/null 2>&1 ; then
			dcop --session $session --all-users kopete KopeteIface disconnectAll >/dev/null 2>&1
		fi
	done

	return 0
}

LoginKopete() {
	[ x"$LOGOUT_KOPETE" != "x1" ] && return 0
	[ x"$LOGIN_KOPETE" != "x1" ] && return 0

	if ! command -v dcop > /dev/null 2>&1 ; then
		vecho 0 'Cannot login kopete. `dcop` program not found.'
		return 1 # abort, unless forced
	fi

	local avail_sessions
	local session

	# get all sessions (ignore non local ones!)
	avail_sessions=`dcop --all-users --list-sessions | grep '.DCOP.*__0'`

	[ -n "$avail_sessions" ] || return 0

	for session in $avail_sessions; do
		if pidof kopete > /dev/null 2>&1 ; then
			dcop --session $session --all-users kopete KopeteIface connectAll >/dev/null 2>&1
		fi
	done

	return 0
}

KopeteOptions()
{
	case "$1" in
		logoutkopete)
			if BoolIsOn "$1" "$2"; then
				LOGOUT_KOPETE=1
					if [ -z "$KOPETELOGOUT_HOOKED" ]; then
						AddSuspendHook 19 LogoutKopete
						AddResumeHook 19 LoginKopete
						KOPETELOGOUT_HOOKED=1
					fi
			else
				LOGOUT_KOPETE=0
			fi
			;;
		loginkopete)
			if BoolIsOn "$1" "$2"; then
				LOGIN_KOPETE=1
			else
				LOGIN_KOPETE=0
			fi
			;;
		*)
			return 1
			;;
	esac
}
