From 61384bf98bdc8b282d8e2464a44aca6a0a3413b1 Mon Sep 17 00:00:00 2001 From: Petter Reinholdtsen Date: Thu, 25 Oct 2012 09:11:11 +0000 Subject: [PATCH] Switch to using iCal::Parser. --- linux/plan2icalendar | 50 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 2 deletions(-) diff --git a/linux/plan2icalendar b/linux/plan2icalendar index 02fc237b36..ad051624b2 100755 --- a/linux/plan2icalendar +++ b/linux/plan2icalendar @@ -17,6 +17,8 @@ use Getopt::Std; use Date::Parse; use Date::Format; use Date::ICal; +use iCal::Parser; +use Data::Dumper; my @events; my %opts; @@ -151,6 +153,39 @@ EOF # sub read_icalendar { my $filename = shift; + + if (1) { + my $parser = iCal::Parser->new(); + my $hash = $parser->parse($filename); +# print Dumper($hash) if $debug; +# print Dumper($hash->{'events'}); + for my $year (sort keys %{$hash->{'events'}}) { + for my $month (sort keys %{$hash->{'events'}->{$year}}) { + for my $day (sort keys %{$hash->{'events'}->{$year}->{$month}}) { + for my $evid (keys %{$hash->{'events'}->{$year}->{$month}->{$day}}) { + my $event = + $hash->{'events'}->{$year}->{$month}->{$day}->{$evid}; +# print "$year-$month-$day $evid\n"; +# print Dumper($event); + + my %newevent; + $newevent{description} = $event->{'DESCRIPTION'}; + $newevent{created} = $event->{'CREATED'}; + $newevent{dtend} = $event->{'DTEND'}; + $newevent{dtstamp} = $event->{'DTSTAMP'}; + $newevent{dtstart} = $event->{'DTSTART'}; + $newevent{'last-modified'} = $event->{'LAST-MODIFIED'}; + $newevent{sequence} = $event->{'SEQUENCE'}; + $newevent{summary} = $event->{'SUMMARY'}; + $newevent{uid} = $event->{'UID'}; +# print Dumper(%newevent); + push(@events, \%newevent); + print STDERR "Event pushed\n" if $debug; + } + } + } + } + } else { open (ICALENDAR, "<$filename") or die "Unable to read from $filename"; my $oldval = $/; $/ = "\r\n"; @@ -178,6 +213,7 @@ sub read_icalendar { } close (ICALENDAR); $/ = $oldval; + } } # Simple version covering the chars I need. @@ -197,11 +233,21 @@ sub write_planfile { open(PLAN, ">$filename") or die "Unable to write to $filename"; for my $event (@events) { # offset = 0 -- assume all timestamps in local time zone - my $ical = Date::ICal->new( ical => $event->{dtstart}, offset => 0 ); + my $ical; + if ("DateTime" eq ref $event->{dtstart}) { + $ical = Date::ICal->new( epoch => $event->{dtstart}->epoch ); + } else { + $ical = Date::ICal->new( ical => $event->{dtstart}, offset => 0 ); + } my $date = join("/", $ical->month, $ical->day, $ical->year); my $start = join(":", $ical->hour, $ical->min, $ical->sec); - my $icalstop = Date::ICal->new( ical => $event->{dtend}, offset => 0 ); + my $icalstop; + if ("DateTime" eq ref $event->{dtend}) { + $icalstop = Date::ICal->new( epoch => $event->{dtend}->epoch ); + } else { + $icalstop = Date::ICal->new( ical => $event->{dtend}, offset => 0 ); + } my $icalduration = $icalstop - $ical; my $duration = join(":", $icalduration->hours || "0", -- 2.47.2