// https://developer.mozilla.org/fr/docs/Web/API/API_IndexedDB
// https://dexie.org/
-function setStorage(myid, oppid, gameId, variant, mycolor, fenStart)
-{
- localStorage.setItem("myid", myid);
- localStorage.setItem("oppid", oppid);
- localStorage.setItem("gameId", gameId);
- localStorage.setItem("variant", variant);
- localStorage.setItem("mycolor", mycolor);
- localStorage.setItem("fenStart", fenStart);
- localStorage.setItem("moves", []);
-}
+import { extractTime } from "@/utils/timeControl";
+import { shuffle } from "@/utils/alea";
-function updateStorage(move)
+export const GameStorage =
{
- let moves = JSON.parse(localStorage.getItem("moves"));
- moves.push(move);
- localStorage.setItem("moves", JSON.stringify(moves));
-}
+ init: function(o)
+ {
+ localStorage.setItem("gameId", o.gameId);
+ localStorage.setItem("vname", o.vname);
+ localStorage.setItem("mycolor", mycolor); //TODO: shuffle ["w","b"]
+ localStorage.setItem("fenStart", o.fenStart);
+ localStorage.setItem("fen", o.fenStart);
+ localStorage.setItem("moves", JSON.stringify([]));
+ // Shuffle players order (white then black then other colors).
+ localStorage.setItem("players", JSON.stringify(shuffle(players));
+ // Extract times (in [milli]seconds), set clocks, store in localStorage
+ const tc = extractTime(o.timeControl);
+ localStorage.setItem("timeControl", o.timeControl);
+ localStorage.setItem("clocks", JSON.stringify(
+ [...Array(o.players.length)].fill(tc.mainTime));
+ localStorage.setItem("increment", tc.increment;
+ localStorage.setItem("started", JSON.stringify(
+ [...Array(o.players.length)].fill(false));
+ localStorage.setItem("score", "*");
+ localStorage.setItem("started", JSON.stringify(
+ [...Array(o.players.length)].fill(false)));
+ localStorage.setItem("clocks", JSON.stringify(
+ [...Array(o.players.length)].fill(0)));
+ localStorage.SetItem("mode", "live"); //function for live games only
+ },
-// "computer mode" clearing is done through the menu
-function clearStorage()
-{
- delete localStorage["myid"];
- delete localStorage["oppid"];
- delete localStorage["gameId"];
- delete localStorage["variant"];
- delete localStorage["mycolor"];
- delete localStorage["fenStart"];
- delete localStorage["moves"];
-}
+ // TODO: also option to takeback a move ?
+ update: function(move) //TODO: take game ID also, and update according to mode?
+ {
+ let moves = JSON.parse(localStorage.getItem("moves"));
+ moves.push(move);
+ localStorage.setItem("moves", JSON.stringify(moves));
+ },
-function getGameFromStorage(gameId)
-{
- const gid = this.gameRef.id;
- const rid = this.gameRef.rid; //may be blank
- let game = {};
- if (localStorage.getItem("gameId") === gameId)
- {
- // Retrieve running game from localStorage
- game.score = localStorage.getItem("score");
- game.oppid = localStorage.getItem("oppid");
- game.oppname = localStorage.getItem("oppname");
- game.mycolor = localStorage.getItem("mycolor");
- game.fenStart = localStorage.getItem("fenStart");
- game.moves = localStorage.getItem("moves");
- }
- else
- {
- // Find the game in indexedDB: TODO
- }
-}
+ // "computer mode" clearing is done through the menu
+ clear: function()
+ {
+ // TODO: refresh, and implement "transfert" function (to indexedDB)
+ delete localStorage["myid"];
+ delete localStorage["oppid"];
+ delete localStorage["gameId"];
+ delete localStorage["variant"];
+ delete localStorage["mycolor"];
+ delete localStorage["fenStart"];
+ delete localStorage["moves"];
+ },
+
+ // TODO: game or gameInfo ?! --> when moves are played, it's a game, otherwise info
+ get: function(gameRef)
+ {
+ const gid = gameRef.id;
+ const rid = gameRef.rid; //may be blank
+ let game = {};
+ if (localStorage.getItem("gameId") === gid)
+ {
+ // Retrieve running game from localStorage
+ game.score = localStorage.getItem("score");
+ game.mycolor = localStorage.getItem("mycolor");
+ game.fenStart = localStorage.getItem("fenStart");
+ game.fen = localStorage.getItem("fen");
+ game.moves = JSON.parse(localStorage.getItem("moves"));
+ game.players = JSON.parse(localStorage.getItem("players"));
+ game.started = JSON.parse(localStorage.getItem("started"));
+ game.clocks = JSON.parse(localStorage.getItem("clocks"));
+ game.timeControl = localStorage.getItem("timeControl");
+ game.increment = localStorage.getItem("increment");
+ game.vname = localStorage.getItem("vname");
+ game.mode = "live";
+ }
+ else
+ {
+ // Find the game in indexedDB, on server or remotely: TODO
+ }
+ return game;
+ },
+};