foxygit / Torlinkc Log in
commits tags

/src/config/folder.cpp · 931 B

raw
#include "torlinkc/config/folder.hpp"

#include <filesystem>

namespace torlinkc {

namespace {
std::string trim(const std::string& s) {
  auto first = s.find_first_not_of(" \t\r\n");
  if (first == std::string::npos) return "";
  auto last = s.find_last_not_of(" \t\r\n");
  return s.substr(first, last - first + 1);
}
}  // namespace

std::string expandHome(const std::string& input, const std::string& home) {
  const std::string trimmed = trim(input);
  if (trimmed == "~") return home;
  if (trimmed.rfind("~/", 0) == 0 || trimmed.rfind("~\\", 0) == 0) {
    return (std::filesystem::path(home) / trimmed.substr(2)).string();
  }
  return trimmed;
}

std::string normalizeDownloadDir(const std::string& input, const std::string& home) {
  const std::string expanded = expandHome(input, home);
  if (expanded.empty()) return "";
  return std::filesystem::path(expanded).lexically_normal().string();
}

}  // namespace torlinkc