123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- #!/usr/bin/perl
- # * Copyright 2007 Jérôme Lelong <jerome.lelong@gmail.com>
- # *
- # * This file is free software; you can redistribute it and/or modify it
- # * under the terms of the GNU General Public License as published by
- # * the Free Software Foundation; either version 3 of the License, or
- # * (at your option) any later version.
- # *
- # * This program is distributed in the hope that it will be useful, but
- # * WITHOUT ANY WARRANTY; without even the implied warranty of
- # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- # * General Public License for more details.
- # *
- # * You should have received a copy of the GNU General Public License
- # * along with this program; if not, write to the Free Software
- # * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ## script name : mew2claws-mail.pl
- ## script purpose : convert a Mew addressbook into a Claws Mail addressbook
- ## This script assumes your Mew addressbook is Latin-1 encoded and not
- ## unicode. In this latter case, you will have to hack this script a
- ## little.
- use Getopt::Long;
- ## Process the command line options
- ## the program expects one argument: the Mew addressbook file
- my $help=0;
- my $mewfile='';
- GetOptions("mew-addressbook=s" => \$mewfile,
- "help" => \$help);
- if ($help==1)
- {
- print("usage : perl mew2claws-mail.pl [--help] [--mew-addressbook=file] \n");
- print("\t--help: displays this help\n");
- print("\t--mew-addressbook=file : file is the filename of your Mew addressbook\n");
- exit 0;
- }
- if ($mewfile ne '' && !-f $mewfile)
- {
- print("file $mewfile does not exists\n");
- exit 1;
- }
- $time=time;
- $claws_addr='';
- $home = glob("~");
- $clawsdir=`claws-mail --config-dir`;
- chomp($clawsdir);
- $clawsdir = $home . '/' . $clawsdir . '/' . 'addrbook/';
- opendir(CLAWS, $clawsdir) || die("Can't open $clawsdir directory\n");
- push(@cached,(readdir(CLAWS)));
- closedir(CLAWS);
- ## find the first availabel name for a new addressbook in claws-mail
- foreach $cached (@cached)
- {
- if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/)
- {
- push(@addr, "$cached");
- }
- }
- @sorted = sort {$a cmp $b} @addr;
- $last_one = pop(@sorted);
- $last_one =~ s/^addrbook-//;
- $last_one =~ s/.xml$//;
- $last_one++;
- $new_addrbk = "addrbook-"."$last_one".".xml";
- open (MEWFILE, "<$mewfile") || die("Can't find the Mew addressbook file\n");
- @mewentries = <MEWFILE>;
- close MEWFILE;
- $claws_addr .= "<?xml version=\"1.0\" encoding=\"ISO8859-1\" ?>\n"
- . "<address-book name=\"Mew Address Book\" >";
- chomp(@mewentries);
- foreach $line (@mewentries)
- {
- $line =~ s/ *\t/ /g;
- $line =~ s/ *$//g;
- (@fields) = split(/ +/,$line);
- $nickname= shift(@fields);
- @emails=();
- $alias='';
- $firstname='';
- $lastname='';
- while (1)
- {
- $field = shift(@fields);
- if ($field =~ m/@/)
- {
- $field =~ s/,$//;
- push(@emails, $field);
- } else
- {
- unshift(@fields, $field);
- last;
- }
- }
- $alias = shift(@fields);
- if ($alias eq "\*")
- {
- print($alias . "\n");
- $alias='';
- }
-
- $firstname=shift(@fields); $firstname =~ s/"//g;
- foreach (@fields)
- {
- $lastname .= "$_ ";
- }
- $lastname =~ s/"//g;
- $lastname =~ s/ *$//g;
-
- $claws_addr .= " <person uid=\"$time\" first-name=\"$firstname\""
- ." last-name=\"$lastname\" nick-name=\"$nickname\""
- ." cn=\"$firstname $lastname\" >\n"
- ." <address-list>\n";
- $time++;
- foreach $email (@emails)
- {
- $claws_addr .= " <address uid=\"$time\" alias=\"$alias\" email=\"$email\""
- ." remarks=\"\" />\n";
- $time++;
- }
- $claws_addr .= " </address-list>\n"
- . " <attribute-list>\n"
- . " </attribute-list>\n";
- $claws_addr .= " </person>\n";
- $time++;
- }
- $claws_addr .= "</address-book>\n";
- open (NEWADDR, ">$clawsdir/$new_addrbk") ;
- print NEWADDR ($claws_addr);
- close NEWADDR;
- open (ADDRIN, "<$clawsdir/addrbook--index.xml") || die("can't open addrbook--index.xml");
- @addrindex_file = <ADDRIN>;
- close ADDRIN;
- foreach $addrindex_line (@addrindex_file)
- {
- if ($addrindex_line =~ m/<book name=\"Mew Address Book\"/)
- {
- print("An entry already exists for \"Mew Address Book\", you may duplicate it\n");
- print("Continuing anyway...\n");
- }
- if ($addrindex_line =~ m/<\/book_list>/)
- {
- $rewrite_addrin .= " <book name=\"Mew Address Book\" file=\"$new_addrbk\" />\n"
- ." </book_list>\n";
- } else
- {
- $rewrite_addrin .= "$addrindex_line";
- }
- }
- open (NEWADDRIN, ">$clawsdir/addrbook--index.xml");
- print NEWADDRIN "$rewrite_addrin";
- close NEWADDRIN;
- print "\nYou have sucessfully converted your Mew addressbook\n";
- exit;
|