#!/bin/bash

SCRIPT_VER="2.0"

APP="ruTorrent - Google Drive Upload"
APP_CATEGORY="Torrent Clients and Utilities"
APP_SCOPE="user"
APP_ENABLED="yes"
APP_VER="2.0"
DEPENDS="ruTorrent (Latest)"
SUPPORTED_ON="Ubuntu20.04,Ubuntu22.04,Ubuntu24.04"
LIBRARY="functions4.sh"

if [ "${SUPPORT-}" = '' ]; then
    SUPPORT="https://installers.rapidseedbox.com/scripts/whmcs_client_installers/support"
fi

LOGFILE="/var/log/whmcs_client_installers/${0}.log"
[ ! -d "/var/log/whmcs_client_installers" ] && mkdir -p "/var/log/whmcs_client_installers"

wget -4 -nc -q --no-check-certificate --timeout=20 --tries=5 "${SUPPORT}/${LIBRARY}" >> "${LOGFILE}" 2>&1
if [ ! -f "./${LIBRARY}" ] ; then
    echo "55"
    echo "Error downloading \"${SUPPORT}/${LIBRARY}\"" >> "${LOGFILE}"
    exit 55
fi

# shellcheck source=support/functions4.sh
. "./${LIBRARY}"
SCRIPTENTRY

GDRIVE_PKG="google-drive-ocamlfuse"
GDRIVE_PPA="ppa:alessandro-strada/ppa"

while : ; do

    main_rc=1

    CHECK_APP ; _rc=$?
    if [ ${_rc} -ne 0 ] ; then
        main_rc=${_rc}
        break
    fi

    if ! DPKG_CHECK "${GDRIVE_PKG}" ; then
        ADD_APT_PPA "${GDRIVE_PPA}" || break
        APT_UPDATE || break
        APT_INSTALL "${GDRIVE_PKG}" || break
    fi

    # Create/update Google Drive upload script
    [ -d "${USERHOME}/bin" ] \
        || MKDIR "${USERHOME}/bin"
    cat <<-EOF > "${USERHOME}/bin/upload-to-gdrive.sh"
	#!/bin/bash

	#
	# Name:       upload-to-gdrive.sh
	# Version:    2.0
	#
	# (c) 2017, RapidSeedbox, alexey@rapidseedbox.com

	DEBUG="no"

	LOGFILE="${USERHOME}/log/\$( basename \${0} ).log"
	GDRIVE_BIN="/usr/bin/google-drive-ocamlfuse"
	MOUNT_DIR="${USERHOME}/gdrive"
	RSB_FOLDER="RapidSeedbox"

	[ ! -e "${USERHOME}/log/gdrive" ] && mkdir -p "${USERHOME}/log/gdrive"
	echo -n "\$( date ): \${0} " >> "\${LOGFILE}"
	for s in "\${@}" ; do
	    echo -n "\"\${s}\" " >> "\${LOGFILE}"
	done
	echo "" >> "\${LOGFILE}"

	dir="\$( dirname "\${2}" )"
	[ -n "\${3}" ] && dir="\${3}"
	file="\$( basename "\${2}" )"

	echo "\$( date ): src_dir:  [\${dir}]"  >> "\${LOGFILE}"
	echo "\$( date ): src_file: [\${file}]" >> "\${LOGFILE}"

	if [ ! -x "\${GDRIVE_BIN}" ] ; then
	    echo "\$( date ): \${GDRIVE_BIN} not found" >> "\${LOGFILE}"
	    exit 1
	fi

	[ ! -d "\${MOUNT_DIR}" ] && mkdir -p "\${MOUNT_DIR}"
	if ! mountpoint -q "\${MOUNT_DIR}" ; then
	    echo "\$( date ): mounting Google Drive at \${MOUNT_DIR}" >> "\${LOGFILE}"
	    if ! "\${GDRIVE_BIN}" "\${MOUNT_DIR}" >> "\${LOGFILE}" 2>&1 ; then
	        echo "\$( date ): failed to mount Google Drive; run google-drive-ocamlfuse once as ${USERNAME} to authorize access" >> "\${LOGFILE}"
	        exit 1
	    fi
	fi

	remote_dir="\${MOUNT_DIR}/\${RSB_FOLDER}"
	[ ! -d "\${remote_dir}" ] && mkdir -p "\${remote_dir}"

	echo -n "\$( date ): " >> "${USERHOME}/log/gdrive/\${file}--\${1}--upload.log"
	cp -a "\${dir}/\${file}" "\${remote_dir}/" \
	    >> "${USERHOME}/log/gdrive/\${file}--\${1}--upload.log" 2>&1
	EOF

    CHOWN_DIR "${USERNAME}":"${USERNAME}" "${USERHOME}/bin"
    CHMOD_FILE 0700 "${USERHOME}/bin/upload-to-gdrive.sh"


    # Configure rTorrent
    if [ -e "${USERHOME}/.rtorrent.rc" ] ; then
        if ! grep -e "^method\.set_key\s*=\s*event\.download\.finished,uploadtodrive,\s*\"execute\s*=${USERHOME}/bin/upload-to-gdrive\.sh,NA,\$d\.get_base_path=\"$" "${USERHOME}/.rtorrent.rc" >> "${LOGFILE}" 2>&1 ; then
            echo "method.set_key = event.download.finished,uploadtodrive, \"execute =${USERHOME}/bin/upload-to-gdrive.sh,NA,\$d.get_base_path=\"" >> "${USERHOME}/.rtorrent.rc"
            if RUN_LOG "/usr/sbin/service rtorrent@${USERNAME} status 2>&1" ; then
                SVC_RESTART "rtorrent@${USERNAME}"
            fi
        fi
    fi
   

    main_rc=0
    break

done


SCRIPTEXIT
