#!/bin/bash
#
# Jack init script
#
# Copyright  (C) 2014-2015 Manu Kebab <io.gnu.linux@free.fr>
#
#------------------------------------------------------


PROGNAME=${0##*/}

set -a
source gettext.sh
set +a
export TEXTDOMAIN="${PROGNAME}"
export TEXTDOMAINDIR="/usr/share/locale"
. /usr/bin/gettext.sh

TAB="$(printf '\t')"
TITLE="~ Jack Init ~"

set -x

basic_checks()
{
	echo "I: "
	# Ensure config file is OK
	[ ! -e ~/.config/io-studio.conf ] && cp /etc/io-studio.conf ~/.config/io-studio.conf

	for arg in `cat /etc/io-studio.conf | grep "=\"" | cut -d \= -f 1`
	do
		if ! cat ~/.config/io-studio.conf | grep ${arg}
		then
			cat /etc/io-studio.conf | grep ${arg} >> ~/.config/io-studio.conf
		fi
	done

	[ ! -d ~/.ladish/studios ] && mkdir -p ~/.ladish/studios
	[ ! -e ~/.ladish/studios/DefaultAlsa.xml ] && cp /etc/skel/.ladish/studios/DefaultAlsa.xml ~/.ladish/studios/
}


parse_conf()
{
	# Parse default conf
	. /etc/io-studio.conf

	# Parse user conf
	[ -e ~/.config/io-studio.conf ] && . ~/.config/io-studio.conf
}


soundserver_check()
{
	if [ "${SOUNDSERVER}" = "Alsa" ]
	then
		echo "I: Sound server set to Alsa... exit"
		jack_configure --set-alsa
		exit 0
	elif [ "${SOUNDSERVER}" = "PulseAudio" ]
	then
		echo "I:Sound server set to PulseAudio... exit "
		jack_configure --set-pulseaudio
		pulseaudio --start
		exit 0
	else
		echo "I: Sound server set to Jack... let's go"
		init_Jack
	fi
}


init_Jack()
{
	# Check for first run...
	if [ ! -d ~/.config/jack ]
	then
		jack_control ds alsa
		jack_control dps rate ${RATE}
		jack_control dps period ${PERIOD}
		jack_control dps nperiods ${NPERIOD}
		jack_control ips audioadapter device "hw:0"
		jack_control ips audioadapter rate ${RATE}
		jack_control ips audioadapter periodsize ${PERIOD}
		jack_control ips audioadapter nperiods ${NPERIOD}
		jack_control eps realtime-priority 95
	fi
	#jack_control status | grep stopped && jack_control start
	#sleep 1

	# Check if JACK was configured and if the soundcard is present to launch jack_quickstart
	echo "Check if JACK was configured and if the soundcard is present to launch jack_quickstart"
	CONFIG_HW=$(cat ~/.ladish/studios/${STUDIO}.xml | grep device -m 1 | awk '{print $2}' | cut -d '<' -f1 | cut -d ':' -f2)
	_SOUNDCARD=$(echo "${SOUNDCARD}" | cut -d : -f2 | sed -e 's/^[ \t]*//g')

	if [ -z "${CONFIG_HW}" ] || [ -z "${_SOUNDCARD}" ]
	then
		#No soundcard configured
		echo "I: No soundcard configured.. reset conf and launch jack_configure"
		reset_conf
		jack_configure &
	elif cat /proc/asound/cards | grep "\[" | awk '{print $2}'| grep "${CONFIG_HW}"
	then
		if cat /proc/asound/cards | grep "\[" | grep "${_SOUNDCARD}"
		then
			#Same hardware setup, start jack
			echo "I: Same hardware setup, launch jack_quickstart"
			sed -i 's@>hw\:.*@>hw\:'"${HW_ID}"'<\/parameter>@g' ~/.ladish/studios/*.xml
			jack_quickstart -s
		fi
	else
		#Diferent hardware setup, reset parameters and launch jack_configure
		echo "I: Diferent hardware setup, reset parameters and launch jack_configure"
		reset_conf
		jack_configure &
	fi
}


reset_conf()
{
	RATE="48000"
	ALTERNATE_RATE="44100"
	PERIOD="1024"
	NPERIOD="3"
	PORTMAX="1024"
	AUTOCONNECT="TRUE"

	[ -z "${STUDIO}" ] && STUDIO="DefaultAlsa"

	grep -qs "HW_ID=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^HW_ID.*@HW_ID=\"\"@g' ~/.config/io-studio.conf \
		|| echo "HW_ID=\"\"" >> ~/.config/io-studio.conf

	grep -qs "SOUNDCARD=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^SOUNDCARD.*@SOUNDCARD=\"\"@g' ~/.config/io-studio.conf \
		|| echo "SOUNDCARD=\"\"" >> ~/.config/io-studio.conf

	grep -qs "RATE=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^RATE.*@RATE=\"'"${RATE}"'\"@g' ~/.config/io-studio.conf \
		|| echo "RATE=\"${RATE}\"" >> ~/.config/io-studio.conf

	grep -qs "PERIOD=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^PERIOD.*@PERIOD=\"'"${PERIOD}"'\"@g' ~/.config/io-studio.conf \
		|| echo "PERIOD=\"${PERIOD}\"" >> ~/.config/io-studio.conf

	grep -qs "NPERIOD=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^NPERIOD.*@NPERIOD=\"'"${NPERIOD}"'\"@g' ~/.config/io-studio.conf \
		|| echo "NPERIOD=\"${NPERIOD}\"" >> ~/.config/io-studio.conf

	grep -qs "PORTMAX=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^PORTMAX.*@PORTMAX=\"'"${PORTMAX}"'\"@g' ~/.config/io-studio.conf \
		|| echo "PORTMAX=\"${PORTMAX}\"" >> ~/.config/io-studio.conf

	grep -qs "AUTOCONNECT=" ~/.config/io-studio.conf \
		&& sed -i -e 's@^AUTOCONNECT.*@AUTOCONNECT=\"'"${AUTOCONNECT}"'\"@g' ~/.config/io-studio.conf \
		|| echo "AUTOCONNECT=\"${AUTOCONNECT}\"" >> ~/.config/io-studio.conf

	[ -e ~/.config/pulse/daemon.conf ] && \
		sed -i -r -e 's@.*default-sample-rate.*@default-sample-rate = '"${RATE}"'@g' \
			-e 's@.*alternate-sample-rate.*@alternate-sample-rate = '"${ALTERNATE_RATE}"'@g' \
		~/.config/pulse/daemon.conf

	[ -e ~/.ladish/studios/"${STUDIO}".xml ] && \
		sed -i -r -e 's@rate">.*@rate">'"${RATE}"'</parameter>@g' \
			-e 's@period">.*@period">'"${PERIOD}"'</parameter>@g' \
			-e 's@periodsize">.*@periodsize">'"${PERIOD}"'</parameter>@g' \
			-e 's@nperiods">.*@nperiods">'"${NPERIOD}"'</parameter>@g' \
			-e 's@port-max">.*@port-max">'"${PORTMAX}"'</parameter>@g' \
		~/.ladish/studios/"${STUDIO}".xml
}


basic_checks
parse_conf
soundserver_check


exit 0
