mirror of
https://github.com/tw93/Mole.git
synced 2026-02-12 03:34:00 +00:00
improve uninstall scan metadata and list refresh UX
This commit is contained in:
@@ -35,8 +35,8 @@ readonly MOLE_UNINSTALL_META_CACHE_DIR="$HOME/.cache/mole"
|
|||||||
readonly MOLE_UNINSTALL_META_CACHE_FILE="$MOLE_UNINSTALL_META_CACHE_DIR/uninstall_app_metadata_v1"
|
readonly MOLE_UNINSTALL_META_CACHE_FILE="$MOLE_UNINSTALL_META_CACHE_DIR/uninstall_app_metadata_v1"
|
||||||
readonly MOLE_UNINSTALL_META_CACHE_LOCK="${MOLE_UNINSTALL_META_CACHE_FILE}.lock"
|
readonly MOLE_UNINSTALL_META_CACHE_LOCK="${MOLE_UNINSTALL_META_CACHE_FILE}.lock"
|
||||||
readonly MOLE_UNINSTALL_META_REFRESH_TTL=604800 # 7 days
|
readonly MOLE_UNINSTALL_META_REFRESH_TTL=604800 # 7 days
|
||||||
readonly MOLE_UNINSTALL_SCAN_SPINNER_DELAY_SEC="0.15"
|
readonly MOLE_UNINSTALL_SCAN_SPINNER_DELAY_SEC="0.25"
|
||||||
readonly MOLE_UNINSTALL_INLINE_METADATA_LIMIT=4
|
readonly MOLE_UNINSTALL_INLINE_METADATA_LIMIT=8
|
||||||
readonly MOLE_UNINSTALL_INLINE_MDLS_TIMEOUT_SEC="0.08"
|
readonly MOLE_UNINSTALL_INLINE_MDLS_TIMEOUT_SEC="0.08"
|
||||||
|
|
||||||
uninstall_relative_time_from_epoch() {
|
uninstall_relative_time_from_epoch() {
|
||||||
@@ -44,7 +44,7 @@ uninstall_relative_time_from_epoch() {
|
|||||||
local now_epoch="${2:-0}"
|
local now_epoch="${2:-0}"
|
||||||
|
|
||||||
if [[ ! "$value_epoch" =~ ^[0-9]+$ || $value_epoch -le 0 ]]; then
|
if [[ ! "$value_epoch" =~ ^[0-9]+$ || $value_epoch -le 0 ]]; then
|
||||||
echo "..."
|
echo "Unknown"
|
||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -613,12 +613,19 @@ scan_applications() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
local final_size_kb=0
|
local final_size_kb=0
|
||||||
local final_size="..."
|
local final_size="N/A"
|
||||||
if [[ "$cached_size_kb" =~ ^[0-9]+$ && $cached_size_kb -gt 0 ]]; then
|
if [[ "$cached_size_kb" =~ ^[0-9]+$ && $cached_size_kb -gt 0 ]]; then
|
||||||
final_size_kb="$cached_size_kb"
|
final_size_kb="$cached_size_kb"
|
||||||
final_size=$(bytes_to_human "$((cached_size_kb * 1024))")
|
final_size=$(bytes_to_human "$((cached_size_kb * 1024))")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Fallback to app mtime to avoid unknown "last used" on first scan.
|
||||||
|
if [[ ! "$final_epoch" =~ ^[0-9]+$ || $final_epoch -le 0 ]]; then
|
||||||
|
if [[ "$app_mtime" =~ ^[0-9]+$ && $app_mtime -gt 0 ]]; then
|
||||||
|
final_epoch="$app_mtime"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
local final_last_used
|
local final_last_used
|
||||||
final_last_used=$(uninstall_relative_time_from_epoch "$final_epoch" "$current_epoch")
|
final_last_used=$(uninstall_relative_time_from_epoch "$final_epoch" "$current_epoch")
|
||||||
|
|
||||||
@@ -769,9 +776,15 @@ main() {
|
|||||||
|
|
||||||
hide_cursor
|
hide_cursor
|
||||||
|
|
||||||
|
local first_scan=true
|
||||||
while true; do
|
while true; do
|
||||||
unset MOLE_INLINE_LOADING MOLE_MANAGED_ALT_SCREEN
|
unset MOLE_INLINE_LOADING MOLE_MANAGED_ALT_SCREEN
|
||||||
|
|
||||||
|
if [[ $first_scan == false ]]; then
|
||||||
|
echo -e "${GRAY}Refreshing application list...${NC}" >&2
|
||||||
|
fi
|
||||||
|
first_scan=false
|
||||||
|
|
||||||
local apps_file=""
|
local apps_file=""
|
||||||
if ! apps_file=$(scan_applications); then
|
if ! apps_file=$(scan_applications); then
|
||||||
return 1
|
return 1
|
||||||
@@ -819,10 +832,10 @@ main() {
|
|||||||
local name_width=$(get_display_width "$app_name")
|
local name_width=$(get_display_width "$app_name")
|
||||||
[[ $name_width -gt $max_name_display_width ]] && max_name_display_width=$name_width
|
[[ $name_width -gt $max_name_display_width ]] && max_name_display_width=$name_width
|
||||||
local size_display="$size"
|
local size_display="$size"
|
||||||
[[ -z "$size_display" || "$size_display" == "0" || "$size_display" == "N/A" || "$size_display" == "Unknown" ]] && size_display="..."
|
[[ -z "$size_display" || "$size_display" == "0" || "$size_display" == "Unknown" ]] && size_display="N/A"
|
||||||
[[ ${#size_display} -gt $max_size_width ]] && max_size_width=${#size_display}
|
[[ ${#size_display} -gt $max_size_width ]] && max_size_width=${#size_display}
|
||||||
local last_display=$(format_last_used_summary "$last_used")
|
local last_display=$(format_last_used_summary "$last_used")
|
||||||
[[ -z "$last_display" || "$last_display" == "Unknown" || "$last_display" == "Never" ]] && last_display="..."
|
[[ -z "$last_display" || "$last_display" == "Never" ]] && last_display="Unknown"
|
||||||
[[ ${#last_display} -gt $max_last_width ]] && max_last_width=${#last_display}
|
[[ ${#last_display} -gt $max_last_width ]] && max_last_width=${#last_display}
|
||||||
done
|
done
|
||||||
((max_size_width < 5)) && max_size_width=5
|
((max_size_width < 5)) && max_size_width=5
|
||||||
@@ -859,13 +872,13 @@ main() {
|
|||||||
[[ $current_width -gt $max_name_display_width ]] && max_name_display_width=$current_width
|
[[ $current_width -gt $max_name_display_width ]] && max_name_display_width=$current_width
|
||||||
|
|
||||||
local size_display="$size"
|
local size_display="$size"
|
||||||
if [[ -z "$size_display" || "$size_display" == "0" || "$size_display" == "N/A" || "$size_display" == "Unknown" ]]; then
|
if [[ -z "$size_display" || "$size_display" == "0" || "$size_display" == "Unknown" ]]; then
|
||||||
size_display="..."
|
size_display="N/A"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local last_display
|
local last_display
|
||||||
last_display=$(format_last_used_summary "$last_used")
|
last_display=$(format_last_used_summary "$last_used")
|
||||||
[[ -z "$last_display" || "$last_display" == "Unknown" || "$last_display" == "Never" ]] && last_display="..."
|
[[ -z "$last_display" || "$last_display" == "Never" ]] && last_display="Unknown"
|
||||||
|
|
||||||
summary_rows+=("$display_name|$size_display|$last_display")
|
summary_rows+=("$display_name|$size_display|$last_display")
|
||||||
done
|
done
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ format_app_display() {
|
|||||||
# Use common function from ui.sh to format last used time
|
# Use common function from ui.sh to format last used time
|
||||||
local compact_last_used
|
local compact_last_used
|
||||||
compact_last_used=$(format_last_used_summary "$last_used")
|
compact_last_used=$(format_last_used_summary "$last_used")
|
||||||
if [[ -z "$compact_last_used" || "$compact_last_used" == "Unknown" || "$compact_last_used" == "Never" ]]; then
|
if [[ -z "$compact_last_used" || "$compact_last_used" == "Never" ]]; then
|
||||||
compact_last_used="..."
|
compact_last_used="Unknown"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Format size
|
# Format size
|
||||||
local size_str="..."
|
local size_str="N/A"
|
||||||
[[ "$size" != "0" && "$size" != "" && "$size" != "Unknown" ]] && size_str="$size"
|
[[ "$size" != "0" && "$size" != "" && "$size" != "Unknown" ]] && size_str="$size"
|
||||||
|
|
||||||
# Calculate available width for app name based on terminal width
|
# Calculate available width for app name based on terminal width
|
||||||
|
|||||||
Reference in New Issue
Block a user