X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Fviews%2FMyGames.vue;h=4b5e33c2e440056167ce8ca7d5a0c8bec58c713b;hb=aae89b49a846b2c101d74db7dff9151392d6db34;hp=d1f3e38aa4ec8dcf1f1779e1e7142e6a556414d4;hpb=feaf1bf73fa8c6054e353585dee0b8a4fdcfbc4e;p=vchess.git diff --git a/client/src/views/MyGames.vue b/client/src/views/MyGames.vue index d1f3e38a..4b5e33c2 100644 --- a/client/src/views/MyGames.vue +++ b/client/src/views/MyGames.vue @@ -16,6 +16,7 @@ main v-show="display=='corr'" :games="corrGames" @show-game="showGame" + @abort="abortGame" ) @@ -23,6 +24,7 @@ main import { store } from "@/store"; import { GameStorage } from "@/utils/gameStorage"; import { ajax } from "@/utils/ajax"; +import { getScoreMessage } from "@/utils/scoring"; import params from "@/parameters"; import { getRandString } from "@/utils/alea"; import GameList from "@/components/GameList.vue"; @@ -43,13 +45,24 @@ export default { }, created: function() { GameStorage.getAll(true, localGames => { - localGames.forEach(g => (g.type = this.classifyObject(g))); + localGames.forEach(g => g.type = "live"); this.liveGames = localGames; }); if (this.st.user.id > 0) { - ajax("/games", "GET", { uid: this.st.user.id }, res => { - res.games.forEach(g => (g.type = this.classifyObject(g))); - this.corrGames = res.games; + ajax( + "/games", + "GET", + { uid: this.st.user.id }, + res => { + let serverGames = res.games.filter(g => { + const mySide = + g.players[0].uid == this.st.user.id + ? "White" + : "Black"; + return !g["deletedBy" + mySide]; + }); + serverGames.forEach(g => g.type = "corr"); + this.corrGames = serverGames; }); } // Initialize connection @@ -90,6 +103,7 @@ export default { showGame: function(game) { // TODO: "isMyTurn" is duplicated (see GameList component). myColor also const isMyTurn = (g) => { + if (g.score != "*") return false; const myColor = g.players[0].uid == this.st.user.id || g.players[0].sid == this.st.user.sid @@ -101,8 +115,10 @@ export default { (rem == 1 && myColor == "b") ); }; - if (game.type == "live" || !isMyTurn(game)) + if (game.type == "live" || !isMyTurn(game)) { this.$router.push("/game/" + game.id); + return; + } // It's my turn in this game. Are there others? let nextIds = ""; let otherCorrGamesMyTurn = this.corrGames.filter( @@ -115,6 +131,40 @@ export default { } this.$router.push("/game/" + game.id + nextIds); }, + abortGame: function(game) { + // Special "trans-pages" case: from MyGames to Game + // TODO: also for corr games? (It's less important) + if (game.type == "live") { + const oppsid = + game.players[0].sid == this.st.user.sid + ? game.players[1].sid + : game.players[0].sid; + this.conn.send( + JSON.stringify( + { + code: "mabort", + gid: game.id, + // NOTE: target might not be online + target: oppsid + } + ) + ); + } + else if (!game.deletedByWhite || !game.deletedByBlack) { + // Set score if game isn't deleted on server: + ajax( + "/games", + "PUT", + { + gid: game.id, + newObj: { + score: "?", + scoreMsg: getScoreMessage("?") + } + } + ); + } + }, socketMessageListener: function(msg) { const data = JSON.parse(msg.data); if (data.code == "changeturn") {