#!/bin/bash

# (c) 2014-2015 Sam Nazarko
# email@samnazarko.co.uk

if [ $(basename $0) = "manual-update" ]; then
        script=$(mktemp) && cp -f $0 $script && chmod u+x $script && exec $script
	exit $?
fi

export TERM=linux
export LANG=C
export DEBIAN_PRIORITY=critical
failed=/var/tmp/.osmc_failed_update
suppress=/var/tmp/.suppress_osmc_update_checks

systemctl stop getty@tty1
clear > /dev/tty1
chvt 1
systemctl stop mediacenter

vres=$(/bin/fbset | grep geometry | awk '{print $3}')
if ((vres<=660))
then
    setfont OSMC-Lat15-Terminus14.psf.gz
elif ((661<=vres && vres<=890))
then
    setfont OSMC-Lat15-TerminusBold22x11.psf.gz
elif ((891<=vres))
then
    setfont OSMC-Lat15-TerminusBold28x14.psf.gz
fi

dialog --backtitle "Package configuration" --title "OSMC Update" --infobox "\n    Checking for updates to install..." 5 48 > /dev/tty1

err=$(dpkg --configure --force-confdef --force-confold -a 2>&1)
if [ -n "$err" ]; then sleep 4; dialog --backtitle "Package configuration" --title "OSMC Update" --infobox "$err\n\nContinuing in 10 seconds..." 0 0 >/dev/tty1; sleep 10; fi

# Package downloads have been done in the addon, so let's get right to upgrade.

rm -f $failed
tmp=$(mktemp)
if ! debconf-apt-progress --logfile $tmp -- apt-get-noninteractive -f -y dist-upgrade > /dev/tty1
then
	pkg=$(basename $(grep -i -A 1 "Errors were encountered while processing" $tmp | tail -n 1)); pkgarr=(${pkg//_/ })
	package="${pkgarr[0]}"; if [ -n "${pkgarr[1]}" ]; then package="$package (${pkgarr[1]})"; fi
	if [ -z "$package" ]; then package="(unknown package)"; fi

	dialog --backtitle "Package configuration" --title "OSMC Update Error" --infobox "\n    An error occurred while installing the following package:\n    $package\n\n    Please report this problem on the OSMC forum, making sure to\n    include debug logs. Attempting to restart Kodi in 30 seconds...\n" 9 74 > /dev/tty1
	echo $package > $failed; chown osmc:osmc $failed
	sleep 25
else
	rm -f $suppress
	[ -e /etc/osmc/prefs.d/update_preferences ] && . /etc/osmc/prefs.d/update_preferences

	desired_kernel=$(dpkg-query -W -f='${Depends}\n' "*-kernel-osmc" | sed -e 's/, */,/g' -e 's/\,/\n/g' | egrep -o ".*-image-.*-osmc")
	running_kernel="-image-$(uname -r)"
	removable_kernels=$(dpkg-query -W -f='${Package}\n' "*-image-*-osmc" | grep -v "$desired_kernel\|$running_kernel")

	if [ -n "$removable_kernels" ] && [ "$OSMC_KERNEL_AUTOREMOVE" = "1" ]
	then
		if ! debconf-apt-progress --logfile $tmp -- apt-get-noninteractive -y purge $removable_kernels > /dev/tty1
		then
			dialog --backtitle "Package configuration" --title "OSMC Update Error" --infobox "\n    An error occurred removing no longer required kernel packages.\n\n    Please report this problem on the OSMC forum, making sure to\n    include debug logs. Attempting to restart Kodi in 30 seconds...\n" 9 74 > /dev/tty1
			echo -e "\nError removing old kernels during manual-update:" >> /var/log/apt/term.log
			cat $tmp >> /var/log/apt/term.log
			sleep 25
		fi
	fi
fi
apt-get clean
sleep 5

rm -f $tmp
if [ -f /tmp/reboot-needed ] || [ -f /var/run/reboot-required ]; then reboot; exit; fi
clear > /dev/tty1
systemctl start mediacenter
rm -f $0
