X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=remoteglot.pl;h=8b3a0b776f40678ae3c6e58244580a5fd6e32c60;hb=8733e976299634c8bce83bc8908a99ff669bc2fd;hp=a79239672116df2389bcdf68f0c9ba688fccdeee;hpb=f120f5172ba09d12928acc7228e4aa331cbdc190;p=remoteglot diff --git a/remoteglot.pl b/remoteglot.pl index a792396..8b3a0b7 100755 --- a/remoteglot.pl +++ b/remoteglot.pl @@ -338,9 +338,12 @@ sub handle_pgn { if ($pgn->result eq '1-0' || $pgn->result eq '1/2-1/2' || $pgn->result eq '0-1') { $pos->{'result'} = $pgn->result; } - $pos->{'history'} = \@repretty_moves; + my @extra_moves = (); + $pos = extend_from_manual_override($pos, \@repretty_moves, \@extra_moves); extract_clock($pgn, $pos); + $pos->{'history'} = \@repretty_moves; + $pos->{'extra_moves'} = \@extra_moves; # Sometimes, PGNs lose a move or two for a short while, # or people push out new ones non-atomically. @@ -771,6 +774,11 @@ sub output_screen { } return unless (exists($pos_calculating->{'board'})); + + my $extra_moves = $pos_calculating->{'extra_moves'}; + if (defined($extra_moves) && scalar @$extra_moves > 0) { + $text .= " Manual move extensions: " . join(' ', @$extra_moves) . "\n"; + } if (exists($info->{'pv1'}) && exists($info->{'pv2'})) { # multi-PV @@ -1241,6 +1249,34 @@ sub plot_score { return undef; } +sub extend_from_manual_override { + my ($pos, $moves, $extra_moves) = @_; + + my $q = $dbh->prepare('SELECT next_move FROM game_extensions WHERE fen=? AND history=? AND player_w=? AND player_b=? AND (CURRENT_TIMESTAMP - ts) < INTERVAL \'1 hour\''); + while (1) { + my $player_w = $pos->{'player_w'}; + my $player_b = $pos->{'player_b'}; + if ($player_w =~ /^base64:(.*)$/) { + $player_w = MIME::Base64::decode_base64($1); + } + if ($player_b =~ /^base64:(.*)$/) { + $player_b = MIME::Base64::decode_base64($1); + } + #use Data::Dumper; print Dumper([$pos->fen(), JSON::XS::encode_json($moves), $player_w, $player_b]); + $q->execute($pos->fen(), JSON::XS::encode_json($moves), $player_w, $player_b); + my $ref = $q->fetchrow_hashref; + if (defined($ref)) { + my $move = $ref->{'next_move'}; + ($pos) = $pos->make_pretty_move($move); + push @$moves, $move; + push @$extra_moves, $move; + } else { + last; + } + } + return $pos; +} + sub extract_clock { my ($pgn, $pos) = @_;