#!/bin/sh
#
# This file is part of OpenMediaVault.
#
# @license   http://www.gnu.org/licenses/gpl.html GPL Version 3
# @author    Volker Theile <volker.theile@openmediavault.org>
# @copyright Copyright (c) 2009-2017 Volker Theile
#
# OpenMediaVault is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# any later version.
#
# OpenMediaVault is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with OpenMediaVault. If not, see <http://www.gnu.org/licenses/>.

set -e

. /etc/default/openmediavault
. /usr/share/openmediavault/scripts/helper-functions

OMV_FORKEDDAAPD_CONFIG=${OMV_FORKEDDAAPD_CONFIG:-"/etc/forked-daapd.conf"}
OMV_FORKEDDAAPD_DEFAULT=${OMV_FORKEDDAAPD_DEFAULT:-"/etc/default/forked-daapd"}
OMV_FORKEDDAAPD_DAEMONOPTS=${OMV_FORKEDDAAPD_DAEMONOPTS:-"-m"}
OMV_FORKEDDAAPD_GENERAL_UID=${OMV_FORKEDDAAPD_GENERAL_UID:-"daapd"}
OMV_FORKEDDAAPD_GENERAL_LOGFILE=${OMV_FORKEDDAAPD_GENERAL_LOGFILE:-"/var/log/forked-daapd.log"}
OMV_FORKEDDAAPD_GENERAL_LOGLEVEL=${OMV_FORKEDDAAPD_GENERAL_LOGLEVEL:-"log"}
OMV_FORKEDDAAPD_GENERAL_DBPATH=${OMV_FORKEDDAAPD_GENERAL_DBPATH:-"/var/cache/forked-daapd/songs3.db"}
OMV_FORKEDDAAPD_LIBRARY_FILESCANDISABLE=${OMV_FORKEDDAAPD_LIBRARY_FILESCANDISABLE:-"false"}
OMV_FORKEDDAAPD_LIBRARY_ITUNESOVERRIDES=${OMV_FORKEDDAAPD_LIBRARY_ITUNESOVERRIDES:-"false"}
OMV_FORKEDDAAPD_AUDIO_NICKNAME=${OMV_FORKEDDAAPD_AUDIO_NICKNAME:-"Computer"}

mkconf() {
	local ipv6

	# Create '/etc/default/forked-daapd' file
	cat <<EOF > ${OMV_FORKEDDAAPD_DEFAULT}
DAEMON_OPTS="${OMV_FORKEDDAAPD_DAEMONOPTS}"
EOF

	ipv6="no"
	if ! omv_is_ipv6_enabled; then
		ipv6="yes"
	fi

	# Create '/etc/forked-daapd.conf' file
	xmlstarlet sel -t -m "//services/daap" \
	  -o "general {" -n \
	  -o "    # Username" -n \
	  -o "    uid = \"${OMV_FORKEDDAAPD_GENERAL_UID}\"" -n \
	  -o "    logfile = \"${OMV_FORKEDDAAPD_GENERAL_LOGFILE}\"" -n \
	  -o "    # Available levels: fatal, log, warning, info, debug, spam" -n \
	  -o "    loglevel = \"${OMV_FORKEDDAAPD_GENERAL_LOGLEVEL}\"" -n \
	  -o "    # Database location" -n \
	  -o "    db_path = \"${OMV_FORKEDDAAPD_GENERAL_DBPATH}\"" -n \
	  -o "    # Admin password for the non-existent web interface" -n \
	  -v "concat('    admin_password = \"',adminpassword,'\"')" -n \
	  -o "    # Enable/disable IPv6" -n \
	  -o "    ipv6 = ${ipv6}" -n \
	  -o "}" -n \
	  -n \
	  -o "# Library configuration" -n \
	  -o "library {" -n \
	  -o "    # Name of the library as displayed by the clients" -n \
	  -o "    # %h: hostname, %v: version" -n \
	  -v "concat('    name = \"',libraryname,'\"')" -n \
	  -o "    # TCP port to listen on. Default port is 3689 (daap)" -n \
	  -v "concat('    port = ',port)" -n \
	  -i "passwordrequired[. = '1']" \
		  -o "    # Password for the library. Optional." -n \
		  -v "concat('    password = \"',password,'\"')" -n \
	  -b \
	  -o "    # Directories to index" -n \
	  -o "    directories = \"" ${OMV_XMLSTARLET_GET_SHAREDFOLDER_PATH} -o "\"" -n \
	  -o "    # Disable startup file scanning" -n \
	  -o "    # When forked-daapd starts it will do an initial file scan of your" -n \
	  -o "    # library (and then watch it for changes). If you are sure your library" -n \
	  -o "    # never changes while forked-daapd is not running, you can disable the" -n \
	  -o "    # initial file scan and save some system ressources. Disabling this scan" -n \
	  -o "    # may lead to forked-daapd's database coming out of sync with the" -n \
	  -o "    # library. If that happens read the instructions in the README on how" -n \
	  -o "    # to trigger a full rescan." -n \
	  -o "    filescan_disable = ${OMV_FORKEDDAAPD_LIBRARY_FILESCANDISABLE}" -n \
	  -o "    # Should iTunes metadata override ours?" -n \
	  -o "    itunes_overrides = ${OMV_FORKEDDAAPD_LIBRARY_ITUNESOVERRIDES}" -n \
	  -o "    # Formats: mp4a, mp4v, mpeg, alac, flac, mpc, ogg, wma, wmal, wmav, aif$" -n \
	  -o "    # Formats that should never be transcoded" -n \
	  -o "#   no_transcode = { \"alac\", \"mp4a\" }" -n \
	  -o "    # Formats that should always be transcoded" -n \
	  -o "#   force_transcode = { \"ogg\", \"flac\" }" -n \
	  -o "}" -n \
	  -n \
	  -o "# Local audio output" -n \
	  -o "#audio {" -n \
	  -o "    # AirTunes name - used in the speaker list in Remote" -n \
      -o "#   nickname = \"${OMV_FORKEDDAAPD_AUDIO_NICKNAME}\"" -n \
	  -o "    # Audio device name for local audio output" -n \
      -o "#   card = \"default\"" -n \
	  -o "#}" -n \
	  -n \
	  -o "# Airport Express device" -n \
	  -o "#apex \"ApEx\" {" -n \
	  -o "    # AirTunes password" -n \
	  -o "#   password = \"s1kr3t\"" -n \
	  -o "#}" \
	  ${OMV_CONFIG_FILE} | xmlstarlet unesc > ${OMV_FORKEDDAAPD_CONFIG}
}

case "$1" in
	mkconf|*)
		mkconf
		;;
esac
