3 # Take message on stdin, write to appropiate comment folder,
6 use Email::LocalDelivery;
10 use Convert::YText qw(decode_ytext);
12 # we need at least version 2.63 of IkiWiki
13 BEGIN { require IkiWiki; die unless ($IkiWiki::version >= 2.63) }
19 my $folder_ext=".mbox";
21 my $config_file=undef;
23 GetOptions('config=s'=>\$config_file);
25 die "configuration file is mandatory" unless ($config_file);
27 %IkiWiki::config=IkiWiki::defaultconfig();
28 IkiWiki::Setup::load($config_file);
30 IkiWiki::loadplugins();
31 IkiWiki::checkconfig();
34 my $prefix=$config{postal_prefix} || die "prefix not set";
36 my $message=Email::Filter->new();
38 $message->exit(0); # do not exit after delivery
41 if ($to =~ m/$prefix($Convert::YText::valid_rex)/){
42 my $page=decode_ytext($1);
46 # hmm, not sure why pagesource is indexed by page.ext, but it is awkward here
47 # die("page ".$page." does not exist") if (!exists $IkiWiki::pagesources{$page});
49 chdir $config{srcdir} || die ("chdir $config{srcdir}: $!");
51 my $comments_folder=$page."/comments".$folder_ext;
53 # write the message to the comment
55 $message->accept($comments_folder) || die("delivery failed");
57 debug("delivered to $comments_folder\n");
58 # update vcs, copied from Ikiwiki::Plugins::attachment
61 IkiWiki::rcs_add($comments_folder);
62 IkiWiki::disable_commit_hook();
63 IkiWiki::rcs_commit($comments_folder, gettext("postal delivery"),
64 IkiWiki::rcs_prepedit($comments_folder));
65 IkiWiki::enable_commit_hook();
66 IkiWiki::rcs_update();