#!/usr/bin/perl
use strict;
use Net::NNTP;

my ($mid, $server, $pager, $metamail, $nntp, $article, $demime, $i);                                                                
                                                                                                                                    
$mid = shift;
if (! defined $mid) {
  $mid = <>;
  chomp $mid;
}

$server = $ENV{"NNTPSERVER"} or "localhost";

$pager = $ENV{"PAGER"} or "less";

print STDERR "looking up $mid on $server\n";

# open connection to server
$nntp = Net::NNTP->new($server)
  or die "NNTP->new: $!";

# get article
$article = $nntp->article($mid);

if (!$article) {
  print STDERR "not found\n";
  exit;
}

# start pager
open PAGER, "| $pager"
  or die "can't start pager: $!";

# check for unreadable encoding
$demime = 0;
for ($i = 0; $$article[$i] !~ /^$/; $i++) {
  if ($$article[$i] =~ /^Content-Transfer-Encoding: (base64|quoted-printable)/i) {
    $demime = 1;
  }
  print PAGER "$$article[$i]";
}

if ($demime) {
  open TMP, ">/tmp/getmsgn.$$"
    or die "can't write article to temp";
  print TMP @$article;
  close TMP;
  open METAMAIL, "metamail -q /tmp/getmsgn.$$ |"
    or die "can't start metamail: $!";
  while (<METAMAIL>) {
    print PAGER;
  }
  close METAMAIL;
  unlink "/tmp/getmsgn.$$";
} else {
  for (; defined($$article[$i]); $i++) {
    print PAGER "$$article[$i]";
  }
}

# close pipe to pager
close PAGER;

# close connection to server
$nntp->quit;

# end of file
