Files
spark-store/extras/list-apm-apps.sh
2026-03-11 13:15:38 +08:00

188 lines
6.0 KiB
Bash
Executable File

#!/usr/bin/env bash
get_script_dir() {
local source="${BASH_SOURCE[0]}"
while [ -L "$source" ]; do
local dir="$(cd -P "$(dirname "$source")" && pwd)"
source="$(readlink "$source")"
[[ $source != /* ]] && source="$dir/$source"
done
local dir="$(cd -P "$(dirname "$source")" && pwd)"
echo "$dir"
}
find_apm_launcher() {
local script_dir="$1"
local paths=(
"${script_dir}/../extras/shell-helper/apm-launcher"
"/home/momen/Desktop/apm-app-store/extras/shell-helper/apm-launcher"
"/opt/apm-store/extras/shell-helper/apm-launcher"
"/usr/local/bin/apm-launcher"
)
for path in "${paths[@]}"; do
if [[ -f "$path" ]]; then
echo "$path"
return 0
fi
done
return 1
}
SCRIPT_DIR="$(get_script_dir)"
APM_LAUNCHER="$(find_apm_launcher "$SCRIPT_DIR")"
if [[ -z "$APM_LAUNCHER" ]]; then
echo "Error: apm-launcher not found" >&2
exit 1
fi
SHOW_DESKTOP=false
function show_help() {
echo "Usage: $(basename "$0") [OPTIONS] [KEYWORD]"
echo ""
echo "List installed APM packages or desktop applications."
echo ""
echo "Options:"
echo " -d, --desktop List only desktop applications (with .desktop files)"
echo " -h, --help Show this help message"
echo ""
echo "Arguments:"
echo " KEYWORD Filter results by keyword (optional)"
echo ""
echo "Examples:"
echo " $(basename "$0") # List all installed packages"
echo " $(basename "$0") firefox # Search for firefox in packages"
echo " $(basename "$0") -d # List all desktop applications"
echo " $(basename "$0") --desktop firefox # Search for desktop apps named firefox"
}
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
show_help
exit 0
fi
if [[ "$1" == "-d" || "$1" == "--desktop" ]]; then
SHOW_DESKTOP=true
SEARCH_KEYWORD="${2:-}"
else
SEARCH_KEYWORD="${1:-}"
fi
function get_desktop_name() {
local desktop_file="$1"
local name=""
if [[ -f "$desktop_file" ]]; then
name=$(grep -m1 '^Name=' "$desktop_file" | cut -d= -f2-)
fi
echo "$name"
}
if [[ "$SHOW_DESKTOP" == "true" ]]; then
echo "正在扫描已安装包中的桌面应用..."
echo ""
installed_pkgs=$(apm list --installed 2>/dev/null | \
sed 's/\x1b\[[0-9;]*m//g' | \
grep -vE "^Listing|^$|^\[INFO\]|^警告" | \
grep "/" | \
awk '{split($1,a,"/"); print a[1]}' | \
sort)
if [[ -z "$installed_pkgs" ]]; then
echo "未找到匹配的已安装包"
exit 0
fi
printf "%-35s %-20s %-10s | %s\n" "PKGNAME" "VERSION" "ARCH" "DESCRIPTION"
printf "%-35s-%-20s-%-10s-+-%s\n" "-----------------------------------" "--------------------" "----------" "---------"
while IFS= read -r pkgname; do
[[ -z "$pkgname" ]] && continue
desktop_files=$("$APM_LAUNCHER" list "$pkgname" 2>/dev/null)
if [[ -n "$desktop_files" ]]; then
IFS=',' read -ra files <<< "$desktop_files"
for df in "${files[@]}"; do
app_name=$(get_desktop_name "$df")
if [[ -n "$app_name" ]]; then
pkg_info=$(apm show "$pkgname" 2>/dev/null)
version=$(echo "$pkg_info" | grep "^Version:" | cut -d: -f2 | xargs)
arch=$(echo "$pkg_info" | grep "^Architecture:" | cut -d: -f2 | xargs)
description=$(echo "$pkg_info" | grep "^Description:" | cut -d: -f2- | xargs)
[[ -z "$arch" ]] && arch="amd64"
if [[ -n "$SEARCH_KEYWORD" ]]; then
if [[ "$app_name" =~ $SEARCH_KEYWORD ]] || [[ "$pkgname" =~ $SEARCH_KEYWORD ]]; then
printf "%-35s %-20s %-10s | %s\n" "$pkgname" "$version" "$arch" "$app_name"
fi
else
printf "%-35s %-20s %-10s | %s\n" "$pkgname" "$version" "$arch" "$app_name"
fi
fi
done
fi
done <<< "$installed_pkgs"
exit 0
fi
if [[ -n "$SEARCH_KEYWORD" ]]; then
installed_pkgs=$(apm list --installed 2>/dev/null | \
sed 's/\x1b\[[0-9;]*m//g' | \
grep -vE "^Listing|^$|^\[INFO\]|^警告" | \
grep "/" | \
awk '{split($1,a,"/"); print a[1]}' | \
grep -i "${SEARCH_KEYWORD}" | \
sort)
if [[ -z "$installed_pkgs" ]]; then
echo "未找到匹配的已安装包"
exit 0
fi
printf "%-35s %-20s %-10s | %s\n" "PKGNAME" "VERSION" "ARCH" "DESCRIPTION"
printf "%-35s-%-20s-%-10s-+-%s\n" "-----------------------------------" "--------------------" "----------" "---------"
while IFS= read -r pkgname; do
[[ -z "$pkgname" ]] && continue
pkg_info=$(apm show "$pkgname" 2>/dev/null)
version=$(echo "$pkg_info" | grep "^Version:" | cut -d: -f2 | xargs)
arch=$(echo "$pkg_info" | grep "^Architecture:" | cut -d: -f2 | xargs)
description=$(echo "$pkg_info" | grep "^Description:" | cut -d: -f2- | xargs)
[[ -z "$arch" ]] && arch="amd64"
printf "%-35s %-20s %-10s | %s\n" "$pkgname" "$version" "$arch" "${description:0:50}"
done <<< "$installed_pkgs"
exit 0
fi
if [[ "$SHOW_DESKTOP" == "false" && -z "$SEARCH_KEYWORD" ]]; then
apm list --installed 2>/dev/null | \
sed 's/\x1b\[[0-9;]*m//g' | \
grep -vE "^Listing|^$|^\[INFO\]|^警告" | \
grep "/" | \
awk '{
n = split($0, parts, "/")
pkgname = parts[1]
if (pkgname == "") next
version = $2
sub(/,.*/, "", version)
arch = $3
match($0, /\[(.+)\]/, m)
flags = m[1]
printf "%-35s %-20s %-8s [%s]\n", pkgname, version, arch, flags
}' | sort
exit 0
fi