#!/usr/bin/perl

# XAPI 1.6
# By Alfonso E.M. alfonso@el-magnifico.org
# Instalador de paquetes deb con avisos
# 1.5 Ahora tambin instala por apt
# 1.6 La salida se envia a un terminal por si es interactiva
#     Se acompaa del script xapi-term, que hace una pausa al final

use UI::Dialog;

$dialog = new UI::Dialog (order => ['zenity','xdialog']);

# (Usamos un antiguo xdialog por problemas con UTF-8 en zenity)
$xdialog = new UI::Dialog (order => ['xdialog','zenity'] );

$|=1;
$file=$ARGV[0];
@parts=split(/\//,$file);
$name=$parts[$#parts];
$log="/tmp/instalacion_".$name.".log";

if ($name=~/(.*)\.apt\.deb$/i) { $name=$1; $use_apt=1; }

$info=&get_deb_data($file,$name,$use_apt);

$info.="\n\n Desea continuar ?";

if ($dialog->yesno( 
	title => 'Instalacin de Programas en Guadalinex',
	backtitle => $file,
	height => 300, width=>85,
	text => "$info") ) { 

	if ($use_apt) {
		if ($< != 0) {
			system("gksu -m 'Para instalar programas necesita la clave de supervisor (root)' 'gnome-terminal -tXAPI -x /usr/bin/xapi-term apt $name'  ");		
		} else {
			system("gnome-terminal -tXAPI -x /usr/bin/xapi-term apt $name");
		}
	} else {
		if ($< != 0) {
			$file=~s/ /\\ /g;
			system("gksu -m 'Para instalar programas necesita la clave de supervisor (root)' 'gnome-terminal -tXAPI -x /usr/bin/xapi-term deb $file'  ");				
		} else {
			system("/usr/bin/xapi-term deb $file");		
		}
	}

	if (-e $log) { 
		$xdialog->textbox( 
			title => 'Resultado de la instalacion',
			height => 20, width=>100,
			path => $log 
			);
		unlink $log;
	}
}



sub get_deb_data() {
	my ($deb,$apt,$use_apt)=@_;
	$description="";
	if ($use_apt) {
		open(DEB,"apt-cache show '$apt' |") or return ("");
	} else {
		open(DEB,"dpkg --info '$deb' |") or return ("");
	}
	while (<DEB>) {
		chop;
		if (/Package: (.*)/) {$package=$1; }
		if (/Version: (.*)/) {$version=$1; }
		if (/Description: (.*)/) {$description="$1\n"; }
		if (/Installed-Size: (.*)/) {$isize=$1; }
		if (/Maintainer: (.*) <.*>/) {$maintainer=$1; }
		if (/^  (.*)/ && $description ne "") { $description.=$1; }
	}
	close DEB;
if ($package) {
$info="
Va a instalar \"$package\" (versin $version) mantenido por \"$maintainer\".

Ocupar $isize Kbytes.

Esta es la descripcin incluida en el paquete:

$description
";
} else {
$info="ERROR: Esta aplicacin no existe.\n\nPor favor compruebe el nombre del paquete.";
}
	return $info;
}
