#! /usr/bin/perl
use Locale::Messages qw (:locale_h :libintl_h);

use Digest::MD5 qw(md5_hex);

my $digestfile = "/var/run/kwartz-autoupdate.md5";
my $cachefile = "/var/cache/kwartz/autoupdate";

$ENV{PATH} = "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin";

# Verifie une mise a jour de kwartz-autoupdate
my @aptrenew=`/usr/sbin/kwartz-autoupdate -r  2>/dev/null`;
# On n'est pas en cgi, pas besoin de garder /var/kwartz/renew_autoupdate
unlink ("/var/kwartz/renew_autoupdate") if (-f "/var/kwartz/renew_autoupdate");

# kwartz-autoupdate rgnre le cache  partir de la version 48
# Recherche des nouveaux paquets disponibles
my $maxtry = 4;
my $res = -1;
my $mes='';
my @aptcache;
my @aptupdatetest;

while ($maxtry-- > 0) {
	@aptupdatetest=`/usr/sbin/kwartz-autoupdate -i 2>&1`;
	$res = $?;
	# on sort en cas d'erreur de lancement
	last if ($res & 127);
	$res>>=8;
	# retour 5 = opration en cours
	last if ($res != 5);
	sleep 60;
}

if ($res) {
	if ($#aptupdatetest>=0) {
		$mes=$aptupdatetest[0];
	} else {
		$mes=gettext("Echec de la recherche des mises  jour");
	}
	goto TRAP;
}
	

if (-f $cachefile) {
	@aptcache=`cat $cachefile`;

	# Mise a jour automatique des paquets
	if ( $?==0 ) {
		if ($#aptcache>=0) {
			my @aptupdate=`/usr/sbin/kwartz-autoupdate -u  2>/dev/null`;
		}
	}
}

# Installe les nouveaux paquets en fonction du changement d'options
system ("/usr/sbin/kwartz-pkg install --missing");

# Verifie si des paquets restent
if (-f $cachefile) {
	@aptcache=`cat $cachefile`;
	if ( $?==0 ) {
		if ($#aptcache>=0) {
			$mes=sprintf( gettext("%d mises  jour sont disponibles"), $#aptcache+1);
		} else {
			# pas de maj dispo
			unlink $digestfile;
			exit 0;
		}
	}
} else {
	$mes=gettext("Impossible de vrifier si des mises  jour sont disponibles...");
}

my $digest = md5_hex("@aptcache");
my $prevdigest = "";
$prevdigest=`cat $digestfile` if (-f $digestfile);
chomp $prevdigest;

# envoi notify uniquement si contenu change
#TODO: S'assurer au maximum que -i et -u renvoient exactement les mmes donnes dans le cache
# Dj vrifi qu'en cas d'installation prcdente choue le cache n'est pas touch en -u
exit if ( $digest eq $prevdigest);


TRAP:
if (@aptcache || $res) {
	if (open TRAP, "| /usr/sbin/kwartz-mon.trap") {
#		print TRAP gettext("Recherche des mises  jour")."\n";		
		print TRAP "$mes\n";		
		print TRAP gettext("Recherche des mises  jour")."\n\n";		
		print TRAP " @aptcache\n";		
		close TRAP;
	}
	system("echo -n  $digest >$digestfile");
}
