diff --git a/update-notifier.sh b/update-notifier.sh index 433f19c..45edb17 100755 --- a/update-notifier.sh +++ b/update-notifier.sh @@ -277,11 +277,25 @@ elif [[ "$OS_TYPE" == "rhel" ]]; then fi # Read recent log entries and analyze what happened +TEMP_LOG="" +PLAIN_SUMMARY="" if [[ ! -f "$LOG_FILE" ]]; then log "WARNING: Log file $LOG_FILE not found. Sending notification anyway." - LOG_OUTPUT="Log file not found at $LOG_FILE" - UPDATE_STATUS="unknown" - UPDATE_SUMMARY="Log file not available" + if [[ "$AVAILABLE_UPDATES" -gt 0 ]]; then + UPDATE_STATUS="updates-available" + UPDATE_SUMMARY="${AVAILABLE_UPDATES} non-security package(s) available" + PLAIN_SUMMARY="šŸ“¦ Updates Available: ${AVAILABLE_UPDATES} non-security packages\n Packages: ${AVAILABLE_PACKAGES}" + if [[ "$AVAILABLE_UPDATES" -gt 10 ]]; then + PLAIN_SUMMARY="${PLAIN_SUMMARY}... and $((AVAILABLE_UPDATES - 10)) more" + fi + PLAIN_SUMMARY="${PLAIN_SUMMARY}\nā„¹ļø No unattended-upgrades history yet (first run)" + else + UPDATE_STATUS="no-updates" + UPDATE_SUMMARY="System is up to date" + PLAIN_SUMMARY="āœ… System is up to date\nā„¹ļø No unattended-upgrades history yet (first run)" + fi + LOG_OUTPUT=$(echo -e "$PLAIN_SUMMARY" | python3 -c "import sys, json; print(json.dumps(sys.stdin.read())[1:-1])" 2>/dev/null || \ + echo -e "$PLAIN_SUMMARY" | awk '{gsub(/\\/,"\\\\",$0); gsub(/"/,"\\\"",$0); gsub(/\t/,"\\t",$0); printf "%s ", $0}' | sed 's/[[:cntrl:]]//g') else # Create a snapshot to avoid race conditions with active logging TEMP_LOG=$(mktemp) @@ -428,6 +442,9 @@ else if [[ -z "$HUMAN_SUMMARY" ]]; then HUMAN_SUMMARY="āœ… Update check completed successfully" fi + + # Store plain-text summary for Matrix reuse + PLAIN_SUMMARY="$HUMAN_SUMMARY" # Prepare for JSON (safely escaped) LOG_OUTPUT=$(echo -e "$HUMAN_SUMMARY" | python3 -c "import sys, json; print(json.dumps(sys.stdin.read())[1:-1])" 2>/dev/null || { @@ -446,6 +463,13 @@ if [[ "$UPDATE_STATUS" == "updated" ]] && [[ -z "$UPGRADED_PACKAGE_NAMES" ]] && log "INFO: Corrected status - no packages were actually upgraded this run" fi +# Promote status when non-security updates are available but no security updates applied +if [[ "$UPDATE_STATUS" == "no-updates" ]] && [[ "$AVAILABLE_UPDATES" -gt 0 ]]; then + UPDATE_STATUS="updates-available" + UPDATE_SUMMARY="${AVAILABLE_UPDATES} non-security package(s) available" + log "INFO: Promoting status - ${AVAILABLE_UPDATES} non-security packages available" +fi + # Set notification title and description based on status case "$UPDATE_STATUS" in "updated") @@ -453,6 +477,11 @@ case "$UPDATE_STATUS" in NOTIFICATION_DESC="$UPDATE_SUMMARY at **$LAST_RUN**" NOTIFICATION_COLOR=5814783 # Green ;; + "updates-available") + NOTIFICATION_TITLE="System Updates Available on $HOSTNAME" + NOTIFICATION_DESC="$UPDATE_SUMMARY at **$LAST_RUN**" + NOTIFICATION_COLOR=16744272 # Orange + ;; "no-updates") NOTIFICATION_TITLE="System Update Check Complete on $HOSTNAME" NOTIFICATION_DESC="$UPDATE_SUMMARY at **$LAST_RUN**" @@ -703,9 +732,13 @@ if [[ "$MATRIX_CONFIGURED" == true ]]; then MATRIX_SUMMARY="${MATRIX_SUMMARY}\nāŒ Error: ${ERROR_MSG}" fi - # Default if nothing was found + # Default if nothing was found - fall back to pre-computed summary if [[ -z "$MATRIX_SUMMARY" ]]; then - MATRIX_SUMMARY="āœ… Update check completed successfully" + if [[ -n "$PLAIN_SUMMARY" ]]; then + MATRIX_SUMMARY="$PLAIN_SUMMARY" + else + MATRIX_SUMMARY="āœ… Update check completed successfully" + fi fi MATRIX_LOG=$(echo -e "$MATRIX_SUMMARY")