Fix games ordering in MyGames, fix en-passant mistake in Rifle variant
[vchess.git] / client / src / views / Hall.vue
index 4cb46ec..92030e7 100644 (file)
@@ -256,7 +256,15 @@ export default {
             response.games.map(g => {
               const type = this.classifyObject(g);
               const vname = this.getVname(g.vid);
-              return Object.assign({}, g, { type: type, vname: vname });
+              return Object.assign(
+                {},
+                g,
+                {
+                  type: type,
+                  vname: vname,
+                  priority: g.score == "*" ? 1 : 0 //for display
+                }
+              );
             })
           );
         }
@@ -324,6 +332,8 @@ export default {
       params.socketUrl +
       "/?sid=" +
       this.st.user.sid +
+      "&id=" +
+      this.st.user.id +
       "&tmpId=" +
       getRandString() +
       "&page=" +
@@ -685,16 +695,18 @@ export default {
           const game = data.data;
           // Ignore games where I play (will go in MyGames page)
           if (game.players.every(p =>
-            p.sid != this.st.user.sid || p.id != this.st.user.id))
+            p.sid != this.st.user.sid || p.uid != this.st.user.id))
           {
             let locGame = this.games.find(g => g.id == game.id);
             if (!locGame) {
               let newGame = game;
               newGame.type = this.classifyObject(game);
               newGame.vname = this.getVname(game.vid);
+              newGame.priority = 0;
               if (!game.score)
-                //if new game from Hall
+                // New game from Hall
                 newGame.score = "*";
+              if (newGame.score == "*") newGame.priority++;
               newGame.rids = [game.rid];
               delete newGame["rid"];
               this.games.push(newGame);
@@ -715,7 +727,10 @@ export default {
         }
         case "result": {
           let g = this.games.find(g => g.id == data.gid);
-          if (!!g) g.score = data.score;
+          if (!!g) {
+            g.score = data.score;
+            g.priority = 0;
+          }
           break;
         }
         case "startgame": {
@@ -905,6 +920,7 @@ export default {
       }
       this.send("deletechallenge", { data: c.id });
     },
+    // TODO: if several players click same challenge at the same time: problem
     clickChallenge: async function(c) {
       const myChallenge =
         c.from.sid == this.st.user.sid || //live
@@ -948,6 +964,16 @@ export default {
     },
     // NOTE: when launching game, the challenge is already being deleted
     launchGame: function(c) {
+      let players =
+        !!c.mycolor
+          ? (c.mycolor == "w" ? [c.seat, c.from] : [c.from, c.seat])
+          : shuffle([c.from, c.seat]);
+      // Convention for players IDs in stored games is 'uid'
+      players.forEach(p => {
+        let pWithUid = p;
+        pWithUid["uid"] = p.id;
+        delete pWithUid["id"];
+      });
       // These game informations will be shared
       let gameInfo = {
         id: getRandString(),
@@ -967,6 +993,16 @@ export default {
         // Send game info (only if live) to everyone except me and opponent
         // TODO: this double message send could be avoided.
         this.send("newgame", { data: gameInfo, oppsid: oppsid });
+        // Also to MyGames page:
+        this.send(
+          "notifynewgame",
+          {
+            data: gameInfo,
+            targets: gameInfo.players.map(p => {
+              return { sid: p.sid, uid: p.uid };
+            })
+          }
+        );
       };
       if (c.type == "live") {
         notifyNewgame();