Prefácio:
Eu comecei a usar a suíte mozilla, "por acaso", ao baixar o Google Pack, que vinha com o Firefox 1.5. Usei-o como navegador padrão e instalei extensões e temas de todos os tipos. Quando saiu a versão 2.0 Beta, todas as extensões que usava foram bloqueadas (eram pra 1.5). Tive que baixar todas novamente, e o mesmo aconteceu quando o primeiro update da versão final saiu (2.0.0.1).
A maioria das extensões que eu havia baixado, ou só funcionavam entre as versões 1.5 e 2.0 do firefox, ou só com o 2.0, o que as incompatibiliza com o 2.0.0.1. Em um site a qual não me recordo, vi um artigo em inglês ensinado justamente o que eu precisava, só que o processo era feito descompactando e abrindo um a um os arquivos das extensões. Disso me surgiu a idéia de programar algo para deixar o processo automático, afinal eram muitas extensões. Escrevi o dito programa em Pascal e Shell-Script. Chamo-o de "mfeh" (Mozilla Firefox Extension Hack).
Sobre o programa:
As extensões e temas dos aplicativos da suíte mozilla são na verdade aquivos zip renomeados para .xpi ou .jar respectivamente. Ambos contém um arquivo install.rdf, que é o cabeçalho da extensão, contendo nome, descrição, nome do autor, o aplicativo para qual é feito (que no caso da suíte mozilla pode ser Firefox, Thunderbird ou Seamonkey) e a versão do aplicativo para qual foi feita, que é o campo a qual nos interessa alterar.
No install.rdf, a versão é declarada como no seguinte exemplo:
<em:minVersion>1.5</em:minVersion>
<em:maxVersion>2.0.0.*</em:maxVersion>
Esse exemplo acima, diz que a extensão funcionará com todas as versões do aplicativo contidas entre 1.5 e 2.0.0.x, o que a tornaria incompatível com o Minefield (Firefox 3.0), por exemplo. O que o mfeh faz, é descompactar a extensão, achar os campos minVersion e maxVersion no install.rdf, e alterá-los para os valores pedidos.
O código fonte do programa:
O software é divido em duas partes, uma em Pascal (mfeh-core), e outra em Shell Script (mfeh).
A feita em Shell Script descompacta as extensões, envia em massa os install.rdf ao aplicativo feito em Pascal (que altera os campos), e compacta-as novamente.
Parte 1: (copiar em
mfeh-core.pas)
program mfeh_core;
{$IFDEF MSWINDOWS}
{$APPTYPE CONSOLE}
{$ENDIF}
{$IFDEF LINUX}
{$ENDIF}
uses
SysUtils,CLasses;
var
I:integer;
RDF:Tstringlist;
RDF_Mod:Tstringlist;
minVersion_Line,maxVersion_Line:integer;
minVersion,maxVersion:string;
begin
if (ParamStr(1))='' then begin
Writeln('Mfeh (Mozilla Firefox Extension Hack 0.1)');
Writeln('Sintaxe: '+ExtractFilename(ParamStr(0))+' <extension_dir> {versão mínima} {versão máxima}');
Writeln('Ex: '+ExtractFilename(ParamStr(0))+' <extension_dir> 1.5 2.0.0.4');
exit;
end;
//Carrega o install.rdf
if (Fileexists(ParamStr(1))) then Writeln('Analisando '+ParamStr(1));
RDF:=Tstringlist.create;
RDF.Loadfromfile((ExtractFileDir(ParamStr(1)))+'/'+'install.rdf');
minVersion:=ParamStr(2);
maxVersion:=ParamStr(3);
for I:=0 to RDF.Count-1 do begin
//Encontra a tag "minVersion"
if POS('<em:minVersion>',RDF[I])>=1 then begin
Writeln('Minversion encontrada na linha: '+IntToStr(I));
minVersion_Line:=I;
end;
//Encontra a tag "maxVersion"
if POS('<em:maxVersion>',RDF[I])>=1 then begin
Writeln('Maxversion encontrada na linha: '+IntToStr(I));
maxVersion_Line:=I;
end;
end;
RDF_Mod:=TStringlist.Create;
//Altera os MinVersion e MaxVersion
for I:=0 to RDF.Count-1 do begin
if (I<>maxVersion_line) and (I<>minVersion_line) then RDF_Mod.add(RDF[I]);
if I=minversion_Line then begin
Writeln('Alterando minVersion para: "'+minVersion+'"');
RDF_Mod.add('<em:minVersion>'+minVersion+'</em:minVersion>');
end;
if I=maxversion_Line then begin
Writeln('Alterando maxVersion para: "'+maxVersion+'"');
RDF_Mod.add('<em:maxVersion>'+maxVersion+'</em:maxVersion>');
end;
end;
Writeln('Salvando modificações...');
//Salva as alterações.
RDF_Mod.SavetoFile((ExtractFileDir(ParamStr(1)))+'/'+'install_mod.rdf');
end
Parte 2: (copiar em
mfeh.sh)
#! /bin/bash
MFEH=/usr/bin/mfeh-core
MIN_VERSION=2.0
MAX_VERSION=5.0
if [ ! "$(ls *.jar| wc -l)" = "0" ]; then
for arq in *.jar; do
echo $arq
#$MFEH "$(pwd)/"macfox/ 2.0 5.0
#detecta se é um arquivo jar
mkdir $(basename $arq .jar)
cd $(basename $arq .jar)
unzip ../$arq
$MFEH "$(pwd)/" $MIN_VERSION $MAX_VERSION
rm install.rdf
mv install_mod.rdf install.rdf
zip -9 -r "$(basename $arq .jar)""_hack".jar .
mv "$(basename $arq .jar)""_hack".jar ../
cd ..
rm -fR $(basename $arq .jar)
done
fi
if [ ! "$(ls *.xpi| wc -l)" = "0" ]; then
for arq in *.xpi; do
echo $arq
#$MFEH "$(pwd)/"macfox/ 2.0 5.0
#detecta se é um arquivo jar
mkdir $(basename $arq .xpi)
cd $(basename $arq .xpi)
unzip ../$arq
$MFEH "$(pwd)/" $MIN_VERSION $MAX_VERSION
rm install.rdf
mv install_mod.rdf install.rdf
zip -9 -r "$(basename $arq .xpi)""_hack".xpi .
mv "$(basename $arq .xpi)""_hack".xpi ../
cd ..
rm -fR $(basename $arq .xpi)
done
fi
Como usar:
Com os arquivos mfeh-core.pas e mfeh.sh criados, compile o mfeh-core com o fpc e copie-o para o /usr/bin/:
$ fpc mfeh-core.pas
$ sudo cp mfeh-core /usr/bin/
Copie o mfeh.sh e dê permissão de execução:
$ cp mfeh.sh /usr/bin/
$ chmod +x /usr/bin/mfeh.sh
Feito isso, copie todas as extensões e temas que deseja alterar, para um diretório, e execute o mfeh, que descompactará, modificará, e recompactará todas as extensões. O único aviso, é que, as extensões modificadas podem causar todos os tipos de efeitos, que vão desde ao funcionamento normal ao firefox/thunderbird/seamonkey travando ao abrir. Se a instalação de alguma extensão fizer o firefox/thunderbird/seamonkey travar antes de abrir, carregue-o em modo de segurança (exe: /usr/bin/firefox -safe-mode), e desinstale a extensão.