#!/bin/sh
PRIVATE_LOCATION="/var/packages/CardDAVServer/target"
CAL_PID="/var/packages/CardDAVServer/target/var/run/caldavd.pid"
CALENDAR_MODULES="calendarserver contrib twext twistedcaldav txdav"
CALENDAR_TWISTED_PLUGIN="caldav.py kqueuereactor.py"
PYTHON_MODULE_PATH="/usr/local/lib/python2.7/site-packages"
PKG_INDEXDB_PATH="${PRIVATE_LOCATION}/indexdb"
PKG_APP_PATH="${PRIVATE_LOCATION}/app"
DSM_INDEX_ADD="/usr/syno/bin/pkgindexer_add"
DSM_INDEX_DEL="/usr/syno/bin/pkgindexer_del"
DSM_VERSION=${SYNOPKG_DSM_VERSION_MAJOR}${SYNOPKG_DSM_VERSION_MINOR}
PYTHON_PATH="/usr/bin/python"

stop_package()
{
	# remove index and help entry
	${DSM_INDEX_DEL} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
	${DSM_INDEX_DEL} ${PKG_APP_PATH}/helptoc.conf ${PKG_INDEXDB_PATH}/helpindexdb
        ${PRIVATE_LOCATION}/tools/calendarserver_start_stop.sh stop

        if [ "${DSM_VERSION}" = "50" ]; then
                #remove libpam_misc
                rm -f /usr/lib/libpam_misc.so*
                PYTHON_MODULE_PATH="/usr/local/lib/python2.7/site-packages/"
        fi
        for module in $CALENDAR_MODULES; do
                rm -rf ${PYTHON_MODULE_PATH}/$module
        done
        for plugin in $CALENDAR_TWISTED_PLUGIN; do
                rm -rf ${PYTHON_MODULE_PATH}/twisted/plugins/$plugin
                rm -rf ${PYTHON_MODULE_PATH}/twisted/plugins/"${plugin}c"
        done


        rm -f /usr/bin/twistd
        rm -f /usr/local/etc/logrotate.d/calendarserver
        rm -f /etc/pam.d/caldav
        rm -f /usr/local/libexec/dirsvs_leave/synocarddav_dirsvs_hook.sh
        rm -f /usr/local/libexec/dirsvs_join/synocarddav_dirsvs_hook.sh
        exit 0
}
start_package()
{
        #deal with 5.0 libpam_misc.so
        if [ "${DSM_VERSION}" = "50" ]; then
                ln -sf ${PRIVATE_LOCATION}/libpam_misc/libpam_misc.so.0.82.0 /usr/lib/libpam_misc.so.0.82.0
                ln -sf /usr/lib/libpam_misc.so.0.82.0 /usr/lib/libpam_misc.so
                ln -sf /usr/lib/libpam_misc.so.0.82.0 /usr/lib/libpam_misc.so.0
                ln -sf /var/packages/Python/target/usr/local/bin/twistd /usr/bin/twistd
                PYTHON_MODULE_PATH="/usr/local/lib/python2.7/site-packages"
        else
                ln -sf /var/packages/PythonModule/target/usr/bin/twistd /usr/bin/twistd
        fi
        for module in $CALENDAR_MODULES; do
                ln -sf ${PRIVATE_LOCATION}/usr/lib/python2.7/site-packages/${module} ${PYTHON_MODULE_PATH}
        done
        
        ln -sf ${PRIVATE_LOCATION}/usr/lib/python2.7/site-packages/twisted/plugins/* ${PYTHON_MODULE_PATH}/twisted/plugins/
        ln -sf ${PRIVATE_LOCATION}/etc/caldav.pam /etc/pam.d/caldav
        ln -sf ${PRIVATE_LOCATION}/etc/calendarserver.logrotate /usr/local/etc/logrotate.d/calendarserver

        #bootstrap database
        if [ `psql --username=postgres -l | grep caldav | wc -l` -eq 0 ]; then
               ${PYTHON_PATH} ${PRIVATE_LOCATION}/usr/bin/calendarserver_bootstrap_database
        fi
        ${PRIVATE_LOCATION}/tools/calendarserver_start_stop.sh start

        if [ ! -d /usr/local/libexec/dirsvs_leave ]; then
                mkdir -p /usr/local/libexec/dirsvs_leave
        fi
        if [ ! -d /usr/local/libexec/dirsvs_join ]; then
                mkdir -p /usr/local/libexec/dirsvs_join
        fi

        ln -sf ${PRIVATE_LOCATION}/tools/synocarddav_dirsvs_hook.sh /usr/local/libexec/dirsvs_leave
        ln -sf ${PRIVATE_LOCATION}/tools/synocarddav_dirsvs_hook.sh /usr/local/libexec/dirsvs_join

	# index help and add help to dsm
	${DSM_INDEX_ADD} ${PKG_APP_PATH}/index.conf ${PKG_INDEXDB_PATH}/appindexdb
	${DSM_INDEX_ADD} ${PKG_APP_PATH}/helptoc.conf ${PKG_INDEXDB_PATH}/helpindexdb
        exit 0
}

case $1 in
        start)
                start_package
                exit 0
                ;;
        stop)
                stop_package
                exit 0
                ;;
        status)
                if [ -f ${CAL_PID} ]; then
                        exit 0
                else
                        exit 1
                fi
                ;;
        log)
                exit 0
                ;;
esac

