você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

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