5 use Data::StarCraft::PvPGN::Report;
13 use Getopt::Long qw(:config bundling auto_version auto_help);
15 "verbose|v!" => \$DBG,
19 my $path = $ARGV[0] or die "Usage: $0 FILE\n";
20 my ($name) = $path =~ m{([^/]+)$};
21 my $report = Data::StarCraft::PvPGN::Report->open("$path.txt")
22 or die "No report file: $!\n";
23 my $data = $report->head;
24 print Dumper $data if $DBG;
26 my $players = $report->players;
27 my %resultdelta = qw(WIN 1 DISCONNECT 0 DRAW 0 LOSS -1);
29 defined $resultdelta{ $_->{result} }
30 or die "Invalid player result '$_->{result}' for $_->{name}\n";
31 $_->{delta} = $resultdelta{ $_->{result} };
33 print Dumper $players if $DBG;
40 my ($placeid) = $name =~ /.*([a-z]{2})/;
41 my $place = $placetxt{$placeid} or die "Unknown place id: $placeid\n";
42 print "Resolved place '$placeid' to $place\n" if $DBG;
45 my @dbinfo = do "dbinfo.inc.pl";
46 my $Db = DBIx::Simple->connect(@dbinfo, {pg_enable_utf8 => 1})
47 or die "No database: $DBI::errstr\n";
54 my ($start, $end) = map str2time($data->{$_}), qw(started ended);
59 map => $data->{mapfile},
60 type => $data->{type},
61 start => time2str('%Y-%m-%d %X', $start),
62 duration => sprintf('%d seconds', $end - $start),
63 })->rows or die "Game insert failed: ".$Db->error."\n";
64 my $gameid = $Db->last_insert_id((undef) x 4, {sequence => "game_id_seq"})
65 or die "Couldn't find our game insertion: ".$Db->error."\n";
66 print "Game inserted as # $gameid\n";
71 name => $players->[$_]->{name},
72 account => $players->[$_]->{name},
73 result => $players->[$_]->{delta},
74 race => substr($players->[$_]->{race}, 0, 1),
75 })->rows or die "Player insert failed: ".$Db->error."\n"