#!/bin/bash

# Sparky APTus Upgrade is a simply tool for upgrading the system
# Created by Paweł "pavroo" Pijanowski 2014/10/31
# Copyright 2014-2024 under the GNU GPL2 License
# Last update 2024/08/22

# get default's locale file
DEFLOCDIR="/usr/share/sparky/sparky-aptus-upgrade"
if [ "`cat /etc/default/locale | grep LANG= | grep de`" != "" ]; then
. $DEFLOCDIR/de
elif [ "`cat /etc/default/locale | grep LANG= | grep el`" != "" ]; then
. $DEFLOCDIR/el
elif [ "`cat /etc/default/locale | grep LANG= | grep es`" != "" ]; then
	if [ "`cat /etc/default/locale | grep LANG= | grep es_AR`" != "" ]; then
. $DEFLOCDIR/es_AR
	else
. $DEFLOCDIR/es_ES
	fi
elif [ "`cat /etc/default/locale | grep LANG= | grep fi`" != "" ]; then
. $DEFLOCDIR/fi
elif [ "`cat /etc/default/locale | grep LANG= | grep fr`" != "" ]; then
. $DEFLOCDIR/fr
elif [ "`cat /etc/default/locale | grep LANG= | grep hu`" != "" ]; then
. $DEFLOCDIR/hu
elif [ "`cat /etc/default/locale | grep LANG= | grep id_ID`" != "" ]; then
. $DEFLOCDIR/id_ID
elif [ "`cat /etc/default/locale | grep LANG= | grep it`" != "" ]; then
. $DEFLOCDIR/it
elif [ "`cat /etc/default/locale | grep LANG= | grep ja`" != "" ]; then
. $DEFLOCDIR/ja
elif [ "`cat /etc/default/locale | grep LANG= | grep pl`" != "" ]; then
. $DEFLOCDIR/pl
elif [ "`cat /etc/default/locale | grep LANG= | grep pt_BR`" != "" ]; then
. $DEFLOCDIR/pt_BR
elif [ "`cat /etc/default/locale | grep LANG= | grep pt_PT`" != "" ]; then
. $DEFLOCDIR/pt_PT
elif [ "`cat /etc/default/locale | grep LANG= | grep ru`" != "" ]; then
. $DEFLOCDIR/ru
elif [ "`cat /etc/default/locale | grep LANG= | grep sk`" != "" ]; then
. $DEFLOCDIR/sk
elif [ "`cat /etc/default/locale | grep LANG= | grep sv`" != "" ]; then
. $DEFLOCDIR/se
elif [ "`cat /etc/default/locale | grep LANG= | grep uk`" != "" ]; then
. $DEFLOCDIR/uk
elif [ "`cat /etc/default/locale | grep LANG= | grep zh_CN`" != "" ]; then
. $DEFLOCDIR/zh_CN
else
. $DEFLOCDIR/en
fi

testroot="`whoami`"
if [ "$testroot" != "root" ]; then
	echo "must be root... exiting..."
	exit 1
fi

DIALOG="yad --width 400 --center"
DIALOG600="yad --width 600 --center"
DIALOGLOG="yad --title=$LOCAL6 --text-info --filename /tmp/aptus-upgrade/changelog --center --width=750 --height=500 --window-icon=/usr/share/icons/sparky/upgrade/aptus-upgrade.svg --buttons-layout=center"
TITLE="--always-print-result --dialog-sep --window-icon=/usr/share/icons/sparky/upgrade/aptus-upgrade.svg --image=/usr/share/icons/sparky/upgrade/aptus-upgrade.png --title="
TITLETEXT="$LOCAL1"
ENTRY="--entry"
TEXT="--text="
ENTRYTEXT="--entry-text"
MSGBOX=" --button=Ok:0"
NOBUTTONS="--no-buttons"
PROGRESS="--progress --pulsate --auto-close --no-buttons --auto-kill --hide-text --text="
#PROGRESSTEXT="--progress-text= "
DIALOGZEN="zenity --progress --pulsate --auto-close --auto-kill --no-cancel --window-icon=/usr/share/icons/sparky/upgrade/aptus-upgrade.svg --width=400"
TITLEZEN="--title="

if [ -f /usr/bin/sparky-xterm ]; then
	SPARKYXTERM="/usr/bin/sparky-xterm"
else
	echo "sparky-xterm is missing... Exiting..."
	exit 1
fi

# if Live system just quit, don't upgrade
#TESTMODE=`grep "live" /etc/passwd`
TESTMODE=`mount | grep squashfs`
if [ "$TESTMODE" != "" ] && [ -d /home/live ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL2"
	exit 1
fi

mainmenu () {
# check out connection to debian server
PINGTEST0=$(ping -c 1 debian.org | grep [0-9])
if [ "$PINGTEST0" = "" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL3"
	exit 1
fi
# check out connection to sparky server
PINGTEST1=$(ping -c 1 sparkylinux.org | grep [0-9])
if [ "$PINGTEST1" = "" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL3"
	exit 1
fi

# refresh package list
#$SPARKYXTERM "apt-get update"
#apt-get update | $DIALOG $TITLE"$TITLETEXT" $PROGRESS"$LOCAL13" $PROGRESSTEXT"$LOCAL14"
apt-get update | $DIALOGZEN $TITLEZEN"$TITLETEXT" $TEXT"$LOCAL13 $LOCAL14"
sleep 1

# preper temporary folder
if [ -d /tmp/aptus-upgrade ]; then
	rm -rf /tmp/aptus-upgrade
fi
mkdir -p /tmp/aptus-upgrade

# get info about packages to be upgraded
apt-get -u dist-upgrade --assume-no >> /tmp/aptus-upgrade/checkout
sed -i '1,4d' /tmp/aptus-upgrade/checkout
#sed -i 1d /tmp/aptus-upgrade/checkout
#sed -i 1d /tmp/aptus-upgrade/checkout
#sed -i 1d /tmp/aptus-upgrade/checkout
sed -i '$ d' /tmp/aptus-upgrade/checkout
sed -i '$ d' /tmp/aptus-upgrade/checkout

# preper changelog
cp /tmp/aptus-upgrade/checkout /tmp/aptus-upgrade/changelog
echo "" >> /tmp/aptus-upgrade/changelog
echo "#===============Upgrading Details==============================#" >> /tmp/aptus-upgrade/changelog
echo "" >> /tmp/aptus-upgrade/changelog

# make list of upgradable packages with versions
apt list --upgradable >> /tmp/aptus-upgrade/upgradable
sed -i 1d /tmp/aptus-upgrade/upgradable
cat /tmp/aptus-upgrade/upgradable >> /tmp/aptus-upgrade/changelog

# display dialog menu now
dialogmenu
}

dialogmenu () {
# check out connection to debian server
PINGTEST0=$(ping -c 1 debian.org | grep [0-9])
if [ "$PINGTEST0" = "" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL3"
	exit 1
fi
# check out connection to sparky server
PINGTEST1=$(ping -c 1 sparkylinux.org | grep [0-9])
if [ "$PINGTEST1" = "" ]; then
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL3"
	exit 1
fi

# get info about packages to be upgraded
UPGRADE1=$(cat /tmp/aptus-upgrade/checkout | tail -n2 | grep [kM]B)

if [ "$UPGRADE1" != "" ]; then

# build window
ACTION=$($DIALOG $TITLE"$TITLETEXT" $ENTRY \
    $MSGBOX \
    $TEXT"$UPGRADE1\n\n$LOCAL4" \
    $ENTRYTEXT \
    "$LOCAL5" "$LOCAL6" "$LOCAL7")

case $ACTION in
    $LOCAL5*) upgrademenu ;;
    $LOCAL6*) changelogmenu ;;
    $LOCAL7*) exit 0 ;;
    *) exit 0 ;;        
esac

eval exec $cmd

else
	$DIALOG $TITLE"$TITLETEXT" $MSGBOX $TEXT"$LOCAL8"
	exit 0
fi
}

upgrademenu () {
# do full upgrade
CHECKNALA=`which nala`
if [ "$CHECKNALA" != "" ]; then
	$SPARKYXTERM "nala upgrade --full --no-install-recommends --no-autoremove -y"
else
	$SPARKYXTERM "apt full-upgrade --no-install-recommends -y"
fi
sleep 1

# re-check is your system up-to-date
mainmenu
}

changelogmenu () {
$DIALOGLOG $MSGBOX

dialogmenu
}

mainmenu
