use MIME::Parser;
use Commods;
+use CommodsDatabase;
setlocale(LC_CTYPE, "en_GB.UTF-8");
my $parser= new MIME::Parser;
$entity= $parser->parse(\*STDIN);
my $eff_type= $entity->effective_type();
- die "effective type $eff_type" unless $eff_type eq 'multipart/mixed';
+ die "effective type $eff_type\n" unless $eff_type eq 'multipart/mixed';
my $mdpart= find_part('metadata', 'text/plain', sub {
my $charset= $_[0]->mime_attr('content-type.charset');
return 1 if grep { $_ eq $charset } qw(utf-8 us-ascii);
});
- my $mdh= $mdpart->open('r') or die;
+ my $mdh= $mdpart->open('r') or die "failed to open metadata $!\n";
my %md;
while (defined($_= $mdh->getline())) {
m/^([a-z]+)\t(.*)$/ or next;
$md{$1}= $2;
}
+ foreach my $needed (qw(ocean island timestamp clientspec serverspec)) {
+ defined $md{$needed} or die "missing metadata $needed\n";
+ }
+
+ my $mid= $entity->head()->get('message-id');
+ defined $mid or die "missing Message-ID\n";
+ chomp($mid);
+ $mid !~ m/[^ -~]/ or die "Message-ID has strange character(s)\n";
+
my $tsvpart= find_part('deduped.tsv.gz', 'application/octet-stream',
undef);
my $tsv= pipethrough_prep();
$tsvpart->bodyhandle()->print($tsv);
my $pt= pipethrough_run_along($tsv,undef, 'gunzip','gunzip');
+ db_setocean($md{'ocean'});
+ my $dbfn= db_filename();
+ (stat $dbfn) or die "stat database $dbfn failed $!\n";
+ db_connect();
+
+ my ($islandid) = $dbh->selectrow_array(
+ "SELECT islands.islandid
+ FROM islands
+ WHERE islandname == ?;
+ ", {}, $md{'island'});
+
+ die "unknown island\n" unless defined $islandid;
+
+ db_doall("DELETE FROM uploads WHERE islandid == $islandid;
+ DELETE FROM buy WHERE islandid == $islandid;
+ DELETE FROM sell WHERE islandid == $islandid;
+ ");
+
+ $dbh->do("INSERT INTO uploads
+ (islandid, message,
+ timestamp, clientspec, serverspec)
+ VALUES (?,?,?,?,?);
+ ", {},
+ $islandid, $mid,
+ map { $md{$_} } (qw(timestamp clientspec serverspec)));
+
+ my %sth_cs;
+ foreach my $cs (qw(commod stall)) {
+ $sth_cs{$cs}= $dbh->prepare(
+ "INSERT OR IGNORE
+ INTO ${cs}s
+ (${cs}id) VALUES (?)
+ ");
+ }
+
+ my %sth_bs;
+ foreach my $bs (qw(buy sell)) {
+ $sth_bs{$bs}= $dbh->prepare(
+ "INSERT INTO $bs
+ (commodid, islandid, stallid, price, qty)
+ VALUES (
+ (SELECT commodid FROM commods WHERE commodname = ?),
+ $islandid,
+ (SELECT stallid FROM stalls WHERE stallname = ?),
+ ?, ?
+ )
+ ");
+ }
+
while (<$pt>) {
my @v= check_tsv_line($_, \&bad_data_fail);
- print "[",join('|',@v),"]\n";
+
+
}
pipethrough_run_finish($pt);
+
}
my $ok= eval {