157 lines
4.2 KiB
Perl
Executable File
157 lines
4.2 KiB
Perl
Executable File
#!/usr/bin/perl
|
|
|
|
# * Copyright 2002 Paul Mangan <paul@claws-mail.org>
|
|
# *
|
|
# * 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 : kmail2claws-mail_v2.pl
|
|
|
|
## script purpose : convert an exported Kmail addressbook csv file
|
|
## into a Claws Mail addressbook
|
|
|
|
## tested with Kmail 1.4.7 and KAddressBook 3.1beta1
|
|
|
|
use Getopt::Long;
|
|
|
|
$kmailfile = '';
|
|
$iNeedHelp = '';
|
|
|
|
GetOptions("kmailfile=s" => \$kmailfile,
|
|
"help" => \$iNeedHelp);
|
|
|
|
if ($kmailfile eq "" || $iNeedHelp) {
|
|
if (!$iNeedHelp) {
|
|
print "No filename given\n";
|
|
}
|
|
print "Use the following format:\n";
|
|
print "\tkmail2claws-mail_v2.pl --kmailfile=/path/to/addressbook.csv\n";
|
|
exit;
|
|
}
|
|
|
|
$claws_dir = ".claws-mail";
|
|
$addr_index = "$claws_dir/addrbook--index.xml";
|
|
$new_addressbook = "Kmail address book";
|
|
|
|
$time = time;
|
|
|
|
chdir;
|
|
|
|
opendir(CLAWS, $claws_dir) || die("Can't open $claws_dir directory\n");
|
|
push(@cached,(readdir(CLAWS)));
|
|
closedir(CLAWS);
|
|
|
|
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 (KFILE, "<$kmailfile") || die("Can't open the kmail file [$kmailfile]\n");
|
|
@kmaillines = <KFILE>;
|
|
close KFILE;
|
|
|
|
$count = 0;
|
|
$defs = shift(@kmaillines);
|
|
@extra_def = (3,4,5,7 ... 27,29 ... 32,34 ... 42);
|
|
|
|
(@kmaildefs) = split(/,/,$defs);
|
|
|
|
$claws_addr = "<?xml version=\"1.0\" encoding=\"US-ASCII\" ?>\n";
|
|
$claws_addr .= "<address-book name=\"Kmail address book\" >\n";
|
|
|
|
foreach $kmailline (@kmaillines) {
|
|
(@kmaildata) = split(/,/,$kmailline);
|
|
foreach $kmaildata (@kmaildata) {
|
|
$kmaildata =~ s/^"//;
|
|
$kmaildata =~ s/"$//;
|
|
$kmaildata =~ s/"/"/g;
|
|
$kmaildata =~ s/&/&/g;
|
|
$kmaildata =~ s/'/'/g;
|
|
$kmaildata =~ s/</</g;
|
|
$kmaildata =~ s/>/>/g;
|
|
$kmaildata =~ s/\\n/, /g;
|
|
chomp $kmaildata;
|
|
}
|
|
$claws_addr .= " <person uid=\"$time\" first-name=\"$kmaildata[2]\""
|
|
." last-name=\"$kmaildata[1]\" nick-name=\"$kmaildata[6]\""
|
|
." cn=\"$kmaildata[2] $kmaildata[1]\" >\n"
|
|
." <address-list>\n";
|
|
$time++;
|
|
$claws_addr .= " <address uid=\"$time\" alias=\"\" email=\"$kmaildata[28]\""
|
|
." remarks=\"$kmaildata[33]\" />\n"
|
|
." </address-list>\n";
|
|
|
|
foreach $extra_def (@extra_def) {
|
|
if ($kmaildata[$extra_def] ne "") {
|
|
push (@def_exist, $extra_def);
|
|
}
|
|
}
|
|
if ($def_exist[0]) {
|
|
$claws_addr .= " <attribute-list>\n";
|
|
}
|
|
foreach $def_exist (@def_exist) {
|
|
$kmaildefs[$def_exist] =~ s/^"//;
|
|
$kmaildefs[$def_exist] =~ s/"$//;
|
|
$kmaildefs[$def_exist] =~ s/'/'/g;
|
|
|
|
$time++;
|
|
$claws_addr .= " <attribute uid=\"$time\" name=\"$kmaildefs[$def_exist]\" >"
|
|
."$kmaildata[$def_exist]</attribute>\n";
|
|
$attribs = 1;
|
|
}
|
|
if ($attribs == 1) {
|
|
$claws_addr .= " </attribute-list>\n";
|
|
}
|
|
$claws_addr .= " </person>\n";
|
|
$time++;
|
|
$count++;
|
|
}
|
|
$claws_addr .= "</address-book>\n";
|
|
|
|
open (NEWADDR, ">$claws_dir/$new_addrbk");
|
|
print NEWADDR $claws_addr;
|
|
close NEWADDR;
|
|
|
|
open (ADDRIN, "<$addr_index")
|
|
|| die("can't open $addr_index for reading");
|
|
@addrindex_file = <ADDRIN>;
|
|
close ADDRIN;
|
|
|
|
foreach $addrindex_line (@addrindex_file) {
|
|
if ($addrindex_line =~ m/<\/book_list>/) {
|
|
$rw_addrindex .= " <book name=\"$new_addressbook\" file=\"$new_addrbk\" />\n"
|
|
." </book_list>\n";
|
|
} else {
|
|
$rw_addrindex .= "$addrindex_line";
|
|
}
|
|
}
|
|
|
|
open (NEWADDRIN, ">$addr_index")
|
|
|| die("Can't open $addr_index for writing");
|
|
print NEWADDRIN "$rw_addrindex";
|
|
close NEWADDRIN;
|
|
|
|
print "Done. $count address(es) converted successfully.\n";
|
|
|
|
exit;
|
|
|