* @type {Number}
* @const
* @private */
-var SCRIPT_VERSION = 2016032202;
+var SCRIPT_VERSION = 2016091401;
/**
* The current backend URL.
* @type {?Array.<{
* name: string,
* url: string,
+ * hashurl: string,
* id: string,
* score: Object=,
* result: string=,
location.reload(true);
}
- possibly_play_sound(current_analysis_data, new_data);
- current_analysis_data = new_data;
- update_board();
- update_num_viewers(num_viewers);
+ // Verify that the PV makes sense.
+ var valid = true;
+ if (new_data['pv']) {
+ var hiddenboard = new Chess(new_data['position']['fen']);
+ for (var i = 0; i < new_data['pv'].length; ++i) {
+ if (hiddenboard.move(new_data['pv'][i]) === null) {
+ valid = false;
+ break;
+ }
+ }
+ }
+
+ var timeout = 100;
+ if (valid) {
+ possibly_play_sound(current_analysis_data, new_data);
+ current_analysis_data = new_data;
+ update_board();
+ update_num_viewers(num_viewers);
+ } else {
+ console.log("Received invalid update, waiting five seconds and trying again.");
+ location.reload(true);
+ }
// Next update.
- current_analysis_request_timer = setTimeout(function() { request_update(); }, 100);
+ current_analysis_request_timer = setTimeout(function() { request_update(); }, timeout);
}).fail(function(jqXHR, textStatus, errorThrown) {
if (textStatus === "abort") {
// Aborted because we are switching backends. Abandon and don't retry,
for (var i = 0; i < current_games.length; ++i) {
if (current_games[i]['id'] === hash) {
if (backend_url !== current_games[i]['url']) {
- switch_backend(current_games[i]['url'], current_games[i]['hashurl']);
+ switch_backend(current_games[i]);
}
return;
}
if (data['position'] && data['position']['last_move_uci']) {
highlight_from = data['position']['last_move_uci'].substr(0, 2);
highlight_to = data['position']['last_move_uci'].substr(2, 2);
- } else if (current_display_line_is_history && current_display_move >= 0) {
+ } else if (current_display_line_is_history && current_display_line && current_display_move >= 0) {
// We don't have historic analysis for this position, but we
// can reconstruct what the last move was by just replaying
// from the start.
var game = current_games[game_num];
if (game['url'] === backend_url) {
var next_game_num = (game_num + 1) % current_games.length;
- switch_backend(current_games[next_game_num]['url'], current_games[next_game_num]['hashurl']);
+ switch_backend(current_games[next_game_num]);
return;
}
}
}
/**
- * @param {string} new_backend_url
+ * @param {Object} game
*/
-var switch_backend = function(new_backend_url, new_backend_hash_url) {
+var switch_backend = function(game) {
// Stop looking at historic data.
current_display_line = null;
current_display_move = null;
}
// Request an immediate fetch with the new backend.
- backend_url = new_backend_url;
- backend_hash_url = new_backend_hash_url;
+ backend_url = game['url'];
+ backend_hash_url = game['hashurl'];
+ window.location.hash = '#' + game['id'];
current_analysis_data = null;
ims = 0;
request_update();
} else if (event.which >= 49 && event.which <= 57) { // 1-9.
var num = event.which - 49;
if (current_games && current_games.length >= num) {
- switch_backend(current_games[num]['url'], current_games[num]['hashurl']);
+ switch_backend(current_games[num]);
}
} else if (event.which == 78) { // N.
next_game();