0.8.10claws78
[claws.git] / tools / kmail2sylpheed_v2.pl
1 #!/usr/bin/perl
2
3 #  * Copyright © 2002 Paul Mangan <claws@thewildbeast.co.uk>
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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19 ## script name : kmail2sylpheed_v2.pl
20
21 ## script purpose : convert an exported Kmail addressbook csv file 
22 ## into a Sylpheed addressbook
23
24 ## tested with Kmail 1.4.7 and KAddressBook 3.1beta1
25
26 use Getopt::Long;
27
28 $kmailfile = '';
29 $iNeedHelp = '';
30
31 GetOptions("kmailfile=s" => \$kmailfile,
32            "help"        => \$iNeedHelp);
33
34 if ($kmailfile eq "" || $iNeedHelp) {
35         if (!$iNeedHelp) {
36                 print "No filename given\n";
37         }
38         print "Use the following format:\n";
39         print "\tkmail2sylpheed_v2.pl --kmailfile=/path/to/addressbook.csv\n";
40         exit;
41 }
42
43 $sylph_dir  = ".sylpheed";
44 $addr_index = "$sylph_dir/addrbook--index.xml";
45 $new_addressbook = "Kmail address book";
46  
47 $time = time;
48
49 chdir;
50
51 opendir(SYLPHEED, $sylph_dir) || die("Can't open $sylph_dir directory\n");
52         push(@cached,(readdir(SYLPHEED)));
53 closedir(SYLPHEED);
54
55 foreach $cached (@cached) {
56         if ($cached =~ m/^addrbook/ && $cached =~ m/[0-9].xml$/) {
57                 push(@addr, "$cached");
58         }
59 }
60
61 @sorted = sort {$a cmp $b} @addr;
62 $last_one = pop(@sorted);
63 $last_one =~ s/^addrbook-//;
64 $last_one =~ s/.xml$//;
65 $last_one++;
66 $new_addrbk = "addrbook-"."$last_one".".xml";
67
68 open (KFILE, "<$kmailfile") || die("Can't open the kmail file [$kmailfile]\n");
69         @kmaillines = <KFILE>;
70 close KFILE;
71
72 $count = 0;
73 $defs = shift(@kmaillines);
74 @extra_def = (3,4,5,7 ... 27,29 ... 32,34 ... 42);
75
76 (@kmaildefs) = split(/,/,$defs);
77
78 $sylph_addr = "<?xml version=\"1.0\" encoding=\"US-ASCII\" ?>\n";
79 $sylph_addr .= "<address-book name=\"Kmail address book\" >\n";
80
81 foreach $kmailline (@kmaillines) {
82     (@kmaildata) = split(/,/,$kmailline); 
83         foreach $kmaildata (@kmaildata) {
84                 $kmaildata =~ s/^"//;
85                 $kmaildata =~ s/"$//;
86                 $kmaildata =~ s/"/&quot;/g;
87                 $kmaildata =~ s/&/&amp;/g;
88                 $kmaildata =~ s/'/&apos;/g;
89                 $kmaildata =~ s/</&lt;/g;
90                 $kmaildata =~ s/>/&gt;/g;
91                 $kmaildata =~ s/\\n/, /g;
92                 chomp $kmaildata;
93         }
94     $sylph_addr .= "  <person uid=\"$time\" first-name=\"$kmaildata[2]\""
95                  ." last-name=\"$kmaildata[1]\" nick-name=\"$kmaildata[6]\""
96                  ." cn=\"$kmaildata[2] $kmaildata[1]\" >\n"
97                  ."    <address-list>\n";
98     $time++;
99     $sylph_addr .= "      <address uid=\"$time\" alias=\"\" email=\"$kmaildata[28]\""
100                 ." remarks=\"$kmaildata[33]\" />\n"
101                 ."    </address-list>\n";
102
103         foreach $extra_def (@extra_def) {
104                 if ($kmaildata[$extra_def] ne "") {
105                         push (@def_exist, $extra_def);
106                 }
107         }
108         if ($def_exist[0]) {
109                 $sylph_addr .= "    <attribute-list>\n";
110         }
111         foreach $def_exist (@def_exist) {
112                 $kmaildefs[$def_exist] =~ s/^"//;
113                 $kmaildefs[$def_exist] =~ s/"$//;
114                 $kmaildefs[$def_exist] =~ s/'/&apos;/g;
115                 
116                 $time++;
117                 $sylph_addr .= "      <attribute uid=\"$time\" name=\"$kmaildefs[$def_exist]\" >"
118                         ."$kmaildata[$def_exist]</attribute>\n";
119                 $attribs = 1;
120         }
121         if ($attribs == 1) {
122                 $sylph_addr .= "    </attribute-list>\n";
123         }
124     $sylph_addr .=  "  </person>\n";
125     $time++;
126     $count++;
127 }
128 $sylph_addr .= "</address-book>\n";
129
130 open (NEWADDR, ">$sylph_dir/$new_addrbk");
131 print NEWADDR $sylph_addr;
132 close NEWADDR;
133
134 open (ADDRIN, "<$addr_index") 
135         || die("can't open $addr_index for reading");
136         @addrindex_file = <ADDRIN>;
137 close ADDRIN;
138
139 foreach $addrindex_line (@addrindex_file) {
140         if ($addrindex_line =~ m/<\/book_list>/) {
141                 $rw_addrindex .= "    <book name=\"$new_addressbook\" file=\"$new_addrbk\" />\n"
142                         ."  </book_list>\n";
143         } else {
144                 $rw_addrindex .= "$addrindex_line";
145         }
146 }
147
148 open (NEWADDRIN, ">$addr_index")
149         || die("Can't open $addr_index for writing");
150 print NEWADDRIN "$rw_addrindex";
151 close NEWADDRIN;
152
153 print "Done. $count address(es) converted successfully.\n";
154
155 exit;
156