aboutsummaryrefslogtreecommitdiffstats
path: root/src/core/function/GlobalSettingStation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/function/GlobalSettingStation.cpp')
-rw-r--r--src/core/function/GlobalSettingStation.cpp230
1 files changed, 121 insertions, 109 deletions
diff --git a/src/core/function/GlobalSettingStation.cpp b/src/core/function/GlobalSettingStation.cpp
index 6b743268..6969c15a 100644
--- a/src/core/function/GlobalSettingStation.cpp
+++ b/src/core/function/GlobalSettingStation.cpp
@@ -1,5 +1,5 @@
/**
- * Copyright (C) 2021 Saturneric
+ * Copyright (C) 2021 Saturneric <[email protected]>
*
* This file is part of GpgFrontend.
*
@@ -20,7 +20,7 @@
* the gpg4usb project, which is under GPL-3.0-or-later.
*
* All the source code of GpgFrontend was modified and released by
- * Saturneric<[email protected]> starting on May 12, 2021.
+ * Saturneric <[email protected]> starting on May 12, 2021.
*
* SPDX-License-Identifier: GPL-3.0-or-later
*
@@ -28,136 +28,148 @@
#include "GlobalSettingStation.h"
-#include "core/function/FileOperator.h"
+#include "core/module/ModuleManager.h"
+#include "core/utils/FilesystemUtils.h"
-void GpgFrontend::GlobalSettingStation::SyncSettings() noexcept {
- using namespace libconfig;
- try {
- ui_cfg_.writeFile(ui_config_path_.u8string().c_str());
- SPDLOG_DEBUG("updated ui configuration successfully written to {}",
- ui_config_path_.u8string());
+namespace GpgFrontend {
- } catch (const FileIOException &fioex) {
- SPDLOG_ERROR("i/o error while writing ui configuration file: {}",
- ui_config_path_.u8string());
- }
-}
+class GlobalSettingStation::Impl {
+ public:
+ /**
+ * @brief Construct a new Global Setting Station object
+ *
+ */
+ explicit Impl() noexcept {
+ GF_CORE_LOG_INFO("app path: {}", GetAppDir());
+ GF_CORE_LOG_INFO("app working path: {}", working_path_);
-GpgFrontend::GlobalSettingStation::GlobalSettingStation(int channel) noexcept
- : SingletonFunctionObject<GlobalSettingStation>(channel) {
- using namespace std::filesystem;
- using namespace libconfig;
-
- SPDLOG_INFO("app path: {}", app_path_.u8string());
- SPDLOG_INFO("app configure path: {}", app_configure_path_.u8string());
- SPDLOG_INFO("app data path: {}", app_data_path_.u8string());
- SPDLOG_INFO("app log path: {}", app_log_path_.u8string());
- SPDLOG_INFO("app locale path: {}", app_locale_path_.u8string());
- SPDLOG_INFO("app conf path: {}", ui_config_path_.u8string());
-
- SPDLOG_INFO("app log files total size: {}", GetLogFilesSize());
- SPDLOG_INFO("app data objects files total size: {}",
- GetDataObjectsFilesSize());
-
- if (!is_directory(app_configure_path_)) create_directory(app_configure_path_);
- if (!is_directory(app_data_path_)) create_directory(app_data_path_);
- if (!is_directory(app_log_path_)) create_directory(app_log_path_);
- if (!is_directory(ui_config_dir_path_)) create_directory(ui_config_dir_path_);
-
- if (!exists(ui_config_path_)) {
- try {
- this->ui_cfg_.writeFile(ui_config_path_.u8string().c_str());
- SPDLOG_DEBUG("user interface configuration successfully written to {}",
- ui_config_path_.u8string());
-
- } catch (const FileIOException &fioex) {
- SPDLOG_DEBUG(
- "i/o error while writing UserInterface configuration file {}",
- ui_config_path_.u8string());
- }
- } else {
- try {
- this->ui_cfg_.readFile(ui_config_path_.u8string().c_str());
- SPDLOG_DEBUG("user interface configuration successfully read from {}",
- ui_config_path_.u8string());
- } catch (const FileIOException &fioex) {
- SPDLOG_ERROR("i/o error while reading UserInterface configure file");
- } catch (const ParseException &pex) {
- SPDLOG_ERROR("parse error at {} : {} - {}", pex.getFile(), pex.getLine(),
- pex.getError());
+ auto portable_file_path = working_path_ + "/PORTABLE.txt";
+ if (QFileInfo(portable_file_path).exists()) {
+ GF_CORE_LOG_INFO(
+ "dectected portable mode, reconfiguring config and data path...");
+ Module::UpsertRTValue("core", "env.state.portable", 1);
+
+ app_data_path_ = working_path_;
+ app_log_path_ = app_data_path_ + "/logs";
+ app_data_objs_path_ = app_data_path_ + "/data_objs";
+
+ portable_mode_ = true;
}
+
+ GF_CORE_LOG_INFO("app data path: {}", app_data_path_);
+ GF_CORE_LOG_INFO("app log path: {}", app_log_path_);
+
+ GF_CORE_LOG_DEBUG("app log files total size: {}", GetLogFilesSize());
+ GF_CORE_LOG_DEBUG("app data objects files total size: {}",
+ GetDataObjectsFilesSize());
+
+ if (!QDir(app_data_path_).exists()) QDir(app_data_path_).mkpath(".");
+ if (!QDir(app_log_path_).exists()) QDir(app_log_path_).mkpath(".");
}
-}
-libconfig::Setting &
-GpgFrontend::GlobalSettingStation::GetUISettings() noexcept {
- return ui_cfg_.getRoot();
-}
+ [[nodiscard]] auto GetSettings() -> QSettings {
+ if (!portable_mode_) return QSettings();
+ return {app_portable_config_path_, QSettings::IniFormat};
+ }
-void GpgFrontend::GlobalSettingStation::init_app_secure_key() {}
+ [[nodiscard]] auto GetLogFilesSize() const -> QString {
+ return GetHumanFriendlyFileSize(GetFileSizeByPath(app_log_path_, "*.log"));
+ }
-int64_t GpgFrontend::GlobalSettingStation::get_files_size_at_path(
- std::filesystem::path path, std::string filename_pattern) const {
- auto dir = QDir(QString::fromStdString(path.u8string()));
- QFileInfoList fileList = dir.entryInfoList(
- QStringList() << QString::fromStdString(filename_pattern), QDir::Files);
- qint64 totalSize = 0;
+ [[nodiscard]] auto GetDataObjectsFilesSize() const -> QString {
+ return GetHumanFriendlyFileSize(
+ GetFileSizeByPath(app_data_objs_path_, "*"));
+ }
- for (const QFileInfo &fileInfo : fileList) {
- totalSize += fileInfo.size();
+ void ClearAllLogFiles() const {
+ DeleteAllFilesByPattern(app_log_path_, "*.log");
+ }
+
+ void ClearAllDataObjects() const {
+ DeleteAllFilesByPattern(app_data_objs_path_, "*");
+ }
+
+ /**
+ * @brief Get the App Dir object
+ *
+ * @return QString
+ */
+ [[nodiscard]] auto GetAppDir() const -> QString {
+ return QCoreApplication::applicationDirPath();
}
- return totalSize;
-}
-std::string GpgFrontend::GlobalSettingStation::get_human_readable_size(
- int64_t size) const {
- double num = size;
- QStringList list;
- list << "KB"
- << "MB"
- << "GB"
- << "TB";
-
- QStringListIterator i(list);
- QString unit("bytes");
-
- while (num >= 1024.0 && i.hasNext()) {
- unit = i.next();
- num /= 1024.0;
+ /**
+ * @brief Get the App Data Path object
+ *
+ * @return QString
+ */
+ [[nodiscard]] auto GetAppDataPath() const -> QString {
+ return app_data_path_;
}
- return (QString().setNum(num, 'f', 2) + " " + unit).toStdString();
+
+ /**
+ * @brief Get the Log Dir object
+ *
+ * @return QString
+ */
+ [[nodiscard]] auto GetLogDir() const -> QString { return app_log_path_; }
+
+ private:
+ QString working_path_ = QDir::currentPath();
+
+ QString app_data_path_ = QString{QStandardPaths::writableLocation(
+ QStandardPaths::AppLocalDataLocation)}; ///< Program Data Location
+
+ QString app_log_path_ = app_data_path_ + "/logs"; ///< Program Data Location
+
+ QString app_data_objs_path_ =
+ app_data_path_ + "/data_objs"; ///< Object storage path
+
+ bool portable_mode_ = false; ///<
+ QString app_portable_config_path_ =
+ working_path_ + "/config.ini"; ///< take effect only in portable mode
+
+ /**
+ * @brief
+ *
+ */
+ void init_app_secure_key() {}
+};
+
+GlobalSettingStation::GlobalSettingStation(int channel) noexcept
+ : SingletonFunctionObject<GlobalSettingStation>(channel),
+ p_(SecureCreateUniqueObject<Impl>()) {}
+
+GlobalSettingStation::~GlobalSettingStation() noexcept = default;
+
+auto GlobalSettingStation::GetSettings() const -> QSettings {
+ return p_->GetSettings();
}
-std::string GpgFrontend::GlobalSettingStation::GetLogFilesSize() const {
- return get_human_readable_size(
- get_files_size_at_path(app_log_path_, "*.log"));
+auto GlobalSettingStation::GetAppDir() const -> QString {
+ return p_->GetAppDir();
}
-std::string GpgFrontend::GlobalSettingStation::GetDataObjectsFilesSize() const {
- return get_human_readable_size(
- get_files_size_at_path(app_data_objs_path_, "*"));
+auto GlobalSettingStation::GetAppDataPath() const -> QString {
+ return p_->GetAppDataPath();
}
-void GpgFrontend::GlobalSettingStation::ClearAllLogFiles() const {
- delete_all_files(app_log_path_, "*.log");
+[[nodiscard]] auto GlobalSettingStation::GetLogDir() const -> QString {
+ return p_->GetLogDir();
}
-void GpgFrontend::GlobalSettingStation::ClearAllDataObjects() const {
- delete_all_files(app_data_objs_path_, "*");
+auto GlobalSettingStation::GetLogFilesSize() const -> QString {
+ return p_->GetLogFilesSize();
}
-void GpgFrontend::GlobalSettingStation::delete_all_files(
- std::filesystem::path path, std::string filename_pattern) const {
- auto dir = QDir(QString::fromStdString(path.u8string()));
+auto GlobalSettingStation::GetDataObjectsFilesSize() const -> QString {
+ return p_->GetDataObjectsFilesSize();
+}
- // 使用name filters来只选取以.log结尾的文件
- QStringList logFiles = dir.entryList(
- QStringList() << QString::fromStdString(filename_pattern), QDir::Files);
+void GlobalSettingStation::ClearAllLogFiles() const { p_->ClearAllLogFiles(); }
- // 遍历并删除所有符合条件的文件
- for (const auto &file : logFiles) {
- QFile::remove(dir.absoluteFilePath(file));
- }
+void GlobalSettingStation::ClearAllDataObjects() const {
+ p_->ClearAllDataObjects();
}
-GpgFrontend::GlobalSettingStation::~GlobalSettingStation() noexcept = default;
+} // namespace GpgFrontend \ No newline at end of file