增加转码功能函数配置修改自动刷新机制

This commit is contained in:
taocong
2026-06-02 10:39:01 +08:00
parent cc7fc51399
commit 5718503f26
2 changed files with 69 additions and 20 deletions
+64 -20
View File
@@ -48,10 +48,20 @@ BatchConvertPage::BatchConvertPage(QWidget *parent)
{
initUI();
loadFromCustJson();
m_configWatcher = new QFileSystemWatcher(this);
QString configPath = getConfigFilePath();
if (!configPath.isEmpty() && QFile::exists(configPath)) {
m_configWatcher->addPath(configPath);
connect(m_configWatcher, &QFileSystemWatcher::fileChanged, this, &BatchConvertPage::onConfigFileChanged);
}
}
BatchConvertPage::~BatchConvertPage()
{
if (m_configWatcher) {
m_configWatcher->removePaths(m_configWatcher->files());
}
}
void BatchConvertPage::initUI()
@@ -244,6 +254,9 @@ void BatchConvertPage::onEditRow(int row)
m_funcList[row] = newName;
updateTable();
if (saveToCustJson(m_funcList)) {
loadFromCustJson();
}
}
void BatchConvertPage::onAddFunction()
@@ -328,6 +341,9 @@ void BatchConvertPage::onRemoveFunction()
}
updateTable();
if (saveToCustJson(m_funcList)) {
loadFromCustJson();
}
}
void BatchConvertPage::onClearTable()
@@ -342,6 +358,9 @@ void BatchConvertPage::onClearTable()
if (reply == QMessageBox::Yes) {
m_funcList.clear();
updateTable();
if (saveToCustJson(m_funcList)) {
loadFromCustJson();
}
}
}
@@ -351,7 +370,6 @@ bool BatchConvertPage::saveToCustJson(const QStringList &funcList)
QFile file(jsonPath);
if (!file.open(QIODevice::ReadOnly)) {
LogManager::instance()->logError(QString("无法打开文件: %1").arg(jsonPath));
return false;
}
@@ -360,12 +378,19 @@ bool BatchConvertPage::saveToCustJson(const QStringList &funcList)
QString content = QString::fromUtf8(data);
int dirStart = content.indexOf("\"dir\":[");
int convertStart = content.indexOf("\"convert\":");
if (convertStart < 0) {
convertStart = content.indexOf("\"convert\" :");
}
if (convertStart < 0) {
return false;
}
int dirStart = content.indexOf("\"dir\":[", convertStart);
if (dirStart < 0) {
dirStart = content.indexOf("\"dir\" : [");
dirStart = content.indexOf("\"dir\" : [", convertStart);
}
if (dirStart < 0) {
LogManager::instance()->logError("未找到 \"dir\" 节点");
return false;
}
@@ -389,7 +414,6 @@ bool BatchConvertPage::saveToCustJson(const QStringList &funcList)
content.replace(arrayStart, arrayEnd - arrayStart, newDirArray);
if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) {
LogManager::instance()->logError(QString("无法写入文件: %1").arg(jsonPath));
return false;
}
@@ -404,7 +428,16 @@ void BatchConvertPage::loadFromCustJson()
QString jsonPath = QCoreApplication::applicationDirPath() + "/uf2touft3/cust.json";
QFile file(jsonPath);
if (!file.open(QIODevice::ReadOnly)) {
int retryCount = 0;
const int maxRetries = 3;
const int retryDelayMs = 100;
while (!file.open(QIODevice::ReadOnly) && retryCount < maxRetries) {
retryCount++;
QThread::msleep(retryDelayMs);
}
if (!file.isOpen()) {
return;
}
@@ -421,7 +454,16 @@ void BatchConvertPage::loadFromCustJson()
return;
}
int arrayStart = content.indexOf('[', convertStart);
int dirStart = content.indexOf("\"dir\":[", convertStart);
if (dirStart < 0) {
dirStart = content.indexOf("\"dir\" : [", convertStart);
}
if (dirStart < 0) {
return;
}
int arrayStart = content.indexOf('[', dirStart);
int bracketCount = 1;
int pos = arrayStart + 1;
while (pos < content.length() && bracketCount > 0) {
@@ -465,7 +507,6 @@ void BatchConvertPage::loadFromCustJson()
void BatchConvertPage::onStartConvert()
{
if (m_startBtn->text() == "停止转换") {
LogManager::instance()->log("用户请求停止转换...");
m_progressLabel->setText("正在停止转换...");
emit stopConvert();
return;
@@ -479,26 +520,14 @@ void BatchConvertPage::onStartConvert()
m_progressBar->setValue(0);
m_progressLabel->setText("正在准备转换...");
LogManager::instance()->log("========================================");
LogManager::instance()->log("正在写入 cust.json ...");
LogManager::instance()->log("功能列表:");
for (const QString &func : m_funcList) {
LogManager::instance()->log(QString(" - %1.service_design").arg(func));
}
if (saveToCustJson(m_funcList)) {
LogManager::instance()->log("cust.json 写入成功!");
m_progressLabel->setText("配置加载成功,开始转换...");
m_progressBar->setValue(20);
} else {
LogManager::instance()->logError("cust.json 写入失败!");
LogManager::instance()->log("========================================");
m_progressLabel->setText("配置加载失败");
return;
}
LogManager::instance()->log("========================================");
emit startConvert();
}
@@ -536,3 +565,18 @@ void BatchConvertPage::addFunction(const QString &funcName)
QMessageBox::warning(nullptr, "警告", "添加到业务转码成功,但保存到 cust.json 失败");
}
}
void BatchConvertPage::onConfigFileChanged(const QString &path)
{
QStringList oldList = m_funcList;
loadFromCustJson();
if (m_configWatcher && !m_configWatcher->files().contains(path)) {
m_configWatcher->addPath(path);
}
}
QString BatchConvertPage::getConfigFilePath() const
{
return QCoreApplication::applicationDirPath() + "/uf2touft3/cust.json";
}