#!/bin/sh
#
# Dialog box to provide package info and actions
#

XTERM_OPTS="-geometry 80x16+120+120"

PKG=`cat /tmp/tazpkgbox/pkg | sed s/" "/""/g`
ROOT=/var/lib/tazpkg
if [ "$(cat /tmp/tazpkgbox/status)" = "linkable" ]; then
	ROOT=$(readlink /var/lib/tazpkg/fslink)$ROOT
fi
TMP_DIR=/tmp/tazpkg-$$-$RANDOM

if [ "$1" = "sizes" ]; then
	cat <<EOT
Dependancies for $2:
$(tazpkg depends $2)

Reverse dependancies for $2:
$(tazpkg rdepends $2)
EOT
	exit 0
fi
if [ "$1" = "info" ]; then
	RECEIPT=$ROOT/installed/$3/receipt
	. $RECEIPT
	case "$2" in
	Web*) browser $WEB_SITE &;;
	Siz*) xterm -T "$3 depends (q to quit)" -e "$0 sizes $3 | less";;
	Upg*) xterm -T "$3 upgrade" -e "tazpkg get-install $3 --forced ; sleep 2";;
	Hand*) browser $HANDBOOK_URL &;;
	Sug*) $0 list_packages $SUGGESTED;;
	Dep*) $0 list_packages $DEPENDS;;
	Mod*) $0 list_packages $(xargs echo < $ROOT/installed/$3/modifiers);;
	Con*) tazpkgbox list_config $3;;
	Ver*) xterm -T "$3 receipt (q to quit)" -e "cat $RECEIPT | less";;
	esac
	exit 0
fi

if [ "$1" = "list_files" ]; then
	CONF_FILES="$(tazpkg list-config $2 | awk "$AWK_FILTER")"
	if [ -n "$CONF_FILES" ]; then
		mkdir $TMP_DIR
		zcat $ROOT/installed/$2/volatile.cpio.gz | \
			( cd $TMP_DIR ; cpio -id > /dev/null )
	fi
	cat $ROOT/installed/$2/files.list | grep ^/ | while read file; do
		realfile="$file"
		if [ "$(cat /tmp/tazpkgbox/status)" = "linkable" ]; then
			realfile="$(readlink /var/lib/tazpkg/fslink)$file"
		fi
		echo -n "$(stat -c "%A|%U|%G|%s|$file|" "$realfile" || \
			   echo "File lost !||||$file|")"
		if [ -L "$realfile" ]; then
			echo -n "$(readlink "$realfile")"
		elif [ -f "$file" ]; then
			case "$CONF_FILES" in
			*$file*) 
				if cmp $file $TMP_DIR$file > /dev/null 2>&1; then
					echo -n "[configuration]"
				else
					echo -n "$(stat -c "[configuration: %.16y]" $file)"
				fi;;
			#*	if [ "$(tazpkg check-file $file $2)" = "failure" ]; then
			#		echo -n "Invalid md5"
			#	fi;;
			esac
		fi
		echo ""
	done
	[ -n "$CONF_FILES" ] && rm -rf $TMP_DIR
	exit 0
fi

if [ "$1" = "list_files_mirror" ]; then
	for i in /var/lib/tazpkg/files.list.lzma \
		/var/lib/tazpkg/undigest/*/files.list.lzma ; do
		[ -f $i ] || continue
		unlzma -c $i
	done | grep -- "^$2:" | awk '{ print substr($0,index($0,":")+2) }'
	exit 0
fi

if [ "$1" = "list_packages" ]; then
	PKG="$2"
	if [ -n "$3" ]; then
		shift
		export LIST_PKGS='
<window title="Packages" icon-name="tazpkg">
  <vbox>
     <tree>
	<width>600</width><height>160</height>
	<label>Package|Version|Size|Description</label>
	<variable>PKG</variable>
'
		for i in "$@"; do
			if [ -d $ROOT/installed/$i ]; then
				. $ROOT/installed/$i/receipt
				LIST_PKGS="$LIST_PKGS
	<item icon=\"tazpkg\">$i|$VERSION|Installed|$SHORT_DESC</item>
"
			else
				RES=`grep -sh "^$i " \
				/var/lib/tazpkg/packages.desc \
				/var/lib/tazpkg/undigest/*/packages.desc`
				PACKAGE=`echo "$RES" | cut -d "|" -f 1`
				VERSION=`echo "$RES" | cut -d "|" -f 2`
				SHORT_DESC=`echo "$RES" | cut -d "|" -f 3`
				SIZE=`grep -sh -A 3 "^$(echo $PACKAGE)$" \
				/var/lib/tazpkg/packages.txt \
				/var/lib/tazpkg/undigest/*/packages.txt | \
				tail -1 | sed 's/.*(\(.*\) .*/\1/'`
				LIST_PKGS="$LIST_PKGS
	<item icon=\"tazpkg\">$i|$VERSION|$SIZE|$SHORT_DESC</item>
"
			fi
		done
		LIST_PKGS="$LIST_PKGS
	<action>echo "\$PKG" > /tmp/tazpkgbox/pkg</action>
	<action>/usr/lib/slitaz/tazpkgbox/package_infos</action>
	<action>refresh:PKG</action>
	<action>refresh:PKG_STATS</action>
	<action>refresh:CACHE_STATS</action>
     </tree>
     <hbox>
	<button ok>
	</button>
	<button cancel>
		<action type=\"closewindow\">LIST_PKGS</action>
	</button>
     </hbox>
  </vbox>
</window>
"
		eval `gtkdialog --center --program=LIST_PKGS`
		[ "$EXIT" = "OK" ] || exit 0
	fi
fi

export LIST_FILES="
<window title=\"$PKG files\" icon-name=\"system-file-manager\">
  <vbox>
	<tree exported_column=\"4\">
		<variable>FILE</variable>
		<width>600</width><height>160</height>
		<label>Access | User | Group | Size | Name | Target</label>
		<input> $0 list_files $PKG </input>
		<action>tazpkg list-config $PKG | grep -q ^\$FILE$ && leafpad \$FILE</action>
	</tree>
	<hbox>
		<button>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
	</hbox>
  </vbox>
</window>
"

export LIST_FILES_MIRROR="
<window title=\"$PKG files\" icon-name=\"system-file-manager\">
  <vbox>
	<tree>
		<width>300</width><height>160</height>
		<label>File Name</label>
		<input> $0 list_files_mirror $PKG </input>
	</tree>
	<hbox>
		<button>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
	</hbox>
  </vbox>
</window>
"

# Installed or not installed, that is the question!
if [ -d $ROOT/installed/$PKG ]; then
	PACKED_SIZE=""
	DEPENDS=""
	MAINTAINER=""
	BUGS=""
	TAGS=""
	. $ROOT/installed/$PKG/receipt
	MAINTAINER=$(echo "$MAINTAINER" | sed 's/[<>|]/ /g')
	upgrade_version="$(cat /var/lib/tazpkg/packages.desc \
		/var/lib/tazpkg/undigest/*/packages.desc 2> /dev/null | \
		awk "/^$PACKAGE / { print \$3 }" | head -1 )"
	UPGRADE=""
	if [ -n "$upgrade_version" ]; then
		if [ "$upgrade_version" != "$VERSION" ]; then
			UPGRADE="$upgrade_version"
		else
			cur_md5="$(awk "/ $PACKAGE-$VERSION/ { print \$1 }" \
				$ROOT/installed.md5)"
			new_md5="$(cat /var/lib/tazpkg/packages.md5 \
				/var/lib/tazpkg/undigest/*/packages.md5 \
				2> /dev/null | awk "/ $PACKAGE-$VERSION/ { print \$1 }")"
			if [ -n "$cur_md5" -a -n "$new_md5" -a \
				"$cur_md5" != "$new_md5" ]; then
				UPGRADE="build"
			fi
		fi
	fi
	PACKAGE_INFOS="
<window title=\"Package: $PKG\" icon-name=\"package-x-generic\">
<vbox>

	<tree>
		<width>460</width><height>200</height>
		<label>$PKG|$SHORT_DESC</label>
		<variable>FIELD</variable>		
		<item icon=\"tazpkg\">Version: | $VERSION</item>
		<item icon=\"tazpkg\">Category: | $CATEGORY</item>"
[ -n "$UPGRADE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Upgrade: | $(echo $UPGRADE)</item>"
[ -n "$DEPENDS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Depends: | $(echo $DEPENDS)</item>"
[ -n "$SUGGESTED" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Suggested: | $(echo $SUGGESTED)</item>"
[ -n "$PACKED_SIZE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Size: | $PACKED_SIZE ($UNPACKED_SIZE installed)</item>"
[ -n "$MAINTAINER" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"system-users\">Maintainer: | $MAINTAINER</item>"
[ -n "$BUGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"important\">Bugs: | $BUGS</item>"
[ -n "$HANDBOOK_URL" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"ascii\">Handbook: | $HANDBOOK_URL</item>"
[ -n "$TAGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Tags: | $TAGS</item>"
[ -n "$CONFIG_FILES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Config files: | $CONFIG_FILES</item>"
[ -f $ROOT/installed/$PKG/modifiers ] && 
PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Modified by: | $(xargs echo < $ROOT/installed/$PKG/modifiers)</item>"
PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"applications-internet\">Website: | $WEB_SITE</item>
		<item icon=\"help\">Tip: | double-click items above for more information</item>
		<action> $0 info \"\$FIELD\" $PKG </action>		
	</tree>

	<hbox>"
[ -s $ROOT/installed/$PACKAGE/description.txt ] &&
	PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Description</label>
			<input file icon=\"help\"></input>
			<action>xterm -T \"$PKG description (q to quit)\" $XTERM_OPTS \
			-e \"less $ROOT/installed/$PKG/description.txt\"</action>
		</button>"
if [ ! -d /var/lib/tazpkg/fslink ]; then
	[ ${PKG%%-*} = get -a ! -d $ROOT/installed/${PKG#get-} ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Install</label>
			<input file icon=\"go-next\"></input>
			<action>xterm -T \"Install ${PKG#get-}\" $XTERM_OPTS -e \"\
			$PKG; sleep 5\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>"
	[ -n "$UPGRADE" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Upgrade</label>
			<input file icon=\"go-next\"></input>
			<action>xterm -T \"Install $PKG\" $XTERM_OPTS -e \"\
			tazpkg get-install $PKG --forced ; sleep 5\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>"
	grep -q post_install $ROOT/installed/$PKG/receipt && PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Reconfigure</label>
			<input file icon=\"reload\"></input>
			<action>xterm -T \"Reconfigure $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg reconfigure $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>"
	if grep -qs ^$PKG$ /var/lib/tazpkg/blocked-packages.list; then
		PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Unblock</label>
			<input file icon=\"up\"></input>
			<action>xterm -T \"Unblock $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg unblock $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>"
	else
		PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Block</label>
			<input file icon=\"down\"></input>
			<action>xterm -T \"Block $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg block $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>"
	fi
fi
if [ "$(cat /tmp/tazpkgbox/status)" = "linkable" ]; then
	PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Link</label>
			<input file icon=\"edit-redo\"></input>
			<action>xterm -T \"Link $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg link $PACKAGE $(readlink /var/lib/tazpkg/fslink); sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>"
elif [ ! -s $ROOT/installed/$PKG/modifiers ]; then
	[ -L $ROOT/installed/$PKG ] || PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Repack</label>
			<input file icon=\"edit-redo\"></input>
			<action>xterm -T \"Repack $PACKAGE\" $XTERM_OPTS -e \"\
			cd /var/cache/tazpkg; \
			tazpkg repack $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
"
	PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Remove</label>
			<input file icon=\"edit-delete\"></input>
			<action>xterm -T \"Remove $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg remove $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
"
else
	PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>Re-install</label>
			<input file icon=\"edit-redo\"></input>
			<action>xterm -T \"Re-install $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg get-install $PACKAGE --forced; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
		<button>
			<label>Remove</label>
			<input file icon=\"edit-delete\"></input>
			<action>xterm -T \"Remove $PACKAGE\" $XTERM_OPTS -e \"\
			tazpkg remove $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
"
fi
PACKAGE_INFOS="$PACKAGE_INFOS
		<button>
			<label>View Files</label>
			<input file icon=\"tazpkg\"></input>
			<action type=\"launch\">LIST_FILES</action>
		</button>
		<button>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">INSTALLED_PACKAGE_ACTIONS</action>
		</button>
	</hbox>

</vbox>
</window>
"
	export PACKAGE_INFOS
else
	RES=`grep -sh "^$PKG " /var/lib/tazpkg/packages.desc \
		/var/lib/tazpkg/undigest/*/packages.desc`
	PACKAGE=`echo "$RES" | cut -d "|" -f 1`
	VERSION=`echo "$RES" | cut -d "|" -f 2`
	SHORT_DESC=`echo "$RES" | cut -d "|" -f 3`
	CATEGORY=`echo "$RES" | cut -d "|" -f 4`
	WEB_SITE=`echo "$RES" | cut -d "|" -f 5`
	SIZES=`grep -sh -A 3 "^$(echo $PACKAGE)$" /var/lib/tazpkg/packages.txt \
		/var/lib/tazpkg/undigest/*/packages.txt | tail -1`
	DEPENDS=""
	SUGGESTED=""
	MAINTAINER=""
	BUGS=""
	HANDBOOK_URL=""
	TAGS=""
	CONFIG_FILES=""
	height=160
	if [ -s /home/slitaz/wok/$PKG/receipt ]; then
		. /home/slitaz/wok/$PKG/receipt
		height=200
	fi
	PACKAGE_INFOS="
<window title=\"Package: $PACKAGE\" icon-name=\"package-x-generic\">
<vbox>

	<tree>
		<width>460</width><height>$height</height>
		<label>$PKG|$SHORT_DESC</label>
		<variable>FIELD2</variable>
		<item icon=\"tazpkg\">Version: | $VERSION</item>
		<item icon=\"tazpkg\">Category: | $CATEGORY</item>"
	[ -n "$DEPENDS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Depends: | $(echo $DEPENDS)</item>"
	[ -n "$SUGGESTED" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Suggested: | $(echo $SUGGESTED)</item>"
	[ -n "$SIZES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Size: | $SIZES</item>"
	[ -n "$MAINTAINER" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"system-users\">Maintainer: | $MAINTAINER</item>"
	[ -n "$BUGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"important\">Bugs: | $BUGS</item>"
	[ -n "$HANDBOOK_URL" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"ascii\">Handbook: | $HANDBOOK_URL</item>"
	[ -n "$TAGS" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Tags: | $TAGS</item>"
	[ -n "$CONFIG_FILES" ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"tazpkg\">Config files: | $CONFIG_FILES</item>"
	PACKAGE_INFOS="$PACKAGE_INFOS
		<item icon=\"applications-internet\">Website: | $WEB_SITE</item>		
		<item icon=\"help\">Tip: | double-click Website for more information</item>
		<action>case \$FIELD2 in Web*) browser $WEB_SITE &;; esac</action>
	</tree>

	<hbox>"
	[ ${PACKAGE%%-*} = get ] && PACKAGE_INFOS="$PACKAGE_INFOS
		<checkbox>
			<label>Auto exec</label>
			<variable>AUTO_EXEC</variable>
			<default>true</default>
		</checkbox>"
	PACKAGE_INFOS="$PACKAGE_INFOS
		<checkbox>
			<label>Auto install depends</label>
			<variable>AUTO_DEPENDS</variable>
			<default>true</default>
		</checkbox>
		<button>
			<label>Install Package</label>
			<input file icon=\"go-next\"></input>
			<action>xterm -T \"Install $PACKAGE\" $XTERM_OPTS -e \"\
			if [ x\$AUTO_DEPENDS != xtrue ]; then script -c \\\"tazpkg get-install $PACKAGE\\\" /var/log/tazpkg-install.log;\
			else script -c \\\"yes y | tazpkg get-install $PACKAGE\\\" /var/log/tazpkg-install.log; fi; \
			[ x\${AUTO_EXEC} = xtrue ] && $PACKAGE; \
			sleep 2\"</action>
			<action type=\"closewindow\">MIRRORED_PACKAGE_ACTIONS</action>
		</button>
		<button>
			<label>Download</label>
			<input file icon=\"go-next\"></input>
			<action>xterm -T \"Get $PACKAGE\" $XTERM_OPTS -e \"\
			cd /var/cache/tazpkg; tazpkg get $PACKAGE; sleep 2\"</action>
			<action type=\"closewindow\">MIRRORED_PACKAGE_ACTIONS</action>
		</button>
		<button>
			<label>View Files</label>
			<input file icon=\"tazpkg\"></input>
			<action type=\"launch\">LIST_FILES_MIRROR</action>
		</button>
		<button>
			<input file icon=\"gtk-close\"></input>
			<action type=\"closewindow\">MIRRORED_PACKAGE_ACTIONS</action>
		</button>
	</hbox>

</vbox>
</window>
"
	export PACKAGE_INFOS
fi

gtkdialog --center --program=PACKAGE_INFOS

exit 0
