diff options
Diffstat (limited to 'src/mgr/swsourcemgr.cpp')
-rw-r--r-- | src/mgr/swsourcemgr.cpp | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/src/mgr/swsourcemgr.cpp b/src/mgr/swsourcemgr.cpp new file mode 100644 index 0000000..58df9f0 --- /dev/null +++ b/src/mgr/swsourcemgr.cpp @@ -0,0 +1,91 @@ +/****************************************************************************** + * swsourcemgr.cpp - implementaion of class SWMgr used to interact with an install + * base of sword modules. + * + * $Id: swsourcemgr.cpp,v 1.2 2003/06/27 01:41:07 scribe Exp $ + * + * Copyright 2002 CrossWire Bible Society (http://www.crosswire.org) + * CrossWire Bible Society + * P. O. Box 2528 + * Tempe, AZ 85280-2528 + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation version 2. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + + #include "swsourcemgr.h" + #include "filemgr.h" + #include "utilstr.h" + #include "swconfig.h" + #include <dirent.h> + + SWORD_NAMESPACE_START + + SWSourceMgr::SWSourceMgr(const char *iConfigPath) { + SWBuf path; + + //init(); + + path = iConfigPath; + if ((iConfigPath[strlen(iConfigPath)-1] != '\\') && (iConfigPath[strlen(iConfigPath)-1] != '/')) + path += "/"; + if (FileMgr::existsFile(path.c_str(), "mods.conf")) { + stdstr(&prefixPath, path.c_str()); + path += "mods.conf"; + stdstr(&configPath, path.c_str()); + } + else { + if (FileMgr::existsDir(path.c_str(), "mods.d")) { + stdstr(&prefixPath, path.c_str()); + path += "mods.d"; + stdstr(&configPath, path.c_str()); + configType = 1; + } + } + + if (configPath) + loadConfigDir(configPath); +} + +void SWSourceMgr::loadConfigDir(const char *ipath) +{ + DIR *dir; + struct dirent *ent; + SWBuf newmodfile; + + if ((dir = opendir(ipath))) { + rewinddir(dir); + while ((ent = readdir(dir))) { + if ((strcmp(ent->d_name, ".")) && (strcmp(ent->d_name, ".."))) { + newmodfile = ipath; + if ((ipath[strlen(ipath)-1] != '\\') && (ipath[strlen(ipath)-1] != '/')) + newmodfile += "/"; + newmodfile += ent->d_name; + if (config) { + SWConfig tmpConfig(newmodfile.c_str()); + *config += tmpConfig; + } + else config = myconfig = new SWConfig(newmodfile.c_str()); + } + } + closedir(dir); + if (!config) { // if no .conf file exist yet, create a default + newmodfile = ipath; + if ((ipath[strlen(ipath)-1] != '\\') && (ipath[strlen(ipath)-1] != '/')) + newmodfile += "/"; + newmodfile += "globals.conf"; + config = myconfig = new SWConfig(newmodfile.c_str()); + } + } +} + + + + SWORD_NAMESPACE_END |