#! /bin/sh
#----------------------------------------------------------------------------
# /var/install/bin/deinstall-package - deinstall EIS/FAIR packages
#
# Copyright (c) 2001-2005 Michell Schimanski <m.schimanski@tu-bs.de>
#                         the eisfair team, team(at)eisfair(dot)org
#
# Creation:    2001-12-09  ms
# Last Update: $Id$
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#----------------------------------------------------------------------------

# include eislib
. /var/install/include/eislib

# include packagelib
. /var/install/include/packagelib

# List all packages
#   TRUE   list all packages
#   FALSE  list only packages that can be removed
list_all_packages=FALSE

# Number of entries per page
entries_per_page=18

# Startline
start_line=3

#exec 2>./deinstall-package-trace-$$.log
#set -x

#----------------------------------------------------------------------------
# execute cui package list application if curses menu is active
#----------------------------------------------------------------------------
. /etc/config.d/setup

if [ "$MENU" = "/var/install/bin/show-menu.cui" ]
then
    /var/install/bin/list-packages.cui \
        -t "Deinstall package" \
        --helpfile=/var/install/help/packages \
        --onlyremovable \
        --helpname=PACKAGELIST
    exit 0
fi

#----------------------------------------------------------------------------
# print_package_info
#----------------------------------------------------------------------------
print_package_info ()
{
    clrhome
    mecho -info "Package information"
    mecho

    techo begin 4 16 60
    techo row "" "Package:" "$DP_PACKAGE_NAME"
    techo row
    techo row "" "Description:" "$DP_PACKAGE_SHORT"
    techo row
    techo row "" "Version:" "$DP_PACKAGE_VERSION"
    techo row
    techo row "" "Date:" "$DP_PACKAGE_DATE"
    techo row
    techo row "" "Author:" "$DP_PACKAGE_AUTHOR"

    # check package usage, keep result in /tmp/pkglist.$$
    if ! /var/install/bin/check-package-usage $DP_PACKAGE_NAME > /tmp/pkglist.$$
    then
        techo row
        techo row "" -warn "Active package references:"
        techo row
        techo row "" "`cat /tmp/pkglist.$$`"
    fi
    rm -f /tmp/pkglist.$$

    techo end
    mecho
}

#============================================================================
# main
#============================================================================

maxline=`expr $entries_per_page + $start_line`

while [ 1 ]
do
    clrhome
    if [ $list_all_packages = 'TRUE' ]
    then
       mecho -info "Remove packages"
    else
       mecho -info "Remove packages (only packages that can be removed are listet)"
    fi
    mecho
    techo begin 4 4 31 28 12

    row=$start_line
    a=''

    n=0
    for j in /var/install/packages/*
    do

        if [ $list_all_packages != 'TRUE' ]
        then
           # list only packages that can be removed
           package=`basename $j`
           [ ! -f /var/install/deinstall/$package ] && continue
        fi

        n=`expr $n + 1`
        parse_infofile $j DP

        techo row "" "$n." "$DP_PACKAGE_NAME" "$DP_PACKAGE_VERSION" "$DP_PACKAGE_DATE"

        eval _package_$n='"$j"'

        row=`expr $row + 1`

        if [ $row -eq $maxline ]
        then
            mecho
            mecho

            /var/install/bin/ask "Select package to remove" "" "1-$n" "^$=next page" "b=Back" "0=Exit" > /tmp/ask.$$
            rc=$?
            a=`cat /tmp/ask.$$`
            rm -f /tmp/ask.$$
            if [ $rc = 255 ]
            then
                exit 1
            fi

            case "$a" in
             0)  techo end
                 exit 127
                 ;;
             b)  techo end
                 exit 0
                 ;;
             '') # show next page
                 ;;
             *)  break
                 ;;
            esac

            clrhome
            if [ $list_all_packages = 'TRUE' ]
            then
               mecho -info "Remove packages"
            else
               mecho -info "Remove packages (only packages that can be removed are listet)"
            fi
            mecho
            row=$start_line
        fi
    done

    techo end

    if [ "$a" = "" ]
    then
        mecho
        mecho
        /var/install/bin/ask "Select package to remove" "" "1-$n" "^$=Return" "0=Exit"  > /tmp/ask.$$
        rc=$?
        a=`cat /tmp/ask.$$`
        rm -f /tmp/ask.$$
        if [ $rc = 255 ]
        then
            exit 1
        fi
    fi

    case "$a" in
     0)  exit 127
         ;;
     '') exit 0
         ;;
     *)  ;;
    esac

    eval file='$_package_'$a
    parse_infofile $file DP

    print_package_info
    mecho

    /var/install/bin/ask "Do you really want to delete it" 'n' > /tmp/ask.$$
    rc=$?
    yesno=`cat /tmp/ask.$$`
    rm -f /tmp/ask.$$
    if [ $rc = 255 ]
    then
        exit 1
    fi

    if  [ "$yesno" = "yes" ]
    then
        echo
        pfile=`basename $file`
        /var/install/bin/del-package $pfile
    else
        exit 0
    fi

    anykey
done

#============================================================================
# end
#============================================================================