mirror of
https://github.com/obsqrbtz/clrsync.git
synced 2026-04-08 20:19:04 +03:00
fix: normalize paths
This commit is contained in:
@@ -35,13 +35,8 @@ Result<void> config::initialize(std::unique_ptr<clrsync::core::io::file> file)
|
|||||||
|
|
||||||
std::filesystem::path config::get_user_config_dir()
|
std::filesystem::path config::get_user_config_dir()
|
||||||
{
|
{
|
||||||
auto home = expand_user("~");
|
std::filesystem::path home = normalize_path("~");
|
||||||
#ifdef _WIN32
|
return home / ".config" / "clrsync";
|
||||||
return home + "\\.config\\clrsync";
|
|
||||||
|
|
||||||
#else
|
|
||||||
return home + "/.config/clrsync";
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::filesystem::path config::get_data_dir()
|
std::filesystem::path config::get_data_dir()
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ namespace clrsync::core::io
|
|||||||
{
|
{
|
||||||
toml_file::toml_file(std::string path)
|
toml_file::toml_file(std::string path)
|
||||||
{
|
{
|
||||||
m_path = expand_user(path);
|
m_path = normalize_path(path).string();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<void> toml_file::parse()
|
Result<void> toml_file::parse()
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ template <typename FileType> class palette_manager
|
|||||||
palette_manager() = default;
|
palette_manager() = default;
|
||||||
void load_palettes_from_directory(const std::string &directory_path)
|
void load_palettes_from_directory(const std::string &directory_path)
|
||||||
{
|
{
|
||||||
auto directory_path_expanded = expand_user(directory_path);
|
std::filesystem::path directory_path_expanded = normalize_path(directory_path);
|
||||||
if (!std::filesystem::exists(directory_path_expanded))
|
if (!std::filesystem::exists(directory_path_expanded))
|
||||||
return;
|
return;
|
||||||
for (const auto &entry : std::filesystem::directory_iterator(directory_path_expanded))
|
for (const auto &entry : std::filesystem::directory_iterator(directory_path_expanded))
|
||||||
@@ -34,8 +34,9 @@ template <typename FileType> class palette_manager
|
|||||||
}
|
}
|
||||||
void save_palette_to_file(const palette &pal, const std::string &directory_path) const
|
void save_palette_to_file(const palette &pal, const std::string &directory_path) const
|
||||||
{
|
{
|
||||||
std::string file_path = directory_path + "/" + pal.name() + ".toml";
|
std::filesystem::path dir_path = normalize_path(directory_path);
|
||||||
palette_file<FileType> pal_file(file_path);
|
std::filesystem::path file_path = dir_path / (pal.name() + ".toml");
|
||||||
|
palette_file<FileType> pal_file(file_path.string());
|
||||||
pal_file.save_palette(pal);
|
pal_file.save_palette(pal);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ namespace clrsync::core
|
|||||||
{
|
{
|
||||||
theme_template::theme_template(const std::string &name, const std::string &template_path,
|
theme_template::theme_template(const std::string &name, const std::string &template_path,
|
||||||
const std::string &out_path)
|
const std::string &out_path)
|
||||||
: m_name(name), m_template_path(expand_user(template_path)),
|
: m_name(name), m_template_path(normalize_path(template_path).string()),
|
||||||
m_output_path(expand_user(out_path))
|
m_output_path(normalize_path(out_path).string())
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ const std::string &theme_template::template_path() const
|
|||||||
|
|
||||||
void theme_template::set_template_path(const std::string &path)
|
void theme_template::set_template_path(const std::string &path)
|
||||||
{
|
{
|
||||||
m_template_path = expand_user(path);
|
m_template_path = normalize_path(path).string();
|
||||||
}
|
}
|
||||||
|
|
||||||
const std::string &theme_template::output_path() const
|
const std::string &theme_template::output_path() const
|
||||||
@@ -40,7 +40,7 @@ const std::string &theme_template::output_path() const
|
|||||||
|
|
||||||
void theme_template::set_output_path(const std::string &path)
|
void theme_template::set_output_path(const std::string &path)
|
||||||
{
|
{
|
||||||
m_output_path = expand_user(path);
|
m_output_path = normalize_path(path).string();
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<void> theme_template::load_template()
|
Result<void> theme_template::load_template()
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#include "utils.hpp"
|
#include "utils.hpp"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
namespace clrsync::core
|
namespace clrsync::core
|
||||||
{
|
{
|
||||||
@@ -15,20 +16,19 @@ std::string get_default_config_path()
|
|||||||
{
|
{
|
||||||
const char* env_path = std::getenv("CLRSYNC_CONFIG_PATH");
|
const char* env_path = std::getenv("CLRSYNC_CONFIG_PATH");
|
||||||
if (env_path && env_path[0] != '\0')
|
if (env_path && env_path[0] != '\0')
|
||||||
return expand_user(env_path);
|
return normalize_path(env_path).string();
|
||||||
|
|
||||||
auto home = expand_user("~");
|
std::filesystem::path home = normalize_path("~");
|
||||||
#ifdef _WIN32
|
std::filesystem::path config_path = home / ".config" / "clrsync" / "config.toml";
|
||||||
return home + "\\.config\\clrsync\\config.toml";
|
return config_path.string();
|
||||||
|
|
||||||
#else
|
|
||||||
return home + "/.config/clrsync/config.toml";
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string expand_user(const std::string &path)
|
std::string expand_user(const std::string &path)
|
||||||
{
|
{
|
||||||
if (!path.empty() && path[0] == '~')
|
if (path.empty() || path[0] != '~')
|
||||||
|
return path;
|
||||||
|
|
||||||
|
if (path.length() == 1 || path[1] == '/' || path[1] == '\\')
|
||||||
{
|
{
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
const char *home = std::getenv("USERPROFILE");
|
const char *home = std::getenv("USERPROFILE");
|
||||||
@@ -37,9 +37,21 @@ std::string expand_user(const std::string &path)
|
|||||||
#endif
|
#endif
|
||||||
if (!home)
|
if (!home)
|
||||||
return path;
|
return path;
|
||||||
|
|
||||||
|
if (path.length() == 1)
|
||||||
|
return std::string(home);
|
||||||
|
|
||||||
return std::string(home) + path.substr(1);
|
return std::string(home) + path.substr(1);
|
||||||
}
|
}
|
||||||
return path;
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::filesystem::path normalize_path(const std::string &path)
|
||||||
|
{
|
||||||
|
std::string expanded = expand_user(path);
|
||||||
|
std::filesystem::path fs_path(expanded);
|
||||||
|
// lexically_normal() resolves . and .. and normalizes separators
|
||||||
|
return fs_path.lexically_normal();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace clrsync::core
|
} // namespace clrsync::core
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#define CLRSYNC_CORE_UTILS_HPP
|
#define CLRSYNC_CORE_UTILS_HPP
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
#include <filesystem>
|
||||||
|
|
||||||
#include <core/palette/color_keys.hpp>
|
#include <core/palette/color_keys.hpp>
|
||||||
|
|
||||||
@@ -10,5 +11,6 @@ namespace clrsync::core
|
|||||||
void print_color_keys();
|
void print_color_keys();
|
||||||
std::string get_default_config_path();
|
std::string get_default_config_path();
|
||||||
std::string expand_user(const std::string &path);
|
std::string expand_user(const std::string &path);
|
||||||
|
std::filesystem::path normalize_path(const std::string &path);
|
||||||
} // namespace clrsync::core
|
} // namespace clrsync::core
|
||||||
#endif // CLRSYNC_CORE_UTILS_HPP
|
#endif // CLRSYNC_CORE_UTILS_HPP
|
||||||
@@ -30,7 +30,8 @@ void palette_controller::select_palette(const std::string& name)
|
|||||||
|
|
||||||
void palette_controller::create_palette(const std::string& name)
|
void palette_controller::create_palette(const std::string& name)
|
||||||
{
|
{
|
||||||
clrsync::core::palette new_palette = m_palette_manager.load_palette_from_file(clrsync::core::config::get_data_dir().string() + "/palettes/cursed.toml");
|
std::filesystem::path template_path = clrsync::core::config::get_data_dir() / "palettes" / "cursed.toml";
|
||||||
|
clrsync::core::palette new_palette = m_palette_manager.load_palette_from_file(template_path.string());
|
||||||
new_palette.set_name(name);
|
new_palette.set_name(name);
|
||||||
|
|
||||||
auto dir = clrsync::core::config::instance().palettes_path();
|
auto dir = clrsync::core::config::instance().palettes_path();
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
#include "template_editor.hpp"
|
#include "template_editor.hpp"
|
||||||
#include "core/config/config.hpp"
|
#include "core/config/config.hpp"
|
||||||
#include "core/theme/theme_template.hpp"
|
#include "core/theme/theme_template.hpp"
|
||||||
|
#include "core/utils.hpp"
|
||||||
#include "imgui.h"
|
#include "imgui.h"
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
@@ -420,7 +421,7 @@ void template_editor::save_template()
|
|||||||
|
|
||||||
auto &cfg = clrsync::core::config::instance();
|
auto &cfg = clrsync::core::config::instance();
|
||||||
|
|
||||||
std::filesystem::path template_file = trimmed_input_path;
|
std::filesystem::path template_file = clrsync::core::normalize_path(trimmed_input_path);
|
||||||
|
|
||||||
// Ensure the parent directory exists
|
// Ensure the parent directory exists
|
||||||
auto parent_dir = template_file.parent_path();
|
auto parent_dir = template_file.parent_path();
|
||||||
|
|||||||
Reference in New Issue
Block a user