diff options
author | Saturn&Eric <[email protected]> | 2024-01-23 07:21:28 +0000 |
---|---|---|
committer | GitHub <[email protected]> | 2024-01-23 07:21:28 +0000 |
commit | 56acf161d439ce73eceaa145c40fe703bb2c3f02 (patch) | |
tree | a5d4790a6b2efc8786a3c0f74a07f5a8032d4e94 /src/core/function/GlobalSettingStation.cpp | |
parent | fix: use more secure cdn links (diff) | |
parent | fix: solve issues on detected gnupg path function and fix linking errors on w... (diff) | |
download | GpgFrontend-56acf161d439ce73eceaa145c40fe703bb2c3f02.tar.gz GpgFrontend-56acf161d439ce73eceaa145c40fe703bb2c3f02.zip |
Merge pull request #126 from saturneric/dev/2.1.1/main
Develop 2.1.2.1
Diffstat (limited to 'src/core/function/GlobalSettingStation.cpp')
-rw-r--r-- | src/core/function/GlobalSettingStation.cpp | 230 |
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 |