]> git.sesse.net Git - remoteglot/blobdiff - www/js/remoteglot.js
Revert "Fix a null pointer exception in the frontend."
[remoteglot] / www / js / remoteglot.js
index 44f6c79a9d26cc96b3964fb731878c889eb820e9..b049c32ea81bc52c63b1cbb19172d7c769778b21 100644 (file)
@@ -7,7 +7,7 @@
  * @type {Number}
  * @const
  * @private */
  * @type {Number}
  * @const
  * @private */
-var SCRIPT_VERSION = 2016032202;
+var SCRIPT_VERSION = 2016091401;
 
 /**
  * The current backend URL.
 
 /**
  * The current backend URL.
@@ -47,6 +47,7 @@ var displayed_analysis_data = null;
  * @type {?Array.<{
  *      name: string,
  *      url: string,
  * @type {?Array.<{
  *      name: string,
  *      url: string,
+ *      hashurl: string,
  *      id: string,
  *      score: Object=,
  *      result: string=,
  *      id: string,
  *      score: Object=,
  *      result: string=,
@@ -276,13 +277,31 @@ var request_update = function() {
                        location.reload(true);
                }
 
                        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.
 
                // 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,
        }).fail(function(jqXHR, textStatus, errorThrown) {
                if (textStatus === "abort") {
                        // Aborted because we are switching backends. Abandon and don't retry,
@@ -941,7 +960,7 @@ var possibly_switch_game_from_hash = function() {
        for (var i = 0; i < current_games.length; ++i) {
                if (current_games[i]['id'] === hash) {
                        if (backend_url !== current_games[i]['url']) {
        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;
                }
                        }
                        return;
                }
@@ -1070,7 +1089,7 @@ var update_board = function() {
        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);
        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.
                // We don't have historic analysis for this position, but we
                // can reconstruct what the last move was by just replaying
                // from the start.
@@ -1570,7 +1589,7 @@ var next_game = function() {
                var game = current_games[game_num];
                if (game['url'] === backend_url) {
                        var next_game_num = (game_num + 1) % current_games.length;
                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;
                }
        }
                        return;
                }
        }
@@ -2099,9 +2118,9 @@ var compute_score_sort_key = function(score, depth, invert, depth_secondary_key)
 }
 
 /**
 }
 
 /**
- * @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;
        // Stop looking at historic data.
        current_display_line = null;
        current_display_move = null;
@@ -2130,8 +2149,9 @@ var switch_backend = function(new_backend_url, new_backend_hash_url) {
        }
 
        // Request an immediate fetch with the new backend.
        }
 
        // 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();
        current_analysis_data = null;
        ims = 0;
        request_update();
@@ -2180,7 +2200,7 @@ var init = function() {
                } else if (event.which >= 49 && event.which <= 57) {  // 1-9.
                        var num = event.which - 49;
                        if (current_games && current_games.length >= num) {
                } 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();
                        }
                } else if (event.which == 78) {  // N.
                        next_game();