}
use Params::Validate qw(validate_with :types);
-use List::MoreUtils qw(natatime);
+use List::AllUtils qw(natatime);
use Debbugs::Status qw(read_bug split_status_fields);
use Debbugs::DB;
next if defined $msg_id and $msg_id =~ /handler\..+\.ack(?:info)?\@/;
my $entity = parse_to_mime_entity($record);
# search for a message with this message id in the database
- $msg_id = $entity->head->get('Message-Id:');
+ $msg_id = $entity->head->get('Message-Id') //
+ $entity->head->get('Resent-Message-ID') //
+ '';
$msg_id =~ s/^\s*\<//;
$msg_id =~ s/>\s*$//;
# check to see if the subject, to, and from match. if so, it's
# probably the same message.
- my $subject = decode_rfc1522($entity->head->get('Subject:'));
- $subject =~ s/\n(?:(\s)\s*|\s*$)/$1/g;
- my $to = decode_rfc1522($entity->head->get('To:'));
- $to =~ s/\n(?:(\s)\s*|\s*$)/$1/g;
- my $from = decode_rfc1522($entity->head->get('From:'));
- $from =~ s/\n(?:(\s)\s*|\s*$)/$1/g;
+ my $subject = decode_rfc1522($entity->head->get('Subject')//'');
+ $subject =~ s/\n(?:(\s)\s*|\s*$)//g;
+ my $to = decode_rfc1522($entity->head->get('To')//'');
+ $to =~ s/\n(?:(\s)\s*|\s*$)//g;
+ my $from = decode_rfc1522($entity->head->get('From')//'');
+ $from =~ s/\n(?:(\s)\s*|\s*$)//g;
my $m = $s->resultset('Message')->
find({msgid => $msg_id,
from_complete => $from,
subject => $subject
});
eval {
- $m->sent_date(DateTime::Format::Mail->
- parse_datetime($entity->head->get('Date:',0)));
+ my $date = DateTime::Format::Mail->
+ parse_datetime($entity->head->get('Date',0));
+ if (abs($date->offset) >= 60 * 60 * 12) {
+ $date = $date->set_time_zone('UTC');
+ }
+ $m->sent_date($date);
};
- my $spam = $entity->head->get('X-Spam-Status:',0);
+ my $spam = $entity->head->get('X-Spam-Status',0)//'';
if ($spam=~ /score=([\d\.]+)/) {
$m->spam_score($1);
}
my %corr;
@{$corr{from}} = getparsedaddrs($from);
@{$corr{to}} = getparsedaddrs($to);
- @{$corr{cc}} = getparsedaddrs($entity->head->get('Cc:'));
+ @{$corr{cc}} = getparsedaddrs($entity->head->get('Cc'));
# add correspondents if necessary
my @cors;
for my $type (keys %corr) {
for my $addr (@{$corr{$type}}) {
+ my $cor = $s->resultset('Correspondent')->
+ get_correspondent_id($addr);
+ next unless defined $cor;
push @cors,
- {correspondent => $s->resultset('Correspondent')->
- get_correspondent_id($addr),
+ {correspondent => $cor,
correspondent_type => $type,
};
}
$m->update();
$s->txn_do(sub {
$m->message_correspondents()->delete();
- $m->add_to_message_correspondents(@cors);
+ $m->add_to_message_correspondents(@cors) if
+ @cors;
}
);
}
my $recv;
- if ($entity->head->get('Received:',0)
+ if ($entity->head->get('Received',0)
=~ /via spool by (\S+)/) {
$recv = $s->resultset('Correspondent')->
get_correspondent_id($1);
$cache->{arch}{$binarch} =
$s->resultset('Arch')->
find_or_create({arch => $binarch},
- {result_class => 'DBIx::Class::ResultClass::HashRefInflator'},
- )->{id};
+ )->id();
}
$arch = $cache->{arch}{$binarch};
my $bp;