Acesso direto ao conteúdo
Logotipo Dicas-L, por Ricardo Burile
Visite também: Ipok ·  Segurança Linux ·  UnderLinux ·  VivaOLinux ·  LinuxSecurity ·  NoticiasLinux ·  BR-Linux ·  SoftwareLivre.org ·  [mais]   
 

Você está aqui: Home  → Arquivo Dicas-L

 

Lan University - Certificações e Qualificações em TI

Assine a Lista Dicas-L

Receba diariamente por email as dicas
de informática publicadas neste site
Para se descadastrar, clique aqui.

Maldito índice do Claws-mail!

Colaboração: Fernando M. Roxo da Motta

Data de Publicação: 29 de junho de 2012

Por tal ou qual motivo eu vivo tendo problema com o índice do livro de endereço do Claws-mail. A solução, para mim, sempre foi recuperar de backup, mas eu achava que devia haver uma solução melhor. Além do mais se você criou um novo livro de endereços o backup pode não ter a informação.

Tá, você vai dizer que tem uma penca de textos na internet dizendo:

Basta copiar o "addrbook-index.xml.bak" com o nome de "addrbook-index.xml" que o problema está resolvido.

É, tem razão, mas se você entrar no Claws-mail e receber a janelinha :

          Erro no Livro de Endereços
          Não foi possível ler o índice dos endereços

E tentar ter acesso ao livro de endereços o ".bak" também é destruído. :(

Se quiser diga que eu sou chato, admito que o seja, mas por isto mesmo quero ver se consigo fazer algo mais rápido que resolva isto.

Examinando o arquivo índice ele tem umas três linhas, que chamarei de cabeçalho, seguida de linhas com a seguinte estrutura :

  <book name="Endereços comuns" file="addrbook-000001.xml" />

No fim existe um "rabo" com umas outras tantas linhas do XML.

Será que o nome fantasia ("Endereços comuns" no exemplo) está também no arquivo de endereços "addrbook-000001.xml" ? A estrutura deste arquivo é similar a qualquer XML de boa origem :

  <?xml version="1.0" encoding="UTF-8" ?>
  <address-book name="Endereços comuns" >
  <person uid="301623914" first-name="" last-name="" nick-name="" cn="José das Couves" >
    <address-list>
      <address uid="301623915" alias=""
  email="zedascouves@servemail.com.br" remarks="" /> </address-list>
    <attribute-list>
    </attribute-list>
  </person>

Esta estrutura "<person>" se repete "ad nauseam" e no final tem o usual fechamento do XML. Claro que o que me interessa aqui é a linha :

  <address-book name="Endereços comuns" >

Se eu percorrer os arquivos com este tipo de linha eu posso reconstruir as linhas do livro de índice. Para isto escrevi o seguinte script :

  #!/bin/sh
  # name        : claws-addrbook-rec.sh
  # author      : Fernando M. Roxo da Motta <roxo@roxo.org>
  # descrição   : Recupera o índice do livro de endereços do Claws-mail.
  # changelog : 
  # 26/06/2012 - primeira versão
  
  #set -xv
  
  OUTFIL="addrbook--index-rebuild.xml"
  WRKDIR="$HOME/.claws-mail/addrbook"
  
  ZEN=`which zenity`
  if [ ! -z "$ZEN"  -a  ! -d $WRKDIR ]; then
   $ZEN --error --text="Diretório de trabalho \"$WRKDIR\" não encontrado!" exit 2
  fi
  
  cd $WRKDIR
  
  echo '<?xml version="1.0" encoding="UTF-8" ?>' > $OUTFIL
  echo '<addressbook>' >> $OUTFIL
  echo '  <book_list>' >> $OUTFIL
  
  for f in *.xml; do
   Lin=`grep '<address-book' $f`
   if [ $? -eq 0 ]; then
      set $Lin
      Linha="    `echo $Lin|sed -e 's/address-book \(.*\) >/book \1/'`
  file=\"$f\" />" 
      echo "$Linha" >> $OUTFIL
   fi
  
  done
  
  echo '  </book_list>' >> $OUTFIL
  echo '  <vcard_list>' >> $OUTFIL
  echo '  </vcard_list>' >> $OUTFIL
  echo '  <jpilot_list>' >> $OUTFIL
  echo '  </jpilot_list>' >> $OUTFIL
  echo '  <ldap_list>' >> $OUTFIL
  echo '  </ldap_list>' >> $OUTFIL
  echo '</addressbook>' >> $OUTFIL
  
  if [ ! -z "$ZEN" ]; then
   $ZEN --question --text "Novo índice gerado\n\nSobrepõe o arquivo atual ?" 
   if [ $? -eq 0 ]; then
      mv addrbook--index.xml addrbook--index.xml.$$
      mv addrbook--index-rebuild.xml addrbook--index.xml
      if [ $? -eq 0 ]; then
         $ZEN --info --text "Sucesso !\n\nTente &lt;ctrl&gt;&lt;sfht&gt;A para verificar." else
         $ZEN --error --text="Falhou !\n\nNão consegui renomear o arquivo de saída ! :(" 
      fi
   fi
  fi

Este script reconstrói o arquivo de índice e se aprovado pelo usuário ele superpõe o arquivo de índice danificado. Para que ele funcione bem é interessante ter o Zenity instalado.

Para não ter que sair do Claws-mail para executar o script eu criei uma ação (Configuração/Ações...) que simplesmente executa o script. Após a execução não precisa nem sair do programa, é só usar o livro de endereços normalmente.

 

 

Veja a relação completa dos artigos de Fernando M. Roxo da Motta

Formato PDF
Newsfeed RSS
Formato para impressão
PDF RSS Imprimir

Referências Adicionais

Referências adicionais sobre os assuntos abordados neste site podem ser encontradas em nossa Bibliografia.

Avalie esta dica

  • Currently 2.98/5
  • 1
  • 2
  • 3
  • 4
  • 5

Avaliação: 3.0 /5 (514 votos)

Opinião dos Leitores

Seja o primeiro a comentar este artigo
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script


 

Expressões Regulares – Uma Abordagem Divertida - 4ª edição