#!/bin/bash

#############################################
#		MFMUSERDAEMON
#--------------------------------------------
# Contributors: Shane Joe Lazar <shane AT archlinux DOT us>
# 		Kendall Tristan Weaver <kendalltweaver@gmail.com>
# Description: This is the user daemon for mint-fm2, written for Linux Mint 9 Fluxbox CE.
# 	      It monitors the file system for applications that and installed or uninstalled.
# License: GPL v2 or later.
#
#		/MFMUSERDAEMON
#############################################  

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="$WDIR/.$MFMDAEMON.pid"
LOGFILE="$WDIR/.$MFMDAEMON.log"
#		/EXTRA VARIABLES
############################################# 

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

updateMenu () {
  $APPDIR/mint-fm2 update # &> /dev/null
}

watchFunct () {
  WATCH=$(for d in ${WATCHEDDIRS[@]}; do if [[ -d $d ]] ; then echo $d ; fi ; done)
  inotifywait -q -m -r --format '%e %w%f' -e create -e delete $WATCH | while read line
  do
    echo $line >> $LOGFILE
    updateMenu
  done
}

daemonStart () {
  trapFunct 
  updateMenu
  nohup $0 run  >$LOGFILE 2>&1 &
  exec 3>&-
  exec 2>&-
  exec 1>&-
  exit 0
}

daemonStop () {
  trapFunct 
}

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
############################################# 
