GrabBag/AppUtils/AppCommon/Inc/PathManager.h

162 lines
4.8 KiB
C
Raw Normal View History

#ifndef PATHMANAGER_H
#define PATHMANAGER_H
#include <QString>
#include <mutex>
/**
* @brief
*
*
* - Windows:
* - Linux: (~/.config/AppName/)
*
*
* - GetInstance()
* -
* - 线使线访
*
*
* @code
* // 直接获取实例,无需手动初始化
* PathManager& pm = PathManager::GetInstance();
* QString configPath = pm.GetConfigFilePath();
* QString calibPath = pm.GetCalibrationFilePath();
* @endcode
*/
class PathManager
{
public:
/**
* @brief
*
* @return
*/
static PathManager& GetInstance();
/**
* @brief (config.xml)
* @return
*/
QString GetConfigFilePath() const;
/**
* @brief (EyeHandCalibMatrixInfo.ini)
* @return
*/
QString GetCalibrationFilePath() const;
/**
* @brief
* @return
*/
QString GetAppConfigDirectory() const;
/**
* @brief
* @return
*/
QString GetAppName() const { return m_appName; }
/**
* @brief
* @param password
*/
void SetEncryptionPassword(const QString& password);
/**
* @brief
* @param enable
* @return true false
*/
bool EnableEncryptionProtection(bool enable);
/**
* @brief
* @param filePath
* @return
*/
QByteArray ReadEncryptedConfig(const QString& filePath) const;
/**
* @brief
* @param filePath
* @param data
* @return true false
*/
bool WriteEncryptedConfig(const QString& filePath, const QByteArray& data);
/**
* @brief
* @param filePath
* @return true false
*/
bool IsConfigEncrypted(const QString& filePath) const;
/**
* @brief 访访
* @return true false
*/
bool SetDirectoryProtection();
/**
* @brief AppName + "VisionRobot"
* @return
*/
QString GetEncryptionKey() const;
// 禁止拷贝和赋值
PathManager(const PathManager&) = delete;
PathManager& operator=(const PathManager&) = delete;
private:
/**
* @brief
* @param appName
*/
explicit PathManager(const QString& appName);
/**
* @brief
* @return truefalse
*/
bool EnsureConfigDirectoryExists();
/**
* @brief
* @return
*/
QString GetProgramDirectory() const;
/**
* @brief Linux系统
* @return
*/
QString GetUserConfigDirectory() const;
/**
* @brief
* @return
*/
QString GetConfigDirectory() const;
/**
* @brief
* config.xml config.encrypt config.xml
*/
void MigrateToEncryptedConfig();
private:
QString m_appName; // 应用程序名称
QString m_configFilePath; // 缓存的配置文件路径
QString m_calibrationFilePath; // 缓存的标定文件路径
QString m_configDirectory; // 缓存的配置目录路径
QString m_encryptionPassword; // 配置加密密码
bool m_encryptionEnabled; // 是否启用加密
static PathManager* s_instance; // 单例实例指针
static std::mutex s_mutex; // 线程安全的互斥锁
};
#endif // PATHMANAGER_H