#!/sbin/sh
# (c) 2017-2018, VR25 @ xda-developersr15
# License: GPL v3+



# detect whether in boot mode
ps | grep zygote | grep -v grep >/dev/null && BOOTMODE=true || BOOTMODE=false
$BOOTMODE || ps -A 2>/dev/null | grep zygote | grep -v grep >/dev/null && BOOTMODE=true
$BOOTMODE || id | grep -q 'uid=0' || BOOTMODE=true

# exit if running in boot mode
if $BOOTMODE; then
	echo -e "\nI saw what you did there... :)"
	echo "- Bad idea!"
	echo -e "- This is meant to be used in recovery mode only.\n"
	exit 1
fi

# Default permissions
umask 022



is_mounted() { mountpoint -q "$1"; }

mount_image() {
  e2fsck -fy $IMG &>/dev/null
  if [ ! -d "$2" ]; then
    mount -o remount,rw /
    mkdir -p "$2"
  fi
  if (! is_mounted $2); then
    loopDevice=
    for LOOP in 0 1 2 3 4 5 6 7; do
      if (! is_mounted $2); then
        loopDevice=/dev/block/loop$LOOP
        [ -f "$loopDevice" ] || mknod $loopDevice b 7 $LOOP 2>/dev/null
        losetup $loopDevice $1
        if [ "$?" -eq "0" ]; then
          mount -t ext4 -o loop $loopDevice $2
          is_mounted $2 || /system/bin/toolbox mount -t ext4 -o loop $loopDevice $2
          is_mounted $2 || /system/bin/toybox mount -t ext4 -o loop $loopDevice $2
        fi
        is_mounted $2 && break
      fi
    done
  fi
  if ! is_mounted $mountPath; then
    echo -e "\n(!) $IMG mount failed... abort\n"
    exit 1
  fi
}



actions() {
	echo
	cat <<EOD
e) 启动/禁用模块
l) 列出已安装的模块
u) 卸载模块、
By:毛线没有团团（汉化）
---
x. Exit
EOD
	read Input
	echo
}

exit_or_not() {
	echo -e "\n是否返回主页? (Y:是/N:否)"
	read Ans
	echo $Ans | grep -iq n && echo && exxit || opts
}

ls_mount_path() { ls -1 $mountPath | grep -v 'lost+found'; }


toggle() {
	echo "<Toggle $1>" 
	: > $tmpf
	: > $tmpf2
	Input=0
	
	for mod in $(ls_mount_path); do
		if $auto_mount; then
			[ -f "$mod/$2" ] && echo "$mod (ON)" >> $tmpf \
				|| echo "$mod (OFF)" >> $tmpf
		else
			[ -f "$mod/$2" ] && echo "$mod (OFF)" >> $tmpf \
				|| echo "$mod (ON)" >> $tmpf
		fi
	done
	
	echo
	cat $tmpf
	echo
	
	echo "输入模块前几个字母"
	echo "例如Umaru 输入Uma即可"
	echo "然后敲两次回车、CTRL+C退出"

	until [ -z "$Input" ]; do
		read Input
		if [ -n "$Input" ]; then
			grep "$Input" $tmpf | grep -q '(ON)' && \
				echo "$3 $(grep "$Input" $tmpf | grep '(ON)')/$2" >> $tmpf2
			grep "$Input" $tmpf | grep -q '(OFF)' && \
				echo "$4 $(grep "$Input" $tmpf | grep '(OFF)')/$2" >> $tmpf2
		fi
	done
	
	cat $tmpf2 | sed 's/ (ON)//' | sed 's/ (OFF)//' > $tmpf
	
	if grep -Eq '[0-9]|[a-z]|[A-Z]' $tmpf; then
		. $tmpf
		echo "操作成功(^_^)ノ(s):"
		
		grep -q '(ON)' $tmpf2 && cat $tmpf2 \
			| sed 's/(ON)/(ON) --> (OFF)/' \
			| sed "s/$3 //" | sed "s/$4 //" | sed "s/\/$2//"
		grep -q '(OFF)' $tmpf2 && cat $tmpf2 \
			| sed 's/(OFF)/(OFF) --> (ON)/' \
			| sed "s/$3 //" | sed "s/$4 //" | sed "s/\/$2//"
	
	else
		echo "(≥﹏≤) 操作已中止：无效的输入"
	fi
}


enable_disable_mods() { auto_mount=false; toggle "模块 开/关" disable touch rm; }

exxit() {
	cd $tmpDir
	umount $mountPath
	losetup -d $loopDevice
	rmdir $mountPath
	[ "$1" != "1" ] && exec echo -e "ヾ(￣▽￣)拜拜~.\n" || exit 1
}

list_mods() {
	echo -e "<已安装模块列表>\n"
	ls_mount_path
}


opts() {
	echo -e "\n选择一个选项..."
	actions

	case "$Input" in
		e ) enable_disable_mods;;
		l ) list_mods;;
		u ) rm_mods;;
		x ) exxit;;
		* ) opts;;
	esac
	
	exit_or_not
}


rm_mods() { 
	: > $tmpf
	: > $tmpf2
	Input=0
	list_mods
	echo "输入模块前几个字母"
	echo "例如Umaru 输入Uma即可"
	echo "然后敲两次回车、CTRL+C退出"

	until [ -z "$Input" ]; do
		read Input
		[ -n "$Input" ] && ls_mount_path | grep "$Input" \
			| sed 's/^/rm -rf /' >> $tmpf \
			&& ls_mount_path | grep "$Input" >> $tmpf2
	done

	if grep -Eq '[0-9]|[a-z]|[A-Z]' $tmpf; then
		. $tmpf
		echo "移除模块(s):"
		cat $tmpf2
	else
		echo "(≥﹏≤) 操作已中止：无效的输入"
	fi
}



tmpDir=/dev/mm_tmp
tmpf=$tmpDir/tmpf
tmpf2=$tmpDir/tmpf2
mountPath=/magisk

mount /data 2>/dev/null
mount /cache 2>/dev/null

[ -d /data/adb/magisk ] && IMG=/data/adb/magisk.img || IMG=/data/magisk.img

if [ ! -d /data/adb/magisk ] && [ ! -d /data/magisk ]; then
	echo -e "\n(!) No Magisk installation found or installed version is not supported\n"
	exit 1
fi

mkdir -p $tmpDir 2>/dev/null
mount_image $IMG $mountPath
cd $mountPath

echo -e "\nMM管理器"
echo "- VR25 @ xda-developersr15 (By:毛线没有团团)"
opts
