]> git.vanrenterghem.biz Git - git.ikiwiki.info.git/blob - filters/postal-accept.pl
6a90469ea3d9b536ec77198ccb80c4c435a2b28d
[git.ikiwiki.info.git] / filters / postal-accept.pl
1 #!/usr/bin/perl
3 # Take message on stdin, write to appropiate comment folder, 
4 # update wiki
5 use strict;
6 use Email::LocalDelivery;
7 use Email::Filter;
8 use Data::Dumper;
10 use Convert::YText qw(decode_ytext);
12 # we need at least version 2.54 of IkiWiki for the new config api
13 BEGIN { require IkiWiki; die unless ($IkiWiki::version >= 2.54) }
14 use IkiWiki;
15 use IkiWiki::Setup;
16 use Getopt::Long;
17 use Carp;
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 %config=IkiWiki::defaultconfig();
28 IkiWiki::Setup::load($config_file);
29 IkiWiki::checkconfig();
30 IkiWiki::loadplugins();
32 my $prefix=$config{postal_prefix} || die "prefix not set";
34 my $message=Email::Filter->new();
36 $message->exit(0); # do not exit after delivery
38 my $to=$message->to;
39 if ($to =~ m/$prefix($Convert::YText::valid_rex)/){
40     my $page=decode_ytext($1);
42     IkiWiki::loadindex();
44 # hmm, not sure why pagesource is indexed by page.ext, but it is awkward here    
45 #    die("page ".$page." does not exist") if (!exists $IkiWiki::pagesources{$page});
47     chdir $config{srcdir} || die ("chdir $config{srcdir}: $!");
49     my $comments_folder=$page."/comments".$folder_ext;
51     # write the message to the comment
52     
53     $message->accept($comments_folder) || die("delivery failed");
54     
55     debug("delivered to $comments_folder\n");
56     # update vcs, copied from Ikiwiki::Plugins::attachment
57     
58     if ($config{rcs}) {
59         IkiWiki::rcs_add($comments_folder);
60         IkiWiki::disable_commit_hook();
61         IkiWiki::rcs_commit($comments_folder, gettext("postal delivery"),
62                             IkiWiki::rcs_prepedit($comments_folder));
63         IkiWiki::enable_commit_hook();
64         IkiWiki::rcs_update();
65     }
67     
68     # refresh wiki
69 #    IkiWiki::refresh();
70     IkiWiki::saveindex();
71