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.139 ]

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

CruxPorts4Slack - O ports para Slackware

Novidades e mudanças na estrutura e configuração do Grub2, fique por dentro!

NGINX Open Source com Balanceamento de Carga e Persistência de Sessão

GoblinX: Um live-cd baseado no Slackware

Instalando seu Quake III Arena 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