mirror of
https://gitee.com/spark-store-project/spark-store
synced 2026-08-06 10:23:57 +08:00
1. add shell caller ssupdate command support 2. add pre-update system refresh for update center 3. add get-git-email IPC handler and auto-fill email 4. optimize deb submission UI and category handling 5. disable and auto-fill package name/version fields 6. add loading and error states for category list 7. fix category value matching for history data
177 lines
6.4 KiB
Bash
Executable File
177 lines
6.4 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# 显示进度条并执行命令(支持 garma / zenity)
|
||
run_with_progress() {
|
||
local title="$1"
|
||
local text="$2"
|
||
local cmd="$3"
|
||
|
||
# 检测可用的对话框工具
|
||
local tool=""
|
||
if command -v garma &> /dev/null; then
|
||
tool="garma"
|
||
elif command -v zenity &> /dev/null; then
|
||
tool="zenity"
|
||
else
|
||
echo "警告:未找到 garma 或 zenity,无法显示进度条。直接执行命令..." >&2
|
||
eval "$cmd"
|
||
return $?
|
||
fi
|
||
|
||
# 根据工具启动进度条
|
||
local progress_pid
|
||
if [[ "$tool" == "garma" ]]; then
|
||
# garma 的进度条用法(假设 --progress --pulsate 可用)
|
||
garma --progress --pulsate --title="$title" --text="$text" --no-cancel 2>/dev/null &
|
||
progress_pid=$!
|
||
else
|
||
# zenity 进度条 pulsate 模式
|
||
zenity --progress --pulsate --title="$title" --text="$text" --no-cancel 2>/dev/null &
|
||
progress_pid=$!
|
||
fi
|
||
|
||
# 执行实际命令
|
||
eval "$cmd"
|
||
local cmd_exit=$?
|
||
|
||
# 关闭进度条
|
||
kill "$progress_pid" 2>/dev/null
|
||
wait "$progress_pid" 2>/dev/null
|
||
|
||
return $cmd_exit
|
||
}
|
||
|
||
# 1. 检查是否提供了至少一个参数
|
||
if [[ $# -eq 0 ]]; then
|
||
echo "错误:未提供命令参数。"
|
||
echo "用法: $0 [apm|aptss|ssinstall] <子命令> [参数...]"
|
||
exit 1
|
||
fi
|
||
|
||
# 2. 获取第一个参数作为主指令
|
||
command_type="$1"
|
||
|
||
# 3. 根据指令类型分发逻辑
|
||
case "$command_type" in
|
||
"apm")
|
||
# 禁止 apm debug 命令
|
||
if [[ "$2" == "debug" ]]; then
|
||
echo "错误:apm debug 命令已被禁止执行。"
|
||
echo "提示:如需调试,请使用其他方式。"
|
||
exit 1
|
||
fi
|
||
# 禁止 apm ssaudit 命令(已弃用,请使用 apm ssinstall)
|
||
if [[ "$2" == "ssaudit" ]]; then
|
||
echo "错误:apm ssaudit 命令已被弃用,请使用 apm ssinstall。"
|
||
echo "提示:请将 APM 升级到 1.2.2 版本以上以继续使用安装功能。"
|
||
exit 1
|
||
fi
|
||
# 执行 apm 命令(跳过第一个参数)
|
||
/usr/bin/apm "${@:2}" 2>&1
|
||
exit_code=$?
|
||
# 如果 apm ssinstall 执行失败,提示可能是版本过低
|
||
if [[ "$2" == "ssinstall" && "$exit_code" != "0" ]]; then
|
||
echo "提示:apm ssinstall 执行失败,可能是您的 APM 版本过低(需要 1.2.2+)。"
|
||
echo "请升级 APM 到 1.2.2 版本以上来继续安装。"
|
||
fi
|
||
;;
|
||
|
||
"ssinstall")
|
||
# 执行 ssinstall 命令(跳过第一个参数)
|
||
/usr/bin/ssinstall "${@:2}" --native 2>&1
|
||
exit_code=$?
|
||
if [[ "$exit_code" != "0" ]];then
|
||
echo "安装失败,可尝试安装对应的 APM 版本应用;若无对应的 APM 版本应用,可提交用户反馈"
|
||
fi
|
||
;;
|
||
|
||
"aptss")
|
||
# 针对 aptss 的特殊逻辑:如果是 remove 子命令,需要图形化确认
|
||
if [[ "$2" == "remove" ]]; then
|
||
packages="${@:3}"
|
||
|
||
# 确认框通用参数
|
||
title="确认卸载"
|
||
text="正在准备卸载: $packages\n\n若这是您下达的卸载指令,请选择确认继续卸载"
|
||
|
||
# 优先尝试 garma,其次 zenity
|
||
if command -v garma &> /dev/null; then
|
||
garma --question --title="$title" --text="$text" \
|
||
--ok-label="确认卸载" --cancel-label="取消" --width=400
|
||
confirmed=$?
|
||
elif command -v zenity &> /dev/null; then
|
||
zenity --question --title="$title" --text="$text" \
|
||
--ok-label="确认卸载" --cancel-label="取消" --width=400
|
||
confirmed=$?
|
||
else
|
||
echo "错误:未找到 garma 或 zenity,无法显示确认对话框。卸载操作已拒绝。"
|
||
exit 1
|
||
fi
|
||
|
||
# 根据确认结果执行
|
||
if [[ $confirmed -eq 0 ]]; then
|
||
/usr/bin/aptss "${@:2}" -y 2>&1
|
||
exit_code=$?
|
||
else
|
||
echo "操作已取消"
|
||
exit 0
|
||
fi
|
||
elif [[ "$2" == "install" ]]; then
|
||
packages="${@:3}"
|
||
# 确认框通用参数
|
||
title="确认安装"
|
||
text="正在准备安装: $packages\n\n若这是您下达的安装指令,请选择确认继续安装"
|
||
|
||
# 优先尝试 garma,其次 zenity
|
||
if command -v garma &> /dev/null; then
|
||
garma --question --title="$title" --text="$text" \
|
||
--ok-label="确认安装" --cancel-label="取消" --width=400
|
||
confirmed=$?
|
||
elif command -v zenity &> /dev/null; then
|
||
zenity --question --title="$title" --text="$text" \
|
||
--ok-label="确认安装" --cancel-label="取消" --width=400
|
||
confirmed=$?
|
||
else
|
||
echo "错误:未找到 garma 或 zenity,无法显示确认对话框。安装操作已拒绝。"
|
||
exit 1
|
||
fi
|
||
|
||
# 根据确认结果执行
|
||
if [[ $confirmed -eq 0 ]]; then
|
||
# 1) 先更新软件源(带进度条)
|
||
echo "正在更新软件源..."
|
||
if ! run_with_progress "更新软件源" "正在更新软件源,请稍候..." "/usr/bin/aptss update"; then
|
||
echo "错误:软件源更新失败,安装已终止。"
|
||
exit 1
|
||
fi
|
||
# 2) 执行安装(带进度条)
|
||
echo "正在安装软件包..."
|
||
if ! run_with_progress "安装软件包" "正在安装: $packages,请稍候..." "/usr/bin/aptss install $packages -y"; then
|
||
echo "错误:软件包安装失败。"
|
||
exit 1
|
||
fi
|
||
exit_code=0
|
||
else
|
||
echo "操作已取消"
|
||
exit 0
|
||
fi
|
||
elif [[ "$2" == "ssupdate" ]]; then
|
||
/usr/bin/aptss "${@:2}" -y 2>&1
|
||
exit_code=$?
|
||
exit $?
|
||
else
|
||
# 非 remove/install 命令,拒绝执行
|
||
echo "拒绝执行 aptss 白名单外的指令"
|
||
exit 1
|
||
fi
|
||
;;
|
||
|
||
*)
|
||
# 兜底:拒绝非法指令
|
||
echo "拒绝执行:仅允许执行 'apm', 'aptss' 或 'ssinstall'。收到的参数: '$command_type'"
|
||
exit 1
|
||
;;
|
||
esac
|
||
|
||
exit $exit_code
|