#!/bin/sh
# Check installed packages for updates

old_IFS=$IFS

# Notify the user
printf '\033[1;33m-> \033[1;36mnote \033[m%s\n' \
    "If you are doing too many requests you will note be" \
    "able to get information for every package you have" >&2

# List via arguments or all installed packages.
if [ "$1" ]; then
    set -- printf '%s\n' "$@"
else
    set -- kiss l
fi

"$@" | (while read -r pkg _; do {
    read -r ver _ < "/var/db/kiss/installed/$pkg/version"

    # Fix some package names.
    case $pkg in
        *-bin) fix=${pkg%%-bin} ;;
    esac
    
    # Grab the repology version from the SVG file.
    rep=$(curl -s "https://repology.org/badge/latest-versions/${fix:-$pkg}.svg")

    # Skip these instead of outputting empty
    # version informations.
    # shellcheck disable=2106
    case "$rep" in (*'Too Many Requests'*) continue ;; esac

    rep=${rep%</text>*}
    rep=${rep##*>}

    # Skip these.
    # shellcheck disable=2106
    {
        [ "${rep:--}" = - ]  && continue
        [ "$ver" = git ]     && continue
    }

    # Split the comma separated list.
    # shellcheck disable=2086
    {
        IFS=', ' 
        set -f
        set +f -- $rep
        IFS=$old_IFS
    }

    # Parse comma separated version lists.
    {
        for v; do case $v in "$ver") match=1; esac; done

        [ "$match" ] || printf '%s\n' "$pkg $ver -> $rep"
    }
} & done; wait)