71 lines
2.2 KiB
Bash
Executable File
71 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
SYNC_INTERVAL=1800
|
||
SYNC_TIMESTAMP="/tmp/last_checkupdates_sync"
|
||
NO_ZERO_OUTPUT=false
|
||
|
||
now=$(date +%s)
|
||
last=$(cat "$SYNC_TIMESTAMP" 2>/dev/null || echo 0)
|
||
if (( now - last >= SYNC_INTERVAL )); then
|
||
rm -rf "/tmp/checkup-db-$UID"
|
||
checkupdates > /dev/null 2>&1
|
||
echo "$now" > "$SYNC_TIMESTAMP"
|
||
fi
|
||
|
||
# Mapping: REPOS destino de cada paquete
|
||
declare -A update_repo_map
|
||
mapping=$(sudo pacman -Syuw --print-format '%r %n' --noconfirm | grep -v '^::' | grep -v '^descargando')
|
||
while read -r repo pkg; do
|
||
[[ -z "$repo" || -z "$pkg" ]] && continue
|
||
update_repo_map["$pkg"]="$repo"
|
||
done <<< "$mapping"
|
||
|
||
updates=$(checkupdates --nosync 2>/dev/null)
|
||
aur_updates=$(paru -Qua 2>/dev/null)
|
||
|
||
total_count=0
|
||
tooltip_lines=()
|
||
|
||
# OJO: este while debe ser así, ¡NUNCA uses tuberías aquí!
|
||
IFS=$'\n'
|
||
for line in $updates; do
|
||
[[ -z "$line" ]] && continue
|
||
pkg=$(awk '{print $1}' <<< "$line")
|
||
old=$(awk '{print $2}' <<< "$line")
|
||
new=$(awk '{print $4}' <<< "$line")
|
||
repo="${update_repo_map[$pkg]}"
|
||
[[ -z "$repo" ]] && repo="???"
|
||
formatted=$(printf "%-15s %-30s %s → %s" "$repo" "$pkg" "$old" "$new")
|
||
tooltip_lines+=("$formatted")
|
||
((total_count++))
|
||
done
|
||
|
||
# AUR
|
||
for line in $aur_updates; do
|
||
[[ -z "$line" ]] && continue
|
||
pkg=$(awk '{print $1}' <<< "$line")
|
||
old=$(awk '{print $2}' <<< "$line")
|
||
new=$(awk '{print $4}' <<< "$line")
|
||
formatted=$(printf "%-15s %-30s %s → %s" "aur" "$pkg" "$old" "$new")
|
||
tooltip_lines+=("$formatted")
|
||
((total_count++))
|
||
done
|
||
|
||
aur_rebuild=$(cat /tmp/aur_rebuild_count 2>/dev/null || echo 0)
|
||
if [[ "$aur_rebuild" -gt 0 ]]; then
|
||
tooltip_lines+=("")
|
||
tooltip_lines+=("️ $aur_rebuild paquetes AUR necesitan recompilación")
|
||
fi
|
||
|
||
if [[ "$total_count" -eq 0 && "$aur_rebuild" -eq 0 ]]; then
|
||
if [[ "$NO_ZERO_OUTPUT" == true ]]; then
|
||
echo '{"text": "", "tooltip": "Todo actualizado", "class": "updated", "alt": "updated"}'
|
||
else
|
||
echo '{"text": "0", "tooltip": "Todo actualizado", "class": "updated", "alt": "updated"}'
|
||
fi
|
||
else
|
||
tooltip=$(printf "%s\n" "${tooltip_lines[@]}" | jq -R -s '.')
|
||
echo "{\"text\": \"$total_count\", \"tooltip\": $tooltip, \"class\": \"has-updates\", \"alt\": \"has-updates\"}"
|
||
fi
|
||
|