X-Git-Url: https://git.auder.net/?a=blobdiff_plain;f=client%2Fsrc%2Futils%2FgameStorage.js;h=668a230694b465910eb046d9773d9af93fc1c9a6;hb=b7cbbda10f16c2419f9a4d49e219fcface5e5658;hp=031f62f563688eee48b57c6dc6d14109d4b53860;hpb=fd7aea36b8da702df87be3ed055f9a1f59c9f4da;p=vchess.git diff --git a/client/src/utils/gameStorage.js b/client/src/utils/gameStorage.js index 031f62f5..668a2306 100644 --- a/client/src/utils/gameStorage.js +++ b/client/src/utils/gameStorage.js @@ -1,6 +1,6 @@ // Game object: { // // Static informations: -// gameId: string +// id: string // vname: string, // fenStart: string, // players: array of sid+id+name, @@ -39,7 +39,7 @@ function dbOperation(callback) alert("Error while loading database: " + event.target.errorCode); }; // Create objectStore for vchess->games - let objectStore = db.createObjectStore("games", { keyPath: "gameId" }); + let objectStore = db.createObjectStore("games", { keyPath: "id" }); objectStore.createIndex("score", "score"); //to search by game result } } @@ -47,6 +47,7 @@ function dbOperation(callback) export const GameStorage = { // Optional callback to get error status + // TODO: this func called from Hall seems to not work now... add: function(game, callback) { dbOperation((db) => { @@ -66,25 +67,43 @@ export const GameStorage = }, // TODO: also option to takeback a move ? - // NOTE: for live games only (all on server for corr) - update: function(gameId, obj) //colorIdx, nextIdx, move, fen, addTime, score + update: function(gameId, obj) //move, fen, clocks, score, initime, ... { - dbOperation((db) => { - let objectStore = db.transaction("games", "readwrite").objectStore("games"); - objectStore.get(gameId).onsuccess = function(event) { - const game = event.target.result; - if (!!obj.move) + if (Number.isInteger(gameId) || !isNaN(parseInt(gameId))) + { + // corr: only move, fen and score + ajax( + "/games", + "PUT", { - game.moves.push(obj.move); - game.fen = obj.fen; - game.clocks[obj.colorIdx] += obj.addTime; - game.initime[obj.nextIdx] = Date.now(); + gid: gameId, + newObj: + { + move: obj.move, //may be undefined... + fen: obj.fen, + score: obj.score, + drawOffer: obj.drawOffer, + } } - if (!!obj.score) - game.score = obj.score; - objectStore.put(game); //save updated data - } - }); + ); + } + else + { + // live + dbOperation((db) => { + let objectStore = db.transaction("games", "readwrite").objectStore("games"); + objectStore.get(gameId).onsuccess = function(event) { + const game = event.target.result; + Object.keys(obj).forEach(k => { + if (k == "move") + game.moves.push(obj[k]); + else + game[k] = obj[k]; + }); + objectStore.put(game); //save updated data + } + }); + } }, // Retrieve all local games (running, completed, imported...) @@ -115,7 +134,11 @@ export const GameStorage = if (Number.isInteger(gameId) || !isNaN(parseInt(gameId))) { ajax("/games", "GET", {gid:gameId}, res => { - callback(res.game); + let game = res.game; + game.moves.forEach(m => { + m.squares = JSON.parse(m.squares); + }); + callback(game); }); } else //local game