#!/bin/sh
#
# List installed packages in a suitable format for GTK tree.
# List mirrored packages using the packages.desc file.
#

undigest_list()
{
	IFS="|"
	if [ -n "$1" ]; then
		cat /var/lib/tazpkg/undigest/$1/packages.desc
	else
		cat /var/lib/tazpkg/undigest/*/packages.desc
	fi 2> /dev/null | sort | while read PACKAGE VERSION SHORT_DESC; do
		echo "$PACKAGE|$VERSION|$SHORT_DESC"
	done
	unset IFS
}

installable_list()
{
	IFS="|"
	cat /var/lib/tazpkg/packages.desc \
	    /var/lib/tazpkg/undigest/*/packages.desc 2> /dev/null | sort | \
	while read PACKAGE VERSION SHORT_DESC; do
		[ -d /var/lib/tazpkg/installed/${PACKAGE%% *} ] && continue
		echo "$PACKAGE|$VERSION|$SHORT_DESC"
	done
	unset IFS
}

installed_list()
{
	for pkg in /var/lib/tazpkg/installed/*
	do
		. $pkg/receipt
		if [ "$CAT" == "all" -o "$CATEGORY" == "$CAT" ]; then
			echo "$PACKAGE|$VERSION|$SHORT_DESC"
		fi
	done
}

blocked_list()
{
	for pkg in /var/lib/tazpkg/installed/*
	do
		. $pkg/receipt
		if grep -qs "^$(basename $pkg)$" /var/lib/tazpkg/blocked-packages.list; then
			AVAILABLE=$(grep "^$(basename $pkg) " /var/lib/tazpkg/packages.desc | awk '{ print $3 }')
			
			echo "$PACKAGE|$VERSION|$AVAILABLE|$SHORT_DESC"
		fi
	done
}

case $1 in
	installed)
		CAT=`cat /tmp/tazpkgbox/installed-category`
		installed_list $CAT;;
	installable)
		CAT=`cat /tmp/tazpkgbox/installable-category`
		if [ "$CAT" == "all" ]; then
			installable_list
		else
			installable_list | grep "$CAT"
		fi ;;
	undigest)
		set -- `cat /tmp/tazpkgbox/undigest-category`
		if [ "$1" == "all" -o "$1" == "" ]; then
			undigest_list $2
		else
			undigest_list $2 | grep "$1"
		fi ;;
	mirrored)
		CAT=`cat /tmp/tazpkgbox/mirrored-category`
		if [ "$CAT" == "all" ]; then
			cat /var/lib/tazpkg/packages.desc
		else
			grep "$CAT" /var/lib/tazpkg/packages.desc
		fi ;;
	blocked)
		blocked_list;;
	*)
		echo "Usage: /usr/lib/slitaz/tazpkgbox/list [installed|installable|mirrored|undigest|blocked]" ;;
esac

exit 0
