From 01f69fab153289035a8d7fceff507babe2feb699 Mon Sep 17 00:00:00 2001 From: Mihai Fufezan Date: Tue, 10 Sep 2024 20:31:27 +0300 Subject: [PATCH] Path: simplify path checking --- src/path/Path.cpp | 57 ++++++++++++++++++----------------------------- 1 file changed, 22 insertions(+), 35 deletions(-) diff --git a/src/path/Path.cpp b/src/path/Path.cpp index b71953c..d306c88 100644 --- a/src/path/Path.cpp +++ b/src/path/Path.cpp @@ -2,6 +2,7 @@ #include #include #include +#include using namespace Hyprutils; @@ -10,10 +11,6 @@ namespace Hyprutils::Path { return basePath + "/hypr/" + programName + ".conf"; } - bool checkConfigExists(std::string basePath, std::string programName) { - return std::filesystem::exists(fullConfigPath(basePath, programName)); - } - std::optional getHome() { static const auto homeDir = getenv("HOME"); @@ -51,46 +48,36 @@ namespace Hyprutils::Path { using T = std::optional; std::pair findConfig(std::string programName) { - std::string configPath; + std::string configPath; + std::set paths; - bool xdgConfigHomeExists = false; - static const auto xdgConfigHome = getXdgConfigHome(); - if (xdgConfigHome.has_value()) { - xdgConfigHomeExists = true; - configPath = fullConfigPath(xdgConfigHome.value(), programName); - if (std::filesystem::exists(configPath)) - return std::make_pair(configPath, xdgConfigHome); - Debug::log(LOG, "No config file {}", configPath); - } + static const auto xdgConfigHome = getXdgConfigHome(); + if (xdgConfigHome.has_value()) + paths.insert(xdgConfigHome.value()); - bool homeExists = false; - static const auto home = getHome(); - if (home.has_value()) { - homeExists = true; - configPath = fullConfigPath(home.value(), programName); - if (std::filesystem::exists(configPath)) - return std::make_pair(configPath, home); - Debug::log(LOG, "No config file {}", configPath); - } + static const auto home = getHome(); + if (home.has_value()) + paths.insert(home.value()); static const auto xdgConfigDirs = getXdgConfigDirs(); if (xdgConfigDirs.has_value()) { - for (auto dir : xdgConfigDirs.value()) { - configPath = fullConfigPath(dir, programName); - if (std::filesystem::exists(configPath)) - return std::make_pair(configPath, std::nullopt); - Debug::log(LOG, "No config file {}", configPath); - } + for (auto dir : xdgConfigDirs.value()) + paths.insert(dir); } - configPath = fullConfigPath("/etc/xdg", programName); - if (std::filesystem::exists(configPath)) - return std::make_pair(configPath, std::nullopt); - Debug::log(LOG, "No config file {}", configPath); + paths.insert("/etc/xdg"); - if (xdgConfigHomeExists) + for (auto path : paths) { + configPath = fullConfigPath(path, programName); + if (std::filesystem::exists(configPath)) + return std::make_pair(configPath, path); + else + Debug::log(LOG, "No config found {}", configPath); + } + + if (xdgConfigHome.has_value()) return std::make_pair(std::nullopt, xdgConfigHome); - else if (homeExists) + else if (home.has_value()) return std::make_pair(std::nullopt, home); Debug::log(ERR, "No config file could be found. Check previous logs for clues");