Add Makruk, Shako and Shogi + a few fixes
[vchess.git] / client / src / views / Hall.vue
index 04ac6b8..133a5f9 100644 (file)
@@ -186,13 +186,13 @@ main
         GameList(
           v-show="gdisplay=='live'"
           :games="filterGames('live')"
-          :showBoth="true"
+          :show-both="true"
           @show-game="showGame"
         )
         div(v-show="gdisplay=='corr'")
           GameList(
             :games="filterGames('corr')"
-            :showBoth="true"
+            :show-both="true"
             @show-game="showGame"
           )
           button#loadMoreBtn(
@@ -241,7 +241,9 @@ export default {
         vid: parseInt(localStorage.getItem("vid")) || 0,
         to: "", //name of challenged player (if any)
         cadence: localStorage.getItem("cadence") || "",
-        randomness: parseInt(localStorage.getItem("challRandomness")) || 2,
+        randomness:
+          // Warning: randomness can be 0, then !!randomness is false
+          (parseInt(localStorage.getItem("challRandomness"))+1 || 3) - 1,
         // VariantRules object, stored to not interfere with
         // diagrams of targetted challenges:
         V: null,
@@ -681,12 +683,19 @@ export default {
             this.$delete(this.people, data.from[0]);
           else this.$forceUpdate(); //TODO: shouldn't be required
           if (data.code == "disconnect") {
-            // Remove the live challenges sent by this player:
-            ArrayFun.remove(
-              this.challenges,
-              c => c.type == "live" && c.from.sid == data.from[0],
-              "all"
-            );
+            // Remove the live challenges sent by this player, if
+            // he isn't connected on another tab:
+            if (
+              !this.people[data.from[0]] ||
+              Object.values(this.people[data.from[0]].tmpIds)
+                .every(v => v.page != "/")
+            ) {
+              ArrayFun.remove(
+                this.challenges,
+                c => c.type == "live" && c.from.sid == data.from[0],
+                "all"
+              );
+            }
           } else {
             // Remove the matching live game if now unreachable
             const gid = data.page.match(/[a-zA-Z0-9]+$/)[0];
@@ -813,9 +822,12 @@ export default {
           // Ignore games where I play (will go in MyGames page),
           // and also games that I already received.
           if (
-            game.players.every(p =>
-              p.sid != this.st.user.sid && p.id != this.st.user.id) &&
-            this.games.findIndex(g => g.id == game.id) == -1
+            game.players.every(p => {
+              return (
+                p.sid != this.st.user.sid &&
+                (p.id == 0 || p.id != this.st.user.id)
+              );
+            }) && this.games.findIndex(g => g.id == game.id) == -1
           ) {
             let newGame = game;
             newGame.type = this.classifyObject(game);
@@ -1007,7 +1019,11 @@ export default {
       let chall = Object.assign({}, this.newchallenge);
       // Add only if not already issued (not counting target or FEN):
       if (this.challenges.some(c =>
-        (c.from.sid == this.st.user.sid || c.from.id == this.st.user.id) &&
+        (
+          c.from.sid == this.st.user.sid ||
+          (c.from.id > 0 && c.from.id == this.st.user.id)
+        )
+        &&
         c.vid == chall.vid &&
         c.cadence == chall.cadence &&
         c.randomness == chall.randomness
@@ -1029,7 +1045,10 @@ export default {
           const c = this.challenges[i];
           if (
             c.type == ctype &&
-            (c.from.sid == this.st.user.sid || c.from.id == this.st.user.id)
+            (
+              c.from.sid == this.st.user.sid ||
+              (c.from.id > 0 && c.from.id == this.st.user.id)
+            )
           ) {
             countMyChalls++;
             if (c.added < oldestAdded) {