# HG changeset patch # User Shinji KONO # Date 1391740478 -32400 # Node ID 2748cd7ccfca1941bd05edab6ca8e42360227b59 # Parent 8bb1a007ed8920088715f54ad89caa0ad94b1666 merge fix and buffer read returns utf-8 now diff -r 8bb1a007ed89 -r 2748cd7ccfca Calcon.pm --- a/Calcon.pm Tue Oct 22 16:39:13 2013 +0900 +++ b/Calcon.pm Fri Feb 07 11:34:38 2014 +0900 @@ -27,7 +27,7 @@ #); -our $VERSION = '0.02'; +our $VERSION = '0.03'; # Preloaded methods go here. @@ -121,7 +121,7 @@ # 時間関係のライブラリ -sub localtime { +sub localtime { # error? my ($self,$date) = @_; return $date->localtime(); } @@ -159,6 +159,13 @@ bless $record,$record_class; } +sub print { + my ($self) = @_; + foreach my $k ( keys %$self ) { + print " $k -> $self->{$k}\n"; + } +} + #######################################################################/ package Calcon::Record ; @@ -204,11 +211,17 @@ my ($self,$record) = @_; foreach my $key (keys %{$self}) { - next if (!defined $self->{$key} && !defined $record->{$key}); + if (!defined $self->{$key} && !defined $record->{$key}) { + # print "!!!!! $key not defiend \n"; + next; + } if(ref $self->{$key} && ref $record->{$key}) { return 0 if (! $self->{$key}->equal($record->{$key})); } else { - return 0 if ($self->{$key} ne $record->{$key}); + if ($self->{$key} ne $record->{$key}) { + # print "!!!!! $key not equal $self->{$key} $record->{$key}\n"; + return 0; + } } } return 1; @@ -498,7 +511,7 @@ sub equal { my ($self,$date) = @_; - return ($self->unix_time() != $date->unix_time()); + return ($self->unix_time() == $date->unix_time()); } #######################################################################/ @@ -1279,6 +1292,7 @@ sub same_record_in_list { my ($self,$list,$record) = @_; + return -1 if ( ! $list ); # print "\nCampare: ";$record->value; record: for (my $i = 0; $i<=$#{$list}; $i++) { @@ -1348,30 +1362,23 @@ sub address { my ($self,$keys,$record) = @_; my $name = $record->{'name'}; - if (my $list = $self->{'-address-index'}->{$name}) { - my $i; - if (($i = $self->same_record_in_list($list,$record)) >= 0 ) { - return; - } - push(@$list,$record); - } else { - push(@{$self->{'-address-index'}->{$name}},$record); + my $list = $self->{'-address-index'}->{$name}; + my $i; + if (($i = $self->same_record_in_list($list,$record)) >= 0 ) { + return; } + push(@{$self->{'-address-index'}->{$name}},$record); } sub calendar { my ($self,$keys,$record) = @_; my $date = $record->{'date'}->unix_time(); my $list = $self->{'-date-index'}->{$date}; - if ($list) { - my $i; - if (($i = $self->same_record_in_list($list,$record)) >= 0 ) { - return; - } - push(@$list,$record); - } else { - push(@{$self->{'-date-index'}->{$date}},$record); + my $i; + if (($i = $self->same_record_in_list($list,$record)) >= 0 ) { + return; } + push(@{$self->{'-date-index'}->{$date}},$record); } @@ -2896,13 +2903,13 @@ my $dtend = ''; my $dtstamp = ''; - if (! $record{'date'}->is_allday() || ! $record{'all-day'} eq 'true') { + if (! $record{'date'}->is_allday() || ! $record{'all-day'} eq 'true' || defined $record{'end-date'} ) { if (! defined( $record{'end-date'}) || $record{'end-date'} == $record{'date'} ) { # $dtend = "\nDURATION:PT2H"; this is useless for iCal $record{'end-date'} = $record{'date'}->add( $self->{'-add-time-for-allday'}); $dtend = "\nDTEND;TZID=$timezone:".$self->date($record{'end-date'}); - } else { + } else { $dtend = "\nDTEND;TZID=$timezone:".$self->date($record{'end-date'}); } } else { @@ -3580,14 +3587,14 @@ if (s/^([A-Za-z][-A-Za-z0-9_]*):\s*//) { $key = $1; } else { - $key = 'memo'; + $key = 'summary'; } $key = 'memo' if ($key eq ''); if ($key eq 'Subject') { - $key = 'memo'; + $key = 'summary'; } s/^(\201\100)*//; - $_ = nkf('-sZ',$_); + $_ = nkf('-wZ',$_); if($key eq 'time' || $key eq 'end-time') { $record->{$key} = $_; next; @@ -4239,10 +4246,10 @@ } elsif (/^X-ABUID:/i) { } elsif (/^note:\s*(.*)/i) { $record->{'memo'} .= $1; } elsif (/^dtend;value\=date:\s*(.*)/i) { $record->{'all-day'} = 'true'; $record->{'end-date'} = $self->date($1); -} elsif (/^dtend(.*):\s*(.*)/i) { $record->{'end-date'} = $self->date($2,$1?$1:$record->{'timezone'}); -} elsif (/^dtstamp(.*):\s*(.*)/i) { $record->{'modify-date'} = $self->date($2,$1?$1:$record->{'timezone'}); -} elsif (/^dtstart;value\=date:\s*(.*)/i) { $record->{'all-day'} = 'true'; $record->{'end-date'} = $self->date($1); -} elsif (/^dtstart(.*):\s*(.*)/i) { $record->{'date'} = $self->date($2,$1?$1:$record->{'timezone'}); +} elsif (/^dtend(.*?):\s*([^\s]+)/i) { $record->{'end-date'} = $self->date($2,$1?$1:$record->{'timezone'}); +} elsif (/^dtstamp(.*?):\s*([^\s]+)/i) { $record->{'modify-date'} = $self->date($2,$1?$1:$record->{'timezone'}); +} elsif (/^dtstart;value\=date:\s*([^\s]+)/i) { $record->{'all-day'} = 'true'; $record->{'end-date'} = $self->date($1); +} elsif (/^dtstart(.*?):\s*([^\s]+)/i) { $record->{'date'} = $self->date($2,$1?$1:$record->{'timezone'}); } elsif (/^duration:\s*(.*)/i) { $self->duration($record,$1); } elsif (/^email(.*):\s*(.*)/i) { $self->items($record,'mail',$1,$2); } elsif (/^end:\s*vcard/i) { $self->vcard($record); @@ -4298,6 +4305,7 @@ } elsif ($date =~ /(\d\d\d\d)(\d\d)(\d\d)/i) { return $self->make_date("$1/$2/$3"); } else { + print "date error $date"; return ""; } }