#!/bin/bash
# barium helper scripts
# author: rosalinux.ru: betcher_
UPDATE_MODULES_QUERY="getmod dnf2mod chroot2mod"
if [ -f $(dirname $0)/lib ] ;  then
    . $(dirname $0)/lib
else
    . $(which lib) || exit 1
fi

UPDATED=''
INTERACT='no'
REBOOT='no'
POWEROFF='no'

HLP(){
echo "$(basename $0) - утилита для автоматического обновления подключенных модулей"
echo "собранных с помощью barium dnf2mod"
echo "Использование:"
echo "$(basename $0)         - обновить модули"
echo "$(basename $0) -i      - спрашивать для каждого модуля"
echo "$(basename $0) -r / -p - reboot или poweroff после завершения"
exit 1
}

while [ -n "$1" ]; do
  case "$1" in
	"-i" | "--interactive" ) INTERACT='yes' ;;
	"-r" | "--reboot" ) REBOOT='yes' ;;
	"-p" | "--poweroff" ) POWEROFF='yes' ;;
	"-h" | "--help" ) HLP ;;
    "-"*[A-Za-z]*) echo "$(basename "$0"): invalid option -- '$(echo ${1} | tr -d '-')'" >&2; exit 1;;
    *) 	echo "unknown parameter: $1, will be ignored" ;;
  esac
  shift
done

interactive() {
	if [ "$INTERACT" == 'yes' ] ; then
		while true ; do
			echo "run: $@ ?"
			echo "Yy/Nn"
			read ans
			[ "$ans" == 'y' ] || [ "$ans" == 'Y' ] && break
			[ "$ans" == 'n' ] || [ "$ans" == 'N' ] && return 1
		done
	fi
	$@
}

dnf2mod_way() {
	for module in  $(barium ls --hidetop --raw '$source') ; do
		echo "$UPDATED" | grep -wq "$module" && continue
		grep -wq "$module" ${SYSMNT}/layer-base/0/_REPOLIST && continue
		if [ $(barium modinfo $module |grep 'dnf2mod cmdline' |wc -l) -eq 1 ] ; then
			pushd $(dirname $module) >/dev/null
			interactive barium dnf2mod $module --upd && UPDATED+="$module "
			popd >/dev/null
		else
			echo "module: $module cannot be automatically updated by dnf2mod"
		fi
	done
}

# пока не работает как нужно. Не использовать !
chroot2mod_way() {
	updatemod(){
		mv -f $1 ${1}.old
		if barium chroot2mod --upd  "$1" ; then
			return 0
		else
			mv ${1}.old $1
		fi
	return 1
	}

	for module in  $(barium ls --hidetop --raw '$source') ; do
		echo "$UPDATED" | grep -wq "$module" && continue
		grep -wq "$module" ${SYSMNT}/layer-base/0/_REPOLIST && continue
		if [  $(barium modinfo $module -f rebuildable | grep '==>' | wc -l) -eq 1 ] ; then
			pushd $(dirname $module) >/dev/null
			interactive updatemod $(basename $module) && UPDATED+="$module "
			popd >/dev/null
		else
			echo "module: $module cannot be automatically updated by chroot2mod"
		fi
	done
}

getmod_way() {
	barium getmod -u
	updatemod(){
		mv -f $1 ${1}.old
		if barium getmod -f "$1" ; then
			return 0
		else
			mv ${1}.old $1
		fi
	return 1
	}
	for module in  $(barium ls --hidetop --raw '$source') ; do
		echo "$UPDATED" | grep -wq "$module" && continue
		grep -wq "$(basename $module)" ${SYSMNT}/layer-base/0/_REPOLIST && continue
		found=$(barium getmod -g -s $(basename $module) | grep 'new:>>' |cut -f2 -d ' ')
		pushd $(dirname $module) >/dev/null
		if [ "$found" ] && [ "$(basename $found)" == "$(basename $module)" ] ; then
			interactive updatemod $(basename $module) && UPDATED+="$module "
		else
			echo "module: $module not found in repo"
		fi
		popd >/dev/null
	done
}

for way in $UPDATE_MODULES_QUERY ; do ${way}_way ; done
echo "=================================================================="
echo "Updated: $UPDATED"

[ "$REBOOT" == 'yes' ] && reboot && exit
[ "$POWEROFF" == 'yes' ] && poweroff
