#!/usr/bin/perl use strict; use Palm::Address; use XML::Writer; use IO; # Yes, this is copyright by me. # Palm::Address converter to Sylpheed's XML Format # Format tested on Sylpheed 0.6.4 # See http://sylpheed.good-day.net # Yes, I do know Sylpheed can do this too but that feature failed to compile for me # You need to edit addrbook--index.xml so it has an entry as shown below. # # The bookname can be changed but you'll need to change the source too. # You need to rename/move the output to the .sylpheed directory in your homedir my $pdb = Palm::Address->new(); $pdb->Load("AddressDB.pdb"); my $output = new IO::File(">output.xml"); my $writer = new XML::Writer(OUTPUT => $output,DATA_MODE=>1, DATA_INDENT=>3); $writer->xmlDecl("ISO-8859-1"); # This is ok for me, tweak it ! $writer->startTag("address-book","name"=>"Palm"); # Change name here my $id = int rand(300000); # I have NO idea if the UID needs to be sequential but this works foreach my $record (@{$pdb->{records}}) { my $email_loc; for (1..5) { if ($record->{phoneLabel}{"phone$_"} eq "4") { $email_loc = $_; } } # Find which Phone field is for E-Mail if ($record->{fields}{"phone$email_loc"} =~ /\@/) { $id++; $writer->startTag("person","uid"=>$id,"first-name"=>$record->{fields}{firstName}, "last-name"=>$record->{fields}{name},"nick-name"=>"", "cn"=>$record->{fields}{firstName}." ".$record->{fields}{name}); $writer->startTag("address-list"); my (@addresses) = split (/\n/,$record->{fields}{"phone$email_loc"}); foreach my $addr(@addresses) { $id++; $writer->startTag("address","uid"=>$id,"alias"=>"","email"=>$addr,"remarks"=>$record->{fields}{note}); $writer->endTag("address"); } $writer->endTag("address-list"); $writer->startTag("attribute-list"); foreach my $key (keys %{$record->{fields}}) { if ($key ne "name" && $key ne "firstName" && $key ne "phone$email_loc" && $key ne "note") { $id++; $writer->startTag("attribute","uid"=>$id,"name"=>$pdb->{appinfo}{fieldLabels}{$key}); $writer->characters($record->{fields}{$key}); $writer->endTag("attribute"); } } $writer->endTag("attribute-list"); $writer->endTag("person"); } } $writer->endTag("address-book"); $writer->end(); $output->close();