# large threads in our WWW UI and the NNTP range responses.
package PublicInbox::Smsg;
use strict;
-use warnings;
-use base qw(Exporter);
+use v5.10.1;
+use parent qw(Exporter);
our @EXPORT_OK = qw(subject_normalized);
use PublicInbox::MID qw(mids references);
use PublicInbox::Address;
use PublicInbox::MsgTime qw(msg_timestamp msg_datestamp);
+sub oidbin { pack('H*', $_[0]->{blob}) }
+
sub to_doc_data {
my ($self) = @_;
join("\n",
sub psgi_cull ($) {
my ($self) = @_;
- # ghosts don't have ->{from}
- my $from = delete($self->{from}) // '';
- my @n = PublicInbox::Address::names($from);
- $self->{from_name} = join(', ', @n);
-
# drop NNTP-only fields which aren't relevant to PSGI results:
# saves ~80K on a 200 item search result:
# TODO: we may need to keep some of these for JMAP...
- delete @$self{qw(tid to cc bytes lines)};
+ my ($f) = delete @$self{qw(from tid to cc bytes lines)};
+ # ghosts don't have ->{from}
+ $self->{from_name} = join(', ', PublicInbox::Address::names($f // ''));
$self;
}
return $refs if scalar(@$refs) == 0;
# prevent circular references here:
- my %seen = ( $smsg->{mid} => 1 );
+ my %seen = ( ($smsg->{mid} // '') => 1 );
my @keep;
foreach my $ref (@$refs) {
if (length($ref) > PublicInbox::MID::MAX_MID_SIZE) {
# to protect git and NNTP clients
$val =~ tr/\0\t\n/ /;
- # rare: in case headers have wide chars (not RFC2047-encoded)
- utf8::decode($val);
-
# lower-case fields for read-only stuff
$self->{lc($f)} = $val;
$self->{$f} = $val if $val ne '';
}
$sync //= {};
- $self->{-ds} = [ my @ds = msg_datestamp($hdr, $sync->{autime}) ];
- $self->{-ts} = [ my @ts = msg_timestamp($hdr, $sync->{cotime}) ];
+ my @ds = msg_datestamp($hdr, $sync->{autime} // $self->{ds});
+ my @ts = msg_timestamp($hdr, $sync->{cotime} // $self->{ts});
+ $self->{-ds} = \@ds;
+ $self->{-ts} = \@ts;
$self->{ds} //= $ds[0]; # no zone
$self->{ts} //= $ts[0];
$self->{mid} //= mids($hdr)->[0];
our $REPLY_RE = qr/^re:\s+/i;
+# TODO: see RFC 5256 sec 2.1 "Base Subject" and evaluate compatibility
+# w/ existing indices...
sub subject_normalized ($) {
my ($subj) = @_;
$subj =~ s/\A\s+//s; # no leading space