You can subscribe to this list here.
2003 |
Jan
|
Feb
(160) |
Mar
(119) |
Apr
(111) |
May
(118) |
Jun
(101) |
Jul
(304) |
Aug
(113) |
Sep
(140) |
Oct
(137) |
Nov
(87) |
Dec
(122) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2004 |
Jan
(78) |
Feb
(125) |
Mar
(131) |
Apr
(59) |
May
(121) |
Jun
(166) |
Jul
(150) |
Aug
(137) |
Sep
(73) |
Oct
(58) |
Nov
(27) |
Dec
(60) |
2005 |
Jan
(131) |
Feb
(84) |
Mar
(36) |
Apr
(8) |
May
(28) |
Jun
(20) |
Jul
(10) |
Aug
(72) |
Sep
(76) |
Oct
(34) |
Nov
(3) |
Dec
(29) |
2006 |
Jan
(13) |
Feb
(92) |
Mar
(7) |
Apr
(1) |
May
(1) |
Jun
(2) |
Jul
(4) |
Aug
(17) |
Sep
(5) |
Oct
(2) |
Nov
(8) |
Dec
(12) |
2007 |
Jan
(28) |
Feb
(15) |
Mar
|
Apr
|
May
(8) |
Jun
(4) |
Jul
(5) |
Aug
(8) |
Sep
(20) |
Oct
(38) |
Nov
(65) |
Dec
(92) |
2008 |
Jan
(21) |
Feb
(56) |
Mar
(27) |
Apr
(174) |
May
(25) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <ssc...@us...> - 2003-04-08 04:20:15
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv5007 Modified Files: Bayes.pm Log Message: fixes bug 701981, removes lines in headers consisting of only whitespace (eudora has trouble with them) Thanks to esniper for the patch Index: Bayes.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/Bayes.pm,v retrieving revision 1.120 retrieving revision 1.121 diff -C2 -d -r1.120 -r1.121 *** Bayes.pm 7 Apr 2003 17:55:44 -0000 1.120 --- Bayes.pm 8 Apr 2003 04:20:10 -0000 1.121 *************** *** 758,761 **** --- 758,766 ---- if ( $getting_headers ) { + + # Kill header lines containing only whitespace (Exim does this) + + next if ( $line =~ /^[ \t]+(\r\n|\r|\n)$/i ); + if ( !( $line =~ /^(\r\n|\r|\n)$/i ) ) { $message_size += length $line; |
From: <ssc...@us...> - 2003-04-08 03:16:47
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv14429 Modified Files: MailParse.pm Log Message: Fixes [ 696986 ] 0.18.1: Underscores in QP encoded headers, misc other header optimizations Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.105 retrieving revision 1.106 diff -C2 -d -r1.105 -r1.106 *** MailParse.pm 7 Apr 2003 20:36:52 -0000 1.105 --- MailParse.pm 8 Apr 2003 03:16:44 -0000 1.106 *************** *** 15,18 **** --- 15,19 ---- use MIME::Base64; use MIME::QuotedPrint; + require Encode::MIME::Header; # HTML entity mapping to character codes, this maps things like & to their corresponding *************** *** 1053,1068 **** my ( $self, $mystring ) = @_; ! my $decode_it = ''; ! if ( $mystring =~ /=\?[\w-]+\?B\?(.*)\?=/i ) { ! $decode_it = decode_base64( $1 ); ! $mystring =~ s/=\?[\w-]+\?B\?(.*)\?=/$decode_it/i; ! } else { ! if ( $mystring =~ /=\?[\w-]+\?Q\?(.*)\?=/i ) { ! $decode_it = decode_qp( $1 ); ! $mystring =~ s/=\?[\w-]+\?Q\?(.*)\?=/$decode_it/i; ! } ! } ! return $mystring; } --- 1054,1073 ---- my ( $self, $mystring ) = @_; ! ! $mystring = Encode::MIME::Header::decode($Encode::Encoding{'MIME-Header'},$mystring); ! ! #my $decode_it = ''; ! #while ( $mystring =~ /=\?[\w-]+\?B\?(.*)\?=/ig ) { ! # $decode_it = decode_base64( $1 ); ! # $mystring =~ s/=\?[\w-]+\?B\?(.*)\?=/$decode_it/i; ! #} ! #while ( $mystring =~ /=\?[\w-]+\?Q\?(.*)\?=/ig ) { ! # $decode_it = $1; ! # $decode_it =~ s/\_/=20/g; ! # $decode_it = decode_qp( $decode_it ); ! # $mystring =~ s/=\?[\w-]+\?Q\?(.*)\?=/$decode_it/i; ! # } ! return $mystring; } *************** *** 1112,1115 **** --- 1117,1126 ---- $self->update_pseudoword( 'header', $header ); + # Check the encoding type in all RFC 2047 encoded headers + + if ( $argument =~ /=\?(.{1,40})\?(Q|B)/i ) { + update_word( $self, $1, 0, '', '', 'charset' ); + } + # Handle the From, To and Cc headers and extract email addresses # from them and treat them as words *************** *** 1126,1130 **** my $prefix = ''; ! if ( $header =~ /^(From|To|Cc|Reply\-To)/i ) { if ( $argument =~ /=\?(.{1,40})\?/ ) { --- 1137,1145 ---- my $prefix = ''; ! if ( $header =~ /^(From|To|Cc|Reply\-To)$/i ) { ! ! # These headers at least can be decoded ! ! $argument = $self->decode_string( $argument ); if ( $argument =~ /=\?(.{1,40})\?/ ) { *************** *** 1132,1147 **** } ! if ( $header =~ /^From/i ) { $encoding = ''; ! $self->{content_type__} = ''; ! $self->{from__} = $self->decode_string( $argument ) if ( $self->{from__} eq '' ) ; $prefix = 'from'; } ! $prefix = 'to' if ( $header =~ /^To/i ); ! $self->{to__} = $self->decode_string( $argument ) if ( ( $header =~ /^To/i ) && ( $self->{to__} eq '' ) ); ! $prefix = 'cc' if ( $header =~ /^Cc/i ); ! $self->{cc__} = $self->decode_string( $argument ) if ( ( $header =~ /^Cc/i ) && ( $self->{cc__} eq '' ) ); while ( $argument =~ s/<([[:alpha:]0-9\-_\.]+?@([[:alpha:]0-9\-_\.]+?))>// ) { --- 1147,1166 ---- } ! if ( $header =~ /^From$/i ) { $encoding = ''; ! $self->{content_type__} = ''; ! $self->{from__} = $argument if ( $self->{from__} eq '' ) ; $prefix = 'from'; } ! if ( $header =~ /^To$/i ) { ! $prefix = 'to'; ! $self->{to__} = $argument if ( $self->{to__} eq '' ); ! } ! if ( $header =~ /^Cc$/i ) { ! $prefix = 'cc'; ! $self->{cc__} = $argument if ( $self->{cc__} eq '' ); ! } while ( $argument =~ s/<([[:alpha:]0-9\-_\.]+?@([[:alpha:]0-9\-_\.]+?))>// ) { *************** *** 1159,1166 **** } ! $self->{subject__} = $self->decode_string( $argument ) if ( ( $header =~ /^Subject/i ) && ( $self->{subject__} eq '' ) ); ! ! if ( $header =~ /^Subject/i ) { $prefix = 'subject'; } --- 1178,1185 ---- } ! if ( $header =~ /^Subject$/i ) { $prefix = 'subject'; + $argument = $self->decode_string( $argument ); + $self->{subject__} = $argument if ( ( $self->{subject__} eq '' ) ); } *************** *** 1169,1173 **** # Look for MIME ! if ( $header =~ /^Content-Type/i ) { if ( $argument =~ /charset=\"?([^\"]{1,40})\"?/ ) { --- 1188,1192 ---- # Look for MIME ! if ( $header =~ /^Content-Type$/i ) { if ( $argument =~ /charset=\"?([^\"]{1,40})\"?/ ) { *************** *** 1207,1211 **** # do a special parse here since words might be broken across the boundaries ! if ( $header =~ /^Content-Transfer-Encoding/i ) { $encoding = $argument; print "Setting encoding to $encoding\n" if $self->{debug}; --- 1226,1230 ---- # do a special parse here since words might be broken across the boundaries ! if ( $header =~ /^Content-Transfer-Encoding$/i ) { $encoding = $argument; print "Setting encoding to $encoding\n" if $self->{debug}; *************** *** 1218,1223 **** # Some headers to discard ! return ($mime, $encoding) if ( $header =~ /^(Thread-Index|X-UIDL|Message-ID|X-Text-Classification|X-Mime-Key)/i ); ! add_line( $self, $argument, 0, $prefix ); --- 1237,1246 ---- # Some headers to discard ! return ($mime, $encoding) if ( $header =~ /^(Thread-Index|X-UIDL|Message-ID|X-Text-Classification|X-Mime-Key)$/i ); ! ! # Some headers should never be RFC 2047 decoded ! ! $argument = $self->decode_string($argument) unless ($header =~ /^(Revceived|Content\-Type|Content\-Disposition)$/i); ! add_line( $self, $argument, 0, $prefix ); |
From: <jgr...@us...> - 2003-04-08 00:51:51
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv3679/UI Modified Files: HTML.pm Log Message: Fix the ID display in the History so that the IDs do not resort with each sort Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.122 retrieving revision 1.123 diff -C2 -d -r1.122 -r1.123 *** HTML.pm 8 Apr 2003 00:24:13 -0000 1.122 --- HTML.pm 8 Apr 2003 00:51:47 -0000 1.123 *************** *** 2057,2060 **** --- 2057,2061 ---- if ( defined( $self->{history__}{$history_files[$i]} ) ) { $self->{history__}{$history_files[$i]}{cull} = 0; + $self->{history__}{$history_files[$i]}{index} = $i; } else { |
From: <jgr...@us...> - 2003-04-08 00:24:17
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv27008/UI Modified Files: HTML.pm Log Message: Fix the ID display in the History so that the IDs do not resort with each sort Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.121 retrieving revision 1.122 diff -C2 -d -r1.121 -r1.122 *** HTML.pm 7 Apr 2003 17:55:54 -0000 1.121 --- HTML.pm 8 Apr 2003 00:24:13 -0000 1.122 *************** *** 2122,2125 **** --- 2122,2126 ---- $self->{history__}{$history_files[$i]}{short_from} = $short_from; $self->{history__}{$history_files[$i]}{cull} = 0; + $self->{history__}{$history_files[$i]}{index} = $i; } } *************** *** 2700,2703 **** --- 2701,2705 ---- my $bucket = $self->{history__}{$mail_file}{bucket}; my $reclassified = $self->{history__}{$mail_file}{reclassified}; + my $index = $self->{history__}{$mail_file}{index} + 1; $body .= "<tr"; *************** *** 2713,2717 **** $body .= ">\n<td>"; $body .= "<a name=\"$mail_file\"></a>"; ! $body .= $i+1 . "</td>\n<td>"; $mail_file =~ /popfile\d+=(\d+)\.msg$/; $body .= "<a title=\"$from\">$short_from</a></td>\n"; --- 2715,2719 ---- $body .= ">\n<td>"; $body .= "<a name=\"$mail_file\"></a>"; ! $body .= $index . "</td>\n<td>"; $mail_file =~ /popfile\d+=(\d+)\.msg$/; $body .= "<a title=\"$from\">$short_from</a></td>\n"; |
From: <ssc...@us...> - 2003-04-07 20:36:59
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv31327 Modified Files: MailParse.pm Log Message: complete multi-line header parsing to colorize correctly Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.104 retrieving revision 1.105 diff -C2 -d -r1.104 -r1.105 *** MailParse.pm 7 Apr 2003 17:55:46 -0000 1.104 --- MailParse.pm 7 Apr 2003 20:36:52 -0000 1.105 *************** *** 371,375 **** $value = $3; $quote = ''; ! $end_quote = '[\> \t\&]'; if (defined $2) { $quote = $2; --- 371,375 ---- $value = $3; $quote = ''; ! $end_quote = '[\> \t\&\n]'; if (defined $2) { $quote = $2; *************** *** 678,682 **** $line =~ s/[\t ]+$//; ! print "parse_html: [$line] $self->{in_html_tag__}\n" if $self->{debug}; # Remove HTML comments and other tags that begin ! --- 678,682 ---- $line =~ s/[\t ]+$//; ! print "parse_html: [$line] " . $self->{in_html_tag__} . "\n" if $self->{debug}; # Remove HTML comments and other tags that begin ! *************** *** 783,788 **** $self->{base64__} = ''; ! $self->{in_html_tag__} = 0; $self->{html_tag__} = ''; $self->{html_arg__} = ''; --- 783,793 ---- $self->{base64__} = ''; ! ! # Variable to note that the temporary colorized storage is "frozen", ! # and what type of freeze it is (allows nesting of reasons to freeze ! # colorization) ! $self->{in_html_tag__} = 0; + $self->{html_tag__} = ''; $self->{html_arg__} = ''; *************** *** 823,870 **** print ">>> $line" if $self->{debug}; ! ! if ( $self->{color__} ) { ! my $splitline = $line; ! $splitline =~ s/([^\r\n]{100,120} )/$1\r\n/g; ! $splitline =~ s/([^ \r\n]{120})/$1\r\n/g; ! ! if ( !$self->{in_html_tag__} ) { ! $colorized .= $self->{ut__} if ( $self->{ut__} ne '' ); ! ! $self->{ut__} = ''; ! } ! ! $splitline =~ s/</</g; ! $splitline =~ s/>/>/g; ! ! #TODO: regress patch to 0.18.1 ! if ( $encoding =~ /quoted\-printable/i ) { ! $splitline =~ s/=3C/</g; ! $splitline =~ s/=3E/>/g; ! } ! ! $splitline =~ s/\t/ /g; ! ! $self->{ut__} .= $splitline; ! } if ($self->{in_headers__}) { # Check for blank line signifying end of headers if ( $line =~ /^(\r\n|\r|\n)/) { ! ! # Parse the last header ! ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); # Clear the saved headers $header = ''; $argument = ''; $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; } # If we have an email header then just keep the part after the : --- 828,863 ---- print ">>> $line" if $self->{debug}; ! ! $colorized .= $self->{ut__}; ! $self->{ut__} = ''; ! ! $self->{ut__} .= splitline($line, $encoding); if ($self->{in_headers__}) { + + # temporary colorization while in headers is handled within parse_header + + $self->{ut__} = ''; # Check for blank line signifying end of headers if ( $line =~ /^(\r\n|\r|\n)/) { ! ! # Parse the last header ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); # Clear the saved headers $header = ''; $argument = ''; + + $self->{ut__} .= splitline("\015\012", 0); $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; + + next; } + # If we have an email header then just keep the part after the : *************** *** 872,877 **** # Parse the last header ! ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); # Save the new information for the current header --- 865,870 ---- # Parse the last header ! ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding) if ($header ne ''); # Save the new information for the current header *************** *** 879,888 **** $header = $1; $argument = $2; } # Append to argument if the next line begins with whitespace (isn't a new header) ! ! if ( $line =~ /^[\t ](.*?)(\r\n|\r|\n)/ ) { ! $argument .= $1; } next; --- 872,882 ---- $header = $1; $argument = $2; + next; } # Append to argument if the next line begins with whitespace (isn't a new header) ! ! if ( $line =~ /^([\t ].*?)(\r\n|\r|\n)/ ) { ! $argument .= "\015\012" . $1; } next; *************** *** 982,985 **** --- 976,981 ---- $colorized .= clear_out_base64( $self ); close MSG; + + $self->{in_html_tag__} = 0; if ( $self->{color__} ) { *************** *** 1099,1105 **** sub parse_header { ! my ($self, $header, $argument, $mime, $encoding ) = @_; print "Header ($header) ($argument)\n" if ($self->{debug}); # After a discussion with Tim Peters and some looking at emails --- 1095,1107 ---- sub parse_header { ! my ($self, $header, $argument, $mime, $encoding) = @_; print "Header ($header) ($argument)\n" if ($self->{debug}); + + # Remove over-reading + $self->{ut__} = ''; + + # Qeueue just this header for colorization + $self->{ut__} = splitline("$header: $argument\015\012", $encoding); # After a discussion with Tim Peters and some looking at emails *************** *** 1112,1115 **** --- 1114,1118 ---- # Handle the From, To and Cc headers and extract email addresses # from them and treat them as words + # For certain headers we are going to mark them specially in the corpus *************** *** 1221,1225 **** return ($mime, $encoding); } ! # GETTERS/SETTERS --- 1224,1256 ---- return ($mime, $encoding); } ! ! ! # --------------------------------------------------------------------------------------------- ! # ! # splitline - Escapes characters so a line will print as plain-text within a HTML document. ! # ! # $line The line to escape ! # $encoding The value of any current encoding scheme ! # ! # --------------------------------------------------------------------------------------------- ! ! sub splitline ! { ! my ($line, $encoding) = @_; ! $line =~ s/([^\r\n]{100,120} )/$1\r\n/g; ! $line =~ s/([^ \r\n]{120})/$1\r\n/g; ! ! $line =~ s/</</g; ! $line =~ s/>/>/g; ! ! if ( $encoding =~ /quoted\-printable/i ) { ! $line =~ s/=3C/</g; ! $line =~ s/=3E/>/g; ! } ! ! $line =~ s/\t/ /g; ! ! return $line; ! } # GETTERS/SETTERS *************** *** 1231,1233 **** --- 1262,1269 ---- return $self->{first20__}; } + + + 1; + + |
From: <ssc...@us...> - 2003-04-07 20:20:32
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv23317a Modified Files: Tag: v0/18/1 Bayes.pm Log Message: binmode on $client -- should guarantee network style printing Index: Bayes.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/Bayes.pm,v retrieving revision 1.107 retrieving revision 1.107.2.1 diff -C2 -d -r1.107 -r1.107.2.1 *** Bayes.pm 28 Feb 2003 00:21:03 -0000 1.107 --- Bayes.pm 7 Apr 2003 20:20:15 -0000 1.107.2.1 *************** *** 760,763 **** --- 760,767 ---- my $timeout_count = 0; + #prevent any translation of printed eol's + + binmode $client; + # Indicates whether the first time through the receive loop we got the full body, this # will happen on small emails |
From: <jgr...@us...> - 2003-04-07 18:01:49
|
Update of /cvsroot/popfile/engine In directory sc8-pr-cvs1:/tmp/cvs-serv15004 Added Files: stopwords Log Message: Stop words are no longer hardcoded --- NEW FILE: stopwords --- you strike date form textflow him pdt code also acronym pst valign subject cgi charset est nbsp sun your title but and multicol small xmp https area author all being dir jan she color have will received going serif htm edt height mbox can iframe dfn com were would off img etc noframes http bgsound jun sup gmt address basefont abbrev head tbody fri may ask aug overlay www div status doing tue person mon cellspacing his helo select esmtp alt wbr message border note big thu yes feb input table has not that meta isindex gone map our tfoot caption its encoding out base lang align strong marquee edu applet span nov with spacer width smtp goes did inc range wed frame dec localhost body nobr html bgcolor from var oct her banner del blockquote math any path spot cdt textarea embed the done yet it's net font thead blink plaintext went could does param this jul org mar src mailto for cst kbd listing ltd pre are having center helvetica samp col tab been fig mail cite had link script menu colgroup sans return ins sep sub was sat frameset apr |
From: <jgr...@us...> - 2003-04-07 17:56:31
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv11970/UI Modified Files: HTML.pm Log Message: Implement the Advanced and Buckets pages in the UI; bucket page is now indexed and sorted by word scores; add new stopword APIs to Bayes; remove hard coded English APIs; port Windows code so that we now have a working popup menu and tray icon Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.120 retrieving revision 1.121 diff -C2 -d -r1.120 -r1.121 *** HTML.pm 27 Mar 2003 04:08:50 -0000 1.120 --- HTML.pm 7 Apr 2003 17:55:54 -0000 1.121 *************** *** 1114,1139 **** my $deletemessage = ''; if ( defined($self->{form_}{newword}) ) { ! $self->{form_}{newword} = lc($self->{form_}{newword}); ! if ( defined($self->{classifier__}->{parser}->{mangle}->{stop}{$self->{form_}{newword}}) ) { ! $add_message = "<blockquote><div class=\"error02\"><b>". sprintf( $self->{language__}{Advanced_Error1}, $self->{form_}{newword} ) . "</b></div></blockquote>"; ! } else { ! if ( $self->{form_}{newword} =~ /[^[:alpha:][0-9]\._\-@]/ ) { ! $add_message = "<blockquote><div class=\"error02\"><b>$self->{language__}{Advanced_Error2}</b></div></blockquote>"; ! } else { ! $self->{classifier__}->{parser}->{mangle}->{stop}{$self->{form_}{newword}} = 1; ! $self->{classifier__}->{parser}->{mangle}->save_stop_words(); ! $add_message = "<blockquote>" . sprintf( $self->{language__}{Advanced_Error3}, $self->{form_}{newword} ) . "</blockquote>"; ! } } } if ( defined($self->{form_}{word}) ) { ! $self->{form_}{word} = lc($self->{form_}{word}); ! if ( !defined($self->{classifier__}->{parser}->{mangle}->{stop}{$self->{form_}{word}}) ) { ! $deletemessage = "<blockquote><div class=\"error02\"><b>" . sprintf( $self->{language__}{Advanced_Error4} , $self->{form_}{word} ) . "</b></div></blockquote>"; ! } else { ! delete $self->{classifier__}->{parser}->{mangle}->{stop}{$self->{form_}{word}}; ! $self->{classifier__}->{parser}->{mangle}->save_stop_words(); ! $deletemessage = "<blockquote>" . sprintf( $self->{language__}{Advanced_Error5}, $self->{form_}{word} ) . "</blockquote>"; } } --- 1114,1128 ---- my $deletemessage = ''; if ( defined($self->{form_}{newword}) ) { ! my $result = $self->{classifier__}->add_stopword( $self->{form_}{newword} ); ! if ( $result == 0 ) { ! $add_message = "<blockquote><div class=\"error02\"><b>$self->{language__}{Advanced_Error2}</b></div></blockquote>"; } } if ( defined($self->{form_}{word}) ) { ! $self->log_($self->{form_}{word} ); ! my $result = $self->{classifier__}->remove_stopword( $self->{form_}{word} ); ! if ( $result == 0 ) { ! $deletemessage = "<blockquote><div class=\"error02\"><b>$self->{language__}{Advanced_Error2}</b></div></blockquote>"; } } *************** *** 1149,1153 **** my $groupSize = 5; my $firstRow = 1; ! for my $word (sort keys %{$self->{classifier__}->{parser}->{mangle}->{stop}}) { $word =~ /^(.)/; if ( $1 ne $last ) { --- 1138,1142 ---- my $groupSize = 5; my $firstRow = 1; ! for my $word (sort keys %{$self->{classifier__}->get_stop_word_list()}) { $word =~ /^(.)/; if ( $1 ne $last ) { *************** *** 1362,1370 **** my ( $self, $client ) = @_; my $body = "<h2 class=\"buckets\">"; $body .= sprintf( $self->{language__}{SingleBucket_Title}, "<font color=\"" . $self->{classifier__}->get_bucket_color($self->{form_}{showbucket}) . "\">$self->{form_}{showbucket}</font>"); $body .= "</h2>\n<table summary=\"\">\n<tr>\n<th scope=\"row\" class=\"bucketsLabel\">$self->{language__}{SingleBucket_WordCount}</th>\n"; $body .= "<td> </td>\n<td align=\"right\">\n"; ! $body .= pretty_number( $self, $self->{classifier__}->get_bucket_word_count($self->{form_}{showbucket})); $body .= "</td>\n<td>\n(" . sprintf( $self->{language__}{SingleBucket_Unique}, pretty_number( $self, $self->{classifier__}->get_bucket_unique_count($self->{form_}{showbucket})) ). ")"; $body .= "</td>\n</tr>\n<tr>\n<th scope=\"row\" class=\"bucketsLabel\">$self->{language__}{SingleBucket_TotalWordCount}</th>\n"; --- 1351,1361 ---- my ( $self, $client ) = @_; + my $bucket_count = $self->{classifier__}->get_bucket_word_count( $self->{form_}{showbucket} ); + my $body = "<h2 class=\"buckets\">"; $body .= sprintf( $self->{language__}{SingleBucket_Title}, "<font color=\"" . $self->{classifier__}->get_bucket_color($self->{form_}{showbucket}) . "\">$self->{form_}{showbucket}</font>"); $body .= "</h2>\n<table summary=\"\">\n<tr>\n<th scope=\"row\" class=\"bucketsLabel\">$self->{language__}{SingleBucket_WordCount}</th>\n"; $body .= "<td> </td>\n<td align=\"right\">\n"; ! $body .= pretty_number( $self, $bucket_count); $body .= "</td>\n<td>\n(" . sprintf( $self->{language__}{SingleBucket_Unique}, pretty_number( $self, $self->{classifier__}->get_bucket_unique_count($self->{form_}{showbucket})) ). ")"; $body .= "</td>\n</tr>\n<tr>\n<th scope=\"row\" class=\"bucketsLabel\">$self->{language__}{SingleBucket_TotalWordCount}</th>\n"; *************** *** 1373,1377 **** my $percent = "0%"; if ( $self->{classifier__}->get_word_count() > 0 ) { ! $percent = int( 10000 * $self->{classifier__}->get_bucket_word_count($self->{form_}{showbucket}) / $self->{classifier__}->get_word_count() ) / 100; $percent = "$percent%"; } --- 1364,1368 ---- my $percent = "0%"; if ( $self->{classifier__}->get_word_count() > 0 ) { ! $percent = int( 10000 * $bucket_count / $self->{classifier__}->get_word_count() ) / 100; $percent = "$percent%"; } *************** *** 1383,1416 **** $body .= sprintf( $self->{language__}{SingleBucket_WordTable}, "<font color=\"" . $self->{classifier__}->get_bucket_color($self->{form_}{showbucket}) . "\">$self->{form_}{showbucket}" ) ; $body .= "</font>\n</h2>\n$self->{language__}{SingleBucket_Message1}\n<br /><br />\n<table summary=\"$self->{language__}{Bucket_WordListTableSummary}\">\n"; for my $i (@{$self->{classifier__}->get_bucket_word_list($self->{form_}{showbucket})}) { ! if ( defined($i) ) { my $j = $i; ! # Split the entries on the double bars, get rid of any extra bars, then grab a copy of the first char ! $j =~ s/\|\|/, /g; ! $j =~ s/\|//g; ! $j =~ /^(.)/; ! my $first = $1; ! # Highlight any words used this session ! $j =~ s/([^ ]+) (L\-[\.\d]+)/\*$1 $2<\/font>/g; ! $j =~ s/L(\-[\.\d]+)/int( $self->{classifier__}->get_bucket_word_count($self->{form_}{showbucket}) * exp($1) + 0.5 )/ge; ! # Add the link to the corpus lookup ! $j =~ s/([^ ,\*]+) ([^ ,\*]+)/"<a class=\"wordListLink\" href=\"\/buckets\?session=$self->{session_key__}\&lookup=Lookup\&word=" . url_encode_($self,$1) . "#Lookup\">$1<\/a> $2"/ge; ! # Add the bucket color if this word was used this session. IMPORTANT: this regex relies ! # on the fact that Classifier::WordMangle (mangle) removes astericks from all corpus words ! # and therefore assumes that any asterick was placed the by the highlight regex several ! # lines above. ! # TODO $j =~ s/([\*])/<font color=\"" . $self->{classifier__}->get_bucket_color($self->{form_}{showbucket}) . "\">$1/g; ! $body .= "<tr>\n<td valign=\"top\">\n<b>$first</b>\n</td>\n<td valign=\"top\">\n$j</td>\n</tr>\n"; } } $body .= "</table>\n"; --- 1374,1416 ---- $body .= sprintf( $self->{language__}{SingleBucket_WordTable}, "<font color=\"" . $self->{classifier__}->get_bucket_color($self->{form_}{showbucket}) . "\">$self->{form_}{showbucket}" ) ; $body .= "</font>\n</h2>\n$self->{language__}{SingleBucket_Message1}\n<br /><br />\n<table summary=\"$self->{language__}{Bucket_WordListTableSummary}\">\n"; + $body .= "<tr><td colspan=2>"; for my $i (@{$self->{classifier__}->get_bucket_word_list($self->{form_}{showbucket})}) { ! if ( defined($i) ) { my $j = $i; + $j =~ /^\|(.)/; + my $first = $1; ! if ( defined( $self->{form_}{showletter} ) && ( $first eq $self->{form_}{showletter} ) ) { ! # Split the entries on the double bars ! my %temp; ! while ( $j =~ m/\G\|(.*?) L?\-?[\.\d]+\|/g ) { ! my $word = $1; ! $temp{$word} = int( exp( $self->{classifier__}->get_value_( $self->{form_}{showbucket}, $word ) ) * $bucket_count + 1 ); ! } ! $body .= "</td></tr><tr><td colspan=2> </td></tr><tr>\n<td valign=\"top\">\n<b>$first</b>\n</td>\n<td valign=\"top\">\n<table><tr valign=\"top\">"; ! my $count = 0; ! for my $word (sort { $temp{$b} <=> $temp{$a} } keys %temp) { ! $body .= "</tr><tr valign=\"top\">" if ( ( $count % 6 ) == 0 ); ! $body .= "<td><a class=\"wordListLink\" href=\"\/buckets\?session=$self->{session_key__}\&lookup=Lookup\&word=$word#Lookup\"><b>$word</b><\/a></td><td>$temp{$word}</td><td> </td>"; ! $count += 1; ! } ! $body .= "</tr></table></td>\n</tr>\n<tr><td colspan=2> </td></tr><tr><td colspan=2>"; ! } else { ! $j = ''; ! ! $body .= "<a href=/buckets?session=$self->{session_key__}\&showbucket=$self->{form_}{showbucket}\&showletter=$first><b>$first</b></a>\n"; ! } } } + + $body .= "</td></tr>"; $body .= "</table>\n"; *************** *** 2481,2490 **** $self->{form_}{search} = '' if ( !defined( $self->{form_}{search} ) ); $self->{form_}{filter} = '' if ( !defined( $self->{form_}{filter} ) ); ! # Information from submit buttons isn't always preserved if the buttons aren't # pressed. This compares values in some fields and sets the button-values as # though they had been pressed ! ! # Set setsearch if search changed and setsearch is undefined $self->{form_}{setsearch} = 'on' if ( ( ( !defined($self->{old_search__}) && ($self->{form_}{search} ne '') ) || ( defined($self->{old_search__}) && ( $self->{old_search__} ne $self->{form_}{search} ) ) ) && !defined($self->{form_}{setsearch} ) ); $self->{old_search__} = $self->{form_}{search}; --- 2481,2490 ---- $self->{form_}{search} = '' if ( !defined( $self->{form_}{search} ) ); $self->{form_}{filter} = '' if ( !defined( $self->{form_}{filter} ) ); ! # Information from submit buttons isn't always preserved if the buttons aren't # pressed. This compares values in some fields and sets the button-values as # though they had been pressed ! ! # Set setsearch if search changed and setsearch is undefined $self->{form_}{setsearch} = 'on' if ( ( ( !defined($self->{old_search__}) && ($self->{form_}{search} ne '') ) || ( defined($self->{old_search__}) && ( $self->{old_search__} ne $self->{form_}{search} ) ) ) && !defined($self->{form_}{setsearch} ) ); $self->{old_search__} = $self->{form_}{search}; |
From: <jgr...@us...> - 2003-04-07 17:56:27
|
Update of /cvsroot/popfile/engine/Platform In directory sc8-pr-cvs1:/tmp/cvs-serv11970/Platform Modified Files: MSWin32.pm Added Files: popfile.ico Log Message: Implement the Advanced and Buckets pages in the UI; bucket page is now indexed and sorted by word scores; add new stopword APIs to Bayes; remove hard coded English APIs; port Windows code so that we now have a working popup menu and tray icon --- NEW FILE: popfile.ico --- (This appears to be a binary file; contents omitted.) Index: MSWin32.pm =================================================================== RCS file: /cvsroot/popfile/engine/Platform/MSWin32.pm,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** MSWin32.pm 25 Mar 2003 05:24:55 -0000 1.2 --- MSWin32.pm 7 Apr 2003 17:55:49 -0000 1.3 *************** *** 19,22 **** --- 19,34 ---- use locale; + # This queue contains events that have been activated by using the + # tray icon, menu or by the associated timer. + + my @event_queue; + + # These constants are the valid events + + my $EVENT_LEFT_DBLCLICK = 1; + my $EVENT_RIGHT_CLICK = 2; + my $EVENT_MENU_OPEN = 3; + my $EVENT_MENU_SHUTDOWN = 4; + #---------------------------------------------------------------------------- # new *************** *** 26,36 **** sub new { ! my $proto = shift; ! my $class = ref($proto) || $proto; my $self = POPFile::Module->new(); ! bless($self, $class); ! $self->name( 'platform' ); return $self; --- 38,53 ---- sub new { ! my $type = shift; ! my $class = ref($type) || $type; my $self = POPFile::Module->new(); ! $self->{windows__} = {}; ! $self->{windows__}->{window} = undef; # Win32::GUI handle to the main window object ! $self->{windows__}->{icon} = undef; # Win32::GUI handle to the icon ! $self->{windows__}->{menu} = undef; # Win32::GUI handle tray icon context menu ! bless $self, $type; ! ! $self->name( 'windows' ); return $self; *************** *** 39,109 **** # --------------------------------------------------------------------------------------------- # ! # service # ! # Give Windows a chance to process messages about the tray icon # # --------------------------------------------------------------------------------------------- ! sub service { my ( $self ) = @_; ! Win32::GUI::DoEvents(); ! return 1; } # --------------------------------------------------------------------------------------------- # ! # start # ! # Add an icon to the system tray # # --------------------------------------------------------------------------------------------- ! sub start { my ( $self ) = @_; ! $self->{window__} = Win32::GUI::Window->new( ! -name => 'traywindow', ! -text => 'POPFile', ! -width => 200, ! -height => 200 ); ! $self->{icon__} = new Win32::GUI::Icon('popfile.ico'); ! $self->{notify__} = $self->{window__}->AddNotifyIcon( ! -name => "Platform::MSWin32::POPFileIcon", ! -id => 1, ! -icon => $self->{icon__}, ! -tip => "POPFile running; right click icon to terminate" ); ! return 1; } # --------------------------------------------------------------------------------------------- ! # ! # stop ! # ! # Remove the tray icon ! # # --------------------------------------------------------------------------------------------- - sub stop - { - my ( $self ) = @_; ! # $self->{window__}->->Delete( -id => 1 ); ! Win32::GUI::DoEvents(); ! } # --------------------------------------------------------------------------------------------- ! # ! # NI_RightClick Called when someone right clicks on the tray icon. When this happens we ! # display the menu that contains the single option "Exit" ! # # --------------------------------------------------------------------------------------------- ! sub POPFileIcon_RightClick ! { ! print "rc"; ! 1; ! } 1; --- 56,284 ---- # --------------------------------------------------------------------------------------------- # ! # stop # ! # Called when the interface must shutdown # # --------------------------------------------------------------------------------------------- ! sub stop { my ( $self ) = @_; ! # Remove the tray icon ! # Shouldn't need to do this, as the class destructor should do it for us. ! # but it seems to be needed ! if ( defined( $self->{windows__}->{window} ) ) { ! Win32::GUI::NotifyIcon::Delete( $self->{windows__}->{window}, -id => 1 ); ! } } # --------------------------------------------------------------------------------------------- # ! # service # ! # Called to handle interface requests # # --------------------------------------------------------------------------------------------- ! sub service { my ( $self ) = @_; ! # You may be wondering why I do this here and not in an overriden start() ! # method, unfortunately if we do that then POPFile's perl process can fault ! # almost at once because any events that the icon receives before we are ! # calling DoEvents on a regular basis get queued up and eventually the ! # process faults ! if ( !defined( $self->{windows__}->{window} ) ) { ! $self->{windows__}->{icon} = new Win32::GUI::Icon('popfile.ico'); ! ! # Define our main window - although we'll never show it ! ! $self->{windows__}->{window} = Win32::GUI::Window->new ! ( -title => 'POPFile', ! -name => 'Platform::MSWin32::_window' ); ! ! # Put the icon into the systray ! ! $self->{windows__}->{window}->AddNotifyIcon ! ( -icon => $self->{windows__}->{icon}, ! -id => 1, ! -name => 'Platform::MSWin32::_systray', ! -tip => 'POPFile'); ! ! # Build the hash for the menu: ! ! my $menu = '"trayMenu Functions" => "trayMenu",'; ! $menu .= '"> Open POPFile UI" => { -name => "Platform::MSWin32::_trayMenuOpen", -default => 1 },'; ! $menu .= '"> -" => 0,'; ! $menu .= '"> Shutdown POPFile" => { -name => "Platform::MSWin32::_trayMenuShutdown" },'; ! ! # Define the menu that we'll use in the systray ! $menu = 'Win32::GUI::Menu->new( '.$menu.')'; ! $self->{windows__}->{menu} = eval $menu; ! ! return 1; ! } ! ! my $rval = 1; ! ! # (1) Check and process all the outstanding Windows events ! ! Win32::GUI::DoEvents(); ! ! # (2) Process the events that have happened ! ! return $self->processEvents(); } # --------------------------------------------------------------------------------------------- ! # Helper methods # --------------------------------------------------------------------------------------------- ! # --------------------------------------------------------------------------------------------- ! # ! # navigate ! # ! # Called to open a web browser to POPFile UI page ! # ! # --------------------------------------------------------------------------------------------- ! ! sub navigate ! { ! my ( $self ) = @_; ! ! # Get the port that the UI is running on and then use the ! # windows start function to start the browser running ! ! my $url = 'http://127.0.0.1:' . $self->module_config_( 'html', 'port' ); ! ! system( "start $url" ); ! } ! ! # --------------------------------------------------------------------------------------------- ! # ! # processEvents() ! # ! # takes specific action, depending on windows event that happened ! # ! # --------------------------------------------------------------------------------------------- ! sub processEvents ! { ! my ( $self ) = @_; ! my $rval = 1; ! ! # Remove all events from the queue and process them in FIFO order ! # Note that we use PUSH and SHIFT to implement the FIFO buffer ! ! while ( $#event_queue >= 0 ) { ! my $event = shift @event_queue; ! ! # right click on tray icon - show context menu ! ! if ( $event == $EVENT_RIGHT_CLICK ) { ! ! # get the x and y coords of the mouse to display the menu at. ! ! my ( $x, $y ) = Win32::GUI::GetCursorPos(); ! ! # make the popup menu visible at the cursor ! # Unfortunately this blocks while the popup menu is displayed ! # (Although it seems that timer events still happen, so it's presumably implementing its own ! # message loop) ! # Also appears to have problems (returns error) once we have performed a fork! ! ! $self->{windows__}->{window}->TrackPopupMenu( $self->{windows__}->{menu}->{trayMenu}, $x, $y ); ! } ! ! # Double click icon, or select Open option in menu results in ! # navigating to the UI ! ! if ( ( $event == $EVENT_MENU_OPEN ) || ( $event == $EVENT_LEFT_DBLCLICK ) ) { ! $self->navigate(); ! } ! ! # Exit action from try context menu - return 0, to cause exit ! ! if ( $event == $EVENT_MENU_SHUTDOWN ) { ! $rval = 0; ! } ! } ! ! return $rval; ! } # --------------------------------------------------------------------------------------------- ! # Event Handler functions: all start with _, and are for use by the GUI. They should ! # not be called externally. # --------------------------------------------------------------------------------------------- ! # --------------------------------------------------------------------------------------------- ! # SysTray Icon Event Handler functions: ! # --------------------------------------------------------------------------------------------- ! ! # --------------------------------------------------------------------------------------------- ! # ! # _systray_RightClick ! # ! # Callback from systray icon right click ! # ! # --------------------------------------------------------------------------------------------- ! sub _systray_RightClick ! { ! push @event_queue, ($EVENT_RIGHT_CLICK); ! return 1; ! } ! ! # --------------------------------------------------------------------------------------------- ! # ! # _systray_MouseEvent ! # ! # Callback from systray icon for all mouse events ! # ! # --------------------------------------------------------------------------------------------- ! sub _systray_MouseEvent ! { ! my $event = shift; ! # event is one of seven: 512 => 'Mouse Move', 514 => 'Left Click', ! # 515 => 'Left DoubleClick', 517 => 'Right Click', 518 => ! # 'Right DoubleClick',519 => 'Middle Down', and 520 => 'Middle Up'. ! ! if ( $event == 515 ) { ! push @event_queue, ($EVENT_LEFT_DBLCLICK); ! } ! ! return 1; ! } ! ! # --------------------------------------------------------------------------------------------- ! # Tray Icon Menu Event Handler functions: ! # --------------------------------------------------------------------------------------------- ! ! # --------------------------------------------------------------------------------------------- ! # ! # _trayMenuOpen_Click ! # ! # Callback from systray menu ! # ! # --------------------------------------------------------------------------------------------- ! sub _trayMenuOpen_Click ! { ! push @event_queue, ($EVENT_MENU_OPEN); ! return 1; ! } ! ! # --------------------------------------------------------------------------------------------- ! # ! # _trayMenuExit_Click ! # ! # Callback from systray menu ! # ! # --------------------------------------------------------------------------------------------- ! sub _trayMenuShutdown_Click ! { ! push @event_queue, ($EVENT_MENU_SHUTDOWN); ! return 1; ! } 1; |
From: <jgr...@us...> - 2003-04-07 17:56:25
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv11970/Classifier Modified Files: Bayes.pm MailParse.pm WordMangle.pm Log Message: Implement the Advanced and Buckets pages in the UI; bucket page is now indexed and sorted by word scores; add new stopword APIs to Bayes; remove hard coded English APIs; port Windows code so that we now have a working popup menu and tray icon Index: Bayes.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/Bayes.pm,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -d -r1.119 -r1.120 *** Bayes.pm 26 Mar 2003 03:58:29 -0000 1.119 --- Bayes.pm 7 Apr 2003 17:55:44 -0000 1.120 *************** *** 431,435 **** if ( /([^\s]+) (\d+)/ ) { ! my $word = $self->{mangler__}->mangle($1,1); my $value = $2; $value =~ s/[\r\n]//g; --- 431,435 ---- if ( /([^\s]+) (\d+)/ ) { ! my $word = $1; my $value = $2; $value =~ s/[\r\n]//g; *************** *** 933,936 **** --- 933,955 ---- return $self->{total__}{$bucket}; } + + # --------------------------------------------------------------------------------------------- + # + # get_bucket_word_list + # + # Returns a list of bucket entries, each entry corresponds to all the words with the + # same leading character + # + # $bucket The name of the bucket for which the word count is desired + # + # --------------------------------------------------------------------------------------------- + + sub get_bucket_word_list + { + my ( $self, $bucket ) = @_; + + return $self->{matrix__}{$bucket}; + } + # --------------------------------------------------------------------------------------------- # *************** *** 1361,1364 **** --- 1380,1424 ---- delete $self->{magnets__}{$bucket}{$type}{$text}; $self->save_magnets__(); + } + + # --------------------------------------------------------------------------------------------- + # + # get_stop_word_list + # + # Gets the complete list of stop words + # + # --------------------------------------------------------------------------------------------- + + sub get_stop_word_list + { + my ( $self ) = @_; + + return $self->{parser__}->{mangle__}->stopwords(); + } + + # --------------------------------------------------------------------------------------------- + # + # add_stopword, remove_stopword + # + # Adds or removes a stop word + # + # $stopword The word to add or remove + # + # Return 0 for a bad stop word, and 1 otherwise + # + # --------------------------------------------------------------------------------------------- + + sub add_stopword + { + my ( $self, $stopword ) = @_; + + return $self->{parser__}->{mangle__}->add_stopword( $stopword ); + } + + sub remove_stopword + { + my ( $self, $stopword ) = @_; + + return $self->{parser__}->{mangle__}->remove_stopword( $stopword ); } Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.103 retrieving revision 1.104 diff -C2 -d -r1.103 -r1.104 *** MailParse.pm 30 Mar 2003 05:21:05 -0000 1.103 --- MailParse.pm 7 Apr 2003 17:55:46 -0000 1.104 *************** *** 133,136 **** --- 133,155 ---- # --------------------------------------------------------------------------------------------- # + # update_pseudoword + # + # Updates the word frequency for a pseudoword, note that this differs from update_word + # because it does no word mangling + # + # $prefix The pseudoword prefix (e.g. header) + # $word The pseudoword (e.g. Mime-Version) + # + # --------------------------------------------------------------------------------------------- + + sub update_pseudoword + { + my ( $self, $prefix, $word ) = @_; + + $self->increment_word( "$prefix:$word" ); + } + + # --------------------------------------------------------------------------------------------- + # # update_word # *************** *** 436,439 **** --- 455,463 ---- } + # Font sizes + if ( ( $attribute =~ /^size$/i ) && ( $tag =~ /^font$/i ) ) { + $self->update_pseudoword( 'html', "fontsize$value" ); + } + # Tags with background colors *************** *** 742,749 **** my $encoding = ''; ! # Variables to save header information to while parsing headers ! ! my $header; my $argument; --- 766,773 ---- my $encoding = ''; ! # Variables to save header information to while parsing headers ! ! my $header; my $argument; *************** *** 821,825 **** $splitline =~ s/\t/ /g; ! $self->{ut__} .= $splitline; } --- 845,849 ---- $splitline =~ s/\t/ /g; ! $self->{ut__} .= $splitline; } *************** *** 830,863 **** if ( $line =~ /^(\r\n|\r|\n)/) { ! # Parse the last header ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); ! # Clear the saved headers $header = ''; ! $argument = ''; ! $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; ! } # If we have an email header then just keep the part after the : if ( $line =~ /^([A-Za-z-]+):[ \t]*([^\n\r]*)/ ) { ! # Parse the last header ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); ! # Save the new information for the current header ! $header = $1; ! $argument = $2; } ! # Append to argument if the next line begins with whitespace (isn't a new header) ! ! if ( $line =~ /^[\t ](.*?)(\r\n|\r|\n)/ ) { $argument .= $1; } --- 854,887 ---- if ( $line =~ /^(\r\n|\r|\n)/) { ! # Parse the last header ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); ! # Clear the saved headers $header = ''; ! $argument = ''; ! $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; ! } # If we have an email header then just keep the part after the : if ( $line =~ /^([A-Za-z-]+):[ \t]*([^\n\r]*)/ ) { ! # Parse the last header ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); ! # Save the new information for the current header ! $header = $1; ! $argument = $2; } ! # Append to argument if the next line begins with whitespace (isn't a new header) ! ! if ( $line =~ /^[\t ](.*?)(\r\n|\r|\n)/ ) { $argument .= $1; } *************** *** 1078,1081 **** --- 1102,1112 ---- print "Header ($header) ($argument)\n" if ($self->{debug}); + + # After a discussion with Tim Peters and some looking at emails + # I'd received I discovered that the header names (case sensitive) are + # very significant in identifying different types of mail, for example + # much spam uses MIME-Version, MiME-Version and Mime-Version + + $self->update_pseudoword( 'header', $header ); # Handle the From, To and Cc headers and extract email addresses Index: WordMangle.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/WordMangle.pm,v retrieving revision 1.21 retrieving revision 1.22 diff -C2 -d -r1.21 -r1.22 *** WordMangle.pm 3 Mar 2003 15:21:41 -0000 1.21 --- WordMangle.pm 7 Apr 2003 17:55:48 -0000 1.22 *************** *** 24,47 **** my $self; ! $self->{stop__} = { ! 'all', 1, 'also', 1, 'and', 1, 'any', 1, 'are', 1, 'ask', 1, 'but', 1, 'can', 1, 'com', 1, 'did', 1, 'edu', 1, 'etc', 1, 'for', 1, 'from', 1, 'had', 1, 'has', 1, ! 'have', 1, 'her', 1, 'him', 1, 'his', 1, 'inc', 1, 'its', 1, 'it\'s', 1, 'ltd', 1, 'may', 1, 'not', 1, 'off', 1, 'our', 1, 'out', 1, 'she', 1, 'the', 1, 'this', ! 1, 'yes', 1, 'yet', 1, 'you', 1, 'http', 1, 'https', 1, 'mailto', 1, 'com', 1, 'with', 1, 'your', 1, 'that', 1, 'org', 1, 'cgi', 1, 'net', 1, 'www', 1, ! 'src', 1, 'smtp', 1, 'nbsp', 1, 'esmtp', 1, 'align', 1, 'valign', 1, 'width', 1, 'height', 1, 'border', 1, 'abbrev', 1, 'acronym', 1, 'address', 1, 'applet', 1, ! 'area', 1, 'author', 1, 'banner', 1, 'base', 1, 'basefont', 1, 'bgsound', 1, 'big', 1, 'blink', 1, 'blockquote', 1, 'body', 1, 'caption', 1, 'center', 1, 'cite', ! 1, 'code', 1, 'col', 1, 'colgroup', 1, 'del', 1, 'dfn', 1, 'dir', 1, 'div', 1, 'embed', 1, 'fig', 1, 'font', 1, 'form', 1, 'frame', 1, 'frameset', 1, 'head', 1, ! 'html', 1, 'iframe', 1, 'img', 1, 'input', 1, 'ins', 1, 'isindex', 1, 'kbd', 1, 'lang', 1, 'link', 1, 'listing', 1, 'map', 1, 'marquee', 1, 'math', 1, 'menu', 1, ! 'meta', 1, 'multicol', 1, 'nobr', 1, 'noframes', 1, 'note', 1, 'overlay', 1, 'param', 1, 'person', 1, 'plaintext', 1, 'pre', 1, 'range', 1, 'samp', 1, 'script', ! 1, 'select', 1, 'small', 1, 'spacer', 1, 'spot', 1, 'strike', 1, 'strong', 1, 'sub', 1, 'sup', 1, 'tab', 1, 'table', 1, 'tbody', 1, 'textarea', 1, 'textflow', 1, ! 'tfoot', 1, 'thead', 1, 'title', 1, 'var', 1, 'wbr', 1, 'xmp', 1, 'mon', 1, 'tue', 1, 'wed', 1, 'thu', 1, 'fri', 1, 'sat', 1, 'sun', 1, 'jan', 1, 'feb', 1, ! 'mar', 1, 'apr', 1, 'may', 1, 'jun', 1, 'jul', 1, 'aug', 1, 'sep', 1, 'oct', 1, 'nov', 1, 'dec', 1, 'est', 1, 'edt', 1, 'cst', 1, 'cdt', 1, 'pdt', 1, 'pst', 1, ! 'gmt', 1, 'subject', 1, 'date', 1, 'localhost', 1, 'received', 1, 'helo', 1, 'charset', 1, 'encoding', 1, 'htm', 1, 'mail', 1, 'alt', 1, 'cellspacing', 1, ! 'bgcolor', 1, 'serif', 1, 'sans', 1, 'helvetica', 1, 'color', 1, 'message', 1, 'path', 1, 'return', 1, 'span', 1, 'mbox', 1, 'status', 1, 'been', 1, 'being', 1, ! 'was', 1, 'were', 1, 'does', 1, 'doing', 1, 'done', 1, 'having', 1, 'goes', 1, 'going', 1, 'gone', 1, 'went', 1, 'could', 1, 'will', 1, 'would', 1, ! }; ! load_stop_words($self); ! return bless $self, $type; } --- 24,34 ---- my $self; ! $self->{stop__} = {}; ! bless $self, $type; ! $self->load_stop_words(); ! ! return $self; } *************** *** 93,100 **** # of the mail header # # --------------------------------------------------------------------------------------------- sub mangle { ! my ($self, $word, $allow_colon) = @_; # All words are treated as lowercase --- 80,89 ---- # of the mail header # + # $ignore_stops If defined ignores the stop word list + # # --------------------------------------------------------------------------------------------- sub mangle { ! my ($self, $word, $allow_colon, $ignore_stops) = @_; # All words are treated as lowercase *************** *** 104,108 **** # Stop words are ignored ! return '' if ( $self->{stop__}{$word} ); # Remove characters that would mess up a Perl regexp and replace with . --- 93,97 ---- # Stop words are ignored ! return '' if ( ( $self->{stop__}{$word} ) && ( !defined( $ignore_stops ) ) ); # Remove characters that would mess up a Perl regexp and replace with . *************** *** 126,129 **** --- 115,174 ---- return $word; + } + + # --------------------------------------------------------------------------------------------- + # + # add_stopword, remove_stopword + # + # Adds or removes a stop word + # + # $stopword The word to add or remove + # + # Returns 1 if successful, or 0 for a bad stop word + # --------------------------------------------------------------------------------------------- + + sub add_stopword + { + my ( $self, $stopword ) = @_; + + $stopword = $self->mangle( $stopword, 0, 1 ); + + if ( $stopword ne '' ) { + $self->{stop__}{$stopword} = 1; + $self->save_stop_words(); + + return 1; + } + + return 0; + } + + sub remove_stopword + { + my ( $self, $stopword ) = @_; + + $stopword = $self->mangle( $stopword, 0, 1 ); + + if ( $stopword ne '' ) { + delete $self->{stop__}{$stopword}; + $self->save_stop_words(); + + return 1; + } + + return 0; + } + + # GETTER/SETTERS + + sub stopwords + { + my ( $self, $value ) = @_; + + if ( defined( $value ) ) { + $self->{stop__} = $value; + } + + return $self->{stop__}; } |
From: <jgr...@us...> - 2003-04-07 17:56:08
|
Update of /cvsroot/popfile/engine/languages In directory sc8-pr-cvs1:/tmp/cvs-serv11970/languages Modified Files: English.msg Log Message: Implement the Advanced and Buckets pages in the UI; bucket page is now indexed and sorted by word scores; add new stopword APIs to Bayes; remove hard coded English APIs; port Windows code so that we now have a working popup menu and tray icon Index: English.msg =================================================================== RCS file: /cvsroot/popfile/engine/languages/English.msg,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** English.msg 25 Mar 2003 05:24:58 -0000 1.23 --- English.msg 7 Apr 2003 17:55:57 -0000 1.24 *************** *** 225,229 **** SingleBucket_Percentage Percentage of total SingleBucket_WordTable Word Table for %s ! SingleBucket_Message1 Starred (*) words have been used for classification in this POPFile session. Click any word to lookup its probability for all buckets. SingleBucket_Unique %s unique --- 225,229 ---- SingleBucket_Percentage Percentage of total SingleBucket_WordTable Word Table for %s ! SingleBucket_Message1 Click a letter in the index to see the list of words that start with that letter. Click any word to lookup its probability for all buckets. SingleBucket_Unique %s unique |
From: <jgr...@us...> - 2003-04-07 10:14:08
|
Update of /cvsroot/popfile/engine/languages In directory sc8-pr-cvs1:/tmp/cvs-serv19071 Added Files: Korean.msg Log Message: Added Korean translation --- NEW FILE: Korean.msg --- # Copyright (c) 2001-2003 John Graham-Cumming # Identify the language and character set used for the interface LanguageCode kr LanguageCharset euc-kr # This is used to get the appropriate subdirectory for the manual ManualLanguage en # Common words that are used on their own all over the interface Apply Àû¿ë On »ç¿ë Áß Off »ç¿ë¾Ê´Â Áß TurnOn »ç ¿ë TurnOff »ç¿ë ¾ÈÇÔ Add Ãß°¡ Remove Á¦°Å Previous ÀÌÀü Next ´ÙÀ½ From ¹ß½ÅÀÚ Subject Á¦¸ñ Classification ºÐ·ù Reclassify ÀçºÐ·ù Undo Ãë¼Ò Close ´Ý±â Find ã±â Filter °É·¯³¿ Yes ¿¹ No ¾Æ´Ï¿À ChangeToYes '¿¹'·Î ¹Ù²Þ ChangeToNo '¾Æ´Ï¿À'·Î ¹Ù²Þ Bucket ¹öŶ Magnet ÀÚ¼® Delete »èÁ¦ Create »ý¼º To ¼ö½ÅÀÚ Total Àüü Rename À̸§¹Ù²Ù±â Frequency ºóµµ Probability È®·ü Score Á¡¼ö Lookup °Ë»ö # The header and footer that appear on every UI page Header_Title ÆËÆÄÀÏ Á¦¾î ¼¾ÅÍ Header_Shutdown ÆËÆÄÀÏ Á¾·á Header_History È÷½ºÅ丮 Header_Buckets ¹öŶ Header_Configuration ¼³Á¤ Header_Advanced °í±Þ Header_Security º¸¾È Header_Magnets ÀÚ¼® Footer_HomePage ÆËÆÄÀÏ È¨ÆäÀÌÁö Footer_Manual ¼³¸í¼ Footer_Forums °Ô½ÃÆÇ Footer_FeedMe ±âºÎ Footer_RequestFeature ±â´É¿äû Footer_MailingList ¸ÞÀϸµ ¸®½ºÆ® Configuration_Error1 ±¸ºÐ±ÛÀÚ´Â ¹Ýµå½Ã 1±ÛÀÚ¿©¾ß ÇÕ´Ï´Ù. Configuration_Error2 »ç¿ëÀÚ ÀÎÅÍÆäÀ̽ºÀÇ Æ÷Æ®´Â ¹Ýµå½Ã 1ºÎÅÍ 65535 »çÀÌÀÇ ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù. Configuration_Error3 POP3 Æ÷Æ®´Â ¹Ýµå½Ã 1ºÎÅÍ 65535 »çÀÌÀÇ ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù. Configuration_Error4 ÆäÀÌÁö Å©±â´Â ¹Ýµå½Ã 1ºÎÅÍ 1000 »çÀÌÀÇ ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù. Configuration_Error5 È÷½ºÅ丮ÀÇ º¸Á¸ ±â°£Àº ¹Ýµå½Ã 1ºÎÅÍ 366 »çÀÌÀÇ ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù. Configuration_Error6 TCP ŸÀӾƿôÀº ¹Ýµå½Ã 10ºÎÅÍ 300 »çÀÌÀÇ ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù. The TCP timeout must be a number between 10 and 300 Configuration_POP3Port POP3 Æ÷Æ® Configuration_POP3Update %s·Î Æ÷Æ®¸¦ º¯°æÇß½À´Ï´Ù. ÆËÆÄÀÏÀ» Àç½ÃÀÛÇϱâ Àü±îÁö´Â Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. Configuration_Separator ±¸ºÐ±ÛÀÚ Configuration_SepUpdate ±¸ºÐ±ÛÀÚ¸¦ %s·Î º¯°æÇß½À´Ï´Ù. Configuration_UI »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º À¥ Æ÷Æ® Configuration_UIUpdate »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º À¥ Æ÷Æ®¸¦ %s·Î º¯°æÇß½À´Ï´Ù. ÆËÆÄÀÏÀ» Àç½ÃÀÛÇϱâ Àü±îÁö´Â Àû¿ëµÇÁö ¾Ê½À´Ï´Ù. Configuration_History ÆäÀÌÁö´ç À̸ÞÀÏ °¹¼ö Configuration_HistoryUpdate ÆäÀÌÁö´ç À̸ÞÀÏ °¹¼ö¸¦ %s·Î º¯°æÇß½À´Ï´Ù. Configuration_Days È÷½ºÅ丮¿¡ ³²°ÜµÑ ±â°£(ÀÏ) Configuration_DaysUpdate È÷½ºÅ丮¿¡ ³²°ÜµÑ ±â°£(ÀÏ)À» %s·Î º¯°æÇß½À´Ï´Ù. Configuration_UserInterface »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º Configuration_Skins ½ºÅ² Configuration_SkinsChoose ½ºÅ² ¼±Åà Configuration_Language ¾ð¾î Configuration_LanguageChoose ¾ð¾î ¼±Åà Configuration_ListenPorts ¸®½¼ Æ÷Æ® Configuration_HistoryView È÷½ºÅ丮 º¸±â Configuration_TCPTimeout TCP ÄÁ³Ø¼Ç ŸÀӾƿô Configuration_TCPTimeoutSecs TCP ÄÁ³Ø¼Ç ŸÀӾƿô(ÃÊ) Configuration_TCPTimeoutUpdate TCP ÄÁ³Ø¼Ç ŸÀӾƿôÀ» %s·Î º¯°æÇÏ¿´½À´Ï´Ù. Configuration_ClassificationInsertion À̸ÞÀÏ ¹®ÀÚ¿ »ðÀÔ Configuration_SubjectLine Á¦¸ñ ¹Ù²Þ Configuration_XTCInsertion X-Text-Classification Çì´õ Configuration_XPLInsertion X-POPFile-Link Çì´õ Configuration_Logging ·Î±ë Configuration_None ¾øÀ½ Configuration_ToScreen ȸéÀ¸·Î Configuration_ToFile ÆÄÀÏ·Î Configuration_ToScreenFile ȸé°ú ÆÄÀÏ·Î Configuration_LoggerOutput ·Î±× Ãâ·Â Configuration_GeneralSkins ½ºÅ² Configuration_SmallSkins ÀÛÀº ½ºÅ² Configuration_TinySkins ¾ÆÁÖ ÀÛÀº ½ºÅ² Advanced_Error1 '%s' ´Â ÀÌ¹Ì ¹«½ÃµÇ´Â ´Ü¾î·Î µî·ÏµÈ µí Advanced_Error2 ¹«½ÃµÇ´Â ´Ü¾î´Â ¾ËÆÄºª, ¼ýÀÚ,., _, -, ¶Ç´Â @ ¸¸À» ¾µ ¼ö ÀÖ½À´Ï´Ù. Advanced_Error3 '%s' °¡ ¹«½ÃµÇ´Â ´Ü¾î ¸ñ·Ï¿¡ Ãß°¡µÇ¾ú½À´Ï´Ù. Advanced_Error4 '%s' ´Â ¹«½ÃµÇ´Â ´Ü¾î ¸ñ·Ï¿¡ ¾ø½À´Ï´Ù. Advanced_Error5 '%s' °¡ ¹«½ÃµÇ´Â ´Ü¾î ¸ñ·Ï¿¡¼ Á¦°ÅµÇ¾ú½À´Ï´Ù Advanced_StopWords ¹«½ÃµÇ´Â ´Ü¾îµé Advanced_Message1 ÆËÆÄÀÏÀº ´ÙÀ½ÀÇ ÀÚÁÖ »ç¿ëµÇ´Â ´Ü¾î¸¦ ¹«½ÃÇÕ´Ï´Ù: Advanced_AddWord ´Ü¾î Ãß°¡ Advanced_RemoveWord ´Ü¾î Á¦°Å History_Filter (´ÙÀ½ ¹öŶ¸¸À» º¸ÀÓ:<font color="%s">%s</font>) History_FilterBy ÇÊÅ͵Ê: History_Search (¹ß½Å/Á¦¸ñÀ¸·Î °Ë»ö: %s) History_Title ÃÖ±Ù ¸ÞÀÏ History_Jump ¸ÞÀÏ·Î °¡±â History_ShowAll ¸ðµÎ º¸ÀÓ History_ShouldBe ¸Â´Â ºÐ·ù History_NoFrom ¹ß½ÅÀÚ ¾øÀ½ History_NoSubject Á¦¸ñ ¾øÀ½ History_ClassifyAs ´ÙÀ½À¸·Î ºÐ·ùÇÔ: History_MagnetUsed »ç¿ëµÈ ÀÚ¼® History_ChangedTo ´ÙÀ½À¸·Î º¯°æµÊ:<font color="%s">%s History_Already ÇöÀç ºÐ·ù:<font color="%s">%s</font> History_RemoveAll ¸ðµÎ Á¦°Å History_RemovePage ÇöÀç º¸ÀÌ´Â ¸ñ·Ï¸¸ Á¦°Å History_Remove È÷½ºÅ丮·ÎºÎÅÍ Á¦°ÅÇϱâ À§Çؼ´Â Ŭ¸¯ÇϽʽÿÀ History_SearchMessage ¹ß½Å/Á¦¸ñÀ¸·ÎºÎÅÍ °Ë»ö History_NoMessages ¸ÞÀÏ ¾øÀ½ History_ShowMagnet ÀÚ¼®À¸·Î ºÐ·ùµÊ History_Magnet (ÀÚ¼®À¸·Î ºÐ·ùµÈ °Í¸¸ º¸ÀÓ) History_ResetSearch ÃʱâÈ Password_Title ºñ¹Ð¹øÈ£ Password_Enter ºñ¹Ð¹øÈ£ ÀÔ·Â Password_Go ½ÃÀÛ Password_Error1 À߸øµÈ ºñ¹Ð¹øÈ£ Security_Error1 º¸¾ÈÆ÷Æ®´Â ¹Ýµå½Ã 1ºÎÅÍ 65535»çÀÌÀÇ ¼ýÀÚ¿©¾ß ÇÕ´Ï´Ù. Security_Stealth ½ºÅÚ½º ¸ðµå / ¼¹ö µ¿ÀÛ Security_NoStealthMode ¾Æ´Ï¿À (½ºÅÚ½º ¸ðµå) Security_ExplainStats (À̰ÍÀÌ ÄÑÁö¸é ÆËÆÄÀÏÀº ÇÏ·ç¿¡ Çѹø¾¿ ´ÙÀ½ÀÇ ¼¼°¡Áö °ªÀ» www.usethesource.com¿¡ º¸³À´Ï´Ù - bc (¸¸µå½Å ¹öŶ ¼ö), mc (ÆËÆÄÀÏÀÌ ºÐ·ùÇÑ ¸Þ½ÃÁö ¼ö) and ec (ºÐ·ù ¿À·ù °Ç¼ö). À̰͵éÀº ÆÄÀÏ·Î ÀúÀåµÇ¸ç ÆËÆÄÀÏÀÌ ¾î¶»°Ô »ç¿ëµÇ¸ç ¾ó¸¶³ª Àß ÀÛµ¿ÇÏ´ÂÁö¿¡ °üÇÑ Åë°è¸¦ °øÇ¥ÇÒ¶§ »ç¿ëµË´Ï´Ù. Á¦ À¥¼¹ö´Â 5Àϰ£ ·Î±×ÆÄÀÏÀ» º¸Á¸ÇÏ°í ±× ÈÄ »èÁ¦ÇÕ´Ï´Ù. °³°³ÀÇ IPÁÖ¼Ò¿Í Åë°è °£¿¡ ¾î¶°ÇÑ ¿¬°ü°ü°èµµ ÀúÀåµÇÁö ¾Ê½À´Ï´Ù.) Security_ExplainUpdate (À̰ÍÀÌ ÄÑÁö¸é ÆËÆÄÀÏÀº ÇÏ·ç¿¡ Çѹø¾¿ ´ÙÀ½ÀÇ ¼¼°¡Áö °ªÀ» www.usethesource.com¿¡ º¸³À´Ï´Ù - ma (¼³Ä¡ÇϽŠÆËÆÄÀÏÀÇ ¸ÞÀÌÀú ¹öÀü ¹øÈ£), mi (¼³Ä¡ÇϽŠÆËÆÄÀÏÀÇ ¸¶ÀÌ³Ê ¹öÀü ¹øÈ£), bn (¼³Ä¡ÇϽŠÆËÆÄÀÏÀÇ ºôµå ¹øÈ£). ÆËÆÄÀÏÀº »õ ¹öÀüÀÌ ÀÖÀ¸¸é ÆäÀÌÁö ¸Ç À§ÂÊ¿¡ ±×·¡ÇÈ ÇüÅ·Π±× °á°ú¸¦ Ç¥½ÃÇÕ´Ï´Ù. Á¦ À¥¼¹ö´Â 5Àϰ£ ·Î±×ÆÄÀÏÀ» º¸Á¸ÇÏ°í ±× ÈÄ »èÁ¦ÇÕ´Ï´Ù. °³°³ÀÇ IPÁÖ¼Ò¿Í ¾÷µ¥ÀÌÆ® üũ °£¿¡ ¾î¶°ÇÑ ¿¬°ü°ü°èµµ ÀúÀåµÇÁö ¾Ê½À´Ï´Ù.) Security_PasswordTitle »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º ºñ¹Ð¹øÈ£ Security_Password ºñ¹Ð¹øÈ£ Security_PasswordUpdate ºñ¹Ð¹øÈ£¸¦ %s·Î º¯°æÇß½À´Ï´Ù. Security_AUTHTitle º¸¾È ÆÐ½º¿öµå ÀÎÁõ Security_SecureServer º¸¾È ¼¹ö Security_SecureServerUpdate º¸¾È ¼¹ö¸¦ %s·Î º¯°æÇß½À´Ï´Ù. ÆËÆÄÀÏÀ» ´Ù½Ã ½ÃÀÛÇÒ¶§ Àû¿ëµË´Ï´Ù. Security_SecurePort º¸¾È Æ÷Æ® Security_SecurePortUpdate Æ÷Æ®¸¦ %s·Î º¯°æÇß½À´Ï´Ù. ÆËÆÄÀÏÀ» ´Ù½Ã ½ÃÀÛÇÒ¶§ Àû¿ëµË´Ï´Ù. Security_POP3 ¿ø°ÝÁö·ÎºÎÅÍ POP3 ¿¬°áÀ» Çã¿ë(ÆËÆÄÀÏ Àç½ÃÀÛ ÇÊ¿ä) Security_UI ¿ø°ÝÁö·ÎºÎÅÍ HTTP (»ç¿ëÀÚ À¥ ÀÎÅÍÆäÀ̽º)¿¬°áÀ» Çã¿ë(ÆËÆÄÀÏ Àç½ÃÀÛ ÇÊ¿ä) Security_UpdateTitle ÀÚµ¿ ¾÷µ¥ÀÌÆ® üũ Security_Update ÆËÆÄÀÏ ÃֽйöÀüÀ» ¸ÅÀÏ Ã¼Å©ÇÔ Security_StatsTitle Åë°è º¸°í Security_Stats ¸ÅÀÏ Åë°è¸¦ º¸³¿ Magnet_Error1 ÀÚ¼® '%s' ´Â ÀÌ¹Ì ¹öŶ '%s'¿¡ Á¸ÀçÇÕ´Ï´Ù. Magnet_Error2 »õ ÀÚ¼® '%s'´Â '%s'ÀÚ¼®°ú Ãæµ¹ÇÔ(¹öŶ:'%s'). µû¶ó¼ È¥µ¿ÀÇ ¿ì·Á°¡ ÀÖÀ¸¹Ç·Î »õ ÀÚ¼®Àº Ãß°¡µÇÁö ¾Ê¾Ò½À´Ï´Ù. Magnet_Error3 »õ ÀÚ¼®ÀÎ '%s'À» ¹öŶ '%s'¿¡ »ý¼º Magnet_CurrentMagnets ÇöÀç ÀÚ¼® Magnet_Message1 ´ÙÀ½ ÀÚ¼®Àº ÁöÁ¤µÈ ¹öŶÀ¸·Î ¸ÞÀÏÀÌ Ç×»ó ºÐ·ùµÇµµ·Ï ÇÕ´Ï´Ù. Magnet_CreateNew »õ ÀÚ¼® »ý¼º Magnet_Explanation ¼¼ Á¾·ùÀÇ ÀÚ¼®ÀÌ °¡´ÉÇÕ´Ï´Ù:</b> <ul><li><b>¹ß½ÅÁÖ¼Ò ¶Ç´Â À̸§:</b> ¿¹: jo...@co... (ƯÁ¤ À̸ÞÀÏ ÁÖ¼Ò·Î), <br />company.com (company.com¿¡¼ º¸³»´Â ¸ðµç ¸ÞÀÏ), <br />John Doe:Jonh Doe¸¸ ÀÏÄ¡, John:ù´Ü¾î°¡ JohnÀÌ¸é ¸ðµÎ ÀÏÄ¡</li><li><b>¼ö½ÅÀÚ ¸ÞÀÏÁÖ¼Ò ¶Ç´Â À̸§:</b> ¹ß½ÅÁÖ¼Ò¿ë ÀÚ¼®°ú µ¿ÀÏÇϳª ¼ö½ÅÀÚ¿¡ ÀÛ¿ëÇÔ</li> <li><b>Á¦¸ñÀÇ ´Ü¾î:</b> ¿¹)¾È³çÇϼ¼¿ä ´Â Á¦¸ñ¶õÀÇ ¸ðµç ¾È³çÇϼ¼¿ä ¿Í ÀÏÄ¡</li></ul> Magnet_MagnetType ÀÚ¼® Á¾·ù Magnet_Value °ª Magnet_Always Ç×»ó ´ÙÀ½ ¹öŶÀ¸·Î Bucket_Error1 ¿µ¾î ¼Ò¹®ÀÚ¿Í - ¿Í _¸¸À» »ç¿ëÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. Bucket_Error2 %s(ÀÌ)¶ó´Â À̸§ÀÇ ¹öŶÀº ÀÌ¹Ì ÀÖ½À´Ï´Ù. Bucket_Error3 %s(ÀÌ)¶ó´Â À̸§À¸·Î ¹öŶÀ» »ý¼º Bucket_Error4 °ø¹éÀÌ ¾Æ´Ñ ´Ü¾î¸¦ ÀÔ·ÂÇϽʽÿÀ. Bucket_Error5 %s ¹öŶÀ» %s·Î º¯°æÇÏ¿´½À´Ï´Ù. Bucket_Error6 »èÁ¦µÈ ¹öŶ %s Bucket_Title ¿ä¾à Bucket_BucketName ¹öŶ À̸§ Bucket_WordCount ´Ü¾î ¼ö Bucket_WordCounts ´Ü¾î ¼ö Bucket_UniqueWords À¯ÀÏÇÑ ´Ü¾î Bucket_SubjectModification Á¦¸ñ º¯°æ Bucket_ChangeColor »ö»ó º¯°æ Bucket_NotEnoughData µ¥ÀÌÅͰ¡ ÃæºÐÄ¡ ¾ÊÀ½ Bucket_ClassificationAccuracy ºÐ·ù Á¤È®µµ Bucket_EmailsClassified ºÐ·ùµÈ À̸ÞÀÏ Bucket_EmailsClassifiedUpper ºÐ·ùµÈ À̸ÞÀÏ Bucket_ClassificationErrors ºÐ·ù ¿À·ù Bucket_Accuracy Á¤È®µµ Bucket_ClassificationCount ºÐ·ù ¼ö Bucket_ResetStatistics Åë°è ÃʱâÈ Bucket_LastReset ¸¶Áö¸· ÃʱâÈ Bucket_CurrentColor %sÀÇ ÇöÀç »ö»óÀº %sÀÔ´Ï´Ù. Bucket_SetColorTo %sÀÇ »ö»óÀ» %sÀ¸·Î ¼³Á¤ Bucket_Maintenance À¯Áö º¸¼ö Bucket_CreateBucket ´ÙÀ½ À̸§ÀÇ ¹öŶ »ý¼º Bucket_DeleteBucket ´ÙÀ½ À̸§ÀÇ ¹öŶ »èÁ¦ Bucket_RenameBucket ´ÙÀ½ À̸§ÀÇ ¹öŶ À̸§ º¯°æ Bucket_Lookup °Ë»ö Bucket_LookupMessage ¹öŶ¿¡¼ ´ÙÀ½ ´Ü¾î¸¦ °Ë»ö Bucket_LookupMessage2 ´ÙÀ½ ´Ü¾î¿¡ ´ëÇÑ °Ë»ö °á°ú Bucket_LookupMostLikely <b>%s</b>´Â <font color="%s">%s</font>¿¡ ³ªÅ¸³¯ È®·üÀÌ °¡Àå ³ô½À´Ï´Ù. Bucket_DoesNotAppear <p><b>%s</b>´Â ¾î´À ¹öŶ¿¡µµ ³ªÅ¸³ªÁö ¾Ê½À´Ï´Ù. Bucket_DisabledGlobally Àû¿ë¾ÈÇÔ Bucket_To => Bucket_Quarantine °Ý¸® SingleBucket_Title %sÀÇ »ó¼¼³»¿ë SingleBucket_WordCount ¹öŶ ´Ü¾î ¼ö SingleBucket_TotalWordCount Àüü ´Ü¾î ¼ö SingleBucket_Percentage ÀüüÀÇ ºñÀ² SingleBucket_WordTable %sÀÇ ´Ü¾î Ç¥ SingleBucket_Message1 º°Ç¥ ºÙÀº(*) ´Ü¾îµéÀº À̹ø ÆËÆÄÀÏ ¼¼¼Ç¿¡¼ ºÐ·ù¿¡ »ç¿ëµÇ¾ú½À´Ï´Ù. ´Ü¾î¸¦ Ŭ¸¯ÇÏ½Ã¸é ¹öŶ¿¡ Æ÷ÇÔµÉ È®·üÀ» È¸é ¾Æ·¡ ¿À¸¥ÂÊ¿¡¼ º¸½Ç ¼ö ÀÖ½À´Ï´Ù. SingleBucket_Unique %s : À¯ÀÏ Session_Title ÆËÆÄÀÏ ¼¼¼ÇÀÌ ¸¸·áµÇ¾ú½À´Ï´Ù. Session_Error ÆËÆÄÀÏ ¼¼¼ÇÀÌ ¸¸·áµÇ¾ú½À´Ï´Ù. ÆËÆÄÀÏÀ» Á¾·á ÈÄ Àç½ÃÀÛ Ç߱⠶§¹®ÀÏ °ÍÀ̸ç, À§ÀÇ ¸µÅ© Áß Çϳª¸¦ ´©¸£½Ã¸é °è¼ÓÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. Header_MenuSummary À̰ÍÀº Á¦¾î¼¾ÅÍÀÇ °¢±â ´Ù¸¥ ÆäÀÌÁö¸¦ Á¢±ÙÇÒ ¼ö ÀÖ´Â ¸Þ´ºÀÔ´Ï´Ù. History_MainTableSummary À̰ÍÀº ÃÖ±Ù ¼ö½ÅµÈ ¸ÞÀÏÀÇ ¹ß½ÅÀΰú Á¦¸ñÀ» º¸¿©ÁÖ¸ç Àç°ËÅäÇϰí ÀçºÐ·ùÇÒ ¼ö ÀÖµµ·Ï ÇØÁÖ´Â ¸Þ´ºÀÔ´Ï´Ù. Á¦¸ñ ¶óÀÎÀ» Ŭ¸¯ÇÏ½Ã¸é ¸ÞÀÏ ³»¿ëÀ» º¸½Ç ¼ö ÀÖÀ¸¸ç ¾Æ¿ï·¯, ºÐ·ù°¡ µÈ ÀÌÀ¯¸¦ º¸½Ç ¼ö ÀÖ½À´Ï´Ù. ¸Â´Â ºÐ·ù Ä¿¡¼´Â ¸ÞÀÏÀÌ ¾î´À ¹öŶ¿¡ ¼ÓÇÏ´ÂÁö ÁöÁ¤ÇϽðųª ºÐ·ù¸¦ Ãë¼ÒÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù. '»èÁ¦' Ä¿¡¼´Â ƯÁ¤ ¸Þ½ÃÁö¸¦ È÷½ºÅ丮·ÎºÎÅÍ Áö¿ï ¼ö ÀÖ½À´Ï´Ù. History_OpenMessageSummary À̰ÍÀº À̸ÞÀÏÀÇ º»¹®À» ´ã°í ÀÖÀ¸¸ç, ºÐ·ù¿¡ »ç¿ëµÈ ´Ü¾î°¡ °¡Àå °ü·Ã³ôÀº ¹öŶ¿¡ µû¶ó ÇÏÀ̶óÀÌÆ®µÇ¾î ÀÖ½À´Ï´Ù. Bucket_MainTableSummary À̰ÍÀº ºÐ·ù ¹öŶ¿¡ ´ëÇÑ °³°üÀ» Á¦°øÇÕ´Ï´Ù. °¢ ÇàÀº ¹öŶ¸í, ¹öŶÀÇ ÃÑ ´Ü¾î ¼ö, °¢ ¹öŶ¿¡ ¼ÓÇÑ °³º° ´Ü¾î ¼ö, ¸ÞÀÏÀÌ ºÐ·ù µÇ¾úÀ»¶§ Á¦¸ñÀÌ º¯°æ µÇ¾ú´ÂÁö ¿©ºÎ, ¸ÞÀÏÀ» ±× ¹öŶÀ¸·Î °Ý¸® ½Ãų °ÍÀÎÁö ¿©ºÎ, ±×¸®°í ¹öŶ°ú °ü·ÃµÈ »çÇ×À» Ç¥½ÃÇÒ »ö±òÀ» °í¸¦ ¼ö Àִ ǥ·Î ±¸¼ºµÇ¾î ÀÖ½À´Ï´Ù. Bucket_StatisticsTableSummary À̰ÍÀº ÆËÆÄÀÏÀÇ Àü¹ÝÀûÀÎ ¼º´É¿¡ °üÇÑ ¼¼ Á¾·ùÀÇ Åë°è¸¦ Á¦°øÇÕ´Ï´Ù. 1. ºÐ·ù°¡ ¾ó¸¶³ª Á¤È®ÇѰ¡, 2. ¾ó¸¶³ª ¸¹Àº ¸ÞÀÏÀÌ, ¾î´À ¹öŶ¿¡ ºÐ·ùµÇ¾ú´Â°¡, 3. ¾ó¸¶³ª ¸¹Àº ´Ü¾î°¡ °¢ ¹öŶ¿¡ ¼ÓÇϸç, ±×µéÀÇ »ó´ëÀûÀÎ ÆÛ¼¾Æ® ºñÀ²ÀÌ ¾î¶»°Ô µÇ´Â°¡. Bucket_MaintenanceTableSummary À̰ÍÀº ¹öŶÀÇ »ý¼º/»èÁ¦/º¯°æ ÇÒ¼ö ÀÖ´Â ÆäÀÌÁö¸¦ Á¦°øÇÏ¸ç »ó´ëÀûÀÎ È®·üº¸±â À§ÇØ ¸ðµç ¹öŶ¿¡ ´ã±ä ´Ü¾î¸¦ °Ë»öÇÏ´Â ¸Þ´ºÀÔ´Ï´Ù. Bucket_AccuracyChartSummary À̰ÍÀº À̸ÞÀÏ ºÐ·ùÀÇ Á¤È®µµ¸¦ ±×·¡ÇÈÀ¸·Î Ç¥½ÃÇÕ´Ï´Ù. Bucket_BarChartSummary À̰ÍÀº °¢°¢ÀÇ ¹öŶ¿¡ ´ëÇÑ ÇÒ´ç ºñÀ²(ÆÛ¼¾Æ®)¸¦ ±×·¡ÇÈÀ¸·Î Ç¥½ÃÇÕ´Ï´Ù. À̰ÍÀº ºÐ·ùµÈ ¸ÞÀÏÀÇ ¼ö¿Í ÃÑ ´Ü¾î ¼ö¿¡ ¸ðµÎ »ç¿ëµË´Ï´Ù. Bucket_LookupResultsSummary À̰ÍÀº ÄÚÆÛ½º(´Ü¾îÁý)ÀÇ ´Ü¾î°¡ °¡Áö´Â È®·üÀ» º¸¿©ÁÝ´Ï´Ù. °¢°¢ÀÇ ¹öŶ¿¡ ´ëÇØ, ´Ü¾î ÃâÇö ºóµµ¿Í ±× ¹öŶ¿¡ Æ÷ÇÔµÉ È®·ü, ±×¸®°í ±× ´Ü¾î°¡ ¸ÞÀÏ¿¡ Á¸ÀçÇÒ °æ¿ì ¹öŶ Á¡¼ö¿¡ ¹ÌÄ¡´Â Àü¹ÝÀûÀÎ ¿µÇâÀ» º¸¿©ÁÝ´Ï´Ù. Bucket_WordListTableSummary À̰ÍÀº ƯÁ¤ ¹öŶ¿¡ ´ëÇÑ ¸ðµç ´Ü¾î¸¦ °¢ ÇàÀÇ Ã¹ ´Ü¾î·Î Á¤·ÄÇÏ¿© ³ª¿ÇÕ´Ï´Ù. Magnet_MainTableSummary À̰ÍÀº °íÁ¤µÈ ´Ü¾î¿¡ µû¶ó ÀÚµ¿ÀûÀ¸·Î ¸ÞÀÏÀ» ºÐ·ùÇϱâ À§ÇÑ ÀÚ¼®µéÀ» º¸¿©ÁÝ´Ï´Ù. °¢ ÁÙÀº ¾î¶»°Ô ÀÚ¼®ÀÌ Á¤ÀǵǾî ÀÖ´ÂÁö, ¾î´À ¹öŶ¿¡ ³ÖÀ» °ÍÀÎÁö, ±×¸®°í ÀÚ¼®À» Áö¿ï ¹öưÀ» º¸¿©ÁÝ´Ï´Ù. Configuration_MainTableSummary À̰ÍÀº ÆËÆÄÀÏÀÇ ¼³Á¤À» Á¶ÀýÇϱâ À§ÇÑ ¿©·¯ ÆûÀ¸·Î ±¸¼ºµË´Ï´Ù. Configuration_InsertionTableSummary À̰ÍÀº À̸ÞÀÏ ÇÁ·Î±×·¥(¾Æ¿ô·è µîµî)¿¡ ¸ÞÀÏÀ» ³Ñ°ÜÁÖ±â Àü¿¡ Çì´õ³ª Á¦¸ñ¶õÀ» º¯°æÇÒ °ÍÀÎÁö ¼³Á¤ÇÒ ¹öưÀ» º¸¿©ÁÝ´Ï´Ù. Security_MainTableSummary À̰ÍÀº ÆËÆÄÀÏÀÇ Àüü ±¸¼ºÀÇ º¸¾È¿¡ ¿µÇâÀ» ÁÖ´Â Á¦¾î Ç׸ñÀ» Á¦°øÇÕ´Ï´Ù. Áï, ÀÚµ¿ÀûÀ¸·Î ¾÷µ¥ÀÌÆ®¸¦ üũÇÒ °ÍÀΰ¡, °³¹ß¿¡ Âü°íÇϱâ À§ÇØ ÆËÆÄÀÏÀÇ ¼º´É¿¡ ´ëÇÑ Åë°è¸¦ ÇÁ·Î±×·¥ Á¦ÀÛÀÚÀÇ À¥»çÀÌÆ®·Î Àü¼ÛÇÒ °ÍÀΰ¡¸¦ Á¤ÇÒ ¼ö ÀÖ½À´Ï´Ù. Advanced_MainTableSummary À̰ÍÀº ÆËÆÄÀÏÀÌ ¸ÞÀÏÀ» ºÐ·ùÇÒ¶§ ¹«½ÃÇÏ´Â ´Ü¾î(³Ê¹« ÈçÇÑ ´Ü¾î) ¸ñ·ÏÀ» Á¦°øÇÕ´Ï´Ù. ´Ü¾îµéÀº ù ±ÛÀÚ¿¡ ÀÇÇØ Á¤·ÄµÇ¾î ÀÖ½À´Ï´Ù. |
From: <jgr...@us...> - 2003-04-07 10:13:39
|
Update of /cvsroot/popfile/engine/languages In directory sc8-pr-cvs1:/tmp/cvs-serv18868 Modified Files: Deutsch.msg Log Message: Updated German translation Index: Deutsch.msg =================================================================== RCS file: /cvsroot/popfile/engine/languages/Deutsch.msg,v retrieving revision 1.11 retrieving revision 1.12 diff -C2 -d -r1.11 -r1.12 *** Deutsch.msg 9 Mar 2003 20:40:10 -0000 1.11 --- Deutsch.msg 7 Apr 2003 10:13:32 -0000 1.12 *************** *** 2,5 **** --- 2,6 ---- # Identify the language and character set used for the interface + LanguageCode de LanguageCharset ISO-8859-1 *************** *** 51,55 **** Header_Security Sicherheit Header_Magnets Magnete - Footer_HomePage POPFile Homepage Footer_Manual Handbuch --- 52,55 ---- *************** *** 65,78 **** Configuration_Error5 Die Anzahl der Tage im Verlauf muß zwischen 1 und 366 liegen. Configuration_Error6 Der TCP Timeout muß zwischen 10 und 300 liegen. Configuration_POP3Port POP3 Port ! Configuration_POP3Update Neuer POP3 Port: %s; Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_Separator Trennzeichen ! Configuration_SepUpdate Neues Trennzeichen: %s Configuration_UI Web Port für Kontrollzentrum ! Configuration_UIUpdate Neuer Web Port für Kontrollzentrum: %s; Dieser Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_History Anzahl Emails pro Seite ! Configuration_HistoryUpdate Neue Anzahl Emails pro Seite: %s ! Configuration_Days Emails x Tage im Verlauf speichern ! Configuration_DaysUpdate Emails werden nun %s im Verlauf gespeichert Configuration_UserInterface Benutzeroberfläche Configuration_Skins Skins --- 65,87 ---- Configuration_Error5 Die Anzahl der Tage im Verlauf muß zwischen 1 und 366 liegen. Configuration_Error6 Der TCP Timeout muß zwischen 10 und 300 liegen. + Configuration_Error7 Der XML-RPC Port muß zwischen 1 und 65535 liegen. Configuration_POP3Port POP3 Port ! Configuration_POP3Update Neuer POP3 Port: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_XMLRPCUpdate Neuer XML-RPC Port: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_XMLRPCPort XML-RPC Port ! Configuration_SMTPPort SMTP Port ! Configuration_SMTPUpdate Neuer SMPT Port: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_NNTPPort NNTP Port ! Configuration_NNTPUpdate Neuer NNTP Port: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_POP3Separator POP3 Server:Port:Benutzer Trennzeichen ! Configuration_NNTPSeparator NNTP Server:Port:Benutzer Trennzeichen ! Configuration_POP3SepUpdate Neues POP3 Trennzeichen: %s ! Configuration_NNTPSepUpdate Neues NNTP Trennzeichen: %s Configuration_UI Web Port für Kontrollzentrum ! Configuration_UIUpdate Neuer Web Port für Kontrollzentrum: %s - Dieser Änderung wird erst nach einem Neustart von POPFile wirksam. ! Configuration_History Anzahl Nachrichten pro Seite ! Configuration_HistoryUpdate Neue Anzahl Nachrichten pro Seite: %s ! Configuration_Days Nachrichten x Tage im Verlauf speichern ! Configuration_DaysUpdate Nachrichten werden nun %s Tage im Verlauf gespeichert Configuration_UserInterface Benutzeroberfläche Configuration_Skins Skins *************** *** 80,88 **** Configuration_Language Sprache Configuration_LanguageChoose Sprache auswählen ! Configuration_ListenPorts Porteinstellungen Configuration_HistoryView Verlaufsansicht ! Configuration_TCPTimeout TCP Verbindungstimeout ! Configuration_TCPTimeoutSecs TCP Verbindungstimeout in Sekunden ! Configuration_TCPTimeoutUpdate Neuer TCP Verbidungstimeout: %s Configuration_ClassificationInsertion Einstufung anzeigen Configuration_SubjectLine Betreff-Zeile ändern --- 89,97 ---- Configuration_Language Sprache Configuration_LanguageChoose Sprache auswählen ! Configuration_ListenPorts Moduleinstellungen Configuration_HistoryView Verlaufsansicht ! Configuration_TCPTimeout Verbindungstimeout ! Configuration_TCPTimeoutSecs Verbindungstimeout in Sekunden ! Configuration_TCPTimeoutUpdate Neuer Verbidungstimeout: %s Configuration_ClassificationInsertion Einstufung anzeigen Configuration_SubjectLine Betreff-Zeile ändern *************** *** 135,139 **** Password_Error1 Falsches Paßwort ! Security_Error1 Der sichere Port muß zwischen 1 und 65535 liegen. Security_Stealth Stealth Modus/Serverbetrieb Security_NoStealthMode Nein (Stealth Modus) --- 144,148 ---- Password_Error1 Falsches Paßwort ! Security_Error1 Der Port muß zwischen 1 und 65535 liegen. Security_Stealth Stealth Modus/Serverbetrieb Security_NoStealthMode Nein (Stealth Modus) *************** *** 143,153 **** Security_Password Paßwort Security_PasswordUpdate Neues Paßwort: %s ! Security_AUTHTitle gesicherte Kennwortauthentizierung/AUTH ! Security_SecureServer gesicherter Server ! Security_SecureServerUpdate Neuer gesicherter Server: %s; Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Security_SecurePort gesicherter Port ! Security_SecurePortUpdate Neuer gesicherter Port %s; Diese Änderung wird erst nach einem Neustart von POPFile wirksam. Security_POP3 POP3 Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFile) Security_UI HTTP (Benutzeroberfläche) Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFile) Security_UpdateTitle Automatisch auf Updates prüfen Security_Update Täglich nach POPFile Updates suchen --- 152,169 ---- Security_Password Paßwort Security_PasswordUpdate Neues Paßwort: %s ! Security_AUTHTitle externe Server ! Security_SecureServer POP3 SPA/AUTH Server ! Security_SecureServerUpdate Neuer POP3 SPA/AUTH Server: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Security_SecurePort POP3 SPA/AUTH Port ! Security_SecurePortUpdate Neuer POP3 SPA/AUTH Port %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Security_SMTPServer externer SMTP Server ! Security_SMTPServerUpdate Neuer externer SMTP Server: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. ! Security_SMTPPort externer SMTP port ! Security_SMTPPortUpdate Neuer externer SMTP Port: %s - Diese Änderung wird erst nach einem Neustart von POPFile wirksam. Security_POP3 POP3 Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFile) + Security_SMTP SMTP Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFILE) + Security_NNTP NNTP Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFile) Security_UI HTTP (Benutzeroberfläche) Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFile) + Security_XMLRPC XML-RPC Verbindungen von fremden Rechnern erlauben (erfordert Neustart von POPFile) Security_UpdateTitle Automatisch auf Updates prüfen Security_Update Täglich nach POPFile Updates suchen *************** *** 161,165 **** Magnet_Message1 Die folgenden Magnete ordnen neue Post zwingend in eine angegebene Kategorie ein. Magnet_CreateNew Neuen Magnet erstellen ! Magnet_Explanation Drei Typen von Magneten sind verfügbar: <ul><li>Absenderadresse oder -name:</b> z.B.: ha...@fi..., um eine bestimmte Adresse zu erfassen, <br />firma.de, um jeden zu erfassen, der von firma.de sendet, <br />Hans Mustermann, um eine bestimmte Person zu erfassen; Hans erfaßt jeden Hans</li><li><b>Empfängeradresse oder -name:</b> Wie beim Absender-Magnet nur für die Empfängeradresse in der Email.</li><li><b>Wörter im Betreff:</b> z.B.: "Hallo", um alle Nachrichten mit "Hallo" im Betreff zu erfassen</li></ul> Magnet_MagnetType Typ des Magnets Magnet_Value Wert --- 177,181 ---- Magnet_Message1 Die folgenden Magnete ordnen neue Post zwingend in eine angegebene Kategorie ein. Magnet_CreateNew Neuen Magnet erstellen ! Magnet_Explanation Drei Typen von Magneten sind verfügbar: <ul><li>Absenderadresse oder -name:</b> z.B.: ha...@fi..., um eine bestimmte Adresse zu erfassen, <br />firma.de, um jeden zu erfassen, der von firma.de sendet, <br />Hans Mustermann, um eine bestimmte Person zu erfassen; Hans erfaßt jeden Hans</li><li><b>Empfängeradresse oder -name:</b> Wie beim Absender-Magnet nur für die Empfängeradresse der Nachricht.</li><li><b>Wörter im Betreff:</b> z.B.: "Hallo", um alle Nachrichten mit "Hallo" im Betreff zu erfassen</li></ul> Magnet_MagnetType Typ des Magnets Magnet_Value Wert *************** *** 181,186 **** Bucket_NotEnoughData Nicht genügend Daten Bucket_ClassificationAccuracy Genauigkeit ! Bucket_EmailsClassified Emails klassifiziert ! Bucket_EmailsClassifiedUpper Emails klassifiziert Bucket_ClassificationErrors Einstufungsfehler Bucket_Accuracy Genauigkeit --- 197,202 ---- Bucket_NotEnoughData Nicht genügend Daten Bucket_ClassificationAccuracy Genauigkeit ! Bucket_EmailsClassified Nachrichten klassifiziert ! Bucket_EmailsClassifiedUpper Nachrichten klassifiziert Bucket_ClassificationErrors Einstufungsfehler Bucket_Accuracy Genauigkeit *************** *** 216,231 **** Header_MenuSummary Diese Tabelle ist das Navigationsmenü, das Zugang zu den einzelnen Bereichen des Kontrollzentrums bietet. History_MainTableSummary Diese Tabelle zeigt Absender und Betreff der letzten empfangenen Nachrichten an und ermöglicht es, diese durchzusehen und zu reklassifizieren. Ein Klick auf den Betreff zeigt die vollständige Nachricht an sowie Details, warum diese so und nicht anders klassifiziert wurde. Die Spalte "Sollte sein" ermöglicht es, anzugeben, in welche Kategorie die Nachricht gehört bzw. entsprechende Änderungen rückgängig zu machen. Die Spalte "Delete" ermöglicht es, einzelne Nachrichten aus dem Verlauf zu löschen, falls Sie diese nicht mehr benötigen. ! History_OpenMessageSummary Diese Tabelle enthält den kompletten Text einer Email. Die Wörter sind entsprechend der Kategorie eingefärbt, in die sie am wahrscheinlichsten passen. ! Bucket_MainTableSummary Diese Tabelle bietet einen Überblick über die einzelnen Kategorien. Jede Reihe zeigt Name, Gesamtzahl der Wörter und die Anzahl verschiedener Wörter pro Kategorie an, ob die Betreff-Zeile der Email bei der Klassifizierung geändert wird, ob die Nachrichten dieser Kategorie in Quarantäne gestellt werden sollen, sowie eine Tabelle zur Auswahl einer Farbe, in der alle zu dieser Kategorie gehörenden Elemente im Kontrollzentrum dargestellt werden sollen. ! Bucket_StatisticsTableSummary Diese Tabelle zeigt drei verschiedene Statistiken bezüglich POPFiles Gesamtleistung an. Die erste: Wie fehlerfrei ist die Einordnung in die entsprechenden Kategorien? Die zweite: Wie viele Emails wurden analysiert und wie wurden sie eingeordnet? Die dritte: Wie viele Wörter gehören zu jeder Kategorie und wie hoch ist der Prozentsatz zur Gesamtzahl? Bucket_MaintenanceTableSummary Diese Tabelle enthält Formulare zum Erstellen, Löschen und Umbenennen von Kategorien und um die relative Wahrscheinlichkeit der Wörter in jeder einzelnen Kategorie nachzuschlagen. ! Bucket_AccuracyChartSummary Diese Tabelle stellt die Genauigkeit der Email Sortierung grafisch dar. ! Bucket_BarChartSummary Diese Tabelle stellt einen Prozentanteil grafisch dar. Sie wird sowohl für die Anzahl der eingestuften Emails als auch für die Gesamtzahl der Wörter genutzt. ! Bucket_LookupResultsSummary Diese Tabelle stellt die Wahrscheinlichkeiten bezüglich jedes angegebenen Wortes dar. Für jede Kategorie wird folgendes angezeigt: Die Häufigkeit, mit der das Wort auftritt, die Wahrscheinlichkeit, daß es in dieser Kategorie auftritt und die Auswirkungen auf die Punktzahl der Kategorie insgesamt, falls das Wort in der Email auftaucht. Bucket_WordListTableSummary Diese Tabelle bietet eine Liste aller Wörter einer bestimmten Kategorie - reihenweise sortiert nach dem ersten Buchstaben. ! Magnet_MainTableSummary Diese Tabelle zeigt eine Liste der Magnete an, die dazu benutzt werden, um Emails automatisch nach festen Kriterien zu sortieren. Jede Reihe zeigt an, wie der Magnet definiert ist, in welche Kategorie er einsortiert und eine Schaltfläche, um den Magnet zu löschen. Configuration_MainTableSummary Diese Tabelle enthält einige Formulare zur Konfiguration von POPFile. ! Configuration_InsertionTableSummary Diese Tabelle enthält Schaltflächen zur Konfiguration, ob bestimmte Änderungen an Kopfzeilen oder Betreff der Email gemacht werden sollen, bevor diese an das Email Programm weitergegeben wird. Security_MainTableSummary Diese Tabelle bietet Einstellungsmöglichkeiten, die die Sicherheit von POPFile insgesamt betreffen, ob es automatisch auf neue Versionen prüfen soll oder ob Statistiken über die Leistung von POPFile an eine zentrale Datenbank zwecks der Erstellung von Gesamtstatistiken geschickt werden sollen. ! Advanced_MainTableSummary Diese Tabelle enthält eine Liste von Wörtern, die POPFile ignoriert, wenn es eine Email analysiert. Dies betrifft Wörter, die besonders häufig in Emails auftauchen. Diese sind reihenweise alphabetisch nach dem ersten Buchstaben sortiert. --- 232,247 ---- Header_MenuSummary Diese Tabelle ist das Navigationsmenü, das Zugang zu den einzelnen Bereichen des Kontrollzentrums bietet. History_MainTableSummary Diese Tabelle zeigt Absender und Betreff der letzten empfangenen Nachrichten an und ermöglicht es, diese durchzusehen und zu reklassifizieren. Ein Klick auf den Betreff zeigt die vollständige Nachricht an sowie Details, warum diese so und nicht anders klassifiziert wurde. Die Spalte "Sollte sein" ermöglicht es, anzugeben, in welche Kategorie die Nachricht gehört bzw. entsprechende Änderungen rückgängig zu machen. Die Spalte "Delete" ermöglicht es, einzelne Nachrichten aus dem Verlauf zu löschen, falls Sie diese nicht mehr benötigen. ! History_OpenMessageSummary Diese Tabelle enthält den kompletten Text einer Nachricht. Die Wörter sind entsprechend der Kategorie eingefärbt, in die sie am wahrscheinlichsten passen. ! Bucket_MainTableSummary Diese Tabelle bietet einen Überblick über die einzelnen Kategorien. Jede Reihe zeigt Name, Gesamtzahl der Wörter und die Anzahl verschiedener Wörter pro Kategorie an, ob die Betreff-Zeile der Nachricht bei der Klassifizierung geändert wird, ob die Nachrichten dieser Kategorie in Quarantäne gestellt werden sollen, sowie eine Tabelle zur Auswahl einer Farbe, in der alle zu dieser Kategorie gehörenden Elemente im Kontrollzentrum dargestellt werden sollen. ! Bucket_StatisticsTableSummary Diese Tabelle zeigt drei verschiedene Statistiken bezüglich POPFiles Gesamtleistung an. Die erste: Wie fehlerfrei ist die Einordnung in die entsprechenden Kategorien? Die zweite: Wie viele Nachrichten wurden analysiert und wie wurden sie eingeordnet? Die dritte: Wie viele Wörter gehören zu jeder Kategorie und wie hoch ist der Prozentsatz zur Gesamtzahl? Bucket_MaintenanceTableSummary Diese Tabelle enthält Formulare zum Erstellen, Löschen und Umbenennen von Kategorien und um die relative Wahrscheinlichkeit der Wörter in jeder einzelnen Kategorie nachzuschlagen. ! Bucket_AccuracyChartSummary Diese Tabelle stellt die Genauigkeit der Nachrichten-Sortierung grafisch dar. ! Bucket_BarChartSummary Diese Tabelle stellt einen Prozentanteil grafisch dar. Sie wird sowohl für die Anzahl der eingestuften Nachrichten als auch für die Gesamtzahl der Wörter genutzt. ! Bucket_LookupResultsSummary Diese Tabelle stellt die Wahrscheinlichkeiten bezüglich jedes angegebenen Wortes dar. Für jede Kategorie wird folgendes angezeigt: Die Häufigkeit, mit der das Wort auftritt, die Wahrscheinlichkeit, daß es in dieser Kategorie auftritt und die Auswirkungen auf die Punktzahl der Kategorie insgesamt, falls das Wort in einer Nachricht auftaucht. Bucket_WordListTableSummary Diese Tabelle bietet eine Liste aller Wörter einer bestimmten Kategorie - reihenweise sortiert nach dem ersten Buchstaben. ! Magnet_MainTableSummary Diese Tabelle zeigt eine Liste der Magnete an, die dazu benutzt werden, um Nachrichten automatisch nach festen Kriterien zu sortieren. Jede Reihe zeigt an, wie der Magnet definiert ist, in welche Kategorie er einsortiert und eine Schaltfläche, um den Magnet zu löschen. Configuration_MainTableSummary Diese Tabelle enthält einige Formulare zur Konfiguration von POPFile. ! Configuration_InsertionTableSummary Diese Tabelle enthält Schaltflächen zur Konfiguration, ob bestimmte Änderungen an Kopfzeilen oder Betreff der Nachricht gemacht werden sollen, bevor diese an das entsprechende Programm weitergegeben wird. Security_MainTableSummary Diese Tabelle bietet Einstellungsmöglichkeiten, die die Sicherheit von POPFile insgesamt betreffen, ob es automatisch auf neue Versionen prüfen soll oder ob Statistiken über die Leistung von POPFile an eine zentrale Datenbank zwecks der Erstellung von Gesamtstatistiken geschickt werden sollen. ! Advanced_MainTableSummary Diese Tabelle enthält eine Liste von Wörtern, die POPFile ignoriert, wenn es eine Nachricht analysiert. Dies betrifft Wörter, die besonders häufig in Nachrichten auftauchen. Diese sind reihenweise alphabetisch nach dem ersten Buchstaben sortiert. |
From: <ssc...@us...> - 2003-03-30 05:21:08
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv24918 Modified Files: MailParse.pm Log Message: clear $header and $argument at end of headers Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.102 retrieving revision 1.103 diff -C2 -d -r1.102 -r1.103 *** MailParse.pm 29 Mar 2003 00:18:47 -0000 1.102 --- MailParse.pm 30 Mar 2003 05:21:05 -0000 1.103 *************** *** 835,838 **** --- 835,842 ---- ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); + # Clear the saved headers + $header = ''; + $argument = ''; + $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; |
From: <ssc...@us...> - 2003-03-29 00:27:01
|
Update of /cvsroot/popfile/engine/tests In directory sc8-pr-cvs1:/tmp/cvs-serv13722 Modified Files: TestMailParse.tst Log Message: some more test fixes Index: TestMailParse.tst =================================================================== RCS file: /cvsroot/popfile/engine/tests/TestMailParse.tst,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** TestMailParse.tst 25 Feb 2003 02:06:54 -0000 1.5 --- TestMailParse.tst 29 Mar 2003 00:26:55 -0000 1.6 *************** *** 26,107 **** $cl->{htmlbackcolor} = $cl->map_color( 'white' ); $cl->{htmlfontcolor} = $cl->map_color( 'black' ); ! $cl->{words} = {}; $cl->add_line( 'this is a test of,adding words: from a line of text!', 0, '' ); ! test_assert_equal( $cl->{words}{test}, 1 ); ! test_assert_equal( $cl->{words}{adding}, 1 ); ! test_assert_equal( $cl->{words}{words}, 1 ); ! test_assert_equal( $cl->{words}{line}, 1 ); ! test_assert_equal( $cl->{words}{text}, 1 ); $cl->add_line( 'adding', 0, '' ); ! test_assert_equal( $cl->{words}{adding}, 2 ); # Check that we correctly handle spaced out and dotted word ! $cl->{words} = {}; $cl->add_line( 'T H I S T E X T I S S P A C E D alot', 0, '' ); ! test_assert_equal( $cl->{words}{text}, 1 ); ! test_assert_equal( $cl->{words}{spaced}, 1 ); ! test_assert_equal( $cl->{words}{alot}, 1 ); ! $cl->{words} = {}; $cl->add_line( 'offer a full 90 day m.oney b.ack g.uarantee. If any customer is not. C.lick b.elow f.or m.ore i.nformation, it\'s f.r.e.e.', 0, '' ); ! test_assert_equal( $cl->{words}{offer}, 1 ); ! test_assert_equal( $cl->{words}{full}, 1 ); ! test_assert_equal( $cl->{words}{money}, 1 ); ! test_assert_equal( $cl->{words}{back}, 1 ); ! test_assert_equal( $cl->{words}{customer}, 1 ); ! test_assert_equal( $cl->{words}{'trick:dottedwords'}, 6 ); ! test_assert_equal( $cl->{words}{click}, 1 ); ! test_assert_equal( $cl->{words}{below}, 1 ); ! test_assert_equal( $cl->{words}{more}, 1 ); # Check discovery of font color ! $cl->{htmlfontcolor} = ''; test_assert_equal( $cl->parse_html( '<font color="white">' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor}, $cl->map_color( 'white' ) ); ! $cl->{htmlfontcolor} = ''; test_assert_equal( $cl->parse_html( '<font color=red>' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor}, $cl->map_color( 'red' ) ); ! $cl->{htmlfontcolor} = ''; test_assert_equal( $cl->parse_html( '<font color=#00ff00>' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor}, $cl->map_color( 'green' ) ); ! $cl->{htmlfontcolor} = ''; test_assert_equal( $cl->parse_html( '<font color=#00ff00></font>' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor}, $cl->map_color( 'black' ) ); # Check comment detection ! $cl->{words} = {}; test_assert_equal( $cl->parse_html( '<!-- foo -->' ), 0 ); test_assert_equal( $cl->parse_html( '<!-- -->' ), 0 ); test_assert_equal( $cl->parse_html( '<!---->' ), 0 ); ! test_assert_equal( $cl->{words}{'html:comment'}, 3 ); # Check that we don't think the DOCTYPE is a comment test_assert_equal( $cl->parse_html( '<!DOCTYPE >' ), 0 ); ! # test_assert_equal( $cl->{words}{'html:comment'}, 3 ); # Check invisible ink detection ! $cl->{htmlfontcolor} = ''; ! $cl->{words} = {}; $cl->{in_html_tag} = 0; test_assert_equal( $cl->parse_html( '<body bgcolor="#ffffff">hello<font color=white>invisible</font>visible</body> ' ), 0 ); ! test_assert_equal( $cl->{words}{hello}, 1 ); ! test_assert_equal( $cl->{words}{visible}, 1 ); ! test_assert_equal( defined( $cl->{words}{invisible} ), '' ); ! $cl->{htmlfontcolor} = ''; ! $cl->{words} = {}; $cl->{in_html_tag} = 0; test_assert_equal( $cl->parse_html( ' <body bgcolor="#ffffff"> hello<font color=white>' ), 0 ); test_assert_equal( $cl->parse_html( ' invisible </font>' ), 0 ); test_assert_equal( $cl->parse_html( 'visible</body>' ), 0 ); ! test_assert_equal( $cl->{words}{hello}, 1 ); ! test_assert_equal( $cl->{words}{visible}, 1 ); ! test_assert_equal( defined( $cl->{words}{invisible} ), '' ); ! $cl->{htmlfontcolor} = ''; ! $cl->{words} = {}; $cl->{in_html_tag} = 0; test_assert_equal( $cl->parse_html( '<body bgcolor="#ffffff">hello <font' ), 1 ); test_assert_equal( $cl->parse_html( 'color=white>invisible </font>' ), 0 ); test_assert_equal( $cl->parse_html( 'visible </body>' ), 0 ); ! test_assert_equal( $cl->{words}{hello}, 1 ); ! test_assert_equal( $cl->{words}{visible}, 1 ); ! test_assert_equal( defined( $cl->{words}{invisible} ), '' ); # glob the tests directory for files called TestMailParse\d+.msg which consist of messages --- 26,107 ---- $cl->{htmlbackcolor} = $cl->map_color( 'white' ); $cl->{htmlfontcolor} = $cl->map_color( 'black' ); ! $cl->{words__} = {}; $cl->add_line( 'this is a test of,adding words: from a line of text!', 0, '' ); ! test_assert_equal( $cl->{words__}{test}, 1 ); ! test_assert_equal( $cl->{words__}{adding}, 1 ); ! test_assert_equal( $cl->{words__}{words}, 1 ); ! test_assert_equal( $cl->{words__}{line}, 1 ); ! test_assert_equal( $cl->{words__}{text}, 1 ); $cl->add_line( 'adding', 0, '' ); ! test_assert_equal( $cl->{words__}{adding}, 2 ); # Check that we correctly handle spaced out and dotted word ! $cl->{words__} = {}; $cl->add_line( 'T H I S T E X T I S S P A C E D alot', 0, '' ); ! test_assert_equal( $cl->{words__}{text}, 1 ); ! test_assert_equal( $cl->{words__}{spaced}, 1 ); ! test_assert_equal( $cl->{words__}{alot}, 1 ); ! $cl->{words__} = {}; $cl->add_line( 'offer a full 90 day m.oney b.ack g.uarantee. If any customer is not. C.lick b.elow f.or m.ore i.nformation, it\'s f.r.e.e.', 0, '' ); ! test_assert_equal( $cl->{words__}{offer}, 1 ); ! test_assert_equal( $cl->{words__}{full}, 1 ); ! test_assert_equal( $cl->{words__}{money}, 1 ); ! test_assert_equal( $cl->{words__}{back}, 1 ); ! test_assert_equal( $cl->{words__}{customer}, 1 ); ! test_assert_equal( $cl->{words__}{'trick:dottedwords'}, 6 ); ! test_assert_equal( $cl->{words__}{click}, 1 ); ! test_assert_equal( $cl->{words__}{below}, 1 ); ! test_assert_equal( $cl->{words__}{more}, 1 ); # Check discovery of font color ! $cl->{htmlfontcolor__} = ''; test_assert_equal( $cl->parse_html( '<font color="white">' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor__}, $cl->map_color( 'white' ) ); ! $cl->{htmlfontcolor__} = ''; test_assert_equal( $cl->parse_html( '<font color=red>' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor__}, $cl->map_color( 'red' ) ); ! $cl->{htmlfontcolor__} = ''; test_assert_equal( $cl->parse_html( '<font color=#00ff00>' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor__}, $cl->map_color( 'green' ) ); ! $cl->{htmlfontcolor__} = ''; test_assert_equal( $cl->parse_html( '<font color=#00ff00></font>' ), 0 ); ! test_assert_equal( $cl->{htmlfontcolor__}, $cl->map_color( 'black' ) ); # Check comment detection ! $cl->{words__} = {}; test_assert_equal( $cl->parse_html( '<!-- foo -->' ), 0 ); test_assert_equal( $cl->parse_html( '<!-- -->' ), 0 ); test_assert_equal( $cl->parse_html( '<!---->' ), 0 ); ! test_assert_equal( $cl->{words__}{'html:comment'}, 3 ); # Check that we don't think the DOCTYPE is a comment test_assert_equal( $cl->parse_html( '<!DOCTYPE >' ), 0 ); ! # test_assert_equal( $cl->{words__}{'html:comment'}, 3 ); # Check invisible ink detection ! $cl->{htmlfontcolor__} = ''; ! $cl->{words__} = {}; $cl->{in_html_tag} = 0; test_assert_equal( $cl->parse_html( '<body bgcolor="#ffffff">hello<font color=white>invisible</font>visible</body> ' ), 0 ); ! test_assert_equal( $cl->{words__}{hello}, 1 ); ! test_assert_equal( $cl->{words__}{visible}, 1 ); ! test_assert_equal( defined( $cl->{words__}{invisible} ), '' ); ! $cl->{htmlfontcolor__} = ''; ! $cl->{words__} = {}; $cl->{in_html_tag} = 0; test_assert_equal( $cl->parse_html( ' <body bgcolor="#ffffff"> hello<font color=white>' ), 0 ); test_assert_equal( $cl->parse_html( ' invisible </font>' ), 0 ); test_assert_equal( $cl->parse_html( 'visible</body>' ), 0 ); ! test_assert_equal( $cl->{words__}{hello}, 1 ); ! test_assert_equal( $cl->{words__}{visible}, 1 ); ! test_assert_equal( defined( $cl->{words__}{invisible} ), '' ); ! $cl->{htmlfontcolor__} = ''; ! $cl->{words__} = {}; $cl->{in_html_tag} = 0; test_assert_equal( $cl->parse_html( '<body bgcolor="#ffffff">hello <font' ), 1 ); test_assert_equal( $cl->parse_html( 'color=white>invisible </font>' ), 0 ); test_assert_equal( $cl->parse_html( 'visible </body>' ), 0 ); ! test_assert_equal( $cl->{words__}{hello}, 1 ); ! test_assert_equal( $cl->{words__}{visible}, 1 ); ! test_assert_equal( defined( $cl->{words__}{invisible} ), '' ); # glob the tests directory for files called TestMailParse\d+.msg which consist of messages *************** *** 122,126 **** while ( <WORDS> ) { if ( /(.+) (\d+)/ ) { ! test_assert_equal( $cl->{words}{$1}, $2, "$words $1 $2" ); } } --- 122,126 ---- while ( <WORDS> ) { if ( /(.+) (\d+)/ ) { ! test_assert_equal( $cl->{words__}{$1}, $2, "$words $1 $2" ); } } |
From: <ssc...@us...> - 2003-03-29 00:19:34
|
Update of /cvsroot/popfile/engine/tests In directory sc8-pr-cvs1:/tmp/cvs-serv10760 Modified Files: TestMailParse003.msg Log Message: this test wasn't a valid MIME message, added CRLF's to terminate headers Index: TestMailParse003.msg =================================================================== RCS file: /cvsroot/popfile/engine/tests/TestMailParse003.msg,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** TestMailParse003.msg 7 Feb 2003 22:24:33 -0000 1.1 --- TestMailParse003.msg 29 Mar 2003 00:19:31 -0000 1.2 *************** *** 13,21 **** Content-Transfer-Encoding: 7bit Return-Path: j23...@ea... ! X-OriginalArrivalTime: 13 Jan 2003 00:49:31.0608 (UTC) ! FILETIME=[A257A580:01C2BA9D] --=gs6mlah1knva3tk5nbs4422k3570q7m3k== Content-Transfer-Encoding: base64 Content-Type: text/html; charset="US-ASCII" PGh0bWw+DQo8YSBocmVmPSJodHRwOi8vJTc3JTc3dy5wJTYxJTczJTczNCU2NiU3MmUlNjUlMkVuZXQvcGIzLyIgVDhJPjxGT05UIFNJWkU9NT48Qj4mIzg3 OyYjOTc7PCFLND50PCE0YTQ1PmMmIzEwNDs8IVBKMHV1PiAmIzY4OzwhT1UxMGRRPm88IWgzMj5nPCFOWDc4PnM8IUY0NzZ0PiAmIzExNTsmIzEwODs8IXkw --- 13,22 ---- Content-Transfer-Encoding: 7bit Return-Path: j23...@ea... ! X-OriginalArrivalTime: 13 Jan 2003 00:49:31.0608 (UTC) FILETIME=[A257A580:01C2BA9D] ! --=gs6mlah1knva3tk5nbs4422k3570q7m3k== Content-Transfer-Encoding: base64 Content-Type: text/html; charset="US-ASCII" + PGh0bWw+DQo8YSBocmVmPSJodHRwOi8vJTc3JTc3dy5wJTYxJTczJTczNCU2NiU3MmUlNjUlMkVuZXQvcGIzLyIgVDhJPjxGT05UIFNJWkU9NT48Qj4mIzg3 OyYjOTc7PCFLND50PCE0YTQ1PmMmIzEwNDs8IVBKMHV1PiAmIzY4OzwhT1UxMGRRPm88IWgzMj5nPCFOWDc4PnM8IUY0NzZ0PiAmIzExNTsmIzEwODs8IXkw |
From: <ssc...@us...> - 2003-03-29 00:18:51
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv10382 Modified Files: MailParse.pm Log Message: fix merge glitch in last revision Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.101 retrieving revision 1.102 diff -C2 -d -r1.101 -r1.102 *** MailParse.pm 29 Mar 2003 00:17:08 -0000 1.101 --- MailParse.pm 29 Mar 2003 00:18:47 -0000 1.102 *************** *** 820,826 **** } - # Parse the last header - - ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); $splitline =~ s/\t/ /g; --- 820,823 ---- *************** *** 833,836 **** --- 830,838 ---- if ( $line =~ /^(\r\n|\r|\n)/) { + + # Parse the last header + + ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); + $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; |
From: <ssc...@us...> - 2003-03-29 00:17:14
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv9703 Modified Files: MailParse.pm Log Message: generalizes multi-line header parser handling (experimental), includes ideas in patch 694857 Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.100 retrieving revision 1.101 diff -C2 -d -r1.100 -r1.101 *** MailParse.pm 29 Mar 2003 00:11:50 -0000 1.100 --- MailParse.pm 29 Mar 2003 00:17:08 -0000 1.101 *************** *** 742,745 **** --- 742,750 ---- my $encoding = ''; + + # Variables to save header information to while parsing headers + + my $header; + my $argument; # Clear the word hash *************** *** 815,819 **** --- 820,828 ---- } + # Parse the last header + + ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); $splitline =~ s/\t/ /g; + $self->{ut__} .= $splitline; } *************** *** 826,971 **** $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; ! } # If we have an email header then just keep the part after the : if ( $line =~ /^([A-Za-z-]+):[ \t]*([^\n\r]*)/ ) { ! my $header = $1; ! my $argument = $2; ! ! print "Header ($header) ($argument)\n" if ($self->{debug}); ! ! # Handle the From, To and Cc headers and extract email addresses ! # from them and treat them as words ! ! # For certain headers we are going to mark them specially in the corpus ! # by tagging them with where they were found to help the classifier ! # do a better job. So if you have ! # ! # From: fo...@ba... ! # ! # then we'll add from:fo...@ba... to the corpus and not just fo...@ba... ! ! my $prefix = ''; ! ! if ( $header =~ /^(From|To|Cc|Reply\-To)/i ) { ! ! # Concatenate multi-line fields (To, CC) ! ! if ( ( $header =~ /^To/i ) || ( $header =~ /^Cc/i ) ) { ! my $currpos = tell MSG; ! my $tempread = <MSG>; ! while ( $tempread =~ s/^[ \t]+(.*?)[\r\n]+// ) { ! if ( $1 ne '' ) { ! $argument .= $1; ! $currpos = tell MSG; ! $tempread = <MSG>; ! } else { ! last; ! } ! } ! seek MSG, $currpos, 0; ! print "\n$header: [[$argument]]\n" if $self->{debug}; ! } ! ! if ( $argument =~ /=\?(.{1,40})\?/ ) { ! update_word( $self, $1, 0, '', '', 'charset' ); ! } ! ! if ( $header =~ /^From/i ) { ! $encoding = ''; ! $self->{content_type__} = ''; ! $self->{from__} = $self->decode_string( $argument ) if ( $self->{from__} eq '' ) ; ! $prefix = 'from'; ! } ! ! $prefix = 'to' if ( $header =~ /^To/i ); ! $self->{to__} = $self->decode_string( $argument ) if ( ( $header =~ /^To/i ) && ( $self->{to__} eq '' ) ); ! ! $prefix = 'cc' if ( $header =~ /^Cc/i ); ! $self->{cc__} = $self->decode_string( $argument ) if ( ( $header =~ /^Cc/i ) && ( $self->{cc__} eq '' ) ); ! ! while ( $argument =~ s/<([[:alpha:]0-9\-_\.]+?@([[:alpha:]0-9\-_\.]+?))>// ) { ! update_word($self, $1, 0, ';', '&',$prefix); ! add_url($self, $2, 0, '@', '[&<]',$prefix); ! } ! ! while ( $argument =~ s/([[:alpha:]0-9\-_\.]+?@([[:alpha:]0-9\-_\.]+))// ) { ! update_word($self, $1, 0, '', '',$prefix); ! add_url($self, $2, 0, '@', '',$prefix); ! } ! ! add_line( $self, $argument, 0, $prefix ); ! next; ! } ! ! $self->{subject__} = $self->decode_string( $argument ) if ( ( $header =~ /^Subject/i ) && ( $self->{subject__} eq '' ) ); ! ! if ( $header =~ /^Subject/i ) { ! $prefix = 'subject'; ! } ! ! $self->{date__} = $argument if ( $header =~ /^Date/i ); ! ! # Look for MIME ! ! if ( $header =~ /^Content-Type/i ) { ! if ( $argument =~ /multipart\//i ) { ! my $boundary = $argument; ! ! if ( !( $argument =~ /boundary=(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i )) { ! $boundary = <MSG>; ! } ! ! if ( $boundary =~ /boundary=(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i ) { ! ! $boundary = ($2 || $3); ! ! $boundary =~ s/(\+|\/|\?|\*|\||\(|\)|\[|\]|\{|\}|\^|\$|\.)/\\$1/g; ! ! if ($mime ne '') { ! ! # Fortunately the pipe character isn't a valid mime boundary character! ! ! $mime = join('|', $mime, $boundary); ! } else { ! $mime = $boundary; ! } ! print "Set mime boundary to " . $mime . "\n" if $self->{debug}; ! next; ! } ! } ! ! if ( $argument =~ /charset=\"?([^\"]{1,40})\"?/ ) { ! update_word( $self, $1, 0, '' , '', 'charset' ); ! } ! ! if ( $argument =~ /^(.*?)(;$)/ ) { ! print "Set content type to $1\n" if $self->{debug}; ! $self->{content_type__} = $1; ! } ! next; ! } ! ! # Look for the different encodings in a MIME document, when we hit base64 we will ! # do a special parse here since words might be broken across the boundaries ! ! if ( $header =~ /^Content-Transfer-Encoding/i ) { ! $encoding = $argument; ! print "Setting encoding to $encoding\n" if $self->{debug}; ! my $compact_encoding = $encoding; ! $compact_encoding =~ s/[^A-Za-z0-9]//g; ! increment_word( $self, "encoding:$compact_encoding" ); ! next; ! } ! ! # Some headers to discard ! ! next if ( $header =~ /^(Thread-Index|X-UIDL|Message-ID|X-Text-Classification|X-Mime-Key)/i ); ! ! add_line( $self, $argument, 0, $prefix ); ! ! next; } } --- 835,860 ---- $self->{in_headers__} = 0; print "Header parsing complete.\n" if $self->{debug}; ! } # If we have an email header then just keep the part after the : if ( $line =~ /^([A-Za-z-]+):[ \t]*([^\n\r]*)/ ) { ! ! # Parse the last header ! ! ($mime,$encoding) = $self->parse_header($header,$argument,$mime,$encoding); ! ! # Save the new information for the current header ! ! $header = $1; ! $argument = $2; } + + # Append to argument if the next line begins with whitespace (isn't a new header) + + if ( $line =~ /^[\t ](.*?)(\r\n|\r|\n)/ ) { + $argument .= $1; + } + next; } *************** *** 991,995 **** # escape to match escaped boundary characters ! $boundary =~ s/(\+|\/|\?|\*|\||\(|\)|\[|\]|\{|\}|\^|\$|\.)/\\$1/g; my $temp_mime; --- 880,884 ---- # escape to match escaped boundary characters ! $boundary =~ s/(.*)/\Q$1\E/g; my $temp_mime; *************** *** 1166,1169 **** --- 1055,1188 ---- return $self->{$header . '__'}; } + + + # --------------------------------------------------------------------------------------------- + # + # parse_header - Performs parsing operations on a message header + # + # $header Name of header being processed + # $argument Value of header being processed + # $mime The presently saved mime boundaries list + # $encoding Current message encoding + # + # --------------------------------------------------------------------------------------------- + sub parse_header + { + my ($self, $header, $argument, $mime, $encoding ) = @_; + + print "Header ($header) ($argument)\n" if ($self->{debug}); + + # Handle the From, To and Cc headers and extract email addresses + # from them and treat them as words + + # For certain headers we are going to mark them specially in the corpus + # by tagging them with where they were found to help the classifier + # do a better job. So if you have + # + # From: fo...@ba... + # + # then we'll add from:fo...@ba... to the corpus and not just fo...@ba... + + my $prefix = ''; + + if ( $header =~ /^(From|To|Cc|Reply\-To)/i ) { + + if ( $argument =~ /=\?(.{1,40})\?/ ) { + update_word( $self, $1, 0, '', '', 'charset' ); + } + + if ( $header =~ /^From/i ) { + $encoding = ''; + $self->{content_type__} = ''; + $self->{from__} = $self->decode_string( $argument ) if ( $self->{from__} eq '' ) ; + $prefix = 'from'; + } + + $prefix = 'to' if ( $header =~ /^To/i ); + $self->{to__} = $self->decode_string( $argument ) if ( ( $header =~ /^To/i ) && ( $self->{to__} eq '' ) ); + + $prefix = 'cc' if ( $header =~ /^Cc/i ); + $self->{cc__} = $self->decode_string( $argument ) if ( ( $header =~ /^Cc/i ) && ( $self->{cc__} eq '' ) ); + + while ( $argument =~ s/<([[:alpha:]0-9\-_\.]+?@([[:alpha:]0-9\-_\.]+?))>// ) { + update_word($self, $1, 0, ';', '&',$prefix); + add_url($self, $2, 0, '@', '[&<]',$prefix); + } + + while ( $argument =~ s/([[:alpha:]0-9\-_\.]+?@([[:alpha:]0-9\-_\.]+))// ) { + update_word($self, $1, 0, '', '',$prefix); + add_url($self, $2, 0, '@', '',$prefix); + } + + add_line( $self, $argument, 0, $prefix ); + return ($mime, $encoding); + } + + $self->{subject__} = $self->decode_string( $argument ) if ( ( $header =~ /^Subject/i ) && ( $self->{subject__} eq '' ) ); + + if ( $header =~ /^Subject/i ) { + $prefix = 'subject'; + } + + $self->{date__} = $argument if ( $header =~ /^Date/i ); + + # Look for MIME + + if ( $header =~ /^Content-Type/i ) { + + if ( $argument =~ /charset=\"?([^\"]{1,40})\"?/ ) { + update_word( $self, $1, 0, '' , '', 'charset' ); + } + + if ( $argument =~ /^(.*?)(;)/ ) { + print "Set content type to $1\n" if $self->{debug}; + $self->{content_type__} = $1; + } + + if ( $argument =~ /multipart\//i ) { + my $boundary = $argument; + + if ( $boundary =~ /boundary= ?(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i ) { + + $boundary = ($2 || $3); + + $boundary =~ s/(.*)/\Q$1\E/g; + + if ($mime ne '') { + + # Fortunately the pipe character isn't a valid mime boundary character! + + $mime = join('|', $mime, $boundary); + } else { + $mime = $boundary; + } + print "Set mime boundary to " . $mime . "\n" if $self->{debug}; + return ($mime, $encoding); + } + } + return ($mime, $encoding); + } + + # Look for the different encodings in a MIME document, when we hit base64 we will + # do a special parse here since words might be broken across the boundaries + + if ( $header =~ /^Content-Transfer-Encoding/i ) { + $encoding = $argument; + print "Setting encoding to $encoding\n" if $self->{debug}; + my $compact_encoding = $encoding; + $compact_encoding =~ s/[^A-Za-z0-9]//g; + increment_word( $self, "encoding:$compact_encoding" ); + return ($mime, $encoding); + } + + # Some headers to discard + + return ($mime, $encoding) if ( $header =~ /^(Thread-Index|X-UIDL|Message-ID|X-Text-Classification|X-Mime-Key)/i ); + + add_line( $self, $argument, 0, $prefix ); + + return ($mime, $encoding); + } + # GETTERS/SETTERS |
From: <ssc...@us...> - 2003-03-29 00:11:58
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv7388 Modified Files: MailParse.pm Log Message: backout last commit -- used the wrong file Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.99 retrieving revision 1.100 diff -C2 -d -r1.99 -r1.100 *** MailParse.pm 29 Mar 2003 00:09:52 -0000 1.99 --- MailParse.pm 29 Mar 2003 00:11:50 -0000 1.100 *************** *** 914,922 **** my $boundary = $argument; ! if ( !( $argument =~ /boundary= ?(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i )) { $boundary = <MSG>; } ! if ( $boundary =~ /boundary= ?(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i ) { $boundary = ($2 || $3); --- 914,922 ---- my $boundary = $argument; ! if ( !( $argument =~ /boundary=(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i )) { $boundary = <MSG>; } ! if ( $boundary =~ /boundary=(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i ) { $boundary = ($2 || $3); |
From: <ssc...@us...> - 2003-03-29 00:09:58
|
Update of /cvsroot/popfile/engine/Classifier In directory sc8-pr-cvs1:/tmp/cvs-serv6644 Modified Files: MailParse.pm Log Message: generalizes multi-line header parser handling (experimental) Index: MailParse.pm =================================================================== RCS file: /cvsroot/popfile/engine/Classifier/MailParse.pm,v retrieving revision 1.98 retrieving revision 1.99 diff -C2 -d -r1.98 -r1.99 *** MailParse.pm 26 Mar 2003 03:58:29 -0000 1.98 --- MailParse.pm 29 Mar 2003 00:09:52 -0000 1.99 *************** *** 914,922 **** my $boundary = $argument; ! if ( !( $argument =~ /boundary=(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i )) { $boundary = <MSG>; } ! if ( $boundary =~ /boundary=(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i ) { $boundary = ($2 || $3); --- 914,922 ---- my $boundary = $argument; ! if ( !( $argument =~ /boundary= ?(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i )) { $boundary = <MSG>; } ! if ( $boundary =~ /boundary= ?(\"([A-Z0-9\'\(\)\+\_\,\-\.\/\:\=\?][A-Z0-9\'\(\)\+_,\-\.\/:=\? ]{0,69})\"|([^\(\)\<\>\@\,\;\:\\\"\/\[\]\?\=]{1,70}))/i ) { $boundary = ($2 || $3); |
From: <ssc...@us...> - 2003-03-28 23:57:39
|
Update of /cvsroot/popfile/engine/tests In directory sc8-pr-cvs1:/tmp/cvs-serv1608 Modified Files: TestBayes.tst Log Message: Fix bayes tests (2) Index: TestBayes.tst =================================================================== RCS file: /cvsroot/popfile/engine/tests/TestBayes.tst,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** TestBayes.tst 28 Mar 2003 23:18:21 -0000 1.6 --- TestBayes.tst 28 Mar 2003 23:57:34 -0000 1.7 *************** *** 55,66 **** # to be sent through classify_and_modify ! $b->config_( 'msgdir', 'tests/' ); $b->module_config_( 'html', 'port', 8080 ); $b->global_config_( 'xtc', 1 ); $b->global_config_( 'xpl', 1 ); $b->module_config_( 'pop3', 'local', 1 ); ! $b->module_config_( 'subject', 1 ); $b->set_bucket_parameter( 'spam', 'subject', 1 ); - $b->set_bucket_parameter( 'spam', 'quarantine', 0 ); my @modify_tests = sort glob 'tests/TestMailParse*.msg'; --- 55,66 ---- # to be sent through classify_and_modify ! $b->global_config_( 'msgdir', 'tests/' ); $b->module_config_( 'html', 'port', 8080 ); + $b->module_config_( 'html', 'local', 1 ); $b->global_config_( 'xtc', 1 ); $b->global_config_( 'xpl', 1 ); $b->module_config_( 'pop3', 'local', 1 ); ! $b->global_config_( 'subject', 1 ); $b->set_bucket_parameter( 'spam', 'subject', 1 ); my @modify_tests = sort glob 'tests/TestMailParse*.msg'; |
From: <ssc...@us...> - 2003-03-28 23:18:26
|
Update of /cvsroot/popfile/engine/tests In directory sc8-pr-cvs1:/tmp/cvs-serv18883 Modified Files: TestBayes.tst Log Message: Fix bayes tests Index: TestBayes.tst =================================================================== RCS file: /cvsroot/popfile/engine/tests/TestBayes.tst,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** TestBayes.tst 25 Mar 2003 05:24:58 -0000 1.5 --- TestBayes.tst 28 Mar 2003 23:18:21 -0000 1.6 *************** *** 57,65 **** $b->config_( 'msgdir', 'tests/' ); $b->module_config_( 'html', 'port', 8080 ); ! $b->config_( 'xtc', 1 ); ! $b->config_( 'xpl', 1 ); $b->module_config_( 'pop3', 'local', 1 ); $b->module_config_( 'subject', 1 ); $b->set_bucket_parameter( 'spam', 'subject', 1 ); my @modify_tests = sort glob 'tests/TestMailParse*.msg'; --- 57,66 ---- $b->config_( 'msgdir', 'tests/' ); $b->module_config_( 'html', 'port', 8080 ); ! $b->global_config_( 'xtc', 1 ); ! $b->global_config_( 'xpl', 1 ); $b->module_config_( 'pop3', 'local', 1 ); $b->module_config_( 'subject', 1 ); $b->set_bucket_parameter( 'spam', 'subject', 1 ); + $b->set_bucket_parameter( 'spam', 'quarantine', 0 ); my @modify_tests = sort glob 'tests/TestMailParse*.msg'; *************** *** 81,85 **** $output_line =~ s/[\r\n]//g; $cam_line =~ s/[\r\n]//g; ! test_assert_equal( $cam_line, $output_line, $modify_file ); } --- 82,86 ---- $output_line =~ s/[\r\n]//g; $cam_line =~ s/[\r\n]//g; ! test_assert_equal( $output_line, $cam_line, $modify_file ); } |
From: <ssc...@us...> - 2003-03-27 04:12:14
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv2014 Modified Files: Tag: v0/18/1 HTML.pm Log Message: fixes sort and filter crash (bug 709584) Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.98.2.3 retrieving revision 1.98.2.4 diff -C2 -d -r1.98.2.3 -r1.98.2.4 *** HTML.pm 20 Mar 2003 09:07:05 -0000 1.98.2.3 --- HTML.pm 27 Mar 2003 04:12:09 -0000 1.98.2.4 *************** *** 2114,2118 **** # all sort next to each other ! if ( $sort ne '' ) { @{$self->{history_keys_}} = sort { my ($a1,$b1) = ($self->{history_}{$a}{$sort}, --- 2114,2118 ---- # all sort next to each other ! if ( $sort ne '' && defined(@{$self->{history_keys_}})) { @{$self->{history_keys_}} = sort { my ($a1,$b1) = ($self->{history_}{$a}{$sort}, *************** *** 3403,3407 **** my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($mail_file); ! if ( $ctime < (time - $self->{configuration}->{configuration}{history_days} * $seconds_per_day) ) { $self->history_delete_file( $mail_file, $self->{configuration}->{configuration}{archive} ); } --- 3403,3407 ---- my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($mail_file); ! if ( $ctime < (time - ( $self->{configuration}->{configuration}{history_days} * $seconds_per_day )) ) { $self->history_delete_file( $mail_file, $self->{configuration}->{configuration}{archive} ); } |
From: <ssc...@us...> - 2003-03-27 04:08:58
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv1024 Modified Files: HTML.pm Log Message: fixes sort and filter crash (bug 709584) Index: HTML.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/HTML.pm,v retrieving revision 1.119 retrieving revision 1.120 diff -C2 -d -r1.119 -r1.120 *** HTML.pm 25 Mar 2003 05:24:58 -0000 1.119 --- HTML.pm 27 Mar 2003 04:08:50 -0000 1.120 *************** *** 1983,1987 **** @{$self->{history_keys__}} = keys %{$self->{history__}}; } ! # If a sort is specified then use it to sort the history items by an a subkey # (from, subject or bucket) otherwise use compare_mf to give the history back --- 1983,1988 ---- @{$self->{history_keys__}} = keys %{$self->{history__}}; } ! ! # If a sort is specified then use it to sort the history items by an a subkey # (from, subject or bucket) otherwise use compare_mf to give the history back *************** *** 1990,1994 **** # all sort next to each other ! if ( $sort ne '' ) { @{$self->{history_keys__}} = sort { my ($a1,$b1) = ($self->{history__}{$a}{$sort}, --- 1991,1998 ---- # all sort next to each other ! if ( $sort ne '' ! # If the filter had no messages, this will be undefined ! # and there are no ways to sort nothing ! && defined @{$self->{history_keys__}}) { @{$self->{history_keys__}} = sort { my ($a1,$b1) = ($self->{history__}{$a}{$sort}, |
From: <jgr...@us...> - 2003-03-26 16:39:17
|
Update of /cvsroot/popfile/engine/UI In directory sc8-pr-cvs1:/tmp/cvs-serv14991/UI Modified Files: XMLRPC.pm Log Message: Wrong base class for XMLRPC Index: XMLRPC.pm =================================================================== RCS file: /cvsroot/popfile/engine/UI/XMLRPC.pm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** XMLRPC.pm 25 Mar 2003 05:24:58 -0000 1.1 --- XMLRPC.pm 26 Mar 2003 16:39:12 -0000 1.2 *************** *** 34,38 **** { my $type = shift; ! my $self = UI::HTTP->new(); bless $self, $type;; --- 34,38 ---- { my $type = shift; ! my $self = POPFile::Module->new(); bless $self, $type;; |