Publish::iCal patch

『Plagger で Amazon2iCal 改良』 にて、Data::ICal で ORGANIZER をちゃんとしたフォーマットにする方法がわからん、と言っていたのですが、やりかたわかりました。

$event->add_properties(
    organizer   => [ 'MAILTO:gosukenator@gmail.com', { CN => 'Gosuke Miyashita' } ],
);

Data::ICal::Entry の pod にちゃんと書いてありましたね。

というわけで、organizer をちゃんとセットするように、Publish::iCal を書き換えてみました。Email::Address は Filter::ExtractAuthorName から拝借してます。

Index: plagger/trunk/lib/Plagger/Plugin/Publish/iCal.pm
===================================================================
--- plagger/trunk/lib/Plagger/Plugin/Publish/iCal.pm (revision 231)
+++ plagger/trunk/lib/Plagger/Plugin/Publish/iCal.pm (revision 233)
@@ -6,4 +6,5 @@
 use Data::ICal;
 use Data::ICal::Entry::Event;
+use Email::Address;
 
 sub register {
@@ -34,4 +35,8 @@
 
     for my $entry ($feed->entries) {
+        my $address = ( Email::Address->parse($entry->author) )[0];
+        my $mail = eval { $address->address } || 'nobody@example.com';
+        my $name = eval { $address->name } || $entry->author;
+
         my $date = $entry->date;
         my $event = Data::ICal::Entry::Event->new;
@@ -39,5 +44,5 @@
             summary     => $entry->title . ' - ' . $entry->author,
             description => $entry->summary || $entry->body,
-            organizer   => $entry->author,
+            organizer   => [ "MAILTO:$mail", { cn => $name } ],
             url         => $entry->link,
             dtstart     => join('', split('-', $date->ymd)),

trac のチェンジセットはこちら