mirror of
https://github.com/tw93/Mole.git
synced 2026-02-04 17:24:45 +00:00
✨ Uninstall function uninstalls system-level files more thoroughly
This commit is contained in:
@@ -189,8 +189,9 @@ scan_applications() {
|
|||||||
display_name="$(get_brand_name "$display_name")"
|
display_name="$(get_brand_name "$display_name")"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Skip protected system apps early
|
# Skip system critical apps (input methods, system components)
|
||||||
if should_preserve_bundle "$bundle_id"; then
|
# Note: Paid apps like CleanMyMac, 1Password are NOT protected here - users can uninstall them
|
||||||
|
if should_protect_from_uninstall "$bundle_id"; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -377,22 +378,34 @@ uninstall_applications() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Find related files
|
# Find related files (user-level)
|
||||||
local related_files=$(find_app_files "$bundle_id" "$app_name")
|
local related_files=$(find_app_files "$bundle_id" "$app_name")
|
||||||
|
|
||||||
|
# Find system-level files (requires sudo)
|
||||||
|
local system_files=$(find_app_system_files "$bundle_id" "$app_name")
|
||||||
|
|
||||||
# Calculate total size
|
# Calculate total size
|
||||||
local app_size_kb=$(du -sk "$app_path" 2>/dev/null | awk '{print $1}' || echo "0")
|
local app_size_kb=$(du -sk "$app_path" 2>/dev/null | awk '{print $1}' || echo "0")
|
||||||
local related_size_kb=$(calculate_total_size "$related_files")
|
local related_size_kb=$(calculate_total_size "$related_files")
|
||||||
local total_kb=$((app_size_kb + related_size_kb))
|
local system_size_kb=$(calculate_total_size "$system_files")
|
||||||
|
local total_kb=$((app_size_kb + related_size_kb + system_size_kb))
|
||||||
|
|
||||||
# Show what will be removed
|
# Show what will be removed
|
||||||
echo -e " ${YELLOW}Files to be removed:${NC}"
|
echo -e " ${YELLOW}Files to be removed:${NC}"
|
||||||
echo -e " ${GREEN}✓${NC} Application: $(echo "$app_path" | sed "s|$HOME|~|")"
|
echo -e " ${GREEN}✓${NC} Application: $(echo "$app_path" | sed "s|$HOME|~|")"
|
||||||
|
|
||||||
|
# Show user-level files
|
||||||
while IFS= read -r file; do
|
while IFS= read -r file; do
|
||||||
[[ -n "$file" && -e "$file" ]] && echo -e " ${GREEN}✓${NC} $(echo "$file" | sed "s|$HOME|~|")"
|
[[ -n "$file" && -e "$file" ]] && echo -e " ${GREEN}✓${NC} $(echo "$file" | sed "s|$HOME|~|")"
|
||||||
done <<< "$related_files"
|
done <<< "$related_files"
|
||||||
|
|
||||||
|
# Show system-level files
|
||||||
|
if [[ -n "$system_files" ]]; then
|
||||||
|
while IFS= read -r file; do
|
||||||
|
[[ -n "$file" && -e "$file" ]] && echo -e " ${YELLOW}✓${NC} [System] $file"
|
||||||
|
done <<< "$system_files"
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ $total_kb -gt 1048576 ]]; then # > 1GB
|
if [[ $total_kb -gt 1048576 ]]; then # > 1GB
|
||||||
local size_display=$(echo "$total_kb" | awk '{printf "%.2fGB", $1/1024/1024}')
|
local size_display=$(echo "$total_kb" | awk '{printf "%.2fGB", $1/1024/1024}')
|
||||||
elif [[ $total_kb -gt 1024 ]]; then # > 1MB
|
elif [[ $total_kb -gt 1024 ]]; then # > 1MB
|
||||||
@@ -416,7 +429,7 @@ uninstall_applications() {
|
|||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Remove related files
|
# Remove user-level related files
|
||||||
while IFS= read -r file; do
|
while IFS= read -r file; do
|
||||||
if [[ -n "$file" && -e "$file" ]]; then
|
if [[ -n "$file" && -e "$file" ]]; then
|
||||||
if rm -rf "$file" 2>/dev/null; then
|
if rm -rf "$file" 2>/dev/null; then
|
||||||
@@ -425,6 +438,20 @@ uninstall_applications() {
|
|||||||
fi
|
fi
|
||||||
done <<< "$related_files"
|
done <<< "$related_files"
|
||||||
|
|
||||||
|
# Remove system-level files (requires sudo)
|
||||||
|
if [[ -n "$system_files" ]]; then
|
||||||
|
echo -e " ${YELLOW}System-level files require administrator privileges${NC}"
|
||||||
|
while IFS= read -r file; do
|
||||||
|
if [[ -n "$file" && -e "$file" ]]; then
|
||||||
|
if sudo rm -rf "$file" 2>/dev/null; then
|
||||||
|
echo -e " ${GREEN}✓${NC} Removed [System] $(basename "$file")"
|
||||||
|
else
|
||||||
|
log_warning "Failed to remove system file: $file"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done <<< "$system_files"
|
||||||
|
fi
|
||||||
|
|
||||||
((total_size_freed += total_kb))
|
((total_size_freed += total_kb))
|
||||||
((files_cleaned++))
|
((files_cleaned++))
|
||||||
((total_items++))
|
((total_items++))
|
||||||
|
|||||||
Reference in New Issue
Block a user