Fixed 'Server has gone away'.
[PerlMail.git] / contacts-n9k2mutt
1 #! /usr/bin/perl
2
3 #       $Id$
4 # Copyright (C) 2002-2003 Jan Kratochvil <project-PerlMail@jankratochvil.net>
5
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 # GNU General Public License for more details.
15
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19
20
21 use vars qw($VERSION);
22 $VERSION=do { my @r=(q$Revision$=~/\d+/g); sprintf "%d.".("%03d"x$#r),@r; };
23 use strict;
24 use warnings;
25
26 require Getopt::Long;
27 require PerlMail::Contacts;
28 require Mail::Address;
29
30
31 Getopt::Long::Configure(
32                 "no_ignorecase",
33                 "bundling",
34                 );
35 die if !Getopt::Long::GetOptions(
36                 );
37
38 undef $/;
39 while (<>) {
40         my @data=map({
41                         my @record=@$_;
42                         my %record;
43                         map({
44                                         my %item=%$_;
45                                         $record{$item{"FIELD"}}=$item{"FIELD-DATA"};
46                                         ($item{"FIELD"} ne "Mail" || !$item{"FIELD-DATA"} ? () : ({
47                                                         "name"=>$record{"Name"},
48                                                         "mail"=>$item{"FIELD-DATA"},
49                                                         "attr"=>$item{"FIELD-NAME"},
50                                                         "iscompany"=>($record{"Name"} && $record{"Company"} && $record{"Name"} eq $record{"Company"}),
51                                                         }));
52                                         } @record);
53                         } PerlMail::Contacts->import($_));
54         my @nicked=map({
55                         my $data=$_;
56                         my($name,$mail,$attr,$iscompany)=map(($data->{$_}),qw(name mail attr iscompany));
57                         $name=~s/,.*$//s;
58                         my @nicks=();
59                         my $name_force;
60                         while ($name=~s/"([^"]*)"([!])?//s) {
61                                 push @nicks,$1;
62                                 $name_force=$1 if $2;
63                                 }
64                         $name=~s/\s*$//s;
65                         $name=~s/^(\w+)\s+(\w+)$/$2 $1/s if !$iscompany;
66                         push @nicks,$name if !$name_force;
67                         for (@nicks) {
68                                 $_.=".$attr" if $attr;
69                                 s/\s+/./gs;
70                                 }
71                         map({
72                                         "nick"=>$_,
73                                         "obj"=>Mail::Address->new(($name_force || $name),$mail),
74                                         },@nicks);
75                         } @data);
76         for (@nicked) {
77                 print "alias ".$_->{"nick"}." ".$_->{"obj"}->format()."\n";
78                 }
79         }