#!/bin/sh
(
echo "10"
echo "# Обновление информации"
# Обновляем метадату.
dnf refresh -q
# Высняем, надо ли что-то скачивать. Не скачиваем. Запоминаем результат.
if dnf up --downloadonly --assumeno |grep -q "=="; then UPDATE=1; else UPDATE=0; fi
# Если есть, что скачивать - пробуем скачивать.
if [[ $UPDATE = 1 ]]; then
	echo "30"
	echo "# Скачивание пакетов"
	# Если скачать не получилось, считаем, что обновлять нечего.
	dnf up -qy --downloadonly || UPDATE=0
fi
# Если есть, что обновлять - пробуем обновлять. Это первое действие с пакетами.
if [[ $UPDATE = 1 ]]; then
	echo "60"
	echo "# Обновление пакетов"
	# Если обновить не получилось, считаем, что обновлять нечего.
	dnf up -qy || UPDATE=0
fi
# Проверяем, будет ли удаление осиротевших пакетов. Запоминаем результат.
# Проверку стоит проводить после процесса обновления!
if dnf autoremove --assumeno |grep -q "=="; then AUTORM=1; else AUTORM=0; fi
# Если есть, что удалять - пробуем удалить. Это второе действие с пакетами.
if [[ $AUTORM = 1 ]]; then
	echo "90"
	echo "# Чистка пакетов"
	# Если удалить не получилось, считаем, что удалять нечего.
	dnf autoremove -qy || AUTORM=0
fi
# Если использован ключ автовыхода, запоминаем это, блокируя последующий вывод информации.
if [ "$1" = "--auto-close" ]; then
	UPDATE=3
	echo "# Автовыход"	
fi
# Если действий с пакетами не было, сообщаем об этом.
if (( ($UPDATE + $AUTORM) == 0 )); then
	echo "# Готово\n\nИзменений не было"
fi
# Если было только одно действие с пакетами из двух, выводим только последнюю транзакцию.
if (( ($UPDATE + $AUTORM) == 1 )); then
	echo "# Готово\n\nИзменения: dnf history info last"
	zenity --question --default-cancel --timeout 10 --title="Действия выполнены" --text="Показать информацию?" && xterm -T "Изменения в одну транзакцию, выход - средняя кнопка мыши или клавиша" -bg gray -geometry 100x30 -e "dnf history info last; read -s -n 1" &>/dev/null
fi
# Если было оба действия с пакетами, выводим последнюю и предпоследнюю транзакции.
if (( ($UPDATE + $AUTORM) == 2 )); then
	echo "# Готово\n\nИзменения:\ndnf history info last-1 last"
	zenity --question --default-cancel --timeout 10 --title="Действия выполнены" --text="Показать информацию?" && xterm -T "Изменения в две транзакции, выход - средняя кнопка мыши или клавиша" -bg gray -geometry 100x30 -e "dnf history info last-1 last; read -s -n 1" &>/dev/null
fi
echo "100"
) |
zenity --progress \
	--title="Обновление системы" \
	--text="Обновление..." \
	--percentage=0 \
	--width=240 \
	$(if [ "$1" = "--auto-close" ]; then echo $1; fi)

if [ "$?" = -1 ] ; then
        zenity --error \
          --text="Обновление отменено."
fi
