|
10 | 10 | # So we append the path to XDG_DATA_DIRS here like, |
11 | 11 | # instead of prepending it like flatpak. |
12 | 12 |
|
| 13 | +# --- 变量初始化和规范化 --- |
13 | 14 | LINGLONG_ROOT="@LINGLONG_ROOT@" |
14 | 15 | LINGLONG_DESKTOP_EXPORT_PATH="@LINGLONG_DESKTOP_EXPORT_PATH@" |
15 | 16 |
|
16 | | -LINGLONG_DATA_DIR=${LINGLONG_ROOT}/entries/share |
17 | | -CUSTOM_DESKTOP_DATA_DIR=${LINGLONG_ROOT}/entries/${LINGLONG_DESKTOP_EXPORT_PATH} |
18 | | - |
19 | | -if [ "$LINGLONG_DESKTOP_EXPORT_PATH" != "share/applications" ]; then |
20 | | - # 检查XDG_DATA_DIRS是否包含CUSTOM_DESKTOP_DATA_DIR |
21 | | - case ":$XDG_DATA_DIRS:" in |
22 | | - *":${CUSTOM_DESKTOP_DATA_DIR}:"* | *":${CUSTOM_DESKTOP_DATA_DIR}/:"*) ;; |
23 | | - *) |
24 | | - XDG_DATA_DIRS=$(echo "$XDG_DATA_DIRS" | sed -E "s@(/usr/local/share/?)(:|$)@\1:$CUSTOM_DESKTOP_DATA_DIR\2@g") |
25 | | - ;; |
26 | | - esac |
27 | | -else |
28 | | - case ":$XDG_DATA_DIRS:" in |
29 | | - *":$LINGLONG_DATA_DIR:"* | *":$LINGLONG_DATA_DIR/:"*) : ;; |
30 | | - *) |
31 | | - XDG_DATA_DIRS="${XDG_DATA_DIRS:-/usr/local/share:/usr/share}:${LINGLONG_DATA_DIR}" |
32 | | - ;; |
33 | | - esac |
| 17 | +# 规范化 LINGLONG_DESKTOP_EXPORT_PATH:移除末尾的 "/applications" |
| 18 | +LINGLONG_DESKTOP_EXPORT_PATH=${LINGLONG_DESKTOP_EXPORT_PATH%/applications} |
| 19 | + |
| 20 | +# 规范化 LINGLONG_DATA_DIR, CUSTOM_DESKTOP_DATA_DIR:移除末尾可能存在的斜杠 |
| 21 | +LINGLONG_DATA_DIR="${LINGLONG_ROOT}/entries/share" |
| 22 | +LINGLONG_DATA_DIR=${LINGLONG_DATA_DIR%/} |
| 23 | + |
| 24 | +CUSTOM_DESKTOP_DATA_DIR="${LINGLONG_ROOT}/entries/${LINGLONG_DESKTOP_EXPORT_PATH}" |
| 25 | +CUSTOM_DESKTOP_DATA_DIR=${CUSTOM_DESKTOP_DATA_DIR%/} |
| 26 | + |
| 27 | +# --- 辅助函数:安全地添加路径到 XDG_DATA_DIRS --- |
| 28 | +# 这个函数会检查路径是否已存在,如果不存在则添加。 |
| 29 | +# 参数1: 要添加的路径 (path_to_add) |
| 30 | +# 参数2: 添加位置 ('start' 或 'end',默认为 'start') |
| 31 | +_add_path_to_xdg_data_dirs() { |
| 32 | + local path_to_add="${1%/}" # 确保要添加的路径没有末尾斜杠 |
| 33 | + local position="${2:-start}" # 默认添加到开头 |
| 34 | + |
| 35 | + # 确保 XDG_DATA_DIRS 变量已定义,如果未定义则初始化为空字符串 |
| 36 | + : "${XDG_DATA_DIRS:=}" |
| 37 | + |
| 38 | + # 检查路径是否已存在于 XDG_DATA_DIRS 中 |
| 39 | + # 在 XDG_DATA_DIRS 两端加上冒号,以确保精确匹配(无论路径在开头、中间还是结尾) |
| 40 | + if [[ ":${XDG_DATA_DIRS}:" == *":${path_to_add}:"* ]]; then |
| 41 | + # 路径已存在,不执行任何操作 |
| 42 | + return 0 |
| 43 | + fi |
| 44 | + |
| 45 | + # 如果路径不存在,则根据指定位置添加 |
| 46 | + if [[ -z "$XDG_DATA_DIRS" ]]; then |
| 47 | + # 如果 XDG_DATA_DIRS 当前为空,直接赋值 |
| 48 | + XDG_DATA_DIRS="$path_to_add" |
| 49 | + elif [[ "$position" == "start" ]]; then |
| 50 | + # 添加到开头 |
| 51 | + XDG_DATA_DIRS="$path_to_add:$XDG_DATA_DIRS" |
| 52 | + elif [[ "$position" == "end" ]]; then |
| 53 | + # 添加到末尾 |
| 54 | + XDG_DATA_DIRS="$XDG_DATA_DIRS:$path_to_add" |
| 55 | + fi |
| 56 | +} |
| 57 | + |
| 58 | +# 如果有自定义 LINGLONG_DESKTOP_EXPORT_PATH(默认为 "share"),将自定义路径添加到 XDG_DATA_DIRS |
| 59 | +if [ "$LINGLONG_DESKTOP_EXPORT_PATH" != "share" ]; then |
| 60 | + _add_path_to_xdg_data_dirs "$CUSTOM_DESKTOP_DATA_DIR" "start" |
34 | 61 | fi |
| 62 | + |
| 63 | +# 2. 处理 LINGLONG_DATA_DIR 的添加逻辑 |
| 64 | +# 如果 XDG_DATA_DIRS 为空,则先设置为 /usr/local/share:/usr/share, |
| 65 | +# 然后再将 LINGLONG_DATA_DIR 添加到末尾。 |
| 66 | +: "${XDG_DATA_DIRS:=/usr/local/share:/usr/share}" |
| 67 | + |
| 68 | +# 然后,将 LINGLONG_DATA_DIR 添加到 XDG_DATA_DIRS 的末尾(如果不存在) |
| 69 | +_add_path_to_xdg_data_dirs "$LINGLONG_DATA_DIR" "end" |
| 70 | + |
| 71 | +# --- 清理辅助函数 --- |
| 72 | +unset -f _add_path_to_xdg_data_dirs |
0 commit comments