#!/bin/sh
# Copyright (c) 2000-2013 Synology Inc. All rights reserved.

if [ -z $SYNOPKG_PKGNAME ]; then
	SYNOPKG_PKGNAME=CMS
fi

PACKAGE_DIR="/var/packages/${SYNOPKG_PKGNAME}"
PACKAGE_TARGET="${PACKAGE_DIR}/target"
PKG_APP_PATH="${PACKAGE_DIR}/target/ui"
PKG_INDEXDB_PATH="${PACKAGE_DIR}/target/indexdb"
PKG_TOOLS_DIR="${PACKAGE_DIR}/target/tools"
PKG_SBIN_DIR="${PACKAGE_DIR}/target/sbin"
PKG_TOOLS_SYNOCMSGPO="${PKG_TOOLS_DIR}/synocmsgpo"
APP_PATH="/usr/syno/synoman/webman/3rdparty/$SYNOPKG_PKGNAME"

DSM_INDEX_ADD="/usr/syno/bin/pkgindexer_add"
DSM_INDEX_DEL="/usr/syno/bin/pkgindexer_del"

SYSTEM_WEBAPI_DIR="/usr/syno/synoman/webapi"
PACKAGE_WEBAPI_DIR="${PACKAGE_DIR}/target"
DB_FILE="${PACKAGE_DIR}/target/db/cms_db.sqlite"
DB_LOG_FILE="${PACKAGE_DIR}/target/db/cmslog_db.sqlite"
DB_NC_FILE="${PACKAGE_DIR}/target/db/nc_db.sqlite"
DB_TABLE_CREATE_SQL_FILE="${PACKAGE_DIR}/scripts/create_table.sql"
DB_LOG_TABLE_CREATE_SQL_FILE="${PACKAGE_DIR}/scripts/create_log_table.sql"
DB_MSG_TABLE_CREATE_SQL_FILE="${PACKAGE_DIR}/scripts/create_msg_table.sql"
PACKAGE_API_FILE="SYNO.CMS.lib"
PACKAGE_NOTIFICATION_API_FILE="SYNO.NotificationCenter.lib"
CRON_JOB_CONF="${PACKAGE_DIR}/scripts/CMS.cron"
CRON_JOB_INSTALL_PATH="/etc/cron.d/CMS"

SERVICE_PLUGIN_DIR_IPv4="/usr/local/libexec/net/ipv4_change/"
SERVICE_PLUGIN_DIR_IPv6="/usr/local/libexec/net/ipv6_change/"
SERVICE_PLUGIN_DIR_LINK_UP="/usr/local/libexec/net/if_link_up/"
DSM_PORT_PLUGIN_DIR="/usr/local/libexec/dsm_port_chg/"
UPDATE_CLIENT_CRED_SCRIPT="${PACKAGE_DIR}/scripts/CMSUpdateCred.sh"

CHMOD=/bin/chmod
CHOWN=/bin/chown
FIND=/bin/find
XARGS=/bin/xargs
ECHO=/bin/echo
TOUCH=/bin/touch
SQLITE3=/usr/bin/sqlite3
CP=/bin/cp
RM=/bin/rm

UpdateDBPageSize()
{
	for db in "$DB_LOG_FILE" "$DB_NC_FILE" "$DB_FILE"; do
		if [ ! -f "$db" ]; then
			continue
		fi

		currPageSize="$("$ECHO" "PRAGMA page_size;" | "$SQLITE3" "$db")"
		if [ "$currPageSize" -eq 4096 ]; then
			continue
		fi

		(
			"$ECHO" "PRAGMA page_size = 4096;"
			"$ECHO" "VACUUM;"
		) | "$SQLITE3" "$db"
	done
}

CreateDBTable()
{
	$SQLITE3 ${DB_FILE} < ${DB_TABLE_CREATE_SQL_FILE}
	$SQLITE3 ${DB_LOG_FILE} < ${DB_LOG_TABLE_CREATE_SQL_FILE}
	$SQLITE3 ${DB_NC_FILE} < ${DB_MSG_TABLE_CREATE_SQL_FILE}
	$CHOWN root ${DB_FILE}
	$CHOWN root ${DB_LOG_FILE}
	$CHOWN root ${DB_NC_FILE}
	$CHMOD 600  ${DB_FILE}
	$CHMOD 600  ${DB_LOG_FILE}
	$CHMOD 600  ${DB_NC_FILE}


	# add columns to accomandate more share info
	$ECHO "PRAGMA table_info(share_info);" | $SQLITE3 ${DB_FILE}  | cut -d'|' -f2 | grep -q '^display_vol_name$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE share_info ADD COLUMN display_vol_name TEXT DEFAULT '';" | $SQLITE3 ${DB_FILE}
	fi
	$ECHO "PRAGMA table_info(share_info);" | $SQLITE3 ${DB_FILE}  | cut -d'|' -f2 | grep -q '^extra_info$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE share_info ADD COLUMN extra_info TEXT DEFAULT '';" | $SQLITE3 ${DB_FILE}
	fi

	$ECHO "PRAGMA table_info(app);" | $SQLITE3 ${DB_FILE}  | cut -d'|' -f2 | grep -q '^name_tha$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE app ADD COLUMN name_tha TEXT DEFAULT '';" | $SQLITE3 ${DB_FILE}
	fi
	$ECHO "PRAGMA table_info(package);" | $SQLITE3 ${DB_FILE}  | cut -d'|' -f2 | grep -q '^pkg_desc_tha$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE package ADD COLUMN pkg_desc_tha TEXT DEFAULT '';" | $SQLITE3 ${DB_FILE}
	fi
	$ECHO "PRAGMA table_info(package);" | $SQLITE3 ${DB_FILE}  | cut -d'|' -f2 | grep -q '^pkg_name_tha$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE package ADD COLUMN pkg_name_tha TEXT DEFAULT '';" | $SQLITE3 ${DB_FILE}
	fi

	# disk i18n
	$ECHO "PRAGMA table_info(hdd_info);" | $SQLITE3 ${DB_FILE}  | cut -d'|' -f2 | grep -q '^i18n_name$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE hdd_info ADD COLUMN i18n_name TEXT DEFAULT '';" | $SQLITE3 ${DB_FILE}
	fi

	$ECHO "PRAGMA table_info(log);" | $SQLITE3 ${DB_LOG_FILE}  | cut -d'|' -f2 | grep -q '^tha$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE log ADD COLUMN tha TEXT DEFAULT '';" | $SQLITE3 ${DB_LOG_FILE}
	fi
	$ECHO "PRAGMA table_info(msg);" | $SQLITE3 ${DB_NC_FILE}  | cut -d'|' -f2 | grep -q '^tha$'
	if [ $? -ne 0 ]; then
		$ECHO "ALTER TABLE msg ADD COLUMN tha TEXT DEFAULT '';" | $SQLITE3 ${DB_NC_FILE}
	fi

	UpdateDBPageSize
}

ChmodExistConfig()
{
	$CHMOD 0644 "${PACKAGE_TARGET}/data/unread_notification" >/dev/null 2>&1
	$CHOWN root "${PACKAGE_TARGET}/data/unread_notification" >/dev/null 2>&1
	for currDir in $($ECHO "dsinfo" "packages"); do
		$CHMOD 0755 "${PACKAGE_TARGET}/$currDir" >/dev/null 2>&1
		$CHOWN root "${PACKAGE_TARGET}/$currDir" >/dev/null 2>&1
		$FIND "${PACKAGE_TARGET}/$currDir" -type f | $XARGS $CHMOD 0644 >/dev/null 2>&1
		$FIND "${PACKAGE_TARGET}/$currDir" -type f | $XARGS $CHOWN root >/dev/null 2>&1
		$FIND "${PACKAGE_TARGET}/$currDir" -type d | $XARGS $CHMOD 0755 >/dev/null 2>&1
		$FIND "${PACKAGE_TARGET}/$currDir" -type d | $XARGS $CHOWN root >/dev/null 2>&1
	done

}

InstallCronConfig()
{
	$CP -f "${CRON_JOB_CONF}" "${CRON_JOB_INSTALL_PATH}"
	$CHOWN root ${CRON_JOB_INSTALL_PATH}
	$CHMOD 644 "${CRON_JOB_INSTALL_PATH}"
}

UninstallCronConfig()
{
	if [ -f "${CRON_JOB_INSTALL_PATH}" ]; then
		$RM -f "${CRON_JOB_INSTALL_PATH}"
	fi
}

start()
{
	ChmodExistConfig
	CreateDBTable
	InstallCronConfig
	${UPDATE_CLIENT_CRED_SCRIPT} >/dev/null 2>&1

	${PKG_TOOLS_SYNOCMSGPO} --notifyfetch
}

stop()
{
	UninstallCronConfig
}

case $1 in
	start)
		start
		exit 0
	;;
	stop)
		stop
		exit 0
	;;
	status)
		if [ -e ${APP_PATH} ]; then
			exit 0
		else
			exit 1
		fi
	;;
	killall)
        ;;
	log)
		exit 0
	;;
esac

