diff options
Diffstat (limited to 'src/client.cpp')
-rw-r--r-- | src/client.cpp | 333 |
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"); |