#!/sbin/sh
#################
# install 或者customize接口模块配置
#################
umask 022

# 设置全局变量
TMPDIR=/dev/tmp
PERSISTDIR=/sbin/.magisk/mirror/persist

# 创建 TMPDIR 临时文件夹
rm -rf $TMPDIR 2>/dev/null
mkdir -p $TMPDIR

# 在加载util_functions之前显示
ui_print() { echo "$1"; }
require_new_magisk() {
  ui_print "*******************************"
  ui_print " 请安装Magisk v24.0+! "
  ui_print "*******************************"
  exit 1
}

# 判断模块接口是否为install接口
is_legacy_script() {
  unzip -l "$ZIPFILE" install.sh | grep -q install.sh
  return $?
}

# 显示模块信息
print_modname() {
local len
len=`echo -n $MODNAME | wc -c`
len=$((len + 2))
local pounds=`printf "%${len}s" | tr ' ' '*'`  
ui_print "- Powered by Magisk "
ui_print "***************************************"
local until_function=/data/adb/magisk/util_functions.sh
grep -q lite_modules $until_function && ui_print "－ 🌙当前为: Magisk Lite◎$MAGISK_VER_CODE" || ui_print "- ☀当前为: Magisk Official◎$MAGISK_VER_CODE"
if test -n "$(getprop persist.sys.device_name)" ;then
	ui_print "- ●您好！"$(getprop persist.sys.device_name)"！●"
	ui_print "- ●欢迎使用本模块！●"
	get_magisk_lite
	ui_print " "
elif test -n "$(pm list users | cut -d : -f2 )" ;then
	ui_print " "
	ui_print "- ●您好！ $(pm list users | cut -d : -f2 )！●"
	ui_print "- ●欢迎使用本模块！●"
	get_magisk_lite
	ui_print " "
fi

author="`grep_prop author $TMPDIR/module.prop`"
name="`grep_prop name $TMPDIR/module.prop`"
description="`grep_prop description $TMPDIR/module.prop`"
id="`grep_prop id $TMPDIR/module.prop`"
ui_print "- 品牌: `getprop ro.product.brand`"
ui_print "- 代号: `getprop ro.product.device`"
ui_print "- 型号: `getprop ro.product.model`"
ui_print "- 安卓版本: `getprop ro.build.version.release`"
test "`getprop ro.miui.ui.version.name`" != "" && ui_print "- MIUI版本: MIUI `getprop ro.miui.ui.version.name` - `getprop ro.build.version.incremental` "
ui_print "- 运存大小: `free -m|grep "Mem"|awk '{print $2}'`MB  已用:`free -m|grep "Mem"|awk '{print $3}'`MB  剩余:$((`free -m|grep "Mem"|awk '{print $2}'`-`free -m|grep "Mem"|awk '{print $3}'`))MB"
ui_print "- Swap大小: `free -m|grep "Swap"|awk '{print $2}'`MB  已用:`free -m|grep "Swap"|awk '{print $3}'`MB  剩余:`free -m|grep "Swap"|awk '{print $4}'`MB"
ui_print " "
ui_print "- 模块信息"
ui_print "- 名称: $name    "
ui_print "- 作者：$author"
ui_print "- 描述：$description    "
ui_print "- 如果卡开机logo请在rec→高级→文件管理→data→adb→modules "
ui_print "- 删除这个文件夹：$MODID "
ui_print "- 卸载本模块所有操作会复原！"
ui_print "***************************************"
}

##############
# 环境变量
##############

OUTFD=$2
ZIPFILE=$3
mount /data 2>/dev/null

# 加载通用脚本
[ -f /data/adb/magisk/util_functions.sh ] || require_new_magisk
. /data/adb/magisk/util_functions.sh
[ $MAGISK_VER_CODE -gt 24000 ] || require_new_magisk

ui_print "- 准备卡刷zip包"
setup_flashable

ui_print "- 挂载分区"
mount_partitions

# 检测版本和体系结构
api_level_arch_detect

ui_print "- 设置busybox和二进制文件"
$BOOTMODE && boot_actions || recovery_actions

##############
# 准备
##############

# 解压 module.prop 至临时文件夹"
unzip -o "$ZIPFILE" module.prop -d $TMPDIR >&2
[ ! -f $TMPDIR/module.prop ] && abort "!解压 module.prop 文件失败!"

# 设置变量路径
$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules
MODULEROOT=$NVBASE/$MODDIRNAME
MODID=`grep_prop id $TMPDIR/module.prop`
MODPATH=$MODULEROOT/$MODID
MODNAME=`grep_prop name $TMPDIR/module.prop`

ui_print "- 创建 $MODPATH 文件夹"
rm -rf $MODPATH 2>/dev/null
mkdir -p $MODPATH

##########
# 安装
##########

if is_legacy_script; then
  ui_print "- install接口模块"
  ui_print "- 解压 install.sh common/* 文件至临时文件夹"
  unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' 'system/*' -d $TMPDIR >&2
  
  # 解压system文件夹
  unzip -o "$ZIPFILE" 'system/*' -d $MODPATH >&2
  
  # 打印模块信息
  print_modname
  
  ui_print "- 加载 install.sh 安装脚本"
  . $TMPDIR/install.sh
  on_install
  
  ui_print " "
  $SKIPMOUNT && touch $MODPATH/skip_mount && ui_print "- 安装模块后自动挂载"
  
  ui_print "- 复制 module.prop 文件"
  cp -af $TMPDIR/module.prop $MODPATH/module.prop
  
  $PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop && ui_print "- 复制 system.prop 文件"
  
  $POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh && ui_print "- 复制 post-fs-data.sh 脚本"

  $LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh && ui_print "- 复制 service.sh 脚本"
  
  [ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh && ui_print "- 复制 uninstall.sh 脚本"
  
  ui_print "- 设置权限"
  set_permissions
else
  print_modname
  ui_print "- customize接口模块"
  unzip -o "$ZIPFILE" customize.sh -d $TMPDIR >&2
  
  # 判断模块是否自定义安装
  if ! grep -q '^SKIPUNZIP=1$' $TMPDIR/customize.sh 2>/dev/null; then
  ui_print "- 正在释放模块文件"
  unzip -o "$ZIPFILE" -x 'META-INF/*' -d $MODPATH >&2
  # 设置默认权限
  set_perm_recursive $MODPATH 0 0 0755 0644
  fi
  
  ui_print "- 加载 customize.sh 安装脚本" 
  [ -f $MODPATH/customize.sh ] && . $MODPATH/customize.sh
  
fi



# 处理 replace 文件夹
for TARGET in $REPLACE; do
  ui_print "- Replace target: $TARGET"
  mktouch $MODPATH$TARGET/.replace
done

if $BOOTMODE; then
  # 更新Magisk Manager的信息
  mktouch $NVBASE/modules/$MODID/update
  cp -af $MODPATH/module.prop $NVBASE/modules/$MODID/module.prop
fi

# 复制 custom sepolicy 规则
if [ -f $MODPATH/sepolicy.rule -a -e $PERSISTDIR ]; then
  ui_print "- 正在安装 custom sepolicy 规则"
  PERSISTMOD=$PERSISTDIR/magisk/$MODID
  mkdir -p $PERSISTMOD
  cp -af $MODPATH/sepolicy.rule $PERSISTMOD/sepolicy.rule
fi

# 删除无用文件  # $MODPATH/customize.sh可以删除
rm -rf $MODPATH/customize.sh $MODPATH/system/placeholder $MODPATH/.git* 2>/dev/null


##############
# 结束
##############
cd /
$BOOTMODE || recovery_cleanup
rm -rf $TMPDIR
ui_print "- 安装完成，重启生效！"
exit 0