summarylogtreecommitdiffstats
path: root/mfosu
diff options
context:
space:
mode:
author企鹅20352022-08-20 08:53:59 +0800
committer企鹅20352022-08-20 08:53:59 +0800
commit9d554a6465af191621eed2f75fea192608c5c68d (patch)
treee6d30b69ce7a8423d3d57cdfdac25030844eff43 /mfosu
parentfb3a52f4c9c294ef33a66e2104fd3c8e91a4db72 (diff)
downloadaur-9d554a6465af191621eed2f75fea192608c5c68d.tar.gz
feat (all): change to unpack the appimage
Diffstat (limited to 'mfosu')
-rw-r--r--mfosu98
1 files changed, 92 insertions, 6 deletions
diff --git a/mfosu b/mfosu
index 9ff504b88bb1..0939faaae793 100644
--- a/mfosu
+++ b/mfosu
@@ -1,6 +1,92 @@
-#!/bin/sh
-DATADIR=$HOME/.local/share/osu
-if [ ! -d $DATADIR ]; then
- mkdir -p $DATADIR
-fi
-env OSU_EXTERNAL_UPDATE_PROVIDER=1 /opt/mfosu/mfosu.appimage "$@"
+#!/usr/bin/env bash
+
+#设定框架
+DISPLAYNAME="mfosu启动脚本"
+LOGNAMES="*"
+
+# osu数据目录
+readonly XDG_OSU=${HOME}/.local/share/osu/
+
+#默认重定向日志到lazer目录的mfosu-apprun.log
+LOGTARGET="${LOGTARGET:-${XDG_OSU}/mfosu-apprun.log}"
+MFOSU_AUTOLOG_WHEN_NOT_TERMINAL="${MFOSU_AUTOLOG_WHEN_NOT_TERMINAL:-true}"
+
+#mfosu目录
+readonly MFOSU="/opt/mfosu/"
+
+#是bash#shellcheck source=/dev/null #todo: 让shellcheck能正确source到common
+source "${MFOSU}/scripts/base/common" || exit 255
+
+#初始化日志文件
+true > "${LOGTARGET}"
+
+#设定LD_LIBRARY_PATH
+export LD_LIBRARY_PATH="${MFOSU}/game":"${LD_LIBRARY_PATH}"
+
+function run_hook()
+{
+ local hookPath="${1}"
+
+ if [ -f "${hookPath}" ];then
+ local hookBaseName="$(basename "${hookPath}")"
+
+ #env文件直接source,允许用户通过此方式更改脚本的环境变量(甚至是部分函数?),其他文件则直接执行
+ if [[ "${hookBaseName}" == *".env" ]];then
+ log "加载env文件:${hookBaseName}"
+ source "${hookPath}";
+ else
+ log "执行钩子:${hookBaseName}"
+ "${hookPath}" >> "${LOGTARGET}" 2>>"${LOGTARGET}"|| log "LWARN" "未能成功执行钩子:$(basename "${hookBaseName}")"
+ fi
+ fi;
+}
+
+function check_hooks()
+{
+ log "正在检查内部钩子..."
+ #先执行一遍AppImage里的hooks
+ for hook in "${MFOSU}/scripts/hooks"/*; do
+ run_hook "${hook}"
+ done
+
+ unset hook
+ unset hookBaseName
+
+ #然后执行用户定义的hooks
+ local storageConfig="${XDG_OSU}/storage.ini"
+
+ if [ -f "${storageConfig}" ];then
+ local userStorage="$(grep "FullPath" "${storageConfig}")"
+ userStorage="${userStorage//FullPath = /}"
+
+ log "正在检查用户钩子..."
+ for uhook in "${userStorage}/hooks"/*; do
+ run_hook "${uhook}"
+ done
+ fi
+
+ unset uhook
+ unset uHookBaseName
+ unset userStorage
+
+ unset check_hooks
+ unset run_hook
+}
+
+#执行钩子
+check_hooks
+
+#启动游戏!
+EXEC=${MFOSU}/game/'osu!'
+log "启动游戏..."
+
+#设定PATH,确保$MFOSU/game永远在最前面
+export PATH="${MFOSU}/game":"${PATH}"
+"${EXEC}" "$@"
+
+retCode="$?"
+log "返回值为${retCode}"
+
+if [ ! ${retCode} -eq 0 ];then
+ log "LWARN" "游戏似乎没有正常退出?"
+fi \ No newline at end of file