Fix clocks update
[vchess.git] / client / src / utils / gameStorage.js
index 77acf94..2ccb494 100644 (file)
@@ -16,6 +16,8 @@
 //   score: string (several options; '*' == running),
 // }
 
+import { ajax } from "@/utils/ajax";
+
 function dbOperation(callback)
 {
   let db = null;
@@ -45,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) => {
@@ -65,54 +68,63 @@ 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)
-        {
-          game.moves.push(obj.move);
-          game.fen = obj.fen;
-          game.clocks[obj.colorIdx] += obj.addTime;
-          game.initime[obj.nextIdx] = Date.now();
-        }
-        if (!!obj.score)
-          game.score = obj.score;
+        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 any live game from its identifiers (locally, running or not)
-  // NOTE: need callback because result is obtained asynchronously
-  get: function(gameId, callback)
+  // Retrieve all local games (running, completed, imported...)
+  getAll: function(callback)
   {
     dbOperation((db) => {
       let objectStore = db.transaction('games').objectStore('games');
-      if (!gameId) //retrieve all
-      {
-        let games = [];
-        objectStore.openCursor().onsuccess = function(event) {
-          let cursor = event.target.result;
-          // if there is still another cursor to go, keep running this code
-          if (cursor)
-          {
-            games.push(cursor.value);
-            cursor.continue();
-          }
-          else
-            callback(games);
+      let games = [];
+      objectStore.openCursor().onsuccess = function(event) {
+        let cursor = event.target.result;
+        // if there is still another cursor to go, keep running this code
+        if (cursor)
+        {
+          games.push(cursor.value);
+          cursor.continue();
         }
+        else
+          callback(games);
       }
-      else //just one game
-      {
+    });
+  },
+
+  // Retrieve any game from its identifiers (locally or on server)
+  // NOTE: need callback because result is obtained asynchronously
+  get: function(gameId, callback)
+  {
+    // corr games identifiers are integers
+    if (Number.isInteger(gameId) || !isNaN(parseInt(gameId)))
+    {
+      ajax("/games", "GET", {gid:gameId}, res => {
+        callback(res.game);
+      });
+    }
+    else //local game
+    {
+      dbOperation((db) => {
+        let objectStore = db.transaction('games').objectStore('games');
         objectStore.get(gameId).onsuccess = function(event) {
           callback(event.target.result);
         }
-      }
-    });
+      });
+    }
   },
 
   getCurrent: function(callback)