#!/bin/bash

ShowUpdates() {
    local ix pkgname pkginfo dlsize prog

    # repo can be testing or stable, find out which one to use:
    /usr/bin/grep "^\[testing\]" /etc/pacman.conf >/dev/null && prog=/usr/bin/head || prog=/usr/bin/tail

    for ((ix=0; ix < ${#updates[@]}; ix++)) ; do
        pkgname="$(echo "${updates[$ix]}" | cut -d"$fieldsep" -f1)"
        pkginfo="$(LANG=C /usr/bin/pacman -Si $pkgname)"
        dlsize="$(echo "$pkginfo" | grep "Download Size" | $prog -n 1 | awk '{print $4,$5}')"
        echo "${updates[$ix]}$fieldsep$dlsize"
    done
}

ShowUpdatesHeader() {
    echo "Name${fieldsep}Current${fieldsep}->${fieldsep}New${fieldsep}Download Size"
    echo "----${fieldsep}-------${fieldsep}--${fieldsep}---${fieldsep}-------------"
}

Main()
{
    local show_header=yes
    local updates
    local retcode
    local fieldsep=$'\x0c'   # form feed!
    local rawupdates

    rawupdates=$(checkupdates --nocolor)
    retcode=$?

    case "$retcode" in
        0)
            test "$1" = "--nh" && show_header=no
            updates="$(echo "$rawupdates" | sed -E "s|[[:space:]]+|$fieldsep|g")"  # $fieldsep can not be '|' used in 'sed' command
            readarray -t updates <<< $(echo "$updates")
            {
                test "$show_header" = "yes" && ShowUpdatesHeader
                ShowUpdates
            } | column -t -s "$fieldsep"
            ;;
        1 | 2)
            return $retcode
            ;;
    esac
}

Main "$@"
