aboutsummaryrefslogtreecommitdiff
path: root/diplomacy/web/src/gui/utils/dipStorage.jsx
diff options
context:
space:
mode:
authornotoraptor <notoraptor@users.noreply.github.com>2019-07-17 15:16:43 -0400
committerPhilip Paquette <pcpaquette@gmail.com>2019-07-17 15:16:43 -0400
commit2701df1e3b03c7c605ccf212a02987d53fbd0609 (patch)
treed3637573d8585e32914c33cbd03ec0baf9c68ae3 /diplomacy/web/src/gui/utils/dipStorage.jsx
parente9872eea32d4f66b9c7ca8c14d530c18f6c18506 (diff)
[web] Make button "Delete all" remove only orders from current se… (#49)
- Make button "Delete all" remove only orders from current selected power. - Reorganize code - [web] Remove bugged and useless function gameReloaded() from game page. - This function caused error `engine.getPhaseType is not a function` for games with deadlines. - Move function saveGameToDisk into its own file. - [web] Add documentation to methods involved in orders management to help understand what happens. - Move methods getServerOrders() from game GUI component to game engine object. - Rename method onSetNoOrders to onSetEmptyOrdersSet. - Rename property in PowerActionsForm: onNoOrders => onPass. - [web] Update sending orders to send request clearOrders when local orders list is null. - Renamed local file: - components/power_order => power_orders - forms/power_actions_form => power_order_creation_form - Move power orders buttons bar to a separate file: - components/power_orders_actions_bar - [web] Improve messages about local/server defined orders.
Diffstat (limited to 'diplomacy/web/src/gui/utils/dipStorage.jsx')
-rw-r--r--diplomacy/web/src/gui/utils/dipStorage.jsx140
1 files changed, 140 insertions, 0 deletions
diff --git a/diplomacy/web/src/gui/utils/dipStorage.jsx b/diplomacy/web/src/gui/utils/dipStorage.jsx
new file mode 100644
index 0000000..db5baad
--- /dev/null
+++ b/diplomacy/web/src/gui/utils/dipStorage.jsx
@@ -0,0 +1,140 @@
+// ==============================================================================
+// Copyright (C) 2019 - Philip Paquette, Steven Bocco
+//
+// This program is free software: you can redistribute it and/or modify it under
+// the terms of the GNU Affero General Public License as published by the Free
+// Software Foundation, either version 3 of the License, or (at your option) any
+// later version.
+//
+// This program is distributed in the hope that it will be useful, but WITHOUT
+// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+// FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
+// details.
+//
+// You should have received a copy of the GNU Affero General Public License along
+// with this program. If not, see <https://www.gnu.org/licenses/>.
+// ==============================================================================
+/* DipStorage scheme:
+global
+- connection
+ - username
+ - hostname
+ - port
+ - showServerFields
+users
+- (username)
+ - games
+ - (game_id)
+ - phase: string
+ - local_orders: {power_name => [orders]}
+*/
+
+let STORAGE = null;
+
+export class DipStorage {
+ static load() {
+ if (!STORAGE) {
+ const global = window.localStorage.global;
+ const users = window.localStorage.users;
+ STORAGE = {
+ global: (global && JSON.parse(global)) || {
+ connection: {
+ username: null,
+ hostname: null,
+ port: null,
+ showServerFields: null
+ }
+ },
+ users: (users && JSON.parse(users)) || {}
+ };
+ }
+ }
+
+ static save() {
+ if (STORAGE) {
+ window.localStorage.global = JSON.stringify(STORAGE.global);
+ window.localStorage.users = JSON.stringify(STORAGE.users);
+ }
+ }
+
+ static getConnectionForm() {
+ DipStorage.load();
+ return Object.assign({}, STORAGE.global.connection);
+ }
+
+ static getUserGames(username) {
+ DipStorage.load();
+ if (STORAGE.users[username])
+ return Object.keys(STORAGE.users[username].games);
+ return null;
+ }
+
+ static getUserGameOrders(username, gameID, gamePhase) {
+ DipStorage.load();
+ if (STORAGE.users[username] && STORAGE.users[username].games[gameID]
+ && STORAGE.users[username].games[gameID].phase === gamePhase)
+ return Object.assign({}, STORAGE.users[username].games[gameID].local_orders);
+ return null;
+ }
+
+ static setConnectionUsername(username) {
+ DipStorage.load();
+ STORAGE.global.connection.username = username;
+ DipStorage.save();
+ }
+
+ static setConnectionHostname(hostname) {
+ DipStorage.load();
+ STORAGE.global.connection.hostname = hostname;
+ DipStorage.save();
+ }
+
+ static setConnectionPort(port) {
+ DipStorage.load();
+ STORAGE.global.connection.port = port;
+ DipStorage.save();
+ }
+
+ static setConnectionshowServerFields(showServerFields) {
+ DipStorage.load();
+ STORAGE.global.connection.showServerFields = showServerFields;
+ DipStorage.save();
+ }
+
+ static addUserGame(username, gameID) {
+ DipStorage.load();
+ if (!STORAGE.users[username])
+ STORAGE.users[username] = {games: {}};
+ if (!STORAGE.users[username].games[gameID])
+ STORAGE.users[username].games[gameID] = {phase: null, local_orders: {}};
+ DipStorage.save();
+ }
+
+ static addUserGameOrders(username, gameID, gamePhase, powerName, orders) {
+ DipStorage.addUserGame(username, gameID);
+ if (STORAGE.users[username].games[gameID].phase !== gamePhase)
+ STORAGE.users[username].games[gameID] = {phase: null, local_orders: {}};
+ STORAGE.users[username].games[gameID].phase = gamePhase;
+ STORAGE.users[username].games[gameID].local_orders[powerName] = orders;
+ DipStorage.save();
+ }
+
+ static removeUserGame(username, gameID) {
+ DipStorage.load();
+ if (STORAGE.users[username] && STORAGE.users[username].games[gameID]) {
+ delete STORAGE.users[username].games[gameID];
+ DipStorage.save();
+ }
+ }
+
+ static clearUserGameOrders(username, gameID, powerName) {
+ DipStorage.addUserGame(username, gameID);
+ if (powerName) {
+ if (STORAGE.users[username].games[gameID].local_orders[powerName])
+ delete STORAGE.users[username].games[gameID].local_orders[powerName];
+ } else {
+ STORAGE.users[username].games[gameID] = {phase: null, local_orders: {}};
+ }
+ DipStorage.save();
+ }
+}