#!/bin/bash
#################################################################
#                                                               #
#  Starts the cava data stream and saves it to cava-output.     #
#  It also starts a loop to see if spectrum-equalizer conky     #
#  is still running. If not running, then it terminates cava.   #
#                                                               #
#  It depends on wmctrl                                         #
#                                                               #
#  Scripted by Koentje  (remon@cobrasoft.nl)                    #
#                                                  version 1.8  #
#################################################################

if [ "$1" != "gocava" ]; then
   echo -e "\n\e[31mERROR:\e[m cava-loop can not start outside of conky!\n"
   exit 1
fi

source "./settings.ini"


# Terminate all
terminate() {
  echo -e "$(basename $0) : Cava engine terminated" > /dev/stdout
  killall $(basename $0)
  killall cava
  exit 0
}


# Check if cava and conky are already running, if so then exit script
  icava=$(pgrep -lx cava)
  iconky=$(wmctrl -l | grep 'conky-spectrum-equalizer' | awk '{print $NF}')
  if [ "$icava" != "" ] && [ "$iconky" != "" ]; then
    # Exit this script because both are already runnung!
    exit 1
  elif [ "$icava" != "" ] && [ "$iconky" = "" ]; then
    # Terminate cava engine because spectrum conky is not running!
    terminate
  fi


# Set loop to check if spectrum conky is still running
# If not then kill cava engine and exit script
function conky_active () {
  sleep 5
  iconky=$(wmctrl -l | grep 'conky-spectrum-equalizer')
  if [ "$iconky" = "" ]; then
    terminate
  fi
  conky_active
}
conky_active &


# Check cava-config number of bars and change that number in the spectrum configs
  cavabars=$(grep 'bars = ' "./cava-config" | awk -F '= ' '{print $2}')
  while read -r file
  do
      luabars=$(grep 'bars=' "./spectrum-configs/$file" | awk '{print $1}' | awk -F '=' '{print $2}')
      if ! [ "$cavabars" = "$luabars" ]; then
        echo "$(basename $0) : Changing bar numbers in Spectrum config '$file' to $cavabars" > /dev/stdout
        sed -i "/bars=$luabars/c\bars=$cavabars                              -- nr of bars must be set in cava-config!!! (needs a restart of conky)" "./spectrum-configs/$file"
      fi
  done< <(ls -1 ./spectrum-configs)


# Saves last line from cava data stream to tmp file
  echo "$(basename $0) : Cava engine started" > /dev/stdout
  echo "$(basename $0) : Output to $cavaout" > /dev/stdout
  while read -r  line
  do
     echo "$line" > "$cavaout"
  done< <(cava -p ./cava-config)
  terminate

exit 0
