XXX: scmap: restore metadata marking (era-dependant styling)
[perl/schtarr.git] / pvpgnreport
1 #!/usr/bin/env perl
2
3 use strict;
4 use warnings;
5 use Data::StarCraft::PvPGN::Report;
6 use Data::Dumper;
7
8 our $VERSION = '1.00';
9
10 our $DBG = 0;
11 our $TEST = 0;
12
13 use Getopt::Long qw(:config bundling auto_version auto_help);
14 GetOptions(
15         "verbose|v!" => \$DBG,
16         "test|t!" => \$TEST,
17 );
18
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;
25
26 my $players = $report->players;
27 my %resultdelta = qw(WIN 1  DISCONNECT 0  DRAW 0  LOSS -1);
28 for (@$players) {
29         defined $resultdelta{ $_->{result} }
30                 or die "Invalid player result '$_->{result}' for $_->{name}\n";
31         $_->{delta} = $resultdelta{ $_->{result} };
32 }
33 print Dumper $players if $DBG;
34
35 my %placetxt = (
36         bn => "bnet",
37         gr => "groningen",
38         md => "mdhq",
39 );
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;
43
44 use Games::StarCraft::DB;
45 my $Db = Games::StarCraft::DB->connect
46         or die "No database: $DBI::errstr\n";
47
48 $TEST and exit;
49
50 $Db->begin;
51
52 use Date::Parse;
53 my ($start, $end) = map str2time($data->{$_}), qw(started ended);
54 use Date::Format;
55 $Db->insert("game", {
56         name => $name,
57         place => $place,
58         map => $data->{mapfile},
59         type => $data->{type},
60         start => time2str('%Y-%m-%d %X', $start),
61         duration => sprintf('%d seconds', $end - $start),
62 })->rows or die "Game insert failed: ".$Db->error."\n";
63 my $gameid = $Db->last_insert_id((undef) x 4, {sequence => "game_id_seq"})
64         or die "Couldn't find our game insertion: ".$Db->error."\n";
65 print "Game inserted as # $gameid\n";
66
67 $Db->insert("play", {
68         game => $gameid,
69         slot => $_,
70         name => $players->[$_]->{name},
71         account => $players->[$_]->{name},
72         result => $players->[$_]->{delta},
73         race => substr($players->[$_]->{race}, 0, 1),
74 })->rows or die "Player insert failed: ".$Db->error."\n"
75         for 0 .. $#$players;
76
77 $Db->commit;
78