1
Fork 0
mirror of https://github.com/SapphireServer/Sapphire.git synced 2025-05-06 18:57:45 +00:00

new config class for ini files

This commit is contained in:
NotAdam 2018-06-10 16:28:03 +00:00
parent 44c85b3136
commit c034e4ca79
2 changed files with 111 additions and 0 deletions

View file

@ -0,0 +1,66 @@
#include "ConfigMgr.h"
#include <boost/property_tree/ini_parser.hpp>
#include <boost/filesystem.hpp>
/**
* Loads an ini file and parses it
* @param configName the name of ini file relative to m_configFolderRoot to load alongside global.ini
* @return true if loading was successful
*/
bool Core::ConfigMgr::loadConfig( const std::string& configName )
{
std::stringstream configStream;
// get global config
auto configDir = boost::filesystem::path( m_configFolderRoot );
if( !boost::filesystem::exists( configDir ) )
{
return false;
}
auto globalConfig = boost::filesystem::path( configDir / m_globalConfigFile );
if( !boost::filesystem::exists( globalConfig ) )
{
if( !copyDefaultConfig( globalConfig.filename().string() ) )
return false;
}
std::ifstream globalConfigFile( globalConfig.c_str() );
configStream << globalConfigFile.rdbuf();
// add some newlines just in case there's no newline at the end of the global file
configStream << "\n\n";
// get local config
auto localConfig = boost::filesystem::path( configDir / configName );
if( !boost::filesystem::exists( localConfig ) )
{
if( !copyDefaultConfig( localConfig.filename().string() ) )
return false;
}
std::ifstream configFile( localConfig.c_str() );
configStream << configFile.rdbuf();
// parse the tree and we're fuckin done
boost::property_tree::read_ini( configStream, m_propTree );
return true;
}
bool Core::ConfigMgr::copyDefaultConfig( const std::string& configName )
{
boost::filesystem::path configPath( m_configFolderRoot );
configPath /= configName;
if( !boost::filesystem::exists( configPath.c_str() + m_configDefaultSuffix ) )
{
// no default file :(
return false;
}
boost::filesystem::copy_file( configPath.c_str() + m_configDefaultSuffix, configPath );
return true;
}

View file

@ -0,0 +1,45 @@
#ifndef SAPPHIRE_CONFIGMGR_H
#define SAPPHIRE_CONFIGMGR_H
#include <boost/property_tree/ptree.hpp>
namespace Core
{
class ConfigMgr
{
public:
ConfigMgr() = default;
~ConfigMgr() = default;
bool loadConfig( const std::string& configName );
template< class T >
T getValue( const std::string& name, T defaultValue = T() )
{
try
{
return m_propTree.get< T >( name );
}
catch( ... )
{
return defaultValue;
}
}
template< class T >
void setValue( const std::string& name, T defaultValue = T() )
{
m_propTree.put( name, defaultValue );
}
private:
bool copyDefaultConfig( const std::string& configName );
boost::property_tree::ptree m_propTree;
const std::string m_globalConfigFile = "global.ini";
const std::string m_configFolderRoot = "./config/";
const std::string m_configDefaultSuffix = ".default";
};
}
#endif //SAPPHIRE_CONFIGMGR_H