#!/usr/bin/bash
#
# The install command
#

scriptdir=$( dirname $(readlink -fn $0))
source $scriptdir/lpf-defs.bash


function cli_confirm_install()
# cli_confirm_install <pkg list>: Let user confirm what packages
# to install, no GUI. Returns packages to install
{
    local resultdir=$1
    local to_install=()
    local rpm
    for rpm in $( ls $resultdir ); do
        echo -n "Install $rpm (Yes/no) [y] ? " >&5
        read
        if [[ -z "$REPLY" || "$REPLY" == [Yy]* ]]; then
            to_install=( ${to_install[@]} $resultdir/$rpm )
        fi
    done
    echo >&5
    echo ${to_install[@]}
}


function gui_confirm_install()
# gui_confirm_install <pkg list>: Let user confirm what packages
# to install using GUI. Returns packages to install
{
    local resultdir=$1
    local rpm
    local listdata=()
    for rpm in  $( ls $resultdir ); do
        listdata=( ${listdata[@]} 'True' $rpm )
    done
    zenity --list --title "Select RPMs to install" --checklist \
        --column Install --column RPM \
        --separator=' ' \
        ${listdata[@]} | grep -v "WINDOW DECORATIONS" | awk -v dir=$resultdir \
                            '{for (i=1; i<=NF; i++) print dir "/" $i}'
}


function log_and_echo
{
    echo $*
    echo $* >&5
}


function install_rpms()
# install_rpms <pkg>: Install all built rpms for given package.
{
    local pkg=$1

    local resultdir=$( get_resultdir $pkg )
    local buildlog=$( get_logfile $pkg )

    echo "$pkg: installing rpms."
    exec 5<&1 6<&2
    [ "$(ls $resultdir | wc -l)" = "0" ] && exit 0
    if [ -n "$DISPLAY" ]; then
        local to_install=( $(gui_confirm_install $resultdir) )
    else
        local to_install=( $(cli_confirm_install $resultdir) )
    fi
    exec &>> $buildlog
    if [ -z "${to_install[*]}" ]; then
        log_and_echo "$pkg: no rpms to install."
        $scriptdir/lpf-pkgbuild 'set-state' $pkg 'OK'
        exit 1
    fi
    log_and_echo "$pkg: installing ${to_install[@]}."
    $SUDO $scriptdir/lpf-sudo-install  ${to_install[@]} && \
        $scriptdir/lpf-pkgbuild 'clear-results' $pkg
    case $? in
        0) $scriptdir/lpf-pkgbuild 'set-state' $pkg 'OK'
           log_and_echo "$pkg: install completed, no errors"
           ;;
        *) $scriptdir/lpf-pkgbuild 'set-state' $pkg 'failed'
           log_and_echo "$pkg: installation errors (lpf log shows log)"
           ;;
    esac
}


trap "do_trap 83" SIGINT ERR
install_rpms "$@"


# vim: set expandtab ts=4 sw=4:
