Dezi-App

 view release on metacpan or  search on metacpan

lib/Dezi/Aggregator/Mail.pm  view on Meta::CPAN

    $self->_process_folder($folder);

    $folder->close( write => 'NEVER' );

    return $self->{count};
}

sub _addresses {
    return join( ', ', map { ref($_) ? $_->format : $_ } @_ );
}

sub _process_folder {
    my $self   = shift;
    my $folder = shift or croak "folder required";

    my @subs    = sort $folder->listSubFolders;
    my $indexer = $self->indexer;

    for my $sub (@subs) {
        my $subf = $folder->openSubFolder($sub);

        warn "searching $sub\n" if $self->verbose;

        if ( $self->_apply_file_rules($sub)
            && !$self->_apply_file_match($sub) )
        {
            warn "skipping FileRules match $sub\n" if $self->verbose;
            $subf->close( write => 'NEVER' );
            next;
        }

        foreach my $message ( $subf->messages ) {
            my $doc = $self->get_doc($message);

            if ( $self->_apply_file_rules( $doc->url )
                && !$self->_apply_file_match( $doc->url ) )
            {
                warn sprintf( "skipping FileRules match %s\n", $doc->url )
                    if $self->verbose;
                next;
            }

            $indexer->process($doc);
            $self->_increment_count;
        }

        $self->_process_folder($subf);

        $subf->close( write => 'NEVER' );
    }

}

sub _filter_attachment {
    my $self    = shift;
    my $msg_url = shift or croak "message url required";
    my $attm    = shift or croak "attachment object required";

    my $type     = $attm->body->mimeType->type;
    my $filename = $attm->body->dispositionFilename;
    my $content  = $attm->decoded . '';                # force stringify

    return $XMLer->escape_utf8($content) unless $filename;

    my @filters;

    if ( $self->swish_filter_obj->can_filter($type) ) {

        my $f = $self->swish_filter_obj->convert(
            document     => \$content,
            content_type => $type,
            name         => $filename,
        );

        if (   !$f
            || !$f->was_filtered
            || $f->is_binary )    # is is_binary necessary?
        {
            warn "skipping $filename in message $msg_url - filtering error\n";
            return join( "",
                "<type>$type</type>",      '<title>',
                $XMLer->escape($filename), '</title>' );
        }

        $content = to_utf8( ${ $f->fetch_doc } );

        # consider low ascii problematic
        $content = '[unconverted]'
            if $content =~ m/[^\x00-\x7F]/
            or !is_valid_utf8($content);

        @filters = map { ref $_->{name} } @{ $f->filters_used };
    }
    else {
        $content = '[unconverted]';
    }

    return join( '',
        "<filter>",  join( ",", @filters ),
        "</filter>", "<type>$type</type>",
        '<title>',   $XMLer->escape($filename),
        '</title>',  $XMLer->escape_utf8( $XMLer->strip_markup($content) ) );

}

=head2 get_doc( I<folder>, I<Mail::Message> )

Extract data and content from I<Mail::Message> in I<folder> and return
doc_class() object.

=cut

sub get_doc {
    my $self    = shift;
    my $message = shift or croak "mail meta required";
    my $folder  = shift || $message->folder;

    # >head->createFromLine;
    my %meta = (
        url     => join( '.', $folder, $message->messageId ),
        id      => $message->messageId,



( run in 2.665 seconds using v1.01-cache-2.11-cpan-600a1bdf6e4 )