#!/sbin/sh
# Mm管理器 2019.4.4 乐魂a汉化
# Copyright (C) 2017-2019, VR25 @ xda-developers
# License: GPLv3+


main() {

tmpDir=/dev/_mm
tmpf=$tmpDir/tmpf
tmpf2=$tmpDir/tmpf2
mountPath=/_magisk
img=/data/adb/magisk.img
[ -f $img ] || img=/data/adb/modules

echo -e "\nMm管理器 2019.4.4 乐魂a汉化
Copyright (C) 2017-2019, VR25 @ xda-developers
License: GPLv3+\n"

trap 'exxit $?' EXIT

if is_mounted /storage/emulated; then
  echo -e "(!) 这仅用于恢复环境!\n"
  exit 1
fi

umask 022
set -euo pipefail

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

if [ ! -d /data/adb/magisk ]; then
  echo -e "(!) 找不到Magisk，或者安装的版本不受支持.\n"
  exit 1
fi

mkdir -p $tmpDir
mount -o remount,rw /
mkdir -p $mountPath

[ -f $img ] && e2fsck -fy $img 2>/dev/null 1>&2 || :
mount -o rw $img $mountPath
cd $mountPath
options
}


options() {

  local opt=""

  while :; do
    echo -n "##########################
##########################
菜单
  L 列出已安装的模块
  C 仅启用核心功能
  M 切换模块里的档案挂载方式
  D 启用/禁用模块
  R 删除模块
##########################
q) 退出
##########################

?) "
    read opt

    echo
    case $opt in
      m) toggle_mnt;;
      d) toggle_disable;;
      l) echo -e "已安装的模块\n"; ls_mods;;
      r) toggle_remove;;
      q) exit 0;;
      c) toggle_com;;
    esac
    break
  done

  echo -en "\n 按 <enter> 继续 或输入q退出... "
  read opt
  [ -z "$opt" ] || exit 0
  echo
  options
}


is_mounted() { grep -q "$1" /proc/mounts; }

ls_mods() { ls -1 $mountPath | grep -v 'lost+found' || echo "<未安裝任何模块>"; }


exxit() {
  set +euo pipefail
  cd /
  umount -f $mountPath
  rmdir $mountPath
  mount -o remount,ro /
  rm -rf $tmpDir
  [ ${1:-0} -eq 0 ] && { echo -e "\n拜拜\n"; exit 0; } || exit $1
} 2>/dev/null


toggle() {
  local input="" mod=""
  local file="$1" present="$2" absent="$3"
  for mod in $(ls_mods | grep -v \<未安裝任何模块\> || :); do
    echo -n "$mod ["
    [ -f $mountPath/$mod/$file ] && echo "$present]" || echo "$absent]"
  done

  echo -en "\nInput pattern(s) (e.g., a dot for all, acc, or fbind|xpo|viper): "
  read input
  echo

  for mod in $(ls_mods | grep -v \<None\> || :); do
    if echo $mod | grep -Eq "${input:-_noMatch_}"; then
      [ -f $mountPath/$mod/$file ] && { rm $mountPath/$mod/$file; echo "$mod [$absent]"; } \
        || { touch $mountPath/$mod/$file; echo "$mod [$present]"; }
    fi
  done
}


toggle_mnt() {
  echo -e "切换模块里的档案挂载模式\n"
  [ -f $img ] && { toggle auto_mount 开 关 || :; } \
    || toggle skip_mount 关 开
}


toggle_disable() {
  echo -e "模块 开/关\n"
  toggle disable 关 开
}


toggle_remove() {
  echo -e "标记[X]的模块将在下次开机时移除\n"
  toggle remove X " "
}


toggle_com() {
  if [ -f /cache/.disable_magisk ] || [ -f /data/cache/.disable_magisk ]; then
    rm /data/cache/.disable_magisk /cache/.disable_magisk 2>/dev/null || :
    echo "(i) Magisk核心模式 [关闭]"
  else
    touch /data/cache/.disable_magisk /cache/.disable_magisk 2>/dev/null || :
    echo "(i) Magisk核心模式 [开启]"
  fi
}


main
