summaryrefslogtreecommitdiff
path: root/src/client.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/client.cpp')
-rw-r--r--src/client.cpp333
1 files changed, 24 insertions, 309 deletions
diff --git a/src/client.cpp b/src/client.cpp
index 1d3051372..081fe3996 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -26,6 +26,7 @@
#include "auctionmanager.h"
#include "chatlogger.h"
+#include "configmanager.h"
#include "configuration.h"
#include "dirs.h"
#include "dropshortcut.h"
@@ -160,10 +161,6 @@
#include "debug.h"
-#if defined __native_client__
-#define _nacl_dir std::string("/persistent/manaplus")
-#endif
-
#ifdef ANDROID
#ifdef USE_SDL2
int loadingProgressCounter = 1;
@@ -184,10 +181,6 @@ unsigned int mLastHost = 0;
unsigned long mSearchHash = 0;
int textures_count = 0;
-#ifdef WIN32
-extern "C" char const *_nl_locale_name_default(void);
-#endif
-
namespace
{
class AccountListener final : public ActionListener
@@ -285,8 +278,8 @@ void Client::gameInit()
#ifdef USE_FUZZER
Fuzzer::init();
#endif
- backupConfig();
- initConfiguration();
+ ConfigManager::backupConfig("config.xml");
+ ConfigManager::initConfiguration();
paths.setDefaultValues(getPathsDefaults());
initFeatures();
logger->log("init 4");
@@ -295,7 +288,7 @@ void Client::gameInit()
config.incValue("runcount");
#ifndef ANDROID
- storeSafeParameters();
+ ConfigManager::storeSafeParameters();
#endif
const ResourceManager *const resman = ResourceManager::getInstance();
@@ -354,7 +347,7 @@ void Client::gameInit()
#endif
setIcon();
- checkConfigVersion();
+ ConfigManager::checkConfigVersion();
logVars();
Cpu::detect();
#if defined(USE_OPENGL)
@@ -859,7 +852,25 @@ int Client::gameExec()
mOldState == STATE_CHOOSE_SERVER)
{
settings.serverName = mCurrentServer.hostname;
- initServerConfig(mCurrentServer.hostname);
+ ConfigManager::initServerConfig(mCurrentServer.hostname);
+ initPacketLimiter();
+ initTradeFilter();
+ Dirs::initUsersDir();
+ player_relations.init();
+
+ // Initialize the item and emote shortcuts.
+ for (unsigned f = 0; f < SHORTCUT_TABS; f ++)
+ {
+ delete itemShortcut[f];
+ itemShortcut[f] = new ItemShortcut(f);
+ }
+ delete emoteShortcut;
+ emoteShortcut = new EmoteShortcut;
+
+ // Initialize the drop shortcuts.
+ delete dropShortcut;
+ dropShortcut = new DropShortcut;
+
initFeatures();
PlayerInfo::loadData();
loginData.registerUrl = mCurrentServer.registerUrl;
@@ -1699,258 +1710,12 @@ void Client::action(const ActionEvent &event)
}
}
-/**
- * Initializes the home directory. On UNIX and FreeBSD, ~/.mana is used. On
- * Windows and other systems we use the current working directory.
- */
-void Client::initServerConfig(const std::string &serverName)
-{
- settings.serverConfigDir = settings.configDir + dirSeparator + serverName;
-
- if (mkdir_r(settings.serverConfigDir.c_str()))
- {
- // TRANSLATORS: directory creation error
- logger->error(strprintf(_("%s doesn't exist and can't be created! "
- "Exiting."), settings.serverConfigDir.c_str()));
- }
- const std::string configPath = settings.serverConfigDir + "/config.xml";
- FILE *configFile = fopen(configPath.c_str(), "r");
- if (!configFile)
- {
- configFile = fopen(configPath.c_str(), "wt");
- logger->log("Creating new server config: " + configPath);
- }
- if (configFile)
- {
- fclose(configFile);
- serverConfig.init(configPath);
- serverConfig.setDefaultValues(getConfigDefaults());
- logger->log("serverConfigPath: " + configPath);
- }
- initPacketLimiter();
- initTradeFilter();
- Dirs::initUsersDir();
- player_relations.init();
-
- // Initialize the item and emote shortcuts.
- for (unsigned f = 0; f < SHORTCUT_TABS; f ++)
- {
- delete itemShortcut[f];
- itemShortcut[f] = new ItemShortcut(f);
- }
- delete emoteShortcut;
- emoteShortcut = new EmoteShortcut;
-
- // Initialize the drop shortcuts.
- delete dropShortcut;
- dropShortcut = new DropShortcut;
-}
-
void Client::initFeatures()
{
features.init(paths.getStringValue("featuresFile"), true);
features.setDefaultValues(getFeaturesDefaults());
}
-void Client::initConfiguration() const
-{
-#ifdef DEBUG_CONFIG
- config.setIsMain(true);
-#endif
-
- // Fill configuration with defaults
- config.setValue("hwaccel", false);
-#ifdef USE_OPENGL
-#if (defined __APPLE__)
- config.setValue("opengl", static_cast<int>(RENDER_NORMAL_OPENGL));
-#elif (defined ANDROID)
- config.setValue("opengl", static_cast<int>(RENDER_GLES_OPENGL));
-#elif (defined WIN32)
- config.setValue("opengl", static_cast<int>(RENDER_SAFE_OPENGL));
-#else
- config.setValue("opengl", static_cast<int>(RENDER_SOFTWARE));
-#endif
-#else
- config.setValue("opengl", static_cast<int>(RENDER_SOFTWARE));
-#endif
- config.setValue("screen", false);
- config.setValue("sound", true);
- config.setValue("guialpha", 0.8F);
-// config.setValue("remember", true);
- config.setValue("sfxVolume", 100);
- config.setValue("musicVolume", 60);
- config.setValue("fpslimit", 60);
- std::string defaultUpdateHost = branding.getValue("defaultUpdateHost", "");
- if (!checkPath(defaultUpdateHost))
- defaultUpdateHost.clear();
- config.setValue("updatehost", defaultUpdateHost);
- config.setValue("useScreenshotDirectorySuffix", true);
- config.setValue("ChatLogLength", 128);
-
- std::string configPath;
-
- if (settings.options.test.empty())
- configPath = settings.configDir + "/config.xml";
- else
- configPath = settings.configDir + "/test.xml";
-
- FILE *configFile = fopen(configPath.c_str(), "r");
- if (!configFile)
- {
- configFile = fopen(configPath.c_str(), "wt");
- logger->log1("Creating new config");
- }
- if (!configFile)
- {
- logger->log("Can't create %s. Using defaults.", configPath.c_str());
- }
- else
- {
- fclose(configFile);
- config.init(configPath);
- logger->log1("init 3");
- config.setDefaultValues(getConfigDefaults());
- logger->log("configPath: " + configPath);
- }
-}
-
-void Client::backupConfig() const
-{
- const std::string confName = settings.configDir + "/config.xml.bak";
- const int maxFileIndex = 5;
- ::remove((confName + toString(maxFileIndex)).c_str());
- for (int f = maxFileIndex; f > 1; f --)
- {
- const std::string fileName1 = confName + toString(f - 1);
- const std::string fileName2 = confName + toString(f);
- Files::renameFile(fileName1, fileName2);
- }
- const std::string fileName3 = settings.configDir + "/config.xml";
- const std::string fileName4 = confName + toString(1);
- Files::copyFile(fileName3, fileName4);
-}
-
-#ifndef ANDROID
-void Client::storeSafeParameters() const
-{
- bool tmpHwaccel;
- RenderType tmpOpengl;
- int tmpFpslimit;
- int tmpAltFpslimit;
- bool tmpSound;
- int width;
- int height;
- std::string font;
- std::string bFont;
- std::string particleFont;
- std::string helpFont;
- std::string secureFont;
- std::string npcFont;
- std::string japanFont;
- std::string chinaFont;
- bool showBackground;
- bool enableMumble;
- bool enableMapReduce;
-
- isSafeMode = config.getBoolValue("safemode");
- if (isSafeMode)
- logger->log1("Run in safe mode");
-
- tmpOpengl = intToRenderType(config.getIntValue("opengl"));
-
- width = config.getIntValue("screenwidth");
- height = config.getIntValue("screenheight");
- tmpHwaccel = config.getBoolValue("hwaccel");
-
- tmpFpslimit = config.getIntValue("fpslimit");
- tmpAltFpslimit = config.getIntValue("altfpslimit");
- tmpSound = config.getBoolValue("sound");
-
- font = config.getStringValue("font");
- bFont = config.getStringValue("boldFont");
- particleFont = config.getStringValue("particleFont");
- helpFont = config.getStringValue("helpFont");
- secureFont = config.getStringValue("secureFont");
- npcFont = config.getStringValue("npcFont");
- japanFont = config.getStringValue("japanFont");
- chinaFont = config.getStringValue("chinaFont");
-
- showBackground = config.getBoolValue("showBackground");
- enableMumble = config.getBoolValue("enableMumble");
- enableMapReduce = config.getBoolValue("enableMapReduce");
-
- if (!settings.options.safeMode && !tmpOpengl)
- {
- // if video mode configured reset most settings to safe
- config.setValue("hwaccel", false);
- config.setValue("altfpslimit", 3);
- config.setValue("sound", false);
- config.setValue("safemode", true);
- config.setValue("screenwidth", 640);
- config.setValue("screenheight", 480);
- config.setValue("font", "fonts/dejavusans.ttf");
- config.setValue("boldFont", "fonts/dejavusans-bold.ttf");
- config.setValue("particleFont", "fonts/dejavusans.ttf");
- config.setValue("helpFont", "fonts/dejavusansmono.ttf");
- config.setValue("secureFont", "fonts/dejavusansmono.ttf");
- config.setValue("npcFont", "fonts/dejavusans.ttf");
- config.setValue("japanFont", "fonts/mplus-1p-regular.ttf");
- config.setValue("chinaFont", "fonts/wqy-microhei.ttf");
- config.setValue("showBackground", false);
- config.setValue("enableMumble", false);
- config.setValue("enableMapReduce", false);
- }
- else
- {
- // if video mode not configured reset only video mode to safe
- config.setValue("screenwidth", 640);
- config.setValue("screenheight", 480);
- }
-#if defined(__APPLE__)
- config.setValue("opengl", static_cast<int>(RENDER_NORMAL_OPENGL));
-#else
- config.setValue("opengl", static_cast<int>(RENDER_SOFTWARE));
-#endif
-
- config.write();
-
- if (settings.options.safeMode)
- {
- isSafeMode = true;
- return;
- }
-
- config.setValue("safemode", false);
- if (!tmpOpengl)
- {
- config.setValue("hwaccel", tmpHwaccel);
- config.setValue("opengl", static_cast<int>(tmpOpengl));
- config.setValue("fpslimit", tmpFpslimit);
- config.setValue("altfpslimit", tmpAltFpslimit);
- config.setValue("sound", tmpSound);
- config.setValue("screenwidth", width);
- config.setValue("screenheight", height);
- config.setValue("font", font);
- config.setValue("boldFont", bFont);
- config.setValue("particleFont", particleFont);
- config.setValue("helpFont", helpFont);
- config.setValue("secureFont", secureFont);
- config.setValue("npcFont", npcFont);
- config.setValue("japanFont", japanFont);
- config.setValue("chinaFont", chinaFont);
- config.setValue("showBackground", showBackground);
- config.setValue("enableMumble", enableMumble);
- config.setValue("enableMapReduce", enableMapReduce);
- }
- else
- {
- config.setValue("opengl", static_cast<int>(tmpOpengl));
- config.setValue("screenwidth", width);
- config.setValue("screenheight", height);
- }
-}
-#endif
-
void Client::initTradeFilter() const
{
const std::string tradeListName =
@@ -2383,56 +2148,6 @@ void Client::windowRemoved(const Window *const window)
mCurrentDialog = nullptr;
}
-void Client::checkConfigVersion()
-{
- const int version = config.getIntValue("cfgver");
- if (version < 1)
- {
- if (config.getIntValue("fontSize") == 11)
- config.deleteKey("fontSize");
- if (config.getIntValue("npcfontSize") == 13)
- config.deleteKey("npcfontSize");
- }
- if (version < 2)
- {
- if (config.getIntValue("screenButtonsSize") == 1)
- config.deleteKey("screenButtonsSize");
- if (config.getIntValue("screenJoystickSize") == 1)
- config.deleteKey("screenJoystickSize");
- }
- if (version < 3)
- {
- config.setValue("audioFrequency", 44100);
-#ifdef ANDROID
- config.setValue("customcursor", false);
-#endif
- }
- if (version < 4)
- {
-#ifdef ANDROID
- config.setValue("showDidYouKnow", false);
-#endif
- }
- if (version < 5)
- {
- if (config.getIntValue("speech") == BeingSpeech::TEXT_OVERHEAD)
- {
- config.setValue("speech", static_cast<int>(
- BeingSpeech::NO_NAME_IN_BUBBLE));
- }
- }
- if (version < 6)
- config.setValue("blur", false);
-
- if (version < 7)
- config.setValue("download-music", true);
-
- if (version < 8)
- config.deleteKey("videodetected");
-
- config.setValue("cfgver", 8);
-}
-
void Client::setIcon()
{
std::string iconFile = branding.getValue("appIcon", "icons/manaplus");