#!/bin/sh
#
# Script Name: pa_conf
# Description: Enable/Disable PulseAudio via the fluxbox menu
# Author     : Konstantinos Mantzaris <kmanjaris@gmail.com>
# Web Site   : http://SlaXBMC.blogspot.com
#

#Kill running processes
pa_kill() {
   if [ -x /usr/local/bin/QuitXBMCtoDesktop ] ; then
      /usr/local/bin/QuitXBMCtoDesktop "skip"
      killall start_pa
   fi
}

#Recreate PA .asoundrc
pa_enable_asoundrc() {
   if [ -f $HOME/.asoundrc ] ; then rm -f $HOME/.asoundrc ; fi
   echo "pcm.pulse {" > $HOME/.asoundrc
   echo "    type pulse" >> $HOME/.asoundrc
   echo "}" >> $HOME/.asoundrc
   echo "ctl.pulse {" >> $HOME/.asoundrc
   echo "    type pulse" >> $HOME/.asoundrc
   echo "}" >> $HOME/.asoundrc
   echo "pcm.!default {" >> $HOME/.asoundrc
   echo "    type pulse" >> $HOME/.asoundrc
   echo "}" >> $HOME/.asoundrc
   echo "ctl.!default {" >> $HOME/.asoundrc
   echo "    type pulse" >> $HOME/.asoundrc
   echo "}" >> $HOME/.asoundrc   
}

#Disable volumeicon (used by ALSA) and enable volti (used by PA)
pa_enable_volicon() {
   #Fix startup asound bug if exist!
   if [ "`grep '>>' $HOME/.fluxbox/startup`" != "" ] ; then sed -i "s!>>!>!g" $HOME/.fluxbox/startup ; fi
   #Fix default.pa failure due to cork being enabled by default
   if [ "`grep '#load-module module-cork-music-on-phone' /etc/pulse/default.pa`" == "" ] ; then
      sed -i 's/load-module module-cork-music-on-phone/#load-module module-cork-music-on-phone/g' /etc/pulse/default.pa
   fi
}

#Disable autogeneration of .asoundrc using ALSAs asound.state
pa_enable_astate() {
   if [ "`grep '#if \[ -f /var/lib/alsa/asound.state' $HOME/.fluxbox/startup`" == "" ] ; then
      sed -ie '/if \[ -f /,+5 s/^/#/' $HOME/.fluxbox/startup
   fi
}

#Enable pulseaudio autoloading before xbmc
pa_enable_autostart() {
   #Fix alsactl call bug
   if [ "`grep '         alsactl restore' $HOME/.fluxbox/autostart.sh`" != "" ] ; then
      sed -i '/         alsactl restore/d' $HOME/.fluxbox/autostart.sh
   fi
   if [ "`grep '#      while \[ !' $HOME/.fluxbox/autostart.sh`" != "" ] ; then
      sed -i '7,10 s/^#//' $HOME/.fluxbox/autostart.sh
      sed -i 's/alsactl restore/#alsactl restore/g' $HOME/.fluxbox/autostart.sh
      pulseaudio --start
   fi
}

#Remove menu items related to enabling pulseaudio
pa_enable_menuitems() {
   if [ "`grep '#\[exec\]   (Enable PulseAudio)' $HOME/.fluxbox/menu`"  == "" ] ; then
      sed -i 's/\[exec\]   (Enable PulseAudio)/#\[exec\]   (Enable PulseAudio)/g' $HOME/.fluxbox/menu
      sed -i 's/#\[exec\]   (Start PulseAudio)/\[exec\]   (Start PulseAudio)/g' $HOME/.fluxbox/menu
      sed -i 's/#\[exec\]   (Disable PulseAudio)/\[exec\]   (Disable PulseAudio)/g' $HOME/.fluxbox/menu
   fi
}

#Remove old .asoundrc
pa_disable_asoundrc() {
   if [ -f $HOME/.asoundrc ] ; then rm -f $HOME/.asoundrc ; fi
}

#Enable volumeicon (used by ALSA) and disable volti (used by PA)
pa_disable_volicon() {
   #Fix startup asound bug if exist!
   if [ "`grep '>>' $HOME/.fluxbox/startup`" != "" ] ; then sed -i "s!>>!>!g" $HOME/.fluxbox/startup ; fi
   #Fix default.pa failure due to cork being enabled by default
   if [ "`grep '#load-module module-cork-music-on-phone' /etc/pulse/default.pa`" == "" ] ; then
      sed -i 's/load-module module-cork-music-on-phone/#load-module module-cork-music-on-phone/g' /etc/pulse/default.pa
   fi
}

#Enable autogeneration of .asoundrc using ALSAs asound.state
pa_disable_astate() {
   if [ "`grep '#if \[ -f /var/lib/alsa/asound.state' $HOME/.fluxbox/startup`" != "" ] ; then
      sed -ie '/if \[ -f /,+5 s/^#//' $HOME/.fluxbox/startup
   fi
}

#Remove pulseaudio autoloading before xbmc
pa_disable_autostart() {
   #Fix alsactl call bug
   if [ "`grep '         alsactl restore' $HOME/.fluxbox/autostart.sh`" != "" ] ; then
      sed -i '/         alsactl restore/d' $HOME/.fluxbox/autostart.sh
   fi
   if [ "`grep '#      while \[ !' $HOME/.fluxbox/autostart.sh`" == "" ] ; then
      sed -i '7,10 s/^/#/' $HOME/.fluxbox/autostart.sh
      sed -i 's/#alsactl restore/alsactl restore/g' $HOME/.fluxbox/autostart.sh
      pulseaudio -k
      killall pulseaudio
   fi
}

#Remove menu items related to disabling pulseaudio
pa_disable_menuitems() {
   if [ "`grep '#\[exec\]   (Disable PulseAudio)' $HOME/.fluxbox/menu`" == "" ] ; then
      sed -i 's/\[exec\]   (Disable PulseAudio)/#\[exec\]   (Disable PulseAudio)/g' $HOME/.fluxbox/menu
      sed -i 's/\[exec\]   (Start PulseAudio)/#\[exec\]   (Start PulseAudio)/g' $HOME/.fluxbox/menu
      sed -i 's/#\[exec\]   (Enable PulseAudio)/\[exec\]   (Enable PulseAudio)/g' $HOME/.fluxbox/menu
   fi
}

pa_enable_noxbmc() {
   if [ "`grep '#~/.fluxbox/autostart.sh' $HOME/.fluxbox/startup`" != "" ] && [ "`grep '#pulseaudio --start' $HOME/.fluxbox/startup`" != "" ] ; then
      sed -i "s!#pulseaudio --start!pulseaudio --start!g" $HOME/.fluxbox/startup
   fi
}

pa_disable_noxbmc() {
   if [ "`grep '#~/.fluxbox/autostart.sh' $HOME/.fluxbox/startup`" != "" ] && [ "`grep '#pulseaudio --start' $HOME/.fluxbox/startup`" == "" ] ; then
      sed -i "s!pulseaudio --start!#pulseaudio --start!g" $HOME/.fluxbox/startup
   fi
}

pa_disable() {
   killall volumeicon 2>&1>/dev/null
   pa_kill
   pa_disable_asoundrc
   pa_disable_volicon
   pa_disable_astate
   pa_disable_autostart
   pa_disable_menuitems
   pa_disable_noxbmc
   sleep 2
   volumeicon &
   /usr/bin/fluxbox -reconfig 2>&1>/dev/null
}

pa_enable() {
   killall volumeicon 2>&1>/dev/null
   pa_kill
   pa_enable_asoundrc
   pa_enable_volicon
   pa_enable_astate
   pa_enable_autostart
   pa_enable_menuitems
   pa_enable_noxbmc
   sleep 2
   volumeicon &
   /usr/bin/fluxbox -reconfig 2>&1>/dev/null
}

case "$1" in
'enable')
  pa_enable
  ;;
'disable')
  pa_disable
  ;;
*)
  echo "Usage: `basename $0` [enable|disable]"
esac
