From d641bec1b3b299e16b7da93f966dad0b0bd35088 Mon Sep 17 00:00:00 2001
From: Benjamin Auder <benjamin.auder@somewhere>
Date: Sun, 9 Feb 2020 14:27:09 +0100
Subject: [PATCH] Fixes

---
 client/src/main.js           |  4 +---
 client/src/store.js          | 13 +++++++------
 client/src/views/Analyze.vue |  1 +
 client/src/views/Game.vue    |  3 ++-
 client/src/views/Hall.vue    |  2 +-
 server/sockets.js            |  5 +++--
 6 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/client/src/main.js b/client/src/main.js
index 9d2e73d1..2d855b8a 100644
--- a/client/src/main.js
+++ b/client/src/main.js
@@ -22,9 +22,7 @@ new Vue({
         });
       }
     });
-    // TODO: why is this wrong? (Maybe because $route still uninitialized?)
-    //store.initialize(this.$route.path);
+    // NOTE: store.initialize(this.$route.path); doesn't work
     store.initialize(window.location.href.split("#")[1].split("?")[0]);
-    // NOTE: at this point, variants and tr(anslations) might be uninitialized
   },
 }).$mount("#app");
diff --git a/client/src/store.js b/client/src/store.js
index 798251f9..a1e432f3 100644
--- a/client/src/store.js
+++ b/client/src/store.js
@@ -38,6 +38,13 @@ export const store =
       this.state.user.email = res.email;
       this.state.user.notify = res.notify;
     });
+    const supportedLangs = ["en","es","fr"];
+    this.state.lang = localStorage["lang"] ||
+      (supportedLangs.includes(navigator.language)
+        ? navigator.language
+        : "en");
+    this.setTranslations();
+    // Initialize connection (even if the current page doesn't need it)
     this.state.conn = new WebSocket(params.socketUrl + "/?sid=" + mysid +
       "&page=" + encodeURIComponent(page));
     // Settings initialized with values from localStorage
@@ -53,12 +60,6 @@ export const store =
         "&page=" + encodeURIComponent(page));
     };
     this.state.conn.onclose = this.socketCloseListener;
-    const supportedLangs = ["en","es","fr"];
-    this.state.lang = localStorage["lang"] ||
-      (supportedLangs.includes(navigator.language)
-        ? navigator.language
-        : "en");
-    this.setTranslations();
   },
   updateSetting: function(propName, value) {
     this.state.settings[propName] = value;
diff --git a/client/src/views/Analyze.vue b/client/src/views/Analyze.vue
index 96ecdad9..59d2f3a8 100644
--- a/client/src/views/Analyze.vue
+++ b/client/src/views/Analyze.vue
@@ -70,6 +70,7 @@ export default {
       this.curFen = this.game.fen;
       this.adjustFenSize();
       this.vr = new V(this.game.fen);
+      this.game.mycolor = this.vr.turn;
       this.$set(this.game, "fenStart", this.gameRef.fen);
     },
     adjustFenSize: function() {
diff --git a/client/src/views/Game.vue b/client/src/views/Game.vue
index e3a9408b..8f571538 100644
--- a/client/src/views/Game.vue
+++ b/client/src/views/Game.vue
@@ -165,7 +165,8 @@ export default {
       switch (data.code)
       {
         case "duplicate":
-          this.st.conn.send(JSON.stringify({code:"duplicate"}));
+          this.st.conn.send(JSON.stringify({code:"duplicate",
+            page:"/game/" + this.game.id}));
           alert(this.st.tr["Warning: multi-tabs not supported"]);
           break;
         // 0.2] Receive clients list (just socket IDs)
diff --git a/client/src/views/Hall.vue b/client/src/views/Hall.vue
index 5fcbb31a..b3645684 100644
--- a/client/src/views/Hall.vue
+++ b/client/src/views/Hall.vue
@@ -307,7 +307,7 @@ export default {
       switch (data.code)
       {
         case "duplicate":
-          this.st.conn.send(JSON.stringify({code:"duplicate"}));
+          this.st.conn.send(JSON.stringify({code:"duplicate", page:"/"}));
           this.st.conn.send = () => {};
           alert(this.st.tr["Warning: multi-tabs not supported"]);
           break;
diff --git a/server/sockets.js b/server/sockets.js
index df44520d..45e003f8 100644
--- a/server/sockets.js
+++ b/server/sockets.js
@@ -39,10 +39,11 @@ module.exports = function(wss) {
           // Turn off message listening, and send disconnect if needed:
           socket.removeListener("message", messageListener);
           socket.removeListener("close", closeListener);
+          // From obj.page to clients[sid].page (TODO: unclear)
           if (clients[sid].page != obj.page)
           {
-            notifyRoom(clients[sid].page, "disconnect");
-            if (clients[sid].page.indexOf("/game/") >= 0)
+            notifyRoom(obj.page, "disconnect");
+            if (obj.page.indexOf("/game/") >= 0)
               notifyRoom("/", "gdisconnect");
           }
           break;
-- 
2.44.0