2011-11-19 [pawel] 3.7.10cvs94
[claws.git] / tools / mew2claws-mail.pl
1 #!/usr/bin/perl
2
3 #  * Copyright 2007 Jérôme Lelong <jerome.lelong@gmail.com>
4 #  *
5 #  * This file is free software; you can redistribute it and/or modify it
6 #  * under the terms of the GNU General Public License as published by
7 #  * the Free Software Foundation; either version 3 of the License, or
8 #  * (at your option) any later version.
9 #  *
10 #  * This program is distributed in the hope that it will be useful, but
11 #  * WITHOUT ANY WARRANTY; without even the implied warranty of
12 #  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13 #  * General Public License for more details.
14 #  *
15 #  * You should have received a copy of the GNU General Public License
16 #  * along with this program; if not, write to the Free Software
17 #  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
19 ## script name : mew2claws-mail.pl
20
21 ## script purpose : convert a Mew addressbook into a Claws Mail addressbook
22
23 ## This script assumes your Mew addressbook is Latin-1 encoded and not
24 ## unicode. In this latter case, you will have to hack this script a
25 ## little.
26
27 use Getopt::Long;
28
29 ## Process the command line options
30 ## the program expects one argument: the Mew addressbook file
31
32 my $help=0;
33 my $mewfile='';
34 GetOptions("mew-addressbook=s" => \$mewfile,
35            "help" => \$help);
36
37 if ($help==1) 
38 {
39     print("usage : perl mew2claws-mail.pl [--help] [--mew-addressbook=file] \n");
40     print("\t--help: displays this help\n");
41     print("\t--mew-addressbook=file : file is the filename of your Mew addressbook\n");
42     exit 0;
43 }
44 if ($mewfile ne '' && !-f $mewfile)
45 {
46     print("file $mewfile does not exists\n");
47     exit 1;
48 }
49
50 $time=time;
51 $claws_addr='';
52 $home = glob("~");
53 $clawsdir=`claws-mail --config-dir`;
54 chomp($clawsdir);
55 $clawsdir = $home . '/' . $clawsdir;
56
57 opendir(CLAWS, $clawsdir) || die("Can't open $clawsdir directory\n");
58 push(@cached,(readdir(CLAWS)));
59 closedir(CLAWS);
60
61 ## find the first availabel name for a new addressbook in claws-mail
62 foreach $cached (@cached)
63 {
64     if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/)
65     {
66         push(@addr, "$cached");
67     }
68 }
69 @sorted = sort {$a cmp $b} @addr;
70 $last_one = pop(@sorted);
71 $last_one =~ s/^addrbook-//;
72 $last_one =~ s/.xml$//;
73 $last_one++;
74 $new_addrbk = "addrbook-"."$last_one".".xml";
75
76
77 open (MEWFILE, "<$mewfile") || die("Can't find the Mew addressbook file\n");
78 @mewentries = <MEWFILE>;
79 close MEWFILE;
80
81 $claws_addr .= "<?xml version=\"1.0\" encoding=\"ISO8859-1\" ?>\n"
82 . "<address-book name=\"Mew Address Book\" >";
83
84
85 chomp(@mewentries);
86 foreach $line (@mewentries)
87 {
88     $line =~ s/ *\t/ /g;
89     $line =~ s/ *$//g;
90     (@fields) = split(/ +/,$line);
91     $nickname= shift(@fields);
92     @emails=();
93     $alias='';
94     $firstname='';
95     $lastname='';
96     while (1) 
97     {
98         $field = shift(@fields);
99         if ($field =~ m/@/)
100         {
101             $field =~ s/,$//;
102             push(@emails, $field);
103         } else
104         {
105             unshift(@fields, $field);
106             last;
107         }
108     }
109     $alias = shift(@fields);
110     if ($alias eq "\*")
111     {
112         print($alias . "\n");
113         $alias='';
114     }
115     
116
117     $firstname=shift(@fields); $firstname =~ s/"//g;
118     foreach (@fields)
119     {
120         $lastname .= "$_ "; 
121     }
122     $lastname =~ s/"//g;
123     $lastname =~ s/ *$//g;
124     
125     $claws_addr .= "  <person uid=\"$time\" first-name=\"$firstname\""
126     ." last-name=\"$lastname\" nick-name=\"$nickname\""
127     ." cn=\"$firstname $lastname\" >\n"
128     ."    <address-list>\n";
129     $time++;
130
131     foreach $email (@emails)
132     {
133         $claws_addr .= "      <address uid=\"$time\" alias=\"$alias\" email=\"$email\""
134         ." remarks=\"\" />\n";
135         $time++;
136     }
137     $claws_addr .= "    </address-list>\n"
138     . "     <attribute-list>\n"
139     . "    </attribute-list>\n";
140     $claws_addr .=  "  </person>\n";
141     $time++;
142 }
143 $claws_addr .= "</address-book>\n";
144
145 open (NEWADDR, ">$clawsdir/$new_addrbk") ;
146 print NEWADDR ($claws_addr);
147 close NEWADDR;
148
149 open (ADDRIN, "<$clawsdir/addrbook--index.xml") || die("can't open addrbook--index.xml");
150 @addrindex_file = <ADDRIN>;
151 close ADDRIN;
152
153 foreach $addrindex_line (@addrindex_file)
154 {
155     if ($addrindex_line =~ m/<book name=\"Mew Address Book\"/)
156     {
157         print("An entry already exists for \"Mew Address Book\", you may duplicate it\n");
158         print("Continuing anyway...\n");
159     }
160     if ($addrindex_line =~ m/<\/book_list>/)
161     {
162         $rewrite_addrin .= "    <book name=\"Mew Address Book\" file=\"$new_addrbk\" />\n"
163         ."  </book_list>\n";
164     } else
165     {
166         $rewrite_addrin .= "$addrindex_line";
167     }
168 }
169
170 open (NEWADDRIN, ">$clawsdir/addrbook--index.xml");
171 print NEWADDRIN "$rewrite_addrin";
172 close NEWADDRIN;
173
174 print "\nYou have sucessfully converted your Mew addressbook\n";
175 exit;