You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
3.9 KiB
C++
148 lines
3.9 KiB
C++
#include "common.h"
|
|
#include <fstream>
|
|
#include <QDir>
|
|
#include <QDebug>
|
|
|
|
using namespace nlohmann;
|
|
|
|
Common::Common()
|
|
{
|
|
|
|
}
|
|
|
|
bool Common::loadConfig(const QString &filePath)
|
|
{
|
|
m_configFilePath = filePath;
|
|
std::ifstream jsonStream(filePath.toLocal8Bit());
|
|
m_configJson = json::parse(jsonStream);
|
|
jsonStream.close();
|
|
// 提取网络配置
|
|
auto netCfg = m_configJson.at("network");
|
|
m_ipAddr = QString::fromStdString(netCfg["ip"]);
|
|
m_srcPort = netCfg["src_port"];
|
|
m_dstPort = netCfg["dst_port"];
|
|
// 提取工作模式
|
|
auto workmodes = m_configJson.at("workmode");
|
|
for (const auto& workmode : workmodes)
|
|
{
|
|
QString name = QString::fromStdString(workmode["name"]);
|
|
int index = workmode["index"];
|
|
QString path = QString::fromStdString(workmode["exe_path"]);
|
|
QString reworkPath = QString::fromStdString(workmode["rework_exe_path"]);
|
|
m_modeConfigs[index] = ModeConfig{index, name, path, reworkPath};
|
|
}
|
|
// 提取产品配置
|
|
auto products = m_configJson.at("products");
|
|
for (const auto& product : products)
|
|
{
|
|
int index = product["index"];
|
|
bool selected = product["selected"];
|
|
int mode = product["mode"];
|
|
QString formatStr = QString::fromStdString(product["format"]);
|
|
m_productConfigs[index] = ProductConfig{index, static_cast<Mode>(mode), selected, formatStr};
|
|
}
|
|
FilterSelectedProducts();
|
|
return true;
|
|
}
|
|
|
|
bool Common::saveConfig(const QMap<int, ProductConfig> &productsCfg, const QMap<int, ModeConfig> &workmodeCfg)
|
|
{
|
|
setProductConfig(productsCfg);
|
|
setWorkModeConfigs(workmodeCfg);
|
|
saveConfig();
|
|
return true;
|
|
}
|
|
|
|
QString Common::getHostAddress() const
|
|
{
|
|
return m_ipAddr;
|
|
}
|
|
|
|
int Common::getSrcPort() const
|
|
{
|
|
return m_srcPort;
|
|
}
|
|
|
|
int Common::getDstPort() const
|
|
{
|
|
return m_dstPort;
|
|
}
|
|
|
|
bool Common::saveConfig()
|
|
{
|
|
std::ofstream outFile(m_configFilePath.toLocal8Bit());
|
|
if (!outFile)
|
|
{
|
|
qDebug() << "无法打开文件进行写入!";
|
|
return false;
|
|
}
|
|
outFile << m_configJson.dump(4);
|
|
outFile.close();
|
|
return true;
|
|
}
|
|
|
|
void Common::FilterSelectedProducts()
|
|
{
|
|
// 提取用于生产产品列表
|
|
m_selectedProduct.clear();
|
|
for (const auto& productCfg : m_productConfigs)
|
|
{
|
|
if (productCfg.selected)
|
|
{
|
|
m_selectedProduct[productCfg.productFormat] = productCfg.workMode;
|
|
}
|
|
}
|
|
}
|
|
|
|
QMap<int, ProductConfig> Common::getProductConfigs()
|
|
{
|
|
return m_productConfigs;
|
|
}
|
|
|
|
void Common::setProductConfig(const QMap<int, ProductConfig> &productsCfg)
|
|
{
|
|
m_productConfigs = productsCfg;
|
|
// 更新产品配置
|
|
for (auto& product : m_configJson["products"])
|
|
{
|
|
int index = product["index"];
|
|
product["selected"] = m_productConfigs[index].selected;
|
|
product["format"] = m_productConfigs[index].productFormat.toStdString();
|
|
product["mode"] = m_productConfigs[index].workMode;
|
|
}
|
|
FilterSelectedProducts();
|
|
}
|
|
|
|
QMap<int, ModeConfig> Common::getWorkModeConfigs()
|
|
{
|
|
return m_modeConfigs;
|
|
}
|
|
|
|
void Common::setWorkModeConfigs(const QMap<int, ModeConfig> &workmodeCfg)
|
|
{
|
|
m_modeConfigs = workmodeCfg;
|
|
// 更新工作模式配置
|
|
for (auto& workmode : m_configJson["workmode"])
|
|
{
|
|
int index = workmode["index"];
|
|
workmode["name"] = m_modeConfigs[index].name.toStdString();
|
|
workmode["exe_path"] = m_modeConfigs[index].workPath.toStdString();
|
|
workmode["rework_exe_path"] = m_modeConfigs[index].reworkPath.toStdString();
|
|
}
|
|
}
|
|
|
|
const QMap<QString, Mode> &Common::getSelectedProducts() const
|
|
{
|
|
return m_selectedProduct;
|
|
}
|
|
|
|
int Common::getCurrentWorkMode() const
|
|
{
|
|
return m_currentMode.load();
|
|
}
|
|
|
|
void Common::setCurrentWorkMode(const int workMode)
|
|
{
|
|
m_currentMode.store(workMode);
|
|
}
|