about summary refs log tree commit homepage
path: root/lib
diff options
context:
space:
mode:
authorJonathan Corbet <corbet@lwn.net>2018-10-13 15:42:21 -0600
committerEric Wong <e@80x24.org>2018-10-16 03:48:42 +0000
commitfbfd63996ddfc9a23b8a1e0f8756e378f2e196ba (patch)
tree6513b7a6844ac9017859a014aed866325f3ea5cb /lib
parentdd7049951c052c541efe3d1bb6de8950512027a5 (diff)
downloadpublic-inbox-fbfd63996ddfc9a23b8a1e0f8756e378f2e196ba.tar.gz
Putting the Xref field into xover lines allows newsreaders to mark
cross-posted messages read when catching up a group.  That, in turn,
massively improves the life of crazy people who try to follow dozens of
kernel lists, where emails are often heavily cross-posted.
Diffstat (limited to 'lib')
-rw-r--r--lib/PublicInbox/NNTP.pm13
1 files changed, 7 insertions, 6 deletions
diff --git a/lib/PublicInbox/NNTP.pm b/lib/PublicInbox/NNTP.pm
index cbd4ecf1..022bb809 100644
--- a/lib/PublicInbox/NNTP.pm
+++ b/lib/PublicInbox/NNTP.pm
@@ -28,7 +28,7 @@ use constant {
 
 sub now () { clock_gettime(CLOCK_MONOTONIC) };
 
-my @OVERVIEW = qw(Subject From Date Message-ID References);
+my @OVERVIEW = qw(Subject From Date Message-ID References Xref);
 my $OVERVIEW_FMT = join(":\r\n", @OVERVIEW, qw(Bytes Lines)) . ":\r\n";
 my $LIST_HEADERS = join("\r\n", @OVERVIEW,
                         qw(:bytes :lines Xref To Cc)) . "\r\n";
@@ -812,8 +812,8 @@ sub cmd_xrover ($;$) {
         });
 }
 
-sub over_line ($$) {
-        my ($num, $smsg) = @_;
+sub over_line ($$$$) {
+        my ($self, $ng, $num, $smsg) = @_;
         # n.b. field access and procedural calls can be
         # 10%-15% faster than OO method calls:
         my $s = join("\t", $num,
@@ -823,7 +823,8 @@ sub over_line ($$) {
                 "<$smsg->{mid}>",
                 $smsg->{references},
                 $smsg->{bytes},
-                $smsg->{lines});
+                $smsg->{lines},
+                "Xref: " . xref($self, $ng, $num, $smsg->{mid}));
         utf8::encode($s);
         $s
 }
@@ -839,7 +840,7 @@ sub cmd_over ($;$) {
                 # Only set article number column if it's the current group
                 my $self_ng = $self->{ng};
                 $n = 0 if (!$self_ng || $self_ng ne $ng);
-                more($self, over_line($n, $smsg));
+                more($self, over_line($self, $ng, $n, $smsg));
                 '.';
         } else {
                 cmd_xover($self, $range);
@@ -861,7 +862,7 @@ sub cmd_xover ($;$) {
 
                 # OVERVIEW.FMT
                 more($self, join("\r\n", map {
-                        over_line($_->{num}, $_);
+                        over_line($self, $self->{ng}, $_->{num}, $_);
                         } @$msgs));
                 $cur = $msgs->[-1]->{num} + 1;
         });