diff options
| author | fukachan <fukachan> | 2002-11-26 07:42:19 +0000 |
|---|---|---|
| committer | fukachan <fukachan> | 2002-11-26 07:42:19 +0000 |
| commit | 2cacd91acefa9309cd68fbd726be1eebdd5e4788 (patch) | |
| tree | fb244a1f5910396f3cb9bbc0958f90a8a6bbec47 /fml | |
| parent | 679657f14cff4ecb820eef8336c9b25f98c38db5 (diff) | |
| download | fml8-snap-20021126.tar.gz fml8-snap-20021126.tar.bz2 fml8-snap-20021126.zip | |
create FML::Article:: classsnap-20021126
Diffstat (limited to 'fml')
| -rw-r--r-- | fml/lib/FML/Article/Summary.pm | 172 |
1 files changed, 172 insertions, 0 deletions
diff --git a/fml/lib/FML/Article/Summary.pm b/fml/lib/FML/Article/Summary.pm new file mode 100644 index 00000000..f097f04f --- /dev/null +++ b/fml/lib/FML/Article/Summary.pm @@ -0,0 +1,172 @@ +#-*- perl -*- +# +# Copyright (C) 2002 Ken'ichi Fukamachi +# All rights reserved. This program is free software; you can +# redistribute it and/or modify it under the same terms as Perl itself. +# +# $FML: @template.pm,v 1.6 2002/09/28 05:36:03 fukachan Exp $ +# + +package FML::Article::Summary; +use strict; +use vars qw(@ISA @EXPORT @EXPORT_OK $AUTOLOAD); +use Carp; +use FML::Log qw(Log LogWarn LogError); + + +=head1 NAME + +FML::Article::Summary - generate article summary + +=head1 SYNOPSIS + +=head1 DESCRIPTION + +=head1 METHODS + +=head2 C<new()> + +=cut + + +# Descriptions: +# Arguments: OBJ($self) HASH_REF($args) +# Side Effects: +# Return Value: none +sub new +{ + my ($self, $curproc) = @_; + my ($type) = ref($self) || $self; + my $me = {}; + $me->{ _curproc } = $curproc; + return bless $me, $type; +} + + +sub print +{ + my ($self, $id) = @_; + my $curproc = $self->{ _curproc }; + my $config = $curproc->config(); + my $file = $config->{ 'summary_file' }; + + print STDERR "open summary_file=$file id=$id\n"; + + use FileHandle; + my $wh = new FileHandle ">> $file"; + if (defined $wh) { + $wh->autoflush(1); + my $info = $self->_prepare_info($id); + $self->print_one_line_summary($wh, $info); + $wh->close(); + } +} + + +sub _prepare_info +{ + my ($self, $id) = @_; + my $curproc = $self->{ _curproc }; + + use FML::Article; + use Mail::Message; + my $article = new FML::Article $curproc; + my $file = $article->filepath($id); + my $msg = new Mail::Message->parse( { file => $file } ); + my $header = $msg->whole_message_header(); + my $address = $header->get( 'from' ); + + # extract the first 15 bytes of user@domain part. + use FML::Header; + my $hdrobj = new FML::Header; + $address = substr( $hdrobj->address_clean_up( $address ), 0, 15); + + # fold "\n" + my $subject = $header->get( 'subject' ); + $subject =~ s/\s*\n/ /g; + $subject =~ s/\s+/ /g; + + my $info = { + id => $id, + address => $address, + subject => $subject, + }; + + return $info; +} + + +sub print_one_line_summary +{ + my ($self, $wh, $info) = @_; + my $curproc = $self->{ _curproc }; + my $config = $curproc->config(); + my $style = $config->{ 'summary_format_style' }; + + if ($style eq 'fml4_compatible') { + $self->_fml4_compatible_style_one_line_summary($wh, $info); + } + else { + LogError("unknown \$summary_file_style: $style"); + } +} + + +sub _fml4_compatible_style_one_line_summary +{ + my ($self, $wh, $info) = @_; + my $rdate = undef; + + eval q{ + use Mail::Message::Date; + $rdate = new Mail::Message::Date; + }; + + if (defined $rdate) { + my $date = $rdate->{ 'log_file_style' }; + my $format = "%s [%d:%s] %s\n"; + my $id = $info->{ id }; + my $addr = $info->{ address }; + my $subj = $info->{ subject }; + + printf $wh $format, $date, $id, $addr, $subj; + } + else { + LogError("date object undefined."); + } +} + + +if ($0 eq __FILE__) { + my $obj = new FML::Article::Summary; + $obj->_one_line_summary("\%d \%s\n", [ + 1000, + "uja" + ]); +} + + +=head1 CODING STYLE + +See C<http://www.fml.org/software/FNF/> on fml coding style guide. + +=head1 AUTHOR + +Ken'ichi Fukamachi + +=head1 COPYRIGHT + +Copyright (C) 2002 Ken'ichi Fukamachi + +All rights reserved. This program is free software; you can +redistribute it and/or modify it under the same terms as Perl itself. + +=head1 HISTORY + +FML::Article::Summary appeared in fml8 mailing list driver package. +See C<http://www.fml.org/> for more details. + +=cut + + +1; |
