mirror of
https://github.com/tw93/Mole.git
synced 2026-02-15 06:25:09 +00:00
Add 'F' key to refresh paginated menus, clarify UI text for search and selection, and improve robustness of BOM file processing
This commit is contained in:
@@ -498,7 +498,12 @@ main() {
|
||||
fi
|
||||
|
||||
# Interactive selection using paginated menu
|
||||
if ! select_apps_for_uninstall; then
|
||||
set +e
|
||||
select_apps_for_uninstall
|
||||
local exit_code=$?
|
||||
set -e
|
||||
|
||||
if [[ $exit_code -ne 0 ]]; then
|
||||
if [[ "${MOLE_ALT_SCREEN_ACTIVE:-}" == "1" ]]; then
|
||||
leave_alt_screen
|
||||
unset MOLE_ALT_SCREEN_ACTIVE
|
||||
@@ -508,6 +513,13 @@ main() {
|
||||
clear_screen
|
||||
printf '\033[2J\033[H' >&2 # Also clear stderr
|
||||
rm -f "$apps_file"
|
||||
|
||||
# Handle Refresh (code 10)
|
||||
if [[ $exit_code -eq 10 ]]; then
|
||||
force_rescan=true
|
||||
continue
|
||||
fi
|
||||
|
||||
# User cancelled selection, exit the loop
|
||||
return 0
|
||||
fi
|
||||
|
||||
@@ -708,6 +708,8 @@ find_app_receipt_files() {
|
||||
done < <(find /private/var/db/receipts -name "${bundle_id}*.bom" -print0 2> /dev/null)
|
||||
fi
|
||||
|
||||
# Process bom files if any found
|
||||
if [[ ${#bom_files[@]} -gt 0 ]]; then
|
||||
for bom_file in "${bom_files[@]}"; do
|
||||
[[ ! -f "$bom_file" ]] && continue
|
||||
|
||||
@@ -782,7 +784,7 @@ find_app_receipt_files() {
|
||||
|
||||
done <<< "$bom_content"
|
||||
done
|
||||
|
||||
fi
|
||||
if [[ ${#receipt_files[@]} -gt 0 ]]; then
|
||||
printf '%s\n' "${receipt_files[@]}"
|
||||
fi
|
||||
|
||||
@@ -85,6 +85,11 @@ select_apps_for_uninstall() {
|
||||
unset MOLE_MENU_META_EPOCHS MOLE_MENU_META_SIZEKB
|
||||
# leave MOLE_MENU_SORT_DEFAULT untouched if user set it globally
|
||||
|
||||
# Refresh signal handling
|
||||
if [[ $exit_code -eq 10 ]]; then
|
||||
return 10
|
||||
fi
|
||||
|
||||
if [[ $exit_code -ne 0 ]]; then
|
||||
echo "Cancelled"
|
||||
return 1
|
||||
|
||||
@@ -478,7 +478,7 @@ paginated_multi_select() {
|
||||
if [[ "$filter_mode" == "true" ]]; then
|
||||
# Filter mode: simple controls without sort
|
||||
local -a _segs_filter=(
|
||||
"${GRAY}Filter: ${filter_status}${NC}"
|
||||
"${GRAY}Search: ${filter_status}${NC}"
|
||||
"${GRAY}Delete${NC}"
|
||||
"${GRAY}Enter Confirm${NC}"
|
||||
"${GRAY}ESC Cancel${NC}"
|
||||
@@ -490,7 +490,7 @@ paginated_multi_select() {
|
||||
[[ "$sort_reverse" == "true" ]] && reverse_arrow="↓"
|
||||
|
||||
# Determine filter text based on whether filter is active
|
||||
local filter_text="/ Filter"
|
||||
local filter_text="/ Search"
|
||||
[[ -n "$applied_query" ]] && filter_text="/ Clear"
|
||||
|
||||
if [[ "$has_metadata" == "true" ]]; then
|
||||
@@ -508,8 +508,9 @@ paginated_multi_select() {
|
||||
# Normal: show full controls
|
||||
local -a _segs_all=(
|
||||
"${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}${NC}"
|
||||
"${GRAY}Space${NC}"
|
||||
"${GRAY}Space Select${NC}"
|
||||
"${GRAY}Enter${NC}"
|
||||
"${GRAY}F Refresh${NC}"
|
||||
"${GRAY}${filter_text}${NC}"
|
||||
"${GRAY}S ${sort_status}${NC}"
|
||||
"${GRAY}R ${reverse_arrow}${NC}"
|
||||
@@ -521,7 +522,7 @@ paginated_multi_select() {
|
||||
# Without metadata: basic controls
|
||||
local -a _segs_simple=(
|
||||
"${GRAY}${ICON_NAV_UP}${ICON_NAV_DOWN}${NC}"
|
||||
"${GRAY}Space${NC}"
|
||||
"${GRAY}Space Select${NC}"
|
||||
"${GRAY}Enter${NC}"
|
||||
"${GRAY}${filter_text}${NC}"
|
||||
"${GRAY}Q Exit${NC}"
|
||||
@@ -643,6 +644,10 @@ paginated_multi_select() {
|
||||
"CHAR:f" | "CHAR:F")
|
||||
if [[ "$filter_mode" == "true" ]]; then
|
||||
filter_query+="${key#CHAR:}"
|
||||
else
|
||||
# Trigger Refresh signal
|
||||
cleanup
|
||||
return 10
|
||||
fi
|
||||
;;
|
||||
"CHAR:r")
|
||||
|
||||
Reference in New Issue
Block a user