1
0
mirror of https://github.com/tw93/Mole.git synced 2026-02-10 19:29:17 +00:00

Continue to fix the exit issue

This commit is contained in:
Tw93
2025-12-06 09:17:58 +08:00
parent 6272aa5bb5
commit c2abb639dc
8 changed files with 66 additions and 147 deletions

View File

@@ -119,32 +119,8 @@ clean_browsers() {
safe_clean ~/Library/Caches/zen/* "Zen cache"
safe_clean ~/Library/Application\ Support/Firefox/Profiles/*/cache2/* "Firefox profile cache"
# Service Worker CacheStorage (all profiles)
# Show loading indicator for this potentially slow scanning operation
if [[ -t 1 ]]; then
MOLE_SPINNER_PREFIX=" " start_inline_spinner "Scanning browser Service Worker caches..."
fi
# Limit search depth to prevent hanging on large profile directories
while IFS= read -r sw_path; do
[[ -z "$sw_path" ]] && continue
local profile_name=$(basename "$(dirname "$(dirname "$sw_path")")")
local browser_name="Chrome"
[[ "$sw_path" == *"Microsoft Edge"* ]] && browser_name="Edge"
[[ "$sw_path" == *"Brave"* ]] && browser_name="Brave"
[[ "$sw_path" == *"Arc"* ]] && browser_name="Arc"
[[ "$profile_name" != "Default" ]] && browser_name="$browser_name ($profile_name)"
clean_service_worker_cache "$browser_name" "$sw_path"
done < <(find "$HOME/Library/Application Support/Google/Chrome" \
"$HOME/Library/Application Support/Microsoft Edge" \
"$HOME/Library/Application Support/BraveSoftware/Brave-Browser" \
"$HOME/Library/Application Support/Arc/User Data" \
-maxdepth 6 -type d -name "CacheStorage" -path "*/Service Worker/*" 2> /dev/null || true)
# Stop loading indicator
if [[ -t 1 ]]; then
stop_inline_spinner
fi
# DISABLED: Service Worker CacheStorage scanning (find can hang on large browser profiles)
# Browser caches are already cleaned by the safe_clean calls above
}
# Clean cloud storage app caches
@@ -187,21 +163,15 @@ clean_application_support_logs() {
return 0
fi
# Show loading indicator for this potentially slow operation
if [[ -t 1 ]]; then
MOLE_SPINNER_PREFIX=" " start_inline_spinner "Scanning Application Support directories..."
fi
# Clean log directories and cache patterns with iteration limit
# Limit iterations to balance thoroughness and performance
# Reduced from 200 to 50 to prevent hanging on large directories
local iteration_count=0
local max_iterations=100
local cleaned_any=false
local max_iterations=50
for app_dir in ~/Library/Application\ Support/*; do
[[ -d "$app_dir" ]] || continue
# Safety: limit iterations to avoid excessive scanning
# Safety: limit iterations
((iteration_count++))
if [[ $iteration_count -gt $max_iterations ]]; then
break
@@ -209,8 +179,7 @@ clean_application_support_logs() {
app_name=$(basename "$app_dir")
# Skip system and protected apps
# Convert to lowercase for case-insensitive matching
# Skip system and protected apps (case-insensitive)
local app_name_lower
app_name_lower=$(echo "$app_name" | tr '[:upper:]' '[:lower:]')
case "$app_name_lower" in
@@ -219,72 +188,36 @@ clean_application_support_logs() {
;;
esac
# Clean log directories
if [[ -d "$app_dir/log" ]] && ls "$app_dir/log" > /dev/null 2>&1; then
safe_clean "$app_dir/log"/* "App logs: $app_name"
fi
if [[ -d "$app_dir/logs" ]] && ls "$app_dir/logs" > /dev/null 2>&1; then
safe_clean "$app_dir/logs"/* "App logs: $app_name"
fi
if [[ -d "$app_dir/activitylog" ]] && ls "$app_dir/activitylog" > /dev/null 2>&1; then
safe_clean "$app_dir/activitylog"/* "Activity logs: $app_name"
fi
# Clean log directories - simple direct removal without deep scanning
[[ -d "$app_dir/log" ]] && safe_clean "$app_dir/log"/* "App logs: $app_name"
[[ -d "$app_dir/logs" ]] && safe_clean "$app_dir/logs"/* "App logs: $app_name"
[[ -d "$app_dir/activitylog" ]] && safe_clean "$app_dir/activitylog"/* "Activity logs: $app_name"
# Clean common cache patterns (Service Worker, Code Cache, Crashpad)
if [[ -d "$app_dir/Cache/Cache_Data" ]] && ls "$app_dir/Cache/Cache_Data" > /dev/null 2>&1; then
safe_clean "$app_dir/Cache/Cache_Data" "Cache data: $app_name"
fi
if [[ -d "$app_dir/Code Cache/js" ]] && ls "$app_dir/Code Cache/js" > /dev/null 2>&1; then
safe_clean "$app_dir/Code Cache/js"/* "Code cache: $app_name"
fi
if [[ -d "$app_dir/Crashpad/completed" ]] && ls "$app_dir/Crashpad/completed" > /dev/null 2>&1; then
safe_clean "$app_dir/Crashpad/completed"/* "Crash reports: $app_name"
fi
# Clean common cache patterns - skip complex patterns that might hang
[[ -d "$app_dir/Cache/Cache_Data" ]] && safe_clean "$app_dir/Cache/Cache_Data" "Cache data: $app_name"
[[ -d "$app_dir/Crashpad/completed" ]] && safe_clean "$app_dir/Crashpad/completed"/* "Crash reports: $app_name"
# Clean Service Worker caches (CacheStorage and ScriptCache) with timeout protection
while IFS= read -r -d '' sw_cache; do
local profile_path=$(dirname "$(dirname "$sw_cache")")
local profile_name=$(basename "$profile_path")
[[ "$profile_name" == "User Data" ]] && profile_name=$(basename "$(dirname "$profile_path")")
clean_service_worker_cache "$app_name ($profile_name)" "$sw_cache"
done < <(find "$app_dir" -maxdepth 4 -type d \( -name "CacheStorage" -o -name "ScriptCache" \) -path "*/Service Worker/*" -print0 2> /dev/null || true)
# Clean stale update downloads (older than 7 days) with timeout protection
if [[ -d "$app_dir/update" ]] && ls "$app_dir/update" > /dev/null 2>&1; then
while IFS= read -r update_dir; do
local dir_age_days=$((($(date +%s) - $(get_file_mtime "$update_dir")) / 86400))
if [[ $dir_age_days -ge $MOLE_TEMP_FILE_AGE_DAYS ]]; then
safe_clean "$update_dir" "Stale update: $app_name"
fi
done < <(command find "$app_dir/update" -mindepth 1 -maxdepth 1 -type d 2> /dev/null || true)
fi
# DISABLED: Service Worker and update scanning (too slow, causes hanging)
# These are covered by browser-specific cleaning in clean_browsers()
done
# Clean Group Containers logs with timeout protection
# Search depth 4 to cover both direct (*/Logs) and nested (*/Library/Logs) patterns
if [[ -d "$HOME/Library/Group Containers" ]]; then
while IFS= read -r logs_dir; do
local container_name=$(basename "$(dirname "$logs_dir")")
safe_clean "$logs_dir"/* "Group container logs: $container_name"
done < <(command find "$HOME/Library/Group Containers" -maxdepth 4 -type d -name "Logs" 2> /dev/null || true)
fi
# Stop loading indicator
if [[ -t 1 ]]; then
stop_inline_spinner
fi
# DISABLED: Group Containers log scanning (find operation can hang)
# Group container logs are usually minimal, skipping for performance
}
# Check and show iOS device backup info
check_ios_device_backups() {
local backup_dir="$HOME/Library/Application Support/MobileSync/Backup"
if [[ -d "$backup_dir" ]] && command find "$backup_dir" -mindepth 1 -maxdepth 1 2> /dev/null | read -r _; then
# Simplified check without find to avoid hanging
if [[ -d "$backup_dir" ]]; then
local backup_kb=$(get_path_size_kb "$backup_dir")
if [[ -n "${backup_kb:-}" && "$backup_kb" -gt 102400 ]]; then
local backup_human=$(command du -sh "$backup_dir" 2> /dev/null | awk '{print $1}')
note_activity
echo -e " Found ${GREEN}${backup_human}${NC} iOS backups"
echo -e " You can delete them manually: ${backup_dir}"
if [[ -n "$backup_human" ]]; then
note_activity
echo -e " Found ${GREEN}${backup_human}${NC} iOS backups"
echo -e " You can delete them manually: ${backup_dir}"
fi
fi
fi
}