Some fixes + first draft of Chakart (just thoughts for now)
[vchess.git] / client / src / views / Hall.vue
index 04ac6b8..01f588f 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,13 @@ 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
+            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)
+              );
+            })
           ) {
             let newGame = game;
             newGame.type = this.classifyObject(game);
@@ -825,6 +838,7 @@ export default {
               newGame.score = "*";
             this.games.push(newGame);
             if (
+              newGame.score == '*' &&
               (newGame.type == "live" && this.gdisplay == "corr") ||
               (newGame.type == "corr" && this.gdisplay == "live")
             ) {
@@ -876,7 +890,8 @@ export default {
               if (
                 this.cursor == Number.MAX_SAFE_INTEGER &&
                 this.games.length == 0 &&
-                this.gdisplay == "live"
+                this.gdisplay == "live" &&
+                res.games.some(g => g.score == '*')
               ) {
                 // First loading: show indicators
                 document
@@ -1007,7 +1022,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 +1048,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) {