Changeset 348

Show
Ignore:
Timestamp:
11/14/06 06:00:56 (2 years ago)
Author:
ogawa
Message:

Update WWW-CybozuOffice?6-Calendar

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • cybozu2ical/trunk/lib/WWW/CybozuOffice6/Calendar.pm

    r344 r348  
    8282    my $start = $this->to_datetime($fields[3], $fields[5]); 
    8383    my $end   = $this->to_datetime($fields[4], $fields[6]); 
    84     if ($fields[5] =~ /^:$/) {          # full-day event 
     84    return unless $start && $end; 
     85    if ($fields[5] eq ':') {            # full-day event 
    8586        $start = $start->truncate(to => 'day'); 
    8687        $end   = $end->add(days => 1)->truncate(to => 'day'); 
    8788        $is_full_day = 1; 
    88     } elsif ($fields[6] =~ /^:$/) {   # event w/o endtime 
    89         $end   = $start->add(minutes => 10); 
     89    } elsif ($fields[6] eq ':') {     # event w/o endtime 
     90        $end   = $start->clone->add(minutes => 10); 
    9091    } 
    9192 
    92     my($created) = $fields[1] =~ m/ts\.(\d+)/; 
    93     $created = DateTime->from_epoch(epoch => $created); 
     93    my($created) = $fields[1] =~ m/^ts\.(\d+)$/; 
     94    $created = DateTime->from_epoch(epoch => $created || 0); 
    9495 
    9596    my $summary = $fields[11] || ''; 
     
    126127        $item->{frequency} = $FREQUENCY{$freq}; 
    127128        $item->{frequency_value} = $fields[8] || 0; 
    128         $item->{until} = $this->to_datetime($fields[4], '0:0:0'
    129             unless $fields[4] =~ m!^//$!
     129        $item->{until} = $this->to_datetime($fields[4]
     130            if $fields[4] ne '//'
    130131    } 
    131132 
     
    135136sub to_datetime { 
    136137    my $this = shift; 
    137     my @d = split '/', $_[0] || ''; 
    138     my @t = split ':', $_[1] || ''; 
    139     DateTime->new( 
    140         year => $d[0], month => $d[1], day => $d[2], 
    141         hour => $t[0] || 0, minute => $t[1] || 0, second => $t[2] || 0, 
    142         time_zone => $this->{time_zone} || 'Asia/Tokyo', 
    143     ); 
     138    my($ymd, $hms) = @_; 
     139 
     140    my %args; 
     141    return unless $ymd && $ymd =~ m!^(\d+)/(\d+)/(\d+)$!; 
     142    @args{qw(year month day)} = ($1, $2, $3); 
     143 
     144    $hms = '0:0:0' unless $hms && $hms ne ':'; 
     145    return unless $hms =~ m!^(\d+):(\d+)(?:\:?(\d+)?)$!; 
     146    @args{qw(hour minute second)} = ($1, $2, $3 || 0); 
     147    @args{qw(hour minute second)} = (23, 59, 59) if $args{hour} > 23; 
     148 
     149    $args{time_zone} = $this->{time_zone} || 'Asia/Tokyo'; 
     150 
     151    DateTime->new(%args); 
    144152} 
    145153