#!/bin/sh
#
# RoarAudio PlayList Daemon initscript
#
# Copyright (c) 2008-2010 Philipp 'ph3-der-loewe' Schafft <lion@lion.leolix.org>
# Copyright (c)      2007 Javier Fernandez-Sanguino <jfs@debian.org>
#
# This is free software; you may 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,
# or (at your option) any later version.
#
# This 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 with
# the Debian operating system, in /usr/share/common-licenses/GPL;  if
# not, write to the Free Software Foundation, Inc., 59 Temple Place,
# Suite 330, Boston, MA 02111-1307 USA

### BEGIN INIT INFO
# Provides:          roarplaylistd
# Required-Start:    $network $local_fs $remote_fs
# Required-Stop:     $network $local_fs $remote_fs
# Should-Start:      roaraudio-server
# Should-Stop:       roaraudio-server
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: PlayList mangement daemon for RoarAudio
# Description:       RoarAudio PlayList Daemon is a daemon managing playlist
#                    for the user and playback of those.
#                    It uses a RoarAudio server as audio backend.
### END INIT INFO

set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin
DAEMON=/usr/bin/rpld
NAME=rpld
DESC="RoarAudio PlayList Daemon"

PIDFILEDIR=/var/run/$NAME
PIDFILE=$PIDFILEDIR/`basename $DAEMON`.pid
SCRIPTNAME=/etc/init.d/$NAME

RPLD_RESTORE=true

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0;

# Read config file if it is present.
if [ -r /etc/default/$NAME ]
then
    . /etc/default/$NAME
fi

[ "$RPLD" = 'YES' ] || exit 0;

RPLD_OPTS="--daemon $RPLD_OPTS"

[ "$PIDFILE"          = '' ] || RPLD_OPTS="--pidfile $PIDFILE $RPLD_OPTS"
[ "$ROARAUDIO_SERVER" = '' ] || RPLD_OPTS="--server $ROARAUDIO_SERVER $RPLD_OPTS"

[ "$RPLD_STORE_LOCATION" = '' ] || RPLD_OPTS="--store-path $RPLD_STORE_LOCATION $RPLD_OPTS"

[ "$RPLD_PLAY"        = '' ] || RPLD_OPTS="--play $RPLD_OPTS"

[ "$RPLD_USER"        = '' ] || RPLD_OPTS="--user $RPLD_USER $RPLD_OPTS"
[ "$RPLD_GROUP"       = '' ] || RPLD_OPTS="--group $RPLD_GROUP $RPLD_OPTS"

if $RPLD_RESTORE
then
 RPLD_OPTS="$RPLD_OPTS --auto-restore"
else
 RPLD_OPTS="$RPLD_OPTS --no-restore"
fi

if $RPLD_STORE
then
 RPLD_OPTS="$RPLD_OPTS --store"
else
 RPLD_OPTS="$RPLD_OPTS --no-store"
fi

case "$RPLD_AF" in
  UNIX|unix)
   RPLD_OPTS="--unix $RPLD_OPTS"
   [ "$RPLD_SOCKET" = '' ]  || RPLD_OPTS="--bind $RPLD_SOCKET $RPLD_OPTS"
  ;;
  TCP|tcp)
   RPLD_OPTS="--tcp $RPLD_OPTS"
   [ "$RPLD_PORT"   = '' ]  || RPLD_OPTS="--port $RPLD_PORT $RPLD_OPTS"
   [ "$RPLD_HOST"   = '' ]  || RPLD_OPTS="--bind $RPLD_HOST $RPLD_OPTS"
  ;;
  DECNET|DECnet|decnet)
   RPLD_OPTS="--decnet $RPLD_OPTS"
   [ "$RPLD_PORT"   = '' ]  || RPLD_OPTS="--port $RPLD_PORT $RPLD_OPTS"
   [ "$RPLD_HOST"   = '' ]  || RPLD_OPTS="--bind $RPLD_HOST $RPLD_OPTS"
  ;;
esac

case "$1" in
  start)
	echo -n "Starting $DESC: $NAME"
	# Set up dir to use for pidfile
	mkdir -p "$PIDFILEDIR"
	chown $RPLD_USER:$RPLD_GROUP "$PIDFILEDIR"
	# Set up dir for store
	mkdir -p "$RPLD_STORE_LOCATION"
	chown $RPLD_SOCK_USER:$RPLD_SOCK_GROUP "$RPLD_STORE_LOCATION"
	# Check if daemon is already running:
	set +e
	if [ "$PIDFILE" != '' ]
	then
	 _pid=`cat $PIDFILE 2> /dev/null`
	 if [ "$_pid" != '' ]
	 then
	  if kill -0 $_pid 2> /dev/null
	  then
	   echo "."
	   exit 0;
	  fi
	 fi
	fi
	set -e
	# Start Daemon
	$DAEMON $RPLD_OPTS
	echo "."
	;;
  stop)
	echo -n "Stopping $DESC: $NAME"
	set +e
	if [ "$PIDFILE" = '' ]
	then
	 pkill $NAME
	else
	 _pid=`cat $PIDFILE 2> /dev/null`
	 [ "$_pid" != '' ] && kill -TERM $_pid
	fi
	set -e
	echo "."
	;;
  status)
        echo -n "Status of $DESC: "
        set +e
        if [ "$PIDFILE" != '' ]
        then
            _pid=`cat $PIDFILE 2> /dev/null`
            if [ "$_pid" != '' ]
            then
                kill -0 $_pid 2> /dev/null
                if [ "$?" = '0' ]
                then
                    echo "running."
                    exit 0;
                else
                    echo "dead (stale pid file)."
                    exit 1;
                fi
            else
                echo "not running."
                exit 3;
            fi
        fi
        set -e
        echo "unknown (no pid file configured)."
        exit 4
        ;;
  restart|force-reload)
	$0 stop
	sleep 1
	$0 start
	;;
  *)
	echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
	exit 1
	;;
esac

exit 0
