#! /bin/bash
#------------------------------------------------------------------------------
#
# install_yast_icons
#
#------------------------------------------------------------------------------
# Comments to:
#   support@novell.com
#------------------------------------------------------------------------------
# Copyright 2005, Novell, Inc.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
#
# This script and its embedded programs are distributed with
# absolutely, positively NO WARRANTY WHATSOEVER, without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE.  The author and Novell, Inc. take no responsibility for
# the consequences of running this script.
#------------------------------------------------------------------------------
#
#   START_DIR = pwd - the current working directory
#
#------------------------------------------------------------------------------

VERSION=1.4
SCRIPT_NAME='install_yast_icons'
START_DIR=`pwd`
DATE=`date`


determineIfSourceExists ()
{
    if [ ! -e $ICON_SOURCE/$DIR_22/$ICON_FILE ]
    then
        echo ""
        echo "[$SCRIPT_NAME] ERROR: The icon source file:"
        echo "[$SCRIPT_NAME]   $ICON_SOURCE/$DIR_22/$ICON_FILE"
        echo "[$SCRIPT_NAME] was not found."
        echo ""
        echo "ERROR: Icon source file not found: $ICON_SOURCE/$DIR_22/$ICON_FILE" 1>>$LOG_DIR_FILE
        exit 3
    fi
        
    if [ ! -e $ICON_SOURCE/$DIR_32/$ICON_FILE ]
    then
        echo ""
        echo "[$SCRIPT_NAME] ERROR: The icon source file:"
        echo "[$SCRIPT_NAME]   $ICON_SOURCE/$DIR_32/$ICON_FILE"
        echo "[$SCRIPT_NAME] was not found."
        echo ""
        echo "ERROR: Icon source file not found: $ICON_SOURCE/$DIR_32/$ICON_FILE" 1>>$LOG_DIR_FILE
        exit 3
    fi

    if [ ! -e $ICON_SOURCE/$DIR_48/$ICON_FILE ]
    then
        echo ""
        echo "[$SCRIPT_NAME] ERROR: The icon source file:"
        echo "[$SCRIPT_NAME]   $ICON_SOURCE/$DIR_48/$ICON_FILE"
        echo "[$SCRIPT_NAME] was not found."
        echo ""
        echo "ERROR: Icon source file not found: $ICON_SOURCE/$DIR_48/$ICON_FILE" 1>>$LOG_DIR_FILE
        exit 3
    fi
}

determineIfCopyDeleteRequired ()
{
    for YAST_THEME_DIR in $YAST_THEME_DIRS
    do
        if [ ! -h $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR ]
        then
            if [ -d $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR ]
            then
                if [ -e $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE ]
                then
                    DELETE_ICONS="yes"
                else
                    COPY_ICONS="yes"
                fi 
        
                if [ -e $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE ]
                then
                    DELETE_ICONS="yes"
                else
                    COPY_ICONS="yes"
                fi 
        
                if [ -e $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE ]
                then
                    DELETE_ICONS="yes"
                else
                    COPY_ICONS="yes"
                fi 
            fi
        fi
    done
}


copyDeleteIcons ()
{
    for YAST_THEME_DIR in $YAST_THEME_DIRS
    do
        if [ -z "$LAUNCHER" ]
        then
            echo ""
        fi
        if [ -h $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR ]
        then
            if [ -z "$LAUNCHER" ]
            then
                echo "[$SCRIPT_NAME] skip  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR because it is a link"
            fi
            echo "skip  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR because it is a link" 1>>$LOG_DIR_FILE
        else
            if [ -d $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR ]
            then
                if [ -z "$LAUNCHER" ]
                then
                    echo "[$SCRIPT_NAME] processing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR"
                fi
                echo "processing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR" 1>>$LOG_DIR_FILE
                                
                if [ "$MODE" = "install" ]
                then
                    echo "[$SCRIPT_NAME] installing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE"
                    echo "installing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE" 1>>$LOG_DIR_FILE
                    if [ ! -d $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR ]
                    then
                        mkdir -p $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR
                    fi
                    cp -r $ICON_SOURCE/$DIR_22/$ICON_FILE $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE
                else
                    echo "[$SCRIPT_NAME] uninstalling  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE"
                    echo "uninstalling  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE" 1>>$LOG_DIR_FILE
                    rm -f $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_22/$APPS_DIR/$ICON_FILE
                fi
                
                if [ "$MODE" = "install" ]
                then
                    echo "[$SCRIPT_NAME] installing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE"
                    echo "installing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE" 1>>$LOG_DIR_FILE
                    if [ ! -d $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR ]
                    then
                        mkdir -p $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR
                    fi
                    cp -r $ICON_SOURCE/$DIR_32/$ICON_FILE $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE
                else
                    echo "[$SCRIPT_NAME] uninstalling  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE"
                    echo "uninstalling  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE" 1>>$LOG_DIR_FILE
                    rm -f $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_32/$APPS_DIR/$ICON_FILE
                fi
    
                if [ "$MODE" = "install" ]
                then
                    echo "[$SCRIPT_NAME] installing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE"
                    echo "installing  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE" 1>>$LOG_DIR_FILE
                    if [ ! -d $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR ]
                    then
                        mkdir -p $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR
                    fi
                    cp -r $ICON_SOURCE/$DIR_48/$ICON_FILE $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE
                else
                    echo "[$SCRIPT_NAME] uninstalling  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE"
                    echo "uninstalling  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE" 1>>$LOG_DIR_FILE
                    rm -f $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR/$ICONS_DIR/$DIR_48/$APPS_DIR/$ICON_FILE
                fi
            else
                if [ -z "$LAUNCHER" ]
                then
                    echo "[$SCRIPT_NAME] skip  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR because it is not a directory"
                fi
                echo "skip  $YAST_THEME_DIR_PREFIX/$YAST_THEME_DIR because it is not a directory" 1>>$LOG_DIR_FILE
            fi
        fi
    done
}    


#----------------------------------------------------------------------------
# the MAIN routine
#---------------------------------------------------------------------------

COPY_ICONS="no"
DELETE_ICONS="no"
YAST_THEME_DIR_PREFIX="/usr/share/YaST2/theme"
YAST_THEME_DIRS=`ls $YAST_THEME_DIR_PREFIX`
LOG_DIR="/var/opt/novell/log/ncl"
LOG_FILE="install_yast_icons.log"
LOG_DIR_FILE="$LOG_DIR/$LOG_FILE"
ICON_SOURCE="/opt/novell/ncl/share/icons"
DIR_22="22x22"
DIR_32="32x32"
DIR_48="48x48"
APPS_DIR="apps"
ICONS_DIR="icons"
ICON_FILE="novell-client.png"

if [ -z "$1" ]
then
    MODE="install"
else
    MODE=$1
    if [ -z "$2" ]
    then
        LAUNCHER=""
    else
        LAUNCHER=$2
    fi
fi

echo ""
echo "[$SCRIPT_NAME] $SCRIPT_NAME v$VERSION"

if [ ! -d $LOG_DIR ]
then
    mkdir -p $LOG_DIR
fi
echo "" 1>>$LOG_DIR_FILE
echo "$SCRIPT_NAME v$VERSION - $DATE" 1>>$LOG_DIR_FILE
echo "mode = <$MODE>" 1>>$LOG_DIR_FILE
echo "launcher = <$LAUNCHER>" 1>>$LOG_DIR_FILE

# verify that a valid mode was entered
case "$MODE" in
    "install" | "uninstall" )
    echo "<$MODE> is a valid mode" 1>>$LOG_DIR_FILE
    ;;

    "usage" | "help" | "-?" )
    echo ""
    echo "[$SCRIPT_NAME] usage:  $SCRIPT_NAME  [ install | uninstall | usage | help | -? ]"
    echo ""
    echo "usage:  $SCRIPT_NAME  [ install | uninstall | usage | help | -? ]" 1>>$LOG_DIR_FILE
    exit 1
    ;;

    * )
    echo ""
    echo "[$SCRIPT_NAME] invalid mode: <$MODE>"
    echo "[$SCRIPT_NAME] usage:  $SCRIPT_NAME  [ install | uninstall | usage | help | -? ]"
    echo ""
    echo "invalid mode: <$MODE>" 1>>$LOG_DIR_FILE
    exit 1
    ;;
esac

    
# verify that a valid launcher was entered
case "$LAUNCHER" in
    "YaST" | "rpm" )
    echo "<$LAUNCHER> is a valid launcher" 1>>$LOG_DIR_FILE
    ;;

    * )
    if [ -n "$2" ]
    then
        echo ""
        echo "[$SCRIPT_NAME] invalid option: <$LAUNCHER>"
        echo "[$SCRIPT_NAME] usage:  $SCRIPT_NAME  [ install | uninstall | usage | help | -? ]"
        echo ""
        echo "invalid launcher: <$LAUNCHER>" 1>>$LOG_DIR_FILE
        exit 1
    fi
    ;;
esac

    
# validate that the user running the script is root
ROOT_UID=0
echo "User id = <$UID>" 1>>$LOG_DIR_FILE
if [ "$UID" -ne "$ROOT_UID" ]
then
    echo ""
    echo "[$SCRIPT_NAME] ERROR: You are not the root user."
    echo "[$SCRIPT_NAME] To install or uninstall the Novell Client for Linux"
    echo "[$SCRIPT_NAME] YaST icons you must login as the root user."
    echo ""
    echo "ERROR: You are not the root user." 1>>$LOG_DIR_FILE
    exit 2
fi

# verifty that the icons can be installed
if [ "$MODE" = "install" ]
then
    determineIfSourceExists
fi

# verify that the icons need to be installed or uninstalled
if [ -z "$LAUNCHER" ]
then
    echo ""
    echo "[$SCRIPT_NAME] Determining if the Novell Client for Linux"
    if [ "$MODE" = "install" ]
    then
        echo "[$SCRIPT_NAME] YaST icons need to be installed."
    else
        echo "[$SCRIPT_NAME] YaST icons need to be uninstalled."
    fi
    echo "[$SCRIPT_NAME] Please wait..."
fi

if [ "$MODE" = "install" ]
then
    if [ "$LAUNCHER" = "YaST" ]
    then
        determineIfCopyDeleteRequired
    else
        COPY_ICONS="yes"
    fi
else
    determineIfCopyDeleteRequired
fi


# install or uninstall the icons
if [ "$MODE" = "install" ]
then
    if [ "$COPY_ICONS" = "yes" ]
    then
        if [ -n "$LAUNCHER" ]
        then
            CONTINUE="y"
        else        
            echo ""
            echo "[$SCRIPT_NAME] This script installs the Novell Client for Linux"
            echo "[$SCRIPT_NAME] YaST icons in all of the YaST theme directories."
            echo ""
            echo "[$SCRIPT_NAME] Are you sure you want to install the YaST icons? (y/n)"
            read CONTINUE
        fi
    else
        echo ""
        echo "[$SCRIPT_NAME] The Novell Client for Linux YaST icons are already installed"
        echo ""
        echo "The Novell Client for Linux YaST icons are already installed" 1>>$LOG_DIR_FILE
        exit    
    fi
else
    if [ "$DELETE_ICONS" = "yes" ]
    then
        if [ -n "$LAUNCHER" ]
        then
            CONTINUE="y"
        else        
            echo ""
            echo "[$SCRIPT_NAME] This script uninstalls the Novell Client for Linux"
            echo "[$SCRIPT_NAME] YaST icons in all of the YaST theme directories."
            echo ""
            echo "[$SCRIPT_NAME] Are you sure you want to uninstall the YaST icons? (y/n)"
            read CONTINUE
        fi
    else
        echo ""
        echo "[$SCRIPT_NAME] The Novell Client for Linux YaST icons are already uninstalled"
        echo ""
        echo "The Novell Client for Linux YaST icons are already uninstalled" 1>>$LOG_DIR_FILE
        exit    
    fi
fi

if [ "$CONTINUE" = "y" ]
then
    if [ "$MODE" = "install" ]
    then
        if [ -z "$LAUNCHER" ]
        then
            echo ""
            echo "[$SCRIPT_NAME] Installing Novell Client for Linux YaST icons"
            echo "[$SCRIPT_NAME] Please wait..."
        fi
        
        copyDeleteIcons
    
        if [ -z "$LAUNCHER" ]
        then
            echo ""
            echo "[$SCRIPT_NAME] Installation of the Novell Client for Linux"
            echo "[$SCRIPT_NAME] YaST icons completed"
            echo ""
        fi

        echo "Installation of the Novell Client for Linux YaST icons completed" 1>>$LOG_DIR_FILE
        exit
    else
        if [ -z "$LAUNCHER" ]
        then
            echo ""
            echo "[$SCRIPT_NAME] Uninstalling Novell Client for Linux YaST icons"
            echo "[$SCRIPT_NAME] Please wait..."
        fi
        
        copyDeleteIcons
    
        if [ -z "$LAUNCHER" ]
        then
            echo ""
            echo "[$SCRIPT_NAME] Uninstallation of the Novell Client for Linux"
            echo "[$SCRIPT_NAME] YaST icons completed"
            echo ""
        fi

        echo "Uninstallation of the Novell Client for Linux YaST icons completed" 1>>$LOG_DIR_FILE
        exit
    fi
else
    if [ "$MODE" = "install" ]
    then
        if [ -z "$LAUNCHER" ]
        then
            echo ""
            echo "[$SCRIPT_NAME] Installation of the Novell Client for Linux"
            echo "[$SCRIPT_NAME] YaST icons cancelled"
            echo ""
        fi
        
        echo "Installation of the Novell Client for Linux YaST icons cancelled" 1>>$LOG_DIR_FILE
        exit
    else
        if [ -z "$LAUNCHER" ]
        then
            echo ""
            echo "[$SCRIPT_NAME] Uninstallation of the Novell Client for Linux"
            echo "[$SCRIPT_NAME] YaST icons cancelled"
            echo ""
        fi

        echo "Uninstallation of the Novell Client for Linux YaST icons cancelled" 1>>$LOG_DIR_FILE
        exit
    fi
fi
exit

