#!/usr/bin/perl

$nom_fichier_tgz = shift;
# 1° param à la ligne de commande
chomp $nom_fichier_tgz;
# enlever le passage à la ligne (= \n = newline) s'il existe

if ($nom_fichier_tgz eq "") {
	$nom_fichier_tgz = "/usr/local/etc/default_ff_modules.tgz";
	# valeur par défaut
	print "Utilisation du nom de fichier par défaut $nom_fichier_tgz\n";
}
# le fichier $nom_fichier_tgz doit contenir les fichiers diff


if ( ! -f $nom_fichier_tgz ) {
	print "$nom_fichier_tgz n'existe pas dans ce répertoire\n";
	exit;
}

$id = `whoami`;
chomp $id;
if ($id eq "root") {
	print "Il ne faut PAS être 'root' pour installer des extensions dans firefox;\n";
	print "ce script installe des extensions firefox spécifiques à un utilisateur.\n";
	exit;
}

$dir_tgz = $nom_fichier_tgz;
# récupérer le nom du répertoire compressé
$dir_tgz =~ s/([^\.]+)\..+/$1/;
# enlever tout ce qui suit le 1° point '.'
$dir_tgz =~ s/.*\///;
# enlever tout le chemin
if ( ! -d $dir_tgz ) {
# si le répertoire décompressé existe, le supprimer
	system("rm -rf $dir_tgz");
}
# décompresser le répertoire compressé (dans le répertoire courant)
system("tar xzvf $nom_fichier_tgz");	

$ffdir = `ls -d ~/.mozilla/firefox/*.default`;
chomp $ffdir;
if ( -l "$ffdir/lock") {
# ce lien symbolique indique que firefox est en cours d'exécution
# si c'est le cas, je termine cette exécution
# (car il écraserait les fichiers de configuration quand il se termine)
  system("killall firefox");
}


# noms du répertoire 'extensions'
$ffedir = "$ffdir/extensions";

# noms des fichiers
$erdf = "$ffdir/extensions.rdf";
$erdfd = "$dir_tgz/extensions.rdf.diff";

$ecache = "$ffdir/extensions.cache";
$ecached = "$dir_tgz/extensions.cache.diff";


# ajouter les diffs aux bons endroits dans leurs fichiers respectifs (extensions.rdf et extensions.cache) 
# extraire les ajouts des diffs de leurs fichiers respectifs (extensions.rdf et extensions.cache)

# rdf
open(IN, "<$erdfd");
while (<IN>) {
	$ligne_existante = $_;
	# on sauvegarde la ligne dans une variable 'nommée' car le 'if' suivant redéfinit $_
	if (/^\d/) {
		$state++;
		next;

	} else {
	  $ligne_existante =~ s/^> //;
	  if ($state == 1) {
		$description .= $ligne_existante
	  } elsif ($state == 2) {
		$seqli .= $ligne_existante
	  }
	}	
}
close(IN);

system("mv -f $erdf $erdf.old");
# sauvegarde du fichier original
open(IN, "<$erdf.old");
open(OUT, ">$erdf");
while (<IN>) {
	$ligne_existante = $_;
	# on sauvegarde la ligne dans une variable 'nommée' car le 'if' suivant redéfinit $_
	if (/<RDF:Seq /) {
	  print OUT $description;
	} elsif (/<\/RDF:Seq>/) {
	  print OUT $seqli;
	}
	print OUT $ligne_existante;
	
}
close(IN);
close(OUT);

# cache
$state = 0;
open(IN, "<$ecached");
while (<IN>) {
	$ligne_existante = $_;
	# on sauvegarde la ligne dans une variable 'nommée' car le 'if' suivant redéfinit $_
	if (/^\d/) {
		$state++;
		next;

	} else {
	  $ligne_existante =~ s/^> //;
	  if ($state == 1) {
		$module .= $ligne_existante
	  }
	}	
}
close(IN);

# sauvegarde du fichier original
system("cp -f $ecache $ecache.old");


open(OUT, ">>$ecache");
print OUT $module;
close(OUT);
# copier tout le contenu du répertoire $dir_tgz/extensions dans le répertoire $ffedir
system("cp -r $dir_tgz/extensions/* $ffedir");

# lancer l'exécution de 'Firefox' 
system("firefox&");

exit;
