#!/bin/bash

#############################################
#		MFMROOTDAEMON
#--------------------------------------------
# Contributors: Shane Joe Lazar <shane AT archlinux DOT us>
# 		Kendall Tristan Weaver <kendalltweaver@gmail.com>
# Description: This is the root daemon for mint-fm2, written for Linux Mint 9 Fluxbox CE.
# 	      It monitors for power management triggers.
# License: GPL v2 or later.
#
#		/MFMROOTDAEMON
#############################################  

if [[ -n $1 ]] ; then ACTION=$1 ; else ACTION="usage" ; fi

set -e
set -u

#############################################
#		MAIN VARIABLES
#--------------------------------------------
# Get proper paths and names
MINTFM2PATH=$(readlink -f $0)
MINTFM2ROOT=$(dirname $MINTFM2PATH)
MFMDAEMON=$(basename $MINTFM2PATH)

# Import mint-fm2 variables
source $MINTFM2ROOT/systemConfig
#		/MAIN VARIABLES
############################################# 

#############################################
#		SANITY ChECK
#--------------------------------------------

if [[ "$SYSCONFIGS" != "LOADED" ]]
then
  echo "Error: Essential settings have not been loaded."
  echo "System Settings: $SYSCONFIGS"
  exit 1
fi

#		/SANITY ChECK
#############################################

#############################################
#		EXTRA VARIABLES
#--------------------------------------------
# Define variables for daemon functions
PID=$$
PIDFILE="/tmp/.$MFMDAEMON.pid"
LOGFILE="/tmp/.$MFMDAEMON.log"
#		/EXTRA VARIABLES
############################################# 

#############################################
#		FUNCTIONS
#--------------------------------------------
trapFunct () {
  TOKILL=( $(ps -C "inotifywait -q -m -r --format %f -e create $CIAODIR" -o pid= | grep -v -e "$PID" -e "^$" | cat) )
  if [[ ${#TOKILL[@]} -gt 0 ]]
  then
    for i in ${TOKILL[@]}
    do
      checkUser=$(ps -p $i -o user= | cat)
      if [[ "$checkUser" = "$USER" && -n "$checkUser" ]]
      then
	kill -9 $i
      fi
    done
  fi
  if [[ -f "$PIDFILE" ]] ; then rm "$PIDFILE" ; fi
}

action () {
  #shutdown
  if [ "$line" = "shutdown" ]
  then
	  rm -rf $CIAODIR/*
  #	aplay /usr/share/sounds/mintfb-logout.wav &
	  shutdown -h now
  fi

  #restart
  if [ "$line" = "restart" ]
  then
	  rm -rf $CIAODIR/*
  #	aplay /usr/share/sounds/mintfb-logout.wav &
	  shutdown -r now
  fi

  #suspend
  if [ "$line" = "suspend" ]
  then
	  rm -rf $CIAODIR/*
  #	aplay /usr/share/sounds/mintfb-logout.wav &
	  pmi action sleep
  fi

  #hibernate
  if [ "$line" = "hibernate" ]
  then
	  rm -rf $CIAODIR/*
  #	aplay /usr/share/sounds/mintfb-logout.wav &
	  pmi action hibernate
  fi
}

watchFunct () {
  inotifywait -q -m -r --format %f -e create $CIAODIR | while read line
  do
    echo $line >> $LOGFILE
    action
  done
}

daemonStart () {
  trapFunct #&> /dev/null
  chmod -R a+rw $CIAODIR
  for f in $(ls $CIAODIR)
  do
    rm $CIAODIR/$f
  done
  nohup $0 run &> /dev/null &
  exec 3>&-
  exec 2>&-
  exec 1>&-
  exit 0
}

daemonStop () {
  trapFunct &> /dev/null
}

daemonRestart () {
  daemonStop
  daemonStart &
}

run () {
  trap "trapFunct; exit" INT TERM EXIT
  echo $PID > $PIDFILE
  watchFunct
  trap - INT TERM EXIT
}



#		/FUNCTIONS
############################################# 

#############################################
#		CASE
#--------------------------------------------

case $ACTION in
  start|restart)
    daemonStart
  ;;
  stop)
    daemonStop
  ;;
  run)
    run
  ;;
  *)
    echo "Usage: $MFMDAEMON [start|stop|restart]"
  ;;
esac
#		/CASE
############################################# 
