view pool.pl @ 9:798ba47e8046 address-book

*** empty log message ***
author kono
date Sun, 16 Oct 2005 15:42:04 +0900
parents 144819f5d2f6
children 1a68139a269f
line wrap: on
line source

#!/usr/bin/perl 

use Calcon;

use strict;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK 
);

my %input = (
    'Zaurus' 	=> 'Calcon::Zaurus_read',
    'Backup Zaurus' 	=> 'Calcon::Zaurus_backup_read',
    'Xcalendar' => 'Calcon::Xcalendar_read',
    'Vcard' 	=> 'Calcon::Vcard_read',
    'SLA300' 	=> 'Calcon::Sla300_read',
    'iApp' 	=> 'Calcon::iApp_read',
  'Entourage'	=> 'Calcon::Entourage_read',
    'File' 	=> 'Calcon::File_read',
);

my %output = (
    'Xcalendar'	=> 'Calcon::Xcalendar_write',
    'Vcard' 	=> 'Calcon::Vcard_write',
    'SLA300'	=> 'Calcon::Sla300_write',
  'AppleScript'	=> 'Calcon::iApp_write',
    'iApp' 	=> 'Calcon::iApp_write',
 'Address Book' => 'Calcon::Vcard_Apple_write',
  'Entourage'	=> 'Calcon::Entourage_write',
    'Print' 	=> 'Calcon::Print_write',
    'File' 	=> 'Calcon::File_write',
);


sub find_input {
    my ($input) = @_;
    my ($obj);

    $input =~ s/(\W)/\\$1/g;
    foreach my $key ( keys %input) {
	if ($key =~ /^$input/i) {
	    $obj  = $input{$key}; 
	    last;
	}
    }
    $obj;
}

sub find_output {
    my ($output) = @_;
    my ($obj);

    $output =~ s/(\W)/\\$1/g;
    foreach my $key ( keys %output) {
	if ($key =~ /^$output/i) {
	    $obj  = $output{$key}; 
	    last;
	}
    }
    $obj;
}

&usage if (! @ARGV); 

my $mode = "input";
my $type = "file";
my $pool = Calcon::Pool->new();
my $last_flag = 0;

while(my $file = shift( @ARGV )) {
    my ($obj,$out,$opt);

    if ($file =~ /^-([^-]*)-([^-]*)((-[^-]*)*)/) {
	$mode = $1;
	$type = $2;
	$opt = $3;
	$file = shift(@ARGV);
    } else {
	&usage_die();
    }

    if (0 && $#ARGV==1 && $ARGV[0]=~/^-output/) {
	# we need not pool interface for this case
        # It does not help speed so we abandon it.
	print "Simple Case\n";
	my $output = $ARGV[1];

	$obj = &find_input($type);
	$obj = $obj->new($opt);

        $ARGV[0] =~ /^-([^-]*)-([^-]*)((-[^-]*)*)/;
	$mode = $1;
	$type = $2;
	$opt = $3;

	my $out = &find_output($type);
	$out = $out->new($opt,$output);
	$obj->set_output($out);
	$obj -> decode($file);

	$last_flag = 1;
	last;
    }
#    print "$mode $type $opt $file\n";
    if ($mode eq 'input') {
	$obj = &find_input($type);
	$obj = $obj->new($opt);
	$obj->set_output($pool);
	$obj -> decode($file);
    } elsif ($mode eq 'merge') {
	$obj = &find_input($type);
	$obj = $obj->new($opt);
	$obj->set_output($pool);
	$pool->merge_mode();
	$obj -> decode($file);
    } elsif ($mode eq 'delete') {
	$obj = &find_input($type);
	$obj = $obj->new($opt);
	$obj->set_output($pool);
	$pool->delete_mode();
	$obj -> decode($file);
    } elsif ($mode eq 'output') {
	$obj = &find_output($type);
	$obj = $obj->new($opt,$file);
	$pool->set_output($obj);
	$pool->output($obj);
	$last_flag = 1;
	last;
    }
}

if (! $last_flag) {
	my $opt = '';
	my $obj = &find_output('File');
	$obj = $obj->new($opt);
	$pool->set_output($obj);
	$pool->output($obj);
	$last_flag = 1;
}


sub usage_die {
    &usage();
    die();
}

sub usage {
    print "Usage: $0 -input-xcal ~/Calendar -output-print-FC /dev/stdout\n";
    print "     -[mode]-[type][-options] file-name\n";
    print "  mode:  input, merge, delete\n";
    print "  input  type: ",join(" ",keys %input),"\n";
    print "  output type: ",join(" ",keys %output),"\n";
    print
      "\t-n\tfile-out\n",
      "\t-d\tdebug\n",
      "\t-a\taddress only\n",
      "\t-c\tcalendar only\n",
      "\t-F\tfuture only\n",
      "\t-t\ttommorrow\n",
      "\t-C\tdisplay count\n",
      "";
}

#