]> git.sesse.net Git - remoteglot-book/blobdiff - remoteglot.pl
Output historic analysis (not used by the frontend yet).
[remoteglot-book] / remoteglot.pl
index d82c20bed25034896c341b979aa9a5b36bb0fac9..9b1635c3ebc8955642fb68bff08abf46921dd3a1 100755 (executable)
@@ -742,11 +742,28 @@ sub output_json {
        }
        $json->{'refutation_lines'} = \%refutation_lines;
 
-       open my $fh, ">", $remoteglotconf::json_output . ".tmp"
+       my $encoded = JSON::XS::encode_json($json);
+       atomic_set_contents($remoteglotconf::json_output, $encoded);
+
+       if (exists($pos_calculating->{'history'}) &&
+           defined($remoteglotconf::json_history_dir)) {
+               my $halfmove_num = scalar @{$pos_calculating->{'history'}};
+               (my $fen = $pos_calculating->fen()) =~ tr,/ ,-_,;
+               my $filename = $remoteglotconf::json_history_dir . "/move$halfmove_num-$fen.json";
+
+               # TODO: Avoid overwriting earlier analysis if it's better.
+               atomic_set_contents($filename, $encoded);
+       }
+}
+
+sub atomic_set_contents {
+       my ($filename, $contents) = @_;
+
+       open my $fh, ">", $filename . ".tmp"
                or return;
-       print $fh JSON::XS::encode_json($json);
+       print $fh $contents;
        close $fh;
-       rename($remoteglotconf::json_output . ".tmp", $remoteglotconf::json_output);
+       rename($filename . ".tmp", $filename);
 }
 
 sub uciprint {