void Client::initScreenshotDir() { if (!mOptions.screenshotDir.empty()) { mScreenshotDir = mOptions.screenshotDir; } else if (mScreenshotDir.empty()) { #ifdef _WIN32 mScreenshotDir = getSpecialFolderLocation(CSIDL_MYPICTURES); if (mScreenshotDir.empty()) mScreenshotDir = getSpecialFolderLocation(CSIDL_DESKTOP); #else mScreenshotDir = std::string(PHYSFS_getUserDir()) + "Desktop"; #endif if (config.getBoolValue("useScreenshotDirectorySuffix")) { std::string configScreenshotSuffix = config.getValue("screenshotDirectorySuffix", branding.getValue("appShort", "Mana")); if (!configScreenshotSuffix.empty()) { mScreenshotDir += "/" + configScreenshotSuffix; config.setValue("screenshotDirectorySuffix", configScreenshotSuffix); } } } }
void Dirs::initConfigDir() { settings.configDir = settings.options.configDir; if (settings.configDir.empty()) { #ifdef __APPLE__ settings.configDir = settings.localDataDir + dirSeparator + branding.getValue("appShort", "mana"); #elif defined __HAIKU__ settings.configDir = std::string(PhysFs::getUserDir()) + "/config/settings/Mana" + branding.getValue("appName", "ManaPlus"); #elif defined WIN32 settings.configDir = getSpecialFolderLocation(CSIDL_APPDATA); if (settings.configDir.empty()) { settings.configDir = settings.localDataDir; } else { settings.configDir.append("/mana/").append(branding.getValue( "appShort", "mana")); } #elif defined __ANDROID__ settings.configDir = getSdStoragePath() + branding.getValue( "appShort", "ManaPlus").append("/config"); #elif defined __native_client__ settings.configDir = _nacl_dir.append("/config"); #else // __APPLE__ settings.configDir = std::string(PhysFs::getUserDir()).append( "/.config/mana/").append(branding.getValue("appShort", "mana")); #endif // __APPLE__ logger->log("Generating config dir: " + settings.configDir); } if (mkdir_r(settings.configDir.c_str())) { // TRANSLATORS: directory creation error logger->error(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), settings.configDir.c_str())); } }
void Dirs::initLocalDataDir() { settings.localDataDir = settings.options.localDataDir; if (settings.localDataDir.empty()) { #ifdef __APPLE__ // Use Application Directory instead of .mana settings.localDataDir = std::string(PhysFs::getUserDir()) + "/Library/Application Support/" + branding.getValue("appName", "ManaPlus"); #elif defined __HAIKU__ settings.localDataDir = std::string(PhysFs::getUserDir()) + "/config/data/Mana"; #elif defined WIN32 settings.localDataDir = getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); if (settings.localDataDir.empty()) settings.localDataDir = std::string(PhysFs::getUserDir()); settings.localDataDir.append("/Mana"); #elif defined __ANDROID__ settings.localDataDir = getSdStoragePath() + branding.getValue( "appShort", "ManaPlus") + "/local"; #elif defined __native_client__ settings.localDataDir = _nacl_dir.append("/local"); #else // __APPLE__ settings.localDataDir = std::string(PhysFs::getUserDir()) + ".local/share/mana"; #endif // __APPLE__ } if (mkdir_r(settings.localDataDir.c_str())) { // TRANSLATORS: directory creation error logger->error(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), settings.localDataDir.c_str())); } #ifdef USE_PROFILER Perfomance::init(settings.localDataDir + "/profiler.log"); #endif // USE_PROFILER }
/** * Initializes the home directory. On UNIX and FreeBSD, ~/.mana is used. On * Windows and other systems we use the current working directory. */ void Client::initHomeDir() { mLocalDataDir = mOptions.localDataDir; if (mLocalDataDir.empty()) { #ifdef __APPLE__ // Use Application Directory instead of .mana mLocalDataDir = std::string(PHYSFS_getUserDir()) + "/Library/Application Support/" + branding.getValue("appName", "Mana"); #elif defined __HAIKU__ mLocalDataDir = std::string(PHYSFS_getUserDir()) + "/config/data/Mana"; #elif defined _WIN32 mLocalDataDir = getSpecialFolderLocation(CSIDL_LOCAL_APPDATA); if (mLocalDataDir.empty()) mLocalDataDir = std::string(PHYSFS_getUserDir()); mLocalDataDir += "/Mana"; #else mLocalDataDir = std::string(PHYSFS_getUserDir()) + "/.local/share/mana"; #endif } if (mkdir_r(mLocalDataDir.c_str())) { logger->error(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), mLocalDataDir.c_str())); } mConfigDir = mOptions.configDir; if (mConfigDir.empty()) { const std::string app = branding.getValue("appShort", "manasource"); #ifdef __APPLE__ mConfigDir = mLocalDataDir + "/" + app; #elif defined __HAIKU__ mConfigDir = std::string(PHYSFS_getUserDir()) + "/config/settings/Mana" + branding.getValue("appName", "manasource"); #elif defined _WIN32 mConfigDir = getSpecialFolderLocation(CSIDL_APPDATA); if (mConfigDir.empty()) mConfigDir = mLocalDataDir; else mConfigDir += "/mana/" + app; #else mConfigDir = std::string(PHYSFS_getUserDir()) + "/.config/mana/" + app; #endif } if (mkdir_r(mConfigDir.c_str())) { logger->error(strprintf(_("%s doesn't exist and can't be created! " "Exiting."), mConfigDir.c_str())); } struct stat statbuf; std::string newConfigFile = mConfigDir + "/config.xml"; if (stat(newConfigFile.c_str(), &statbuf)) { std::string oldConfigFile = std::string(PHYSFS_getUserDir()) + "/.tmw/config.xml"; if (mRootDir.empty() && !stat(oldConfigFile.c_str(), &statbuf) && S_ISREG(statbuf.st_mode)) { std::ifstream oldConfig; std::ofstream newConfig; logger->log("Copying old TMW settings."); oldConfig.open(oldConfigFile.c_str(), std::ios::binary); newConfig.open(newConfigFile.c_str(), std::ios::binary); if (!oldConfig.is_open() || !newConfig.is_open()) logger->log("Unable to copy old settings."); else { newConfig << oldConfig.rdbuf(); newConfig.close(); oldConfig.close(); } } } }