#!/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

$test = shift;
# 2° param à la ligne de commande
chomp $test;
# s'il existe, quel qu'il soit, on exécute en mode test
# (il faut donc toujours donner un 1° paramètre aussi, en mode test)
if ($test eq "") {
  $test = "false";
} else {
  $test = "true";
}
print "\$test = ";
print "$test\n";

if ($nom_fichier_tgz eq "") {
	$nom_fichier_tgz = "/usr/local/etc/addmodff.2.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 '.'
print "$dir_tgz\n";
$dir_tgz =~ s/.*\///;
# enlever tout le chemin
print "$dir_tgz\n";
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");	
# exit;

if ($test eq "false") {
  $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)
    print "$ffdir/lock\n";
    system("killall firefox");
  }
} elsif ($test eq "true") {
  $ffdir = `pwd`;
  chomp $ffdir;
}
print "\$ffdir = ";
print "$ffdir\n";


# 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";

if ($test eq "true") {
  if ( ! -d "$ffedir" ) {
    system("mkdir $ffedir");
    print "mkdir \$ffedir\n";
    system("cp $dir_tgz/extensions.rdf $erdf");
    system("cp $dir_tgz/extensions.cache $ecache");
   }
}
# exit;
print "\$ffedir = ";
print "$ffedir\n";

	
# 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>) {
print ".\n";
	$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);
  print "\$description = \n";
  print "$description\n";
  print "\$seqli = \n";
  print "$seqli\n";

# exit;
if ($test eq "false") {
  system("mv -f $erdf $erdf.old");
  # sauvegarde du fichier original
  open(IN, "<$erdf.old");
  open(OUT, ">$erdf");
} elsif ($test eq "true") {
  system("cp -f $erdf $erdf.old");
  # sauvegarde du fichier original
  open(IN, "<$erdf.old");
  open(OUT, ">$erdf.test");
}
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);

# exit;

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

	} else {
print ":\n";
print "$ligne_existante\n";
	  $ligne_existante =~ s/^> //;
print "$ligne_existante\n";
# 	  $ligne_existante =~ s/\tneeds-install//;
# 	  # enlever l'éventuel '\tneeds-install' à la fin de la ligne
# print "$ligne_existante\n";
	  if ($state == 1) {
print ":1\n";
		$module .= $ligne_existante
	  }
	}	
}
close(IN);
print "\$module = \n";
print "$module\n";

# exit;

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


if ($test eq "false") {
  open(OUT, ">>$ecache");
} elsif ($test eq "true") {
  open(OUT, ">>$ecache.test");
}
print OUT $module;
close(OUT);
# 
# # extraire le nom du répertoire où le module doit être décompressé
# ($app_profile, $rep_module) = split(/\t/, $module);
# chomp $rep_module;
# print "\$rep_module = \n";
# print "$rep_module\n";
# 
# # en prendre le chemin absolu (il doit être dans $ffedir)
# $chemin_rep_module = "$ffedir/$rep_module";
# print "\$chemin_rep_module = \n";
# print "$chemin_rep_module\n";
# # créer le répertoire
# system("mkdir $chemin_rep_module");
# 
# exit;

# # décompresser 'tmp.xpi' (contenu dans 'addmodff.2.tgz') dans le répertoire $chemin_rep_module
# system("unzip $dir_tgz/tmp.xpi -d$chemin_rep_module");
# 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' 

exit;
