]> pere.pagekite.me Git - homepage.git/commitdiff
Switch to using iCal::Parser.
authorPetter Reinholdtsen <pere@hungry.com>
Thu, 25 Oct 2012 09:11:11 +0000 (09:11 +0000)
committerPetter Reinholdtsen <pere@hungry.com>
Thu, 25 Oct 2012 09:11:11 +0000 (09:11 +0000)
linux/plan2icalendar

index 02fc237b364e3cd73d8739d79314588e57a946d6..ad051624b2cd7c74a8b92fe4f8b06e2491bda2e4 100755 (executable)
@@ -17,6 +17,8 @@ use Getopt::Std;
 use Date::Parse;
 use Date::Format;
 use Date::ICal;
 use Date::Parse;
 use Date::Format;
 use Date::ICal;
+use iCal::Parser;
+use Data::Dumper;
 
 my @events;
 my %opts;
 
 my @events;
 my %opts;
@@ -151,6 +153,39 @@ EOF
 #
 sub read_icalendar {
     my $filename = shift;
 #
 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";
     open (ICALENDAR, "<$filename") or die "Unable to read from $filename";
     my $oldval = $/;
     $/ = "\r\n";
@@ -178,6 +213,7 @@ sub read_icalendar {
     }
     close (ICALENDAR);
     $/ = $oldval;
     }
     close (ICALENDAR);
     $/ = $oldval;
+    }
 }
 
 # Simple version covering the chars I need.
 }
 
 # 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
     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 $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",
         my $icalduration = $icalstop - $ical;
         my $duration = join(":",
                             $icalduration->hours   || "0",