# -*- sh -*-
# vim:ft=sh:ts=8:sw=4:noet

###
## Disconnects NetworkManager on suspend and connects on resume. This is the equivalent of
## clicking the "Switch to Offline" button before suspending, and clicking the
## "Switch to Online" button after resuming.
##
## Author: Markus Becker
## Credits: 
## 	Based on kopete scriplet from Pat Double <pat@patdouble.com>
##
###

AddConfigHandler NMOptions
AddConfigHelp "EnableNMReconnect <boolean>" "Disconnect and reconnect NM before and after suspending."

NMSuspend() {
	vecho 3 "Putting NetworkManager to sleep"
	/usr/bin/dbus-send --system \
		--dest=org.freedesktop.NetworkManager \
		--type=method_call /org/freedesktop/NetworkManager \
		org.freedesktop.NetworkManager.sleep
	return 0
}

NMResume() {
	vecho 3 "Waking up NetworkManager"
	/usr/bin/dbus-send --system \
		--dest=org.freedesktop.NetworkManager \
		--type=method_call /org/freedesktop/NetworkManager \
		org.freedesktop.NetworkManager.wake
	return 0
}

NMOptions() {
	case $1 in
		enablenmreconnect)
			if [ ! -x "$(command -v dbus-send)" ]; then
			    vecho 1 "dbus-send not found, cannot signal NetworkManager"
			    return 1
			fi
			BoolIsOn "$1" "$2" && NM_ENABLED=1 || return 0
			;;

		*)
		return 1
	esac

	if [ -z "$NM_HOOKED" ] ; then
		vecho 0 "nm: hook"
		AddSuspendHook 61 NMSuspend
		AddResumeHook 61 NMResume
		NM_HOOKED=1
	fi
	return 0
}
