Category: | E-Mail Programs |
Author/Contact Info | Hendrik Van Belleghem (beatnik -at- quickndirty -dot- org) |
Description: | This code converts a Palms Addressbook to Sylpheeds addressbook. It uses XML::Writer, Palm::Addressbook (and parent modules). Sylpheed is a GTK+ based, lightweight, and fast e-mail client. See comments for more info. |
#!/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 c +ompile for me # You need to edit addrbook--index.xml so it has an entry as shown bel +ow. # <book name="Palm" file="addrbook-000003.xml" /> # 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 you +r 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_INDE +NT=>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->{fiel +ds}{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"=>$ad +dr,"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$emai +l_loc" && $key ne "note") { $id++; $writer->startTag("attribute","uid"=>$id,"name"=>$pdb->{appinf +o}{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(); |
|
---|
Back to
Code Catacombs