Compatibilizando as extensões do Firefox

Há uns dias vi no site do hamacker (http://hamacker.wordpress.com/) um artigo ensinando a compatibilizar as extensões do Firefox e lembrei que há algum tempo, baseado em um artigo que li, eu havia feito um software em Pascal para o mesmo feito, e então resolvi publicar aqui o código dele.

[ Hits: 9.296 ]

Por: Jefferson Diego em 30/04/2008 | Blog: http://diede.wordpress.com/


Introdução



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.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Convertendo de AVI para AMV nativamente

Leitura recomendada

Falha de planejamento no uso de softwares livres nas escolas públicas

TensorFlow no Kali Linux (Rolling Base) CPU Mode

Consumo de link com Cacti

Conhecendo o Slpkg (gerenciador de pacotes para Slackware)

Instalando o RealPlayer 10 no Linux

  
Comentários
[1] Comentário enviado por albertguedes em 30/04/2008 - 18:09h

Pascal ? Alguém ainda usa isso ? (Hehehe, e eu que uso FORTRAN ... )
Mas quer sugestão ? Faz um package desse seu programa, com instruções e tudo bunitinho pra turma baixar, porque é uma mão na roda isso ai.

[2] Comentário enviado por albfneto em 30/04/2008 - 18:30h

Olá.
tenho uma dica aqui no VOL, com outros métodos:

http://www.vivaolinux.com.br/dicas/verDica.php?codigo=9686

Um pacote de seu programa seria muito útil!

[3] Comentário enviado por Diede em 12/05/2008 - 14:50h

Bem, obrigado pelos comentários pessoal!

Eu ia postar antes, mas GREVE de ônibus atrapalha para quem não tem acesso à internet em casa... [ :-) ]

Eu fiz um pacote deb e postei no 4shared:

http://www.4shared.com/account/file/47350373/8a6d36fb/mfeh-01_i386.html

[4] Comentário enviado por albertguedes em 13/05/2008 - 00:05h

Opa ! Agora ficou profissa. É assim que se faz Diede.
Muito bom mesmo cara.

[5] Comentário enviado por albfneto em 07/07/2008 - 20:08h

Tem outros jeito de fazer a compatibilização dos complementos Firefox e Mozilla.
veja minha dica:
http://www.vivaolinux.com.br/dicas/verDica.php?codigo=9686


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts