#!/usr/bin/perl

# GMAX 1.1
# By Alfonso E.M. alfonso@el-magnifico.org
# Para agregar un CD con paquetes .DEB a tu distro 
# 
# El CD debe tener el formato especificado en formato-gmax.txt
#
# CAMBIOS:
# Corregido un error al montar el CD

# Ubicacion de gmax.list
$LIST="/etc/gmax.list";
#$SOURCESLIST="/tmp/sources.list";
$SOURCESLIST="/etc/apt/sources.list";

use UI::Dialog::Backend::XDialog;
$dialog = new UI::Dialog::Backend::XDialog ( 
	backtitle => 'GMAX. Instalacion de aplicaciones adicionales',
	title => 'GMAX. Instalacion de Aplicaciones Adicionales',
	literal => 1,
	height => 20, width=>65,
	cancellabel => 'Cancelar',
	oklabel => 'Continuar' );

if ($< != 0) { 
	 $dialog->msgbox( text => "Solo el administrador puede usar este programa ");
	exit;
}

# Leemos las ubicaciones posibles de gmax.list
open (LIST,$LIST) or die "ERROR: No existe el archivo $LIST";
@devices=<LIST>;
close lIST;
map chop, @devices;

$text_intro="Desde esta pantalla puede aadir mas aplicaciones y programas a
su ordenador.\n\nPor favor, inserte un disco de aplicaciones adicionales (en formato
GMAX) en el CDROM o en un conector USB.";

# Mostramos la pantalla inicial para seleccionar la ubicacion
my $gmaxdisk = $dialog->combobox( text => $text_intro,
                            list => \@devices );
if ($gmaxdisk > 0) {exit};

# Montamos la unidad si hace falta
if (! -r "$gmaxdisk/GMAX" ) {
	$mounted_by_gmax=1;
	open(SYSTEM,"mount $gmaxdisk |");
	if ($?) { 
		$dialog->msgbox( text => "Error: No es posible activar la unidad. ");
		exit;
	}
	close SYSTEM;
}

# Comprobamos que es un autntico disco GMAX
if (! -r "$gmaxdisk/GMAX" ) {
	$dialog->msgbox( text => "Error: No es un disco compatible GMAX. "); 
	exit;
}


# Comprobamos si esta en el archivo sources.list
open (LIST,$SOURCESLIST) or die "ERROR: No existe el archivo $SOURCESLIST";
@sources=<LIST>;
close lIST;
map {if ( /^deb file:$gmaxdisk/ ) { $is_in_sources=1; } } @sources;
# Si no est lo agregamos
if (!$is_in_sources) {
	open (LIST,">>$SOURCESLIST") or die "ERROR: No es posible grabar el archivo $SOURCESLIST";
	print LIST "deb file:$gmaxdisk/GMAX /\n";
	close LIST;
}


# Actualizamos la lista de paquetes
open(SYSTEM,"apt-get update |");
if ($?) { $dialog->msgbox( text => "Error: No es posible actualizar la lista de paquetes. "); }
close SYSTEM;

# Mostramos el indice de aplicaciones y esperamos al usuario
system("x-www-browser $gmaxdisk/GMAX/Index.html");

# Si lo agregamos anteriormente ahora lo eliminamos del sources.list
if (!$is_in_sources) {
	open (LIST,">$SOURCESLIST") or die "ERROR: No es posible grabar el archivo $SOURCESLIST";
	foreach (@sources) { print LIST $_; }
	close lIST;
}	

# Si montamos la unidad, ahora la desmontamos
if ($mounted_by_gmax) {
	system("umount $gmaxdisk");
}
