#!/bin/sh
# vim:et:sta:sts=4:sw=4:ts=8:tw=79:
#
# A tool to manage .new configuration files in slackware and slackware
# based distributions.
#
# Written by George Vlahavas <vlahavas~at~gmail~dot~com>
# Licensed under the GPL v3

# Translations only work with utf8 locales
if ! locale -k charmap|grep -q UTF-8 ; then
    LANG=C
fi

# For gettext internationalization
export TEXTDOMAIN="dotnew"
export TEXTDOMAINDIR="/usr/share/locale"
. gettext.sh

if [ "$UID" != "0" ]; then
    echo "`eval_gettext 'You need to be root to run this'`"
    exit 1
fi

rm -f /tmp/dotnew.$$ /tmp/dotnewdiff.$$

dialog="dialog"

dotnewdialog()
{
if [ -x /usr/bin/vimdiff ]; then
    file=$1
    $dialog --title "dotnew" --backtitle "$file" \
    --ok-label "`eval_gettext 'OK'`" --cancel-label "`eval_gettext 'Cancel'`" \
    --menu \
    "`eval_gettext 'New settings file found: $file\n\nWhat do you want to do with it?'`" 20 110 5 \
    "`eval_gettext 'Replace'`" "`eval_gettext 'Replace the old settings file with the new one'`" \
    "`eval_gettext 'Delete'`" "`eval_gettext 'Delete the new settings file'`" \
    "`eval_gettext 'Diff'`" "`eval_gettext 'View the differences between the old and new settings files'`" \
    "Vimdiff" "`eval_gettext 'Use vimdiff to edit the old and new settings files'`" \
    "`eval_gettext 'Nothing'`" "`eval_gettext 'Do nothing for now, decide about it later'`" 2> /tmp/dotnew.$$
else
    file=$1
    $dialog --title "dotnew" --backtitle "$file" \
    --ok-label "`eval_gettext 'OK'`" --cancel-label "`eval_gettext 'Cancel'`" \
    --menu \
    "`eval_gettext 'New settings file found: $file\n\nWhat do you want to do with it?'`" 20 110 5 \
    "`eval_gettext 'Replace'`" "`eval_gettext 'Replace the old settings file with the new one'`" \
    "`eval_gettext 'Delete'`" "`eval_gettext 'Delete the new settings file'`" \
    "`eval_gettext 'Diff'`" "`eval_gettext 'View the differences between the old and new settings files'`" \
    "`eval_gettext 'Nothing'`" "`eval_gettext 'Do nothing for now, decide about it later'`" 2> /tmp/dotnew.$$
fi

if [ ! $? -eq 0 ]; then
    rm -f /tmp/dotnew.$$
    exit 0
fi

choice=`cat /tmp/dotnew.$$`
rm -f /tmp/dotnew.$$

case $choice in
    "`eval_gettext 'Replace'`")
        cp -f $2 $2.orig
        cp -f $1 $2
        rm -f $1
        ;;
    "`eval_gettext 'Delete'`")
        rm -f $1
        ;;
    "`eval_gettext 'Diff'`")
        diff -dU 1 $2 $1 > /tmp/dotnewdiff.$$
        $dialog --title "diff" --textbox /tmp/dotnewdiff.$$ 25 80
        rm -f /tmp/dotnewdiff.$$
        dotnewdialog $1 $2
        ;;
    Vimdiff)
        vimdiff $2 $1
        ;;
esac
}

dotnewfiles="$(find /etc -name "*.new")"
if [ -n "$dotnewfiles" ];then
    for i in $dotnewfiles; do
        orig="$(echo $i | sed "s/\.new$//")"
        if [ -f $orig ]; then
            dotnewdialog $i $orig
        else
            $dialog --title "dotnew" \
            --yes-label "`eval_gettext 'Yes'`" \
            --no-label "`eval_gettext 'No'`" \
            --yesno "`eval_gettext 'There is no $orig file present.\nMove $i to $orig ?'`" 12 80
            if [ $? -eq 0 ]; then
                cp -f $i $orig
                rm -f $i
            fi
        fi
    done
    $dialog --title "`eval_gettext 'Ready'`" \
    --ok-label "`eval_gettext 'OK'`" \
    --msgbox "`eval_gettext 'Done processing all .new files'`" 7 80
else
    $dialog --title "`eval_gettext 'No .new files'`" --ok-label "`eval_gettext 'OK'`" \
    --msgbox "`eval_gettext 'There are no .new configuration files in your system'`" 7 80
fi

