156 lines
4.1 KiB
C++
156 lines
4.1 KiB
C++
#include "uf2configreader.h"
|
|
#include "datacache.h"
|
|
#include "logmanager.h"
|
|
#include <QFile>
|
|
#include <QJsonDocument>
|
|
#include <QCoreApplication>
|
|
#include <QDir>
|
|
|
|
QSet<QString> UF2ConfigReader::m_cnameCache;
|
|
bool UF2ConfigReader::m_cnameCacheLoaded = false;
|
|
|
|
UF2ConfigReader::UF2ConfigReader(QObject *parent) : QObject(parent), m_loaded(false)
|
|
{
|
|
}
|
|
|
|
QString UF2ConfigReader::getBinPath()
|
|
{
|
|
QString appDir = QCoreApplication::applicationDirPath();
|
|
return appDir + "/uf2touft3";
|
|
}
|
|
|
|
bool UF2ConfigReader::loadAllUF20Config()
|
|
{
|
|
m_failedFiles.clear();
|
|
|
|
if (!DataCache::instance()->initDatabase()) {
|
|
LogManager::instance()->logError("UF20配置加载 - 数据库初始化失败");
|
|
m_failedFiles.append("uf2.json");
|
|
return false;
|
|
}
|
|
|
|
QString binPath = getBinPath();
|
|
QString filePath = binPath + "/uf2.json";
|
|
|
|
if (DataCache::instance()->hasUF20Config("uf2.json")) {
|
|
m_loaded = true;
|
|
DataCache::instance()->setDataLoaded(true);
|
|
return true;
|
|
}
|
|
|
|
QFile file(filePath);
|
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
LogManager::instance()->logError(QString("UF20配置加载失败 - 无法打开文件: %1").arg(filePath));
|
|
m_failedFiles.append("uf2.json");
|
|
return false;
|
|
}
|
|
|
|
QByteArray data = file.readAll();
|
|
QJsonDocument doc = QJsonDocument::fromJson(data);
|
|
file.close();
|
|
|
|
if (doc.isNull() || !doc.isObject()) {
|
|
LogManager::instance()->logError(QString("UF20配置加载失败 - JSON解析失败: %1").arg(filePath));
|
|
m_failedFiles.append("uf2.json");
|
|
return false;
|
|
}
|
|
|
|
QJsonObject config = doc.object();
|
|
if (!DataCache::instance()->saveUF20Config("uf2.json", config)) {
|
|
LogManager::instance()->logError("UF20配置加载失败 - 保存失败: uf2.json");
|
|
m_failedFiles.append("uf2.json");
|
|
return false;
|
|
}
|
|
|
|
m_loaded = true;
|
|
DataCache::instance()->setDataLoaded(true);
|
|
return true;
|
|
}
|
|
|
|
QStringList UF2ConfigReader::getFailedFiles() const
|
|
{
|
|
return m_failedFiles;
|
|
}
|
|
|
|
bool UF2ConfigReader::reloadUF20Config()
|
|
{
|
|
QString binPath = getBinPath();
|
|
QString filePath = binPath + "/uf2.json";
|
|
|
|
QFile file(filePath);
|
|
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
LogManager::instance()->logError(QString("UF20配置重新加载失败 - 无法打开文件: %1").arg(filePath));
|
|
return false;
|
|
}
|
|
|
|
QByteArray data = file.readAll();
|
|
QJsonDocument doc = QJsonDocument::fromJson(data);
|
|
file.close();
|
|
|
|
if (doc.isNull() || !doc.isObject()) {
|
|
LogManager::instance()->logError(QString("UF20配置重新加载失败 - JSON解析失败: %1").arg(filePath));
|
|
return false;
|
|
}
|
|
|
|
QJsonObject config = doc.object();
|
|
if (!DataCache::instance()->saveUF20Config("uf2.json", config)) {
|
|
LogManager::instance()->logError("UF20配置重新加载失败 - 保存失败: uf2.json");
|
|
return false;
|
|
}
|
|
|
|
clearCnameCache();
|
|
return true;
|
|
}
|
|
|
|
bool UF2ConfigReader::isUF20Loaded() const
|
|
{
|
|
return m_loaded;
|
|
}
|
|
|
|
bool UF2ConfigReader::loadCnameCache()
|
|
{
|
|
if (m_cnameCacheLoaded) {
|
|
return true;
|
|
}
|
|
|
|
m_cnameCache.clear();
|
|
|
|
if (!DataCache::instance()->initDatabase()) {
|
|
LogManager::instance()->logError("UF20 Cname缓存加载失败 - 数据库初始化失败");
|
|
return false;
|
|
}
|
|
|
|
m_cnameCache = DataCache::instance()->getAllUF20Cnames();
|
|
m_cnameCacheLoaded = true;
|
|
return true;
|
|
}
|
|
|
|
bool UF2ConfigReader::checkFuncExistsStatic(const QString& funcName)
|
|
{
|
|
if (!m_cnameCacheLoaded) {
|
|
loadCnameCache();
|
|
}
|
|
|
|
return m_cnameCache.contains(funcName);
|
|
}
|
|
|
|
bool UF2ConfigReader::checkFunctionExists(const QString& funcName)
|
|
{
|
|
return checkFuncExistsStatic(funcName);
|
|
}
|
|
|
|
void UF2ConfigReader::clearCnameCache()
|
|
{
|
|
m_cnameCache.clear();
|
|
m_cnameCacheLoaded = false;
|
|
LogManager::instance()->logInfo("Cname缓存已清空");
|
|
}
|
|
|
|
QSet<QString> UF2ConfigReader::getAllCnamesStatic()
|
|
{
|
|
if (!m_cnameCacheLoaded) {
|
|
loadCnameCache();
|
|
}
|
|
return m_cnameCache;
|
|
}
|