#!/usr/bin/perl

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

use UI::Dialog;
use utf8;

$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.=chr(13).chr(13)."¿ Desea continuar ?";

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

	if ($use_apt) {
		if ($< != 0) {
			system("gksudo -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("gksudo -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) { 
		$dialog->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\" (versión $version) mantenido por \"$maintainer\".",
			  chr(13)."Ocupará $isize Kbytes.",
			  chr(13)."Esta es la descripción incluida en el paquete: ",
			  "$description");
		$info = join chr(13), @info;
	} else {
		$info = "ERROR: Esta aplicación no existe.\n\nPor favor compruebe el nombre del paquete.";
	}

	return $info;
}
