diff options
Diffstat (limited to 'src/cmd.cc')
-rw-r--r-- | src/cmd.cc | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/cmd.cc b/src/cmd.cc new file mode 100644 index 0000000..7be5e01 --- /dev/null +++ b/src/cmd.cc @@ -0,0 +1,33 @@ +#include "cmd.h" +#include "settings.h" +#include <vector> +#include <string> +#include <filesystem> +#include <algorithm> + +namespace cmd { + std::vector<std::string> getVirtDirs() { + return {"weapons", "armor", "spells", "creatures"}; + } + + // Not idempotent: only do once! + std::filesystem::path getTruePath(std::filesystem::path virtPath) { + std::filesystem::path p; + auto virtPaths = getVirtDirs(); + if(std::find(virtPaths.begin(), virtPaths.end(), *virtPath.begin()) != virtPaths.end()) { + p = settings::getString(*virtPath.begin()); + // Erase root (part to be replaced by virtPaths) + std::filesystem::path tmp; + auto it = virtPath.begin(); + while(++it != virtPath.end()) { + tmp /= *it; + } + virtPath = tmp; + } else { + p = settings::getString("savedir"); + } + p /= virtPath; + if(std::filesystem::directory_entry(p.string() + ".json").is_regular_file()) return p.string() + ".json"; + return p; + } +} |