#!/usr/bin/sh

# Extract all RPM files from the given directory
# Created: 2021.05.05.19:27
# Author: Kārlis Kalviškis <eko@lanet.lv>
# License: GPLv3

# For translation
export TEXTDOMAIN="karlo-scripts"
. gettext.sh

echo `eval_gettext 'Extract all'` RPM `eval_gettext 'files from the given directory'`

type -P rpm2cpio &>/dev/null || { echo  "`eval_gettext 'Command'` 'rpm2cpio' `eval_gettext 'is missing'`"; exit 1; }
type -P cpio &>/dev/null || { echo  "`eval_gettext 'Command'` 'cpio' `eval_gettext 'is missing'`"; exit 1; }

UnPack()
# The existence of the second argument forces to create directories for each archive
{
	typeset direktorija
	typeset fails
	fails=$1
	if [ $# -gt 1 ]; then
		direktorija=${1%????}
		mkdir $direktorija
		cd $direktorija
		fails=../$1
	fi
	echo "***************** `eval_gettext 'Extracting'` $1"
	rpm2cpio $fails | cpio -idm
	if [ $# -gt 1 ]; then
		cd ..
	fi
}

direktorija=''
paziime='*.rpm'
skaits=0
if [ $# -gt 0 ]; then
	for parametrs in $*
	do
		case $parametrs in
			-h | --help ) echo `eval_gettext 'Usage'`: $0 [-d] [-h\|--help] [file] [file] ...
				echo `eval_gettext 'Without any parameters, the script will unpack all'` RPM `eval_gettext 'files'`.
				echo -e '\t-d – '`eval_gettext 'each'` RPM `eval_gettext 'file will be pack in its own directory'`.
				echo -e '\t-h|--help – '`eval_gettext 'this help file'`.
				echo -e '\tfile – RPM '`eval_gettext 'file to be unpacked'`.
				exit
				;;
			-d ) direktorija='d'
				;;
			-* ) echo `eval_gettext 'Unknown parameter'` " $parametrs"
				exit 1
				;;
			* ) if [[ $parametrs = *\?* || $parametrs = *\** ]]; then
					paziime=$parametrs
				else
					pfails='true'
					pfaili[skaits++]=$parametrs
				fi
				;;
		esac
	done
fi
if [ -z $pfails ]; then
# No file name or file name with wild-cards is used
	for f in $paziime
	do
		if [ -f $f ] ; then
			UnPack $f $direktorija
		else
			echo  `eval_gettext 'Cannot find '` $f 
		fi
	done
	exit
else
# File name is used
	for pfails in ${pfaili[@]}
	do
		if [ -f $pfails ] ; then
			UnPack $pfails $direktorija
		else
			echo  `eval_gettext 'Cannot find '` $pfails 
		fi
	done
	exit
fi
