From a7b7e2fe607465856c6cae44480641481f800ebb Mon Sep 17 00:00:00 2001 From: MistEO Date: Thu, 24 Nov 2022 11:06:30 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E6=95=B4=E7=90=86Dir=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8D=95=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MeoAssistant/AsstCaller.cpp | 14 +++++--- src/MeoAssistant/Controller.cpp | 3 +- src/MeoAssistant/Controller.h | 4 --- src/MeoAssistant/MeoAssistant.vcxproj.filters | 8 ++--- src/MeoAssistant/ResourceLoader.cpp | 4 --- src/MeoAssistant/Utils/AsstImageIo.hpp | 4 +-- src/MeoAssistant/Utils/Logger.hpp | 4 +-- src/MeoAssistant/Utils/UserDir.hpp | 26 -------------- src/MeoAssistant/Utils/WorkingDir.hpp | 35 +++++++++++++++++++ 9 files changed, 54 insertions(+), 48 deletions(-) delete mode 100644 src/MeoAssistant/Utils/UserDir.hpp create mode 100644 src/MeoAssistant/Utils/WorkingDir.hpp diff --git a/src/MeoAssistant/AsstCaller.cpp b/src/MeoAssistant/AsstCaller.cpp index 3d198e50be..f55ad3c724 100644 --- a/src/MeoAssistant/AsstCaller.cpp +++ b/src/MeoAssistant/AsstCaller.cpp @@ -10,7 +10,7 @@ #include "ResourceLoader.h" #include "Utils/AsstTypes.h" #include "Utils/Logger.hpp" -#include "Utils/UserDir.hpp" +#include "Utils/WorkingDir.hpp" #include "Utils/Version.h" static constexpr AsstSize NullSize = static_cast(-1); @@ -43,16 +43,20 @@ static bool inited = false; bool AsstSetUserDir(const char* path) { - return asst::UserDir::get_instance().set(path); + return asst::UserDir.set(path); } bool AsstLoadResource(const char* path) { - if (auto& user_dir = asst::UserDir::get_instance(); user_dir.empty()) { - user_dir.set(path); + auto os_path = asst::utils::path(path); + if (asst::ResDir.empty()) { + asst::ResDir.set(os_path); + } + if (asst::UserDir.empty()) { + asst::UserDir.set(os_path); } using namespace asst::utils::path_literals; - inited = asst::ResourceLoader::get_instance().load(asst::utils::path(path) / "resource"_p); + inited = asst::ResourceLoader::get_instance().load(os_path / "resource"_p); return inited; } diff --git a/src/MeoAssistant/Controller.cpp b/src/MeoAssistant/Controller.cpp index 2f216f017c..8e9bb4e04c 100644 --- a/src/MeoAssistant/Controller.cpp +++ b/src/MeoAssistant/Controller.cpp @@ -38,6 +38,7 @@ #include "Utils/AsstTypes.h" #include "Utils/Logger.hpp" #include "Utils/StringMisc.hpp" +#include "Utils/WorkingDir.hpp" asst::Controller::Controller(AsstCallback callback, void* callback_arg) : m_callback(std::move(callback)), m_callback_arg(callback_arg), m_rand_engine(std::random_device {}()) @@ -1519,7 +1520,7 @@ bool asst::Controller::connect(const std::string& adb_path, const std::string& a cmd_replace(cfg_cmd), { { "[minitouchLocalPath]", - utils::path_to_utf8_string(m_resource_path / "minitouch"_p / optimal_abi / "minitouch"_p) }, + utils::path_to_utf8_string(ResDir.get() / "minitouch"_p / optimal_abi / "minitouch"_p) }, { "[minitouchWorkingFile]", m_uuid }, }); }; diff --git a/src/MeoAssistant/Controller.h b/src/MeoAssistant/Controller.h index 9e563d05a6..21ba3428f8 100644 --- a/src/MeoAssistant/Controller.h +++ b/src/MeoAssistant/Controller.h @@ -38,8 +38,6 @@ namespace asst Controller(Controller&&) = delete; ~Controller(); - inline static void set_resource_path(const std::filesystem::path& path) { m_resource_path = path; } - bool connect(const std::string& adb_path, const std::string& address, const std::string& config); bool inited() const noexcept; void set_exit_flag(bool* flag); @@ -179,8 +177,6 @@ namespace asst // TODO #endif - inline static std::filesystem::path m_resource_path; - std::string m_uuid; inline static std::string m_adb_release; // 开了 adb daemon,但是没连上模拟器的时候, // m_adb 并不会存下 release 的命令,但最后仍然需要一次释放。 diff --git a/src/MeoAssistant/MeoAssistant.vcxproj.filters b/src/MeoAssistant/MeoAssistant.vcxproj.filters index 87d0752fd8..a90335a62d 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj.filters +++ b/src/MeoAssistant/MeoAssistant.vcxproj.filters @@ -689,11 +689,11 @@ 源文件 - - 源文件 - 源文件\Utils + + 源文件\Utils + - + \ No newline at end of file diff --git a/src/MeoAssistant/ResourceLoader.cpp b/src/MeoAssistant/ResourceLoader.cpp index 5dceeb79bd..72be8f7c1e 100644 --- a/src/MeoAssistant/ResourceLoader.cpp +++ b/src/MeoAssistant/ResourceLoader.cpp @@ -67,10 +67,6 @@ bool asst::ResourceLoader::load(const std::filesystem::path& path) LoadResourceAndCheckRet(WordOcr, "PaddleOCR"_p); LoadResourceAndCheckRet(CharOcr, "PaddleCharOCR"_p); - if (!m_loaded) { - Controller::set_resource_path(path); - } - m_loaded = true; #undef LoadTemplByConfigerAndCheckRet diff --git a/src/MeoAssistant/Utils/AsstImageIo.hpp b/src/MeoAssistant/Utils/AsstImageIo.hpp index b6c6b8a7bf..8545f0299a 100644 --- a/src/MeoAssistant/Utils/AsstImageIo.hpp +++ b/src/MeoAssistant/Utils/AsstImageIo.hpp @@ -9,7 +9,7 @@ #include "NoWarningCVMat.h" #include "Platform.hpp" -#include "UserDir.hpp" +#include "WorkingDir.hpp" namespace asst { @@ -33,7 +33,7 @@ namespace asst { std::filesystem::path absolute_path; if (path.is_relative()) [[likely]] { - const auto& user_dir = UserDir::get_instance().get(); + const auto& user_dir = UserDir.get(); absolute_path = user_dir / path; } else { diff --git a/src/MeoAssistant/Utils/Logger.hpp b/src/MeoAssistant/Utils/Logger.hpp index 4a089d0f7f..bb75dedf30 100644 --- a/src/MeoAssistant/Utils/Logger.hpp +++ b/src/MeoAssistant/Utils/Logger.hpp @@ -16,7 +16,7 @@ #include "Platform.hpp" #include "SingletonHolder.hpp" #include "Time.hpp" -#include "UserDir.hpp" +#include "WorkingDir.hpp" #include "Version.h" #if defined(__APPLE__) || defined(__linux__) @@ -424,7 +424,7 @@ namespace asst private: friend class SingletonHolder; - Logger() : m_directory(UserDir::get_instance().get()) + Logger() : m_directory(UserDir.get()) { check_filesize_and_remove(); log_init_info(); diff --git a/src/MeoAssistant/Utils/UserDir.hpp b/src/MeoAssistant/Utils/UserDir.hpp deleted file mode 100644 index 272e124cba..0000000000 --- a/src/MeoAssistant/Utils/UserDir.hpp +++ /dev/null @@ -1,26 +0,0 @@ -#pragma once - -#include "Utils/Platform.hpp" -#include "Utils/SingletonHolder.hpp" - -namespace asst -{ - class UserDir : public SingletonHolder - { - public: - bool empty() const noexcept { return user_dir_.empty(); } - const std::filesystem::path& get() const noexcept { return user_dir_; } - bool set(const char* dir) - { - auto temp = utils::path(dir); - if (!std::filesystem::exists(temp) || !std::filesystem::is_directory(temp)) { - return false; - } - user_dir_ = temp; - return true; - } - - private: - std::filesystem::path user_dir_; - }; -} // namespace asst diff --git a/src/MeoAssistant/Utils/WorkingDir.hpp b/src/MeoAssistant/Utils/WorkingDir.hpp new file mode 100644 index 0000000000..906e338e92 --- /dev/null +++ b/src/MeoAssistant/Utils/WorkingDir.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include "Utils/Platform.hpp" +#include "Utils/SingletonHolder.hpp" + +namespace asst +{ + enum class WorkingDirType + { + Res, + User, + }; + + template + class WorkingDir : public SingletonHolder> + { + public: + bool empty() const noexcept { return dir_.empty(); } + const std::filesystem::path& get() const noexcept { return dir_; } + bool set(std::filesystem::path dir) + { + if (!std::filesystem::exists(dir) || !std::filesystem::is_directory(dir)) { + return false; + } + dir_ = std::move(dir); + return true; + } + + private: + std::filesystem::path dir_; + }; + + static auto& ResDir = WorkingDir::get_instance(); + static auto& UserDir = WorkingDir::get_instance(); +} // namespace asst