X-Git-Url: https://git.dlugolecki.net.pl/?p=vlp.git;a=blobdiff_plain;f=src%2Fglobal%2Fvlp%2FConfigurationFinder.cpp;fp=src%2Fglobal%2Fvlp%2FConfigurationFinder.cpp;h=236b1dbc0504ec7c9211da30f968edf6a3f1c383;hp=0000000000000000000000000000000000000000;hb=1c031379a5928fe8a268f4b54bbef4b898a1ee20;hpb=3379d2caf9ee3a5b495144b395ccfa053fe699f0 diff --git a/src/global/vlp/ConfigurationFinder.cpp b/src/global/vlp/ConfigurationFinder.cpp new file mode 100644 index 0000000..236b1db --- /dev/null +++ b/src/global/vlp/ConfigurationFinder.cpp @@ -0,0 +1,61 @@ +#include +#include + +#include + +#include "ConfigurationFinder.h" +#include "config.h" +#include "exception/ConfigFileNotFound.h" + +namespace loglan { +namespace vlp { + +ConfigurationFinder::ConfigurationFinder() +{ +} + +std::string ConfigurationFinder::findConfig(std::string filename) +{ + for (std::string dir : searchDirs) { + std::ifstream infile(dir + filename); + if (infile.good()) { + return dir + filename; + } + } + + throw exception::ConfigFileNotFound(); +} + +/** + * Gets path to system-wide settings directory + * + * @return directory of user settings + */ +std::string ConfigurationFinder::getSystemConfigurationDir() +{ + std::string dir(SYSCONFDIR); + + dir += VLP_CONFIG_PATH_SEPARATOR; + dir += "loglan"; + dir += VLP_CONFIG_PATH_SEPARATOR; + + return dir; +} + + +void ConfigurationFinder::addSearchDir(std::string dir) +{ + searchDirs.push_back(dir); +} + +void ConfigurationFinder::initSearchDirs() +{ + searchDirs.clear(); + + addSearchDir("./"); + addSearchDir(getUserConfigurationDir()); + addSearchDir(getSystemConfigurationDir()); +} + +} +} \ No newline at end of file