]> Sergey Matveev's repositories - public-inbox.git/commitdiff
search: implement subject summarization
authorEric Wong <e@80x24.org>
Tue, 25 Aug 2015 02:03:16 +0000 (02:03 +0000)
committerEric Wong <e@80x24.org>
Tue, 25 Aug 2015 03:52:54 +0000 (03:52 +0000)
We ought to summarize subjects to avoid exploding
line lengths in the web interface.

lib/PublicInbox/Search.pm
lib/PublicInbox/SearchMsg.pm
t/search.t

index bcc5312555d369d8f96c57fd026c662e623477d4..5ef380e86f2dc1816d0d3e6c4aca77e856aa8cf2 100644 (file)
@@ -237,6 +237,31 @@ sub subject_normalized {
        $subj;
 }
 
+# for doc data
+sub subject_summary {
+       my $subj = pop;
+       my $max = 68;
+       if (length($subj) > $max) {
+               my @subj = split(/\s+/, $subj);
+               $subj = '';
+               my $l;
+
+               while ($l = shift @subj) {
+                       my $new = $subj . $l . ' ';
+                       last if length($new) >= $max;
+                       $subj = $new;
+               }
+               if (length $subj) {
+                       my $r = scalar @subj ? ' ...' : '';
+                       $subj =~ s/ \z/$r/s;
+               } else {
+                       @subj = ($l =~ /\A(.{1,72})/);
+                       $subj = $subj[0] . ' ...';
+               }
+       }
+       $subj;
+}
+
 sub enquire {
        my ($self) = @_;
        $self->{enquire} ||= Search::Xapian::Enquire->new($self->{xdb});
index a8f99bd5756d51179e9b7e998967ad755571907a..a9f3180b827e9c8aac8351671dce988d9b08459e 100644 (file)
@@ -94,9 +94,8 @@ sub date {
 
 sub to_doc_data {
        my ($self) = @_;
-
        $self->mid . "\n" .
-       $self->subject . "\n" .
+       PublicInbox::Search::subject_summary($self->subject) . "\n" .
        $self->from_name . "\n".
        $self->date . "\n" .
        $self->references_sorted;
index 17e9eaf43aea8e764de4e618539d7108e0947e43..65539f14c2ca31eb5ae97258360080602a97067b 100644 (file)
@@ -16,6 +16,23 @@ is(0, system(qw(git init -q --bare), $git_dir), "git init (main)");
 eval { PublicInbox::Search->new($git_dir) };
 ok($@, "exception raised on non-existent DB");
 
+{
+       my $orig = "FOO " x 30;
+       my $summ = PublicInbox::Search::subject_summary($orig);
+
+       $summ = length($summ);
+       $orig = length($orig);
+       ok($summ < $orig && $summ > 0, "summary shortened ($orig => $summ)");
+
+       $orig = "FOO" x 30;
+       $summ = PublicInbox::Search::subject_summary($orig);
+
+       $summ = length($summ);
+       $orig = length($orig);
+       ok($summ < $orig && $summ > 0,
+          "summary shortened but not empty: $summ");
+}
+
 my $rw = PublicInbox::SearchIdx->new($git_dir, 1);
 my $ro = PublicInbox::Search->new($git_dir);
 my $rw_commit = sub {