#!/bin/sh
#
# Copyright (C) 2008-2011 by JCF Ploemen <linux@jp.pp.ru>
# released under GPL, version 2 or later

################################################
#                                              #
#  TO CONFIGURE EDIT /etc/default/sabnzbdplus  #
#                                              #
################################################

### BEGIN INIT INFO
# Provides:          sabnzbdplus
# Required-Start:    $local_fs $network $remote_fs
# Required-Stop:     $local_fs $network $remote_fs
# Should-Start:      NetworkManager
# Should-Stop:       NetworkManager
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: SABnzbd+ binary newsgrabber
# Description:       SABnzbd+ is a web-based binary newsgrabber with nzb
#                    support, designed to download files from Usenet.
#                    This script provides that functionality as a system
#                    service, starting the program on boot.
### END INIT INFO

DAEMON=/usr/bin/python
APP_FOLDER=/home/jocke/bin/sabnzbd/
APP_SCRIPT=SABnzbd.py
SETTINGS=/etc/default/sabnzbdplus

([ -x $DAEMON ] && [ -r $SETTINGS ]) || exit 0

DESC="SABnzbd+ binary newsgrabber"
DEFOPTS=" $APP_SCRIPT --daemon"
PID_FILE=/var/run/sabnzbdplus/server.pid
PID_PATH=$(dirname $PID_FILE)
SETTINGS_LOADED=FALSE

# these are only accepted from the settings file
unset USER CONFIG HOST PORT EXTRAOPTS

. /lib/lsb/init-functions

check_retval() {
	if [ $? -eq 0 ]; then
		log_end_msg 0
		return 0
	else
		log_end_msg 1
		exit 1
	fi
}

is_running() {
	# returns 0 when running, 1 otherwise
	PID=`ps aux|grep "$DAEMON $APP_SCRIPT"|grep -v grep|awk '{ print $2 }'`
	echo $PID > $PID_FILE
	start-stop-daemon --status --pidfile $PID_FILE
	RET=$?
	return $RET
}

load_settings() {
	if [ $SETTINGS_LOADED != "TRUE" ]; then
		. $SETTINGS

		[ -z "$USER" ] && {
			log_warning_msg "$DESC: not configured, aborting. See $SETTINGS";
			return 1; }
		[ -z "${USER%:*}" ] && exit 1

		OPTIONS="$DEFOPTS"
		[ -n "$CONFIG" ] && OPTIONS="$OPTIONS --config-file $CONFIG"
		[ -n "$HOST" ] && SERVER="$HOST" || SERVER=
		[ -n "$PORT" ] && SERVER="$SERVER:$PORT"
		[ -n "$SERVER" ] && OPTIONS="$OPTIONS --server $SERVER"
		[ -n "$EXTRAOPTS" ] && OPTIONS="$OPTIONS $EXTRAOPTS"
		SETTINGS_LOADED=TRUE
	fi
	return 0
}

start_sab() {
	load_settings || exit 0
	if ! is_running; then
		log_daemon_msg "Starting $DESC"
		rm -rf "$PID_PATH" || return 1
        	install -d --mode=0755 -o $USER $PID_PATH || return 1
		start-stop-daemon --background -d $APP_FOLDER --chuid $USER --start -m --pidfile $PID_FILE --exec $DAEMON -- $OPTIONS
		check_retval
	else
		log_success_msg "$DESC: already running (pid $PID)"
	fi
}

stop_sab() {
	load_settings || exit 0
	if is_running; then
		log_daemon_msg "Stopping $DESC"
		/sbin/start-stop-daemon --stop --pidfile $PID_FILE --retry 15
		check_retval
	else
		log_success_msg "$DESC: not running"
	fi
}

case "$1" in
	start)
		start_sab
	;;
	stop)
		stop_sab
	;;
	force-reload|restart)
		stop_sab
		start_sab
	;;
	status)
		load_settings || exit 4
		if is_running; then
			log_success_msg "$DESC: running (pid $PID)"
		else
			log_success_msg "$DESC: not running"
			[ -f $PID_FILE ] && exit 1 || exit 3
		fi
	;;
	*)
		log_failure_msg "Usage: $0 {start|stop|restart|force-reload|status}"
		exit 3
	;;
esac

exit 0
