rclone-mount-magisk/system/bin/rclone
Avinash Reddy 2d61038266 Updated to v1.14
Read CHANGELOG.md for details.

Co-authored-by: Zackptg5 <5107713+Zackptg5@users.noreply.github.com>
2021-05-07 12:27:33 +05:30

130 lines
3.8 KiB
Bash
Executable file

#!/system/bin/sh
# Module directory, DO NOT TOUCH THIS!
MODDIR=${MODDIR:-$(magisk --path)/.magisk/modules/rclone.mount}
echo "Using 'rclone' binary: ${MODDIR}/rclone"
USER_CONFDIR=/sdcard/.rclone
USER_CONF=${USER_CONFDIR}/rclone.conf
CONFIGFILE=${MODDIR}/.config/rclone/rclone.conf
LOGFILE=${USER_CONFDIR}/rclone.log
LOGLEVEL=NOTICE
DATA_MEDIA=/data/media/0
RUNTIME_R=/mnt/runtime/read
RUNTIME_W=/mnt/runtime/write
RUNTIME_D=/mnt/runtime/default
BINDPOINT_R=${RUNTIME_R}/emulated/0/Cloud
BINDPOINT_W=${RUNTIME_W}/emulated/0/Cloud
BINDPOINT_D=${RUNTIME_D}/emulated/0/Cloud
SD_BINDPOINT=${BINDPOINT_D}
CLOUDROOTMOUNTPOINT=/mnt/cloud
SCRIPTPID=$$
export INTERACTIVE=1
custom_params () {
PARAMS="DISABLE BINDSD BINDPOINT"
BAD_SYNTAX="(^\s*#|^\s*$|^\s*[a-z_][^[:space:]]*=[^;&\(\`]*$)"
if [[ -e $USER_CONFDIR/.$remote.param ]]; then
echo "Found .$remote.param"
if ! [[ $(egrep -q -iv "$BAD_SYNTAX" $USER_CONFDIR/.$remote.param) ]]; then
echo "loading .$remote.param"
for PARAM in ${PARAMS[@]}; do
while read -r VAR; do
if [[ "$(echo "${VAR}" |grep -w "$PARAM")" ]]; then
echo "Importing ${VAR}"
eval $(echo "${VAR}" |cut -d ' ' -f 1)
fi
done < $USER_CONFDIR/.$remote.param
done
else
echo ".$remote.param contains bad syntax"
fi
fi
}
config () {
if [[ ! -d ${USER_CONFDIR} ]]; then
mkdir ${USER_CONFDIR}
fi
if [[ -e ${USER_CONFDIR}/rclone.conf ]]; then
cp ${USER_CONFDIR}/rclone.conf ${MODDIR}/.config/rclone/rclone.conf
fi
${MODDIR}/rclone config && cp ${MODDIR}/.config/rclone/rclone.conf ${USER_CONFDIR}/rclone.conf && echo && ${MODDIR}/rclone-wrapper.sh remount
}
help () {
$MODDIR/rclone help
echo
echo 'Wrapper Commands:'
echo ' disable Disable a specified remote which exist in rclone.conf.'
echo ' remount Remount the remotes inside rclone.conf except disabled.'
echo ' unmount Kill rclone & unmount all remotes.'
}
disable () {
echo "disabling remote ${2}"
touch ${USER_CONFDIR}/.${2}.disable
}
unmount () {
echo "Killing & Unmounting Remotes...."
echo
kill $(pgrep -f rclone| grep -v ${SCRIPTPID}) >> /dev/null 2>&1
sleep 1
umount -lf ${CLOUDROOTMOUNTPOINT}/* >> /dev/null 2>&1
umount -lf ${CLOUDROOTMOUNTPOINT} >> /dev/null 2>&1
${MODDIR}/rclone purge ${CLOUDROOTMOUNTPOINT} >> /dev/null 2>&1
}
sd_unbind_func () {
if [[ -z ${BINDPOINT} ]]; then
UNBINDPOINT=${BINDPOINT_DEF}/${remote}
su -M -c umount -lf ${UNBINDPOINT} >> /dev/null 2>&1
UNBINDPOINT=${BINDPOINT_R}/${remote}
su -M -c umount -lf ${UNBINDPOINT} >> /dev/null 2>&1
UNBINDPOINT=${BINDPOINT_W}/${remote}
su -M -c umount -lf ${UNBINDPOINT} >> /dev/null 2>&1
else
USER_BINDPOINT=${BINDPOINT}
UNBINDPOINT=${RUNTIME_D}/emulated/0/${USER_BINDPOINT}
su -M -c umount -lf ${UNBINDPOINT} >> /dev/null 2>&1
UNBINDPOINT=${RUNTIME_R}/emulated/0/${USER_BINDPOINT}
su -M -c umount -lf ${UNBINDPOINT} >> /dev/null 2>&1
UNBINDPOINT=${RUNTIME_W}/emulated/0/${USER_BINDPOINT}
su -M -c umount -lf ${UNBINDPOINT} >> /dev/null 2>&1
fi
}
sd_unbind () {
${MODDIR}/rclone listremotes --config ${CONFIGFILE} | cut -f1 -d: | while read remote; do
echo
custom_params
sd_unbind_func
done >> /dev/null 2>&1
}
remount () {
sd_unbind
unmount
${MODDIR}/service.sh
}
if [[ ${1} = disable ]]; then
disable
elif [[ ${1} = remount ]]; then
remount
elif [[ ${1} = unmount ]]; then
sd_unbind
unmount
elif [[ ${1} = config ]]; then
config
elif [[ ${1} = help ]]; then
help
elif [[ ${1} = --help ]]; then
help
elif [[ -z ${1} ]]; then
help
else
${MODDIR}/rclone $*
fi