Index: binaries/data/mods/mod/gui/common/terms.js =================================================================== --- binaries/data/mods/mod/gui/common/terms.js +++ binaries/data/mods/mod/gui/common/terms.js @@ -21,10 +21,7 @@ function acceptTerms(data) { g_Terms[data.page].accepted = data.accepted; - - let value = data.accepted ? getTermsHash(data.page) : "0"; - Engine.ConfigDB_CreateValue("user", g_Terms[data.page].config, value); - Engine.ConfigDB_WriteValueToFile("user", g_Terms[data.page].config, value, "config/user.cfg"); + Engine.ConfigDB_CreateAndWriteValueToFile("user", g_Terms[data.page].config, data.accepted ? getTermsHash(data.page) : "0"); if (g_Terms[data.page].callback) g_Terms[data.page].callback(data); Index: binaries/data/mods/public/gui/common/functions_utility.js =================================================================== --- binaries/data/mods/public/gui/common/functions_utility.js +++ binaries/data/mods/public/gui/common/functions_utility.js @@ -9,15 +9,6 @@ }; /** - * Save setting for current instance and write setting to the user config file. - */ -function saveSettingAndWriteToUserConfig(setting, value) -{ - Engine.ConfigDB_CreateValue("user", setting, value); - Engine.ConfigDB_WriteValueToFile("user", setting, value, "config/user.cfg"); -} - -/** * Returns translated history and gameplay data of all civs, optionally including a mock gaia civ. */ function loadCivData(selectableOnly, gaia) Index: binaries/data/mods/public/gui/gamesetup/gamesetup.js =================================================================== --- binaries/data/mods/public/gui/gamesetup/gamesetup.js +++ binaries/data/mods/public/gui/gamesetup/gamesetup.js @@ -1141,7 +1141,7 @@ // Replace empty playername when entering a singleplayermatch for the first time if (!g_IsNetworked) - saveSettingAndWriteToUserConfig("playername.singleplayer", singleplayerName()); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "playername.singleplayer", singleplayerName()); initDefaults(); supplementDefaults(); Index: binaries/data/mods/public/gui/gamesetup/gamesetup.xml =================================================================== --- binaries/data/mods/public/gui/gamesetup/gamesetup.xml +++ binaries/data/mods/public/gui/gamesetup/gamesetup.xml @@ -125,7 +125,7 @@ Show this message in the future. - saveSettingAndWriteToUserConfig("gui.gamesetup.enabletips", String(this.checked)); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "gui.gamesetup.enabletips", String(this.checked)); Index: binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js =================================================================== --- binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js +++ binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.js @@ -284,9 +284,9 @@ { startConnectionStatus("server"); - saveSettingAndWriteToUserConfig("playername.multiplayer", playername); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "playername.multiplayer", playername); - saveSettingAndWriteToUserConfig("multiplayerhosting.port", port); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "multiplayerhosting.port", port); let hostFeedback = Engine.GetGUIObjectByName("hostFeedback"); @@ -361,9 +361,9 @@ else { // Only save the player name and host address if they're valid and we're not in the lobby - saveSettingAndWriteToUserConfig("playername.multiplayer", playername); - saveSettingAndWriteToUserConfig("multiplayerserver", ip); - saveSettingAndWriteToUserConfig("multiplayerjoining.port", port); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "playername.multiplayer", playername); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "multiplayerserver", ip); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "multiplayerjoining.port", port); } return true; } Index: binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.xml =================================================================== --- binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.xml +++ binaries/data/mods/public/gui/gamesetup_mp/gamesetup_mp.xml @@ -108,7 +108,7 @@ - saveSettingAndWriteToUserConfig("lobby.stun.enabled", String(this.checked)); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "lobby.stun.enabled", String(this.checked)); Use STUN to work around firewalls Index: binaries/data/mods/public/gui/lobby/lobby.js =================================================================== --- binaries/data/mods/public/gui/lobby/lobby.js +++ binaries/data/mods/public/gui/lobby/lobby.js @@ -784,7 +784,7 @@ updateToggleBuddy(); - saveSettingAndWriteToUserConfig("lobby.buddies", g_Buddies.filter(nick => nick).join(g_BuddyListDelimiter) || g_BuddyListDelimiter); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "lobby.buddies", g_Buddies.filter(nick => nick).join(g_BuddyListDelimiter) || g_BuddyListDelimiter); updatePlayerList(); updateGameList(); Index: binaries/data/mods/public/gui/prelobby/common/credentials/credentials.js =================================================================== --- binaries/data/mods/public/gui/prelobby/common/credentials/credentials.js +++ binaries/data/mods/public/gui/prelobby/common/credentials/credentials.js @@ -56,10 +56,10 @@ [translate("No"), translate("Yes")], [ () => { checkbox.checked = true; }, - () => { saveSettingAndWriteToUserConfig("lobby.rememberpassword", String(!enabled)); } + () => { Engine.ConfigDB_CreateAndWriteValueToFile("user", "lobby.rememberpassword", String(!enabled)); } ]); else - saveSettingAndWriteToUserConfig("lobby.rememberpassword", String(!enabled)); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "lobby.rememberpassword", String(!enabled)); } function getEncryptedPassword() @@ -78,11 +78,11 @@ function saveCredentials() { let username = Engine.GetGUIObjectByName("username").caption; - saveSettingAndWriteToUserConfig("playername.multiplayer", username); - saveSettingAndWriteToUserConfig("lobby.login", username); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "playername.multiplayer", username); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "lobby.login", username); if (Engine.ConfigDB_GetValue("user", "lobby.rememberpassword") == "true") - saveSettingAndWriteToUserConfig("lobby.password", getEncryptedPassword()); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "lobby.password", getEncryptedPassword()); else { Engine.ConfigDB_RemoveValue("user", "lobby.password"); Index: binaries/data/mods/public/gui/session/menu.js =================================================================== --- binaries/data/mods/public/gui/session/menu.js +++ binaries/data/mods/public/gui/session/menu.js @@ -363,7 +363,7 @@ function onToggleChatWindowExtended() { - saveSettingAndWriteToUserConfig("chat.session.extended", String(Engine.GetGUIObjectByName("extendedChat").checked)); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "chat.session.extended", String(Engine.GetGUIObjectByName("extendedChat").checked)); resizeChatWindow(); Index: binaries/data/mods/public/gui/session/session.js =================================================================== --- binaries/data/mods/public/gui/session/session.js +++ binaries/data/mods/public/gui/session/session.js @@ -1378,7 +1378,7 @@ function toggleConfigBool(configName) { let enabled = Engine.ConfigDB_GetValue("user", configName) != "true"; - saveSettingAndWriteToUserConfig(configName, String(enabled)); + Engine.ConfigDB_CreateAndWriteValueToFile("user", configName, String(enabled)); return enabled; } Index: binaries/data/mods/public/gui/session/top_panel/resource_population.xml =================================================================== --- binaries/data/mods/public/gui/session/top_panel/resource_population.xml +++ binaries/data/mods/public/gui/session/top_panel/resource_population.xml @@ -4,7 +4,7 @@ - saveSettingAndWriteToUserConfig("gui.session.respoptooltipsort", (+Engine.ConfigDB_GetValue("user", "gui.session.respoptooltipsort") + 2) % 3 - 1); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "gui.session.respoptooltipsort", String((+Engine.ConfigDB_GetValue("user", "gui.session.respoptooltipsort") + 2) % 3 - 1)); updatePlayerDisplay(); Index: binaries/data/mods/public/gui/session/top_panel/resources.xml =================================================================== --- binaries/data/mods/public/gui/session/top_panel/resources.xml +++ binaries/data/mods/public/gui/session/top_panel/resources.xml @@ -6,7 +6,7 @@ - saveSettingAndWriteToUserConfig("gui.session.respoptooltipsort", (+Engine.ConfigDB_GetValue("user", "gui.session.respoptooltipsort") + 2) % 3 - 1); + Engine.ConfigDB_CreateAndWriteValueToFile("user", "gui.session.respoptooltipsort", String((+Engine.ConfigDB_GetValue("user", "gui.session.respoptooltipsort") + 2) % 3 - 1)); updatePlayerDisplay(); Index: binaries/data/mods/public/gui/splashscreen/splashscreen.xml =================================================================== --- binaries/data/mods/public/gui/splashscreen/splashscreen.xml +++ binaries/data/mods/public/gui/splashscreen/splashscreen.xml @@ -28,8 +28,8 @@ OK Index: source/ps/scripting/JSInterface_ConfigDB.h =================================================================== --- source/ps/scripting/JSInterface_ConfigDB.h +++ source/ps/scripting/JSInterface_ConfigDB.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2018 Wildfire Games. +/* Copyright (C) 2019 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -34,6 +34,7 @@ bool RemoveValue(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString, const std::string& name); bool WriteFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString, const Path& path); bool WriteValueToFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString, const std::string& name, const std::string& value, const Path& path); + void CreateAndWriteValueToFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString, const std::string& name, const std::string& value); bool Reload(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString); bool SetFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString, const Path& path); void RegisterScriptFunctions(const ScriptInterface& scriptInterface); Index: source/ps/scripting/JSInterface_ConfigDB.cpp =================================================================== --- source/ps/scripting/JSInterface_ConfigDB.cpp +++ source/ps/scripting/JSInterface_ConfigDB.cpp @@ -1,4 +1,4 @@ -/* Copyright (C) 2018 Wildfire Games. +/* Copyright (C) 2019 Wildfire Games. * This file is part of 0 A.D. * * 0 A.D. is free software: you can redistribute it and/or modify @@ -140,6 +140,12 @@ return g_ConfigDB.WriteValueToFile(cfgNs, name, value, path); } +void JSI_ConfigDB::CreateAndWriteValueToFile(ScriptInterface::CxPrivate* pCxPrivate, const std::wstring& cfgNsString, const std::string& name, const std::string& value) +{ + CreateValue(pCxPrivate, cfgNsString, name, value); + WriteValueToFile(pCxPrivate, cfgNsString, name, value, L"config/" + cfgNsString + L".cfg"); +} + bool JSI_ConfigDB::Reload(ScriptInterface::CxPrivate* UNUSED(pCxPrivate), const std::wstring& cfgNsString) { EConfigNamespace cfgNs; @@ -168,6 +174,7 @@ scriptInterface.RegisterFunction("ConfigDB_RemoveValue"); scriptInterface.RegisterFunction("ConfigDB_WriteFile"); scriptInterface.RegisterFunction("ConfigDB_WriteValueToFile"); + scriptInterface.RegisterFunction("ConfigDB_CreateAndWriteValueToFile"); scriptInterface.RegisterFunction("ConfigDB_SetFile"); scriptInterface.RegisterFunction("ConfigDB_Reload"); }