#!/usr/bin/env perl
#
#   vcf2csv by gall0ws <g4ll0ws@gmail.com>
#
# Time-stamp: <2008-05-03 04:18:04 CEST gallows>
#
# Convert Evolution's vcf contact list in gmail readable csv file.
#
# Tested with `list.vcf' generated by Novell Evolution 2.22 (VCARD 3.0)
#

use strict;

sub push_field {
    my ($csv_ref, $vcard_ref, $re) = @_;
    my ($tmp) = grep(/$re/, @$vcard_ref);
    my ($key, $value) = split ':', $tmp, 2;
    chop $value;
    push @$csv_ref, $value;
}

my @csv_fields = ('Name', 'E-mail', 'Phone', 'Notes');

my $fin = $ENV{'NAUTILUS_SCRIPT_SELECTED_FILE_PATHS'};
my @fins = split( /\s/, $fin );

my @fouts;

foreach ( @fins ) {
    my ( $file_name ) = ( m/(.+)\.vcf/ );
    push( @fouts, $file_name.'.csv' );
}

foreach my $i ( 0 .. scalar( @fins ) ) {
    open(VCF, "< $fins[$i]") || die "$0: cannot open `$fins[$i]': $!";
    open(CSV, "> $fouts[$i]") || die "$0: cannot open `$fouts[$i]': $!";

    # print csv header on CSV handle:
    foreach (@csv_fields) {
        print CSV $_ . ',';
    }
    print CSV "\n";

    do {
        my @vcard = ();  # card in vcf format
        my @csv = ();
 
        # load @vcard from $fin:
        do {
	        $_ = <VCF>;
	        chomp;
	        push @vcard, $_;
        } until /END:VCARD/;

        # put fields in @csv:
        push_field \@csv, \@vcard, "^FN:.*";                 # name
        push_field \@csv, \@vcard, '\w+@\w+\.[a-zA-z]{2,4}'; # email
        push_field \@csv, \@vcard, "^TEL;.*";                # phone
        push_field \@csv, \@vcard, "^NOTE:.*";               # notes

        # write csv entries on CSV handle:
        foreach (@csv) {
	        print CSV;
	        print CSV ',';
        }
        print CSV "\n";
    } until eof VCF;

    close VCF;
    close CSV;
}


