'update'
authorBenjamin Auder <benjamin.auder@somewhere>
Tue, 14 May 2019 16:09:37 +0000 (18:09 +0200)
committerBenjamin Auder <benjamin.auder@somewhere>
Tue, 14 May 2019 16:09:37 +0000 (18:09 +0200)
client/src/utils/storage.js
client/src/views/Game.vue

index 1103a42..937d8c7 100644 (file)
@@ -2,53 +2,63 @@
 // https://developer.mozilla.org/fr/docs/Web/API/API_IndexedDB
 // https://dexie.org/
 
 // https://developer.mozilla.org/fr/docs/Web/API/API_IndexedDB
 // https://dexie.org/
 
-function setStorage(myid, oppid, gameId, variant, mycolor, fenStart)
+export const GameStorage =
 {
 {
-       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", []);
-}
+  init: function(myid, oppid, gameId, variant, mycolor, fenStart)
+  {
+    localStorage.setItem("myid", myid);
+    localStorage.setItem("gameId", gameId);
+    localStorage.setItem("vname", variant);
+    localStorage.setItem("mycolor", mycolor);
+    localStorage.setItem("fenStart", fenStart);
+    localStorage.setItem("moves", []);
+  },
 
 
-function updateStorage(move)
-{
-       let moves = JSON.parse(localStorage.getItem("moves"));
-       moves.push(move);
-       localStorage.setItem("moves", JSON.stringify(moves));
-}
+  // TODO: also option to takeback a move ?
+  update: function(move)
+  {
+    let moves = JSON.parse(localStorage.getItem("moves"));
+    moves.push(move);
+    localStorage.setItem("moves", JSON.stringify(moves));
+  },
 
 
-// "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"];
-}
+  // "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"];
+  },
 
 
-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
-       }
-}
+  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.mode = "live";
+    }
+    else
+    {
+      // Find the game in indexedDB, on server or remotely: TODO
+    }
+    return game;
+  },
+};
index 2394cc6..1c25688 100644 (file)
@@ -16,7 +16,7 @@ pareil quand quelqu'un reco.
 <template lang="pug">
 .row
   .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2
 <template lang="pug">
 .row
   .col-sm-12.col-md-10.col-md-offset-1.col-lg-8.col-lg-offset-2
-    BaseGame(:vname="variant.name" :analyze="analyze"
+    BaseGame(:game="game" :analyze="analyze"
       :vr="vr" :fen-start="fenStart" :players="players" :mycolor="mycolor"
       ref="basegame" @newmove="processMove")
     .button-group(v-if="mode!='analyze'")
       :vr="vr" :fen-start="fenStart" :players="players" :mycolor="mycolor"
       ref="basegame" @newmove="processMove")
     .button-group(v-if="mode!='analyze'")
@@ -33,6 +33,7 @@ import BaseGame from "@/components/BaseGame.vue";
 //import Chat from "@/components/Chat.vue";
 //import MoveList from "@/components/MoveList.vue";
 import { store } from "@/store";
 //import Chat from "@/components/Chat.vue";
 //import MoveList from "@/components/MoveList.vue";
 import { store } from "@/store";
+import { GameStorage } from "@/utils/storage";
 
 export default {
   name: 'my-game',
 
 export default {
   name: 'my-game',
@@ -44,18 +45,10 @@ export default {
   data: function() {
     return {
       st: store.state,
   data: function() {
     return {
       st: store.state,
-      // variables passed to BaseGame:
-      fenStart: "",
-      vr: null,
-      players: ["Myself","Computer"], //always playing white for now
-      mycolor: "w",
-      ////////////
-      gameRef: {id: "", rid: ""}, //given in URL (rid = remote ID, if applicable)
-      mode: "live", //or "corr"
-      vname: "", //filled when game is retrieved
-      drawOfferSent: false, //did I just ask for draw?
-      players: [], //filled later (2 to 4 players)
-      people: [], //potential observers
+      gameRef: {id: "", rid: ""}, //given in URL (rid = remote ID)
+      game: null, //passed to BaseGame
+      drawOfferSent: false, //did I just ask for draw? (TODO: draw variables?)
+      people: [], //potential observers (TODO)
     };
   },
   computed: {
     };
   },
   computed: {
@@ -242,13 +235,10 @@ export default {
     //  - from server (one correspondance game I play[ed] or not)
     //  - from remote peer (one live game I don't play, finished or not)
     loadGame: async function() {
     //  - from server (one correspondance game I play[ed] or not)
     //  - from remote peer (one live game I don't play, finished or not)
     loadGame: async function() {
-      const game = getGameFromStorage(this.gameRef);
-      this.players = game.players;
-      this.score = game.score;
-      this.mycolor = game.mycolor; //may be irrelevant (if I don't play it)
-      this.fenStart = game.fenStart;
-      this.moves = game.moves;
+      const game = GameStorage.get(this.gameRef);
+      this.game = game;
       this.cursor = game.moves.length-1;
       this.cursor = game.moves.length-1;
+      // TODO: lastMove must be in BaseGame, not here
       this.lastMove = (game.moves.length > 0 ? game.moves[this.cursor] : null);
       const vModule = await import("@/variants/" + game.vname + ".js");
       window.V = vModule.VariantRules;
       this.lastMove = (game.moves.length > 0 ? game.moves[this.cursor] : null);
       const vModule = await import("@/variants/" + game.vname + ".js");
       window.V = vModule.VariantRules;