#include "uf2configreader.h" #include "datacache.h" #include "logmanager.h" #include #include #include #include QSet 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 UF2ConfigReader::getAllCnamesStatic() { if (!m_cnameCacheLoaded) { loadCnameCache(); } return m_cnameCache; }