diff options
Diffstat (limited to 'lib/Feed/MailDir.pm')
-rw-r--r-- | lib/Feed/MailDir.pm | 76 |
1 files changed, 0 insertions, 76 deletions
diff --git a/lib/Feed/MailDir.pm b/lib/Feed/MailDir.pm deleted file mode 100644 index 4b8f542..0000000 --- a/lib/Feed/MailDir.pm +++ /dev/null @@ -1,76 +0,0 @@ -package Feed::MailDir; -use Moose::Role; -use 5.016; -use namespace::autoclean; -use Encode; -use Encode::IMAPUTF7; -use MooseX::Types::Path::Class 'Dir'; -use Maildir::Lite; - -with 'Feed::Mail'; - -requires 'extract_entries'; - -has maildir_base => ( - is => 'ro', - isa => Dir, - coerce => 1, - required => 1, -); - -has maildir_folder => ( - is => 'ro', - isa => 'Maildir::Lite', - lazy_build => 1, -); - -sub _build_maildir_folder { - my ($self) = @_; - - my $feed = $self->feed; - - my $folder = encode('IMAP-UTF-7',$self->maildir_folder_for($feed)); - - $self->maildir_base->mkpath; - - return Maildir::Lite->new( - dir => $self->maildir_base->subdir($folder)->stringify, - ); -} - -sub process_entry { - my ($self,$entry) = @_; - - my ($msg) = $self->entry_to_mime($entry); - - $self->store_into_maildir($msg); - - return; -} - -sub _clean_folder_part { - return map { s{\W+}{-}gr } @_; -} - -sub maildir_folder_for { - my ($self,$feed) = @_; - - my (@comps) = _clean_folder_part($self->mail_folders,$self->title); - return join '.','',@comps; -} - -sub store_into_maildir { - my ($self,$msg) = @_; - - my ($fh,$stat) = $self->maildir_folder->creat_message(); - die "maildir create message failed ($stat)" if $stat; - - binmode($fh); - $msg->print($fh) - or die "print to maildir failed: $!"; - - $self->maildir_folder->deliver_message($fh) - and die "maildir write failed"; -} - -1; |