$| = 1;
select(STDOUT);
+umask 0022;
# open the chess engine
my $engine = open_engine($remoteglotconf::engine_cmdline, 'E1', sub { handle_uci(@_, 1); });
}
my $pgn = Chess::PGN::Parse->new(undef, $body);
- if (!defined($pgn) || !$pgn->read_game() || $body !~ /^\[/) {
- warn "Error in parsing PGN from $url\n";
+ if (!defined($pgn)) {
+ warn "Error in parsing PGN from $url [body='$body']\n";
+ } elsif (!$pgn->read_game()) {
+ warn "Error in reading PGN game from $url [body='$body']\n";
+ } elsif ($body !~ /^\[/) {
+ warn "Malformed PGN from $url [body='$body']\n";
} else {
eval {
# Skip to the right game.
my $pos = Position->start_pos($pgn->white, $pgn->black);
my $moves = $pgn->moves;
my @uci_moves = ();
+ my @repretty_moves = ();
for my $move (@$moves) {
- my $uci_move;
- ($pos, $uci_move) = $pos->make_pretty_move($move);
+ my ($npos, $uci_move) = $pos->make_pretty_move($move);
push @uci_moves, $uci_move;
+
+ # Re-prettyprint the move.
+ my ($from_row, $from_col, $to_row, $to_col, $promo) = parse_uci_move($uci_move);
+ my ($pretty, undef) = $pos->{'board'}->prettyprint_move($from_row, $from_col, $to_row, $to_col, $promo);
+ push @repretty_moves, $pretty;
+ $pos = $npos;
}
$pos->{'result'} = $pgn->result;
- $pos->{'pretty_history'} = $moves;
+ $pos->{'pretty_history'} = \@repretty_moves;
extract_clock($pgn, $pos);
}
my $pv = shift @pvs;
- my ($from_col, $from_row, $to_col, $to_row, $promo) = parse_uci_move($pv);
+ my ($from_row, $from_col, $to_row, $to_col, $promo) = parse_uci_move($pv);
my ($pretty, $nb) = $board->prettyprint_move($from_row, $from_col, $to_row, $to_col, $promo);
return ( $pretty, prettyprint_pv_no_cache($nb, @pvs) );
}
($new_depth == $old_depth && $new_nodes >= $old_nodes)) {
atomic_set_contents($filename, $encoded);
if (defined($json->{'plot_score'})) {
- local $dbh->{AutoCommit} = 0;
- $dbh->do('DELETE FROM scores WHERE id=?', undef, $id);
- $dbh->do('INSERT INTO scores (id, plot_score, short_score, engine, depth, nodes) VALUES (?,?,?,?,?,?)', undef,
+ $dbh->do('INSERT INTO scores (id, plot_score, short_score, engine, depth, nodes) VALUES (?,?,?,?,?,?) ' .
+ ' ON CONFLICT (id) DO UPDATE SET ' .
+ ' plot_score=EXCLUDED.plot_score, ' .
+ ' short_score=EXCLUDED.short_score, ' .
+ ' engine=EXCLUDED.engine, ' .
+ ' depth=EXCLUDED.depth, ' .
+ ' nodes=EXCLUDED.nodes',
+ undef,
$id, $json->{'plot_score'}, $json->{'short_score'},
$json->{'engine'}{'name'}, $new_depth, $new_nodes);
- $dbh->commit;
}
}
}
my $to_col = col_letter_to_num(substr($move, 2, 1));
my $to_row = row_letter_to_num(substr($move, 3, 1));
my $promo = substr($move, 4, 1);
- return ($from_col, $from_row, $to_col, $to_row, $promo);
+ return ($from_row, $from_col, $to_row, $to_col, $promo);
}