Files
capture/Config/Config.cpp
T
2024-10-28 15:33:11 +08:00

891 lines
19 KiB
C++

#include "Config.h"
/*
* 配置类,主要用于读写配置信息,全部都采用全局静态函数
*/
QString Config::ConfigFile = "./config/inital.json";
Config::Config(QObject *parent) :
QObject(parent)
{
qInfo() << "Config Operation";
QDir *Dir = new QDir;
if(!Dir->exists("./Config"))
if(Dir->mkdir("./Config"))//如果文件夹不存在就新建
{
qInfo() << "create config dir";
}
delete Dir;
Dir = nullptr;
loadJson(ConfigFile);
}
Config::~Config()
{
}
void Config::loadJson(const QString& jsonFilename)
{
if (jsonFilename.isEmpty()) {
return;
}
qDebug() << "Loading " << jsonFilename;
QFile jsonFile(jsonFilename);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
qWarning() << "Unable to open file" << jsonFilename << jsonFile.errorString();
return;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qWarning() << jsonFilename << "Unable to open json document" << jsonParseError.errorString();
return;
}
ConfigJson = doc.object();
}
QJsonObject Config::getJsonObject(QString key)
{
QJsonObject obj;
QJsonValue Value = ConfigJson.value(key);
if(Value.isObject())
{
obj = Value.toObject();
}
return obj;
}
void Config::setJsonObject(QString key,QJsonValue value)
{
ConfigJson[key] = value;
QFile file(ConfigFile);
if(!file.open(QIODevice::ReadWrite|QFile::Truncate)) {
qDebug() << "File open error";
}
QJsonDocument doc(QJsonDocument::fromJson(file.readAll()));
doc.setObject(ConfigJson);
file.write(doc.toJson());
file.close();
}
QString Config::getCommandFile()
{
QJsonObject obj = getJsonObject("commandfile");
QString file = obj.value("path").toString();
return file;
}
void Config::setCommandFile(QString file)
{
QJsonObject obj;
obj["path"] = file;
setJsonObject("commandfile",obj);
}
QList<QMap<QVariant,QVariant>> Config::getConnet(void)
{
QList<QMap<QVariant,QVariant>> soketlist;
/*
* qmap:
*
* "name" : name
* "ipaddr" : ip
* "port" : port
*
*/
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return soketlist;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
return soketlist;
}
QJsonArray sockets;
QJsonObject root = doc.object();
if(root.contains("sockets"))
{
sockets = root.value("sockets").toArray();
}
else
{
QJsonArray sock;
root.insert("sockets",sock);
sockets = root.value("sockets").toArray();
}
foreach (QJsonValue item, sockets) {
QJsonObject sock = item.toObject();
QMap<QVariant,QVariant> s;
s.insert("name",sock.value("name").toString());
s.insert("ipaddr",sock.value("ipaddr").toString());
s.insert("port",sock.value("port").toString());
soketlist.append(s);
}
return soketlist;
}
bool Config::insertConnet(QVariant name, QVariant ipaddr, QVariant port)
{
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
QFile file(ConfigFile);
if(!file.exists())
{
bool ok = file.open(QIODevice::ReadWrite);
if(ok)
{
file.write("{}");
file.close();
}
}
QJsonObject info;
info["name"] = name.toString();
info["ipaddr"] = ipaddr.toString();
info["port"] = port.toString();
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qDebug() << "error" << jsonParseError.errorString();
return false;
}
QJsonArray sockets;
QJsonObject root = doc.object();
if(root.contains("sockets"))
{
sockets = root.value("sockets").toArray();
}
else
{
QJsonArray sock;
root.insert("sockets",sock);
sockets = root.value("sockets").toArray();
}
bool isfound = false;
foreach (QJsonValue item, sockets) {
QJsonObject sock = item.toObject();
if((sock.value("ipaddr") == info.value("ipaddr")) &&
(sock.value("port") == info.value("port")))
{
isfound = true;
break;
}
}
if(isfound == false)
{
sockets.append(info);
}
root["sockets"] = sockets;
doc.setObject(root);
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
return !isfound;
}
bool Config::deleteConnet(QVariant ipaddr, QVariant port)
{
bool flag = false;
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
QJsonObject info;
info["ipaddr"] = ipaddr.toString();
info["port"] = port.toString();
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
return false;
}
QJsonArray sockets;
QJsonObject root = doc.object();
if(root.contains("sockets"))
{
sockets = root.value("sockets").toArray();
}
else
{
QJsonArray sock;
root.insert("sockets",sock);
sockets = root.value("sockets").toArray();
}
QJsonArray after;
foreach (QJsonValue item, sockets) {
QJsonObject sock = item.toObject();
if((sock.value("ipaddr") == info.value("ipaddr")) &&
(sock.value("port") == info.value("port")))
{
flag = true;
}
else
{
after.append(item);
}
}
root["sockets"] = after;
doc.setObject(root);
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
return flag;
}
bool Config::modifyConnet(QVariant name, QVariant ipaddr, QVariant port, QVariant newname, QVariant newipaddr, QVariant newport)
{
bool flag = false;
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
QJsonObject info;
info["name"] = name.toString();
info["ipaddr"] = ipaddr.toString();
info["port"] = port.toString();
QJsonObject newinfo;
newinfo["name"] = newname.toString();
newinfo["ipaddr"] = newipaddr.toString();
newinfo["port"] = newport.toString();
if((info.value("ipaddr") == newinfo.value("ipaddr")) &&
(info.value("port") == newinfo.value("port")) &&
(info.value("name") == newinfo.value("name")) )
{
flag = true;
qDebug() << flag;
return flag;
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
return false;
}
QJsonArray sockets;
QJsonObject root = doc.object();
if(root.contains("sockets"))
{
sockets = root.value("sockets").toArray();
}
else
{
QJsonArray sock;
root.insert("sockets",sock);
sockets = root.value("sockets").toArray();
}
QJsonArray after;
if(sockets.contains(newinfo))
{
return false;
}
foreach (QJsonValue item, sockets) {
QJsonObject sock = item.toObject();
if((sock.value("ipaddr") == info.value("ipaddr")) &&
(sock.value("port") == info.value("port")))
{
flag = true;
after.append(newinfo);
}
else
{
after.append(item);
}
}
root["sockets"] = after;
doc.setObject(root);
if(flag)
{
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
}
return flag;
}
QVariant Config::getSetting(QVariant key , bool *flag)
{
QVariant value = 0;
bool ok = false;
if(flag == nullptr)
{
flag = &ok;
}
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
*flag = false;
return value;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qDebug() << "error" << jsonParseError.errorString();
*flag = false;
return value;
}
QJsonObject settings;
QJsonObject root = doc.object();
if(root.contains("settings"))
{
settings = root.value("settings").toObject();
if(settings.contains(key.toString()))
{
value = settings.value(key.toString());
*flag = true;
}
else
{
*flag = false;
}
}
else
{
*flag = false;
}
return value;
}
bool Config::insertSetting(QVariant key, QVariant value)
{
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
QFile file(ConfigFile);
if(!file.exists())
{
bool ok = file.open(QIODevice::ReadWrite);
if(ok)
{
file.write("{}");
file.close();
}
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qDebug() << "error" << jsonParseError.errorString();
return false;
}
QJsonObject settings;
QJsonObject root = doc.object();
if(root.contains("settings"))
{
settings = root.value("settings").toObject();
}
else
{
QJsonObject setting;
root.insert("settings",setting);
settings = root.value("settings").toObject();
}
//修改
settings[key.toString()] = value.toJsonValue();
root["settings"] = settings;
doc.setObject(root);
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
return true;
}
bool Config::deleteSetting(QVariant key)
{
bool flag = false;
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
return false;
}
QJsonObject settings;
QJsonObject root = doc.object();
if(root.contains("settings"))
{
settings = root.value("settings").toObject();
}
else
{
//如果没有找到设置的内容就返回
return false;
}
if(settings.contains(key.toString()))
{
settings.remove(key.toString());
flag = true;
}
root["settings"] = settings;
doc.setObject(root);
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
return flag;
}
QVariant Config::get(QVariant group, QVariant key , bool *flag)
{
QVariant value = 0;
bool ok = false;
if(flag == nullptr)
{
flag = &ok;
}
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
*flag = false;
return value;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qDebug() << "error" << jsonParseError.errorString();
*flag = false;
return value;
}
QJsonObject settings;
QJsonObject root = doc.object();
if(root.contains(group.toString()))
{
settings = root.value(group.toString()).toObject();
if(settings.contains(key.toString()))
{
value = settings.value(key.toString());
*flag = true;
}
else
{
*flag = false;
}
}
else
{
*flag = false;
}
return value;
}
bool Config::insert(QVariant group, QVariant key, QVariant value)
{
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
QFile file(ConfigFile);
if(!file.exists())
{
bool ok = file.open(QIODevice::ReadWrite);
if(ok)
{
file.write("{}");
file.close();
}
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
qDebug() << "error" << jsonParseError.errorString();
return false;
}
QJsonObject settings;
QJsonObject root = doc.object();
if(root.contains(group.toString()))
{
settings = root.value(group.toString()).toObject();
}
else
{
QJsonObject setting;
root.insert(group.toString(),setting);
settings = root.value(group.toString()).toObject();
}
//修改
settings[key.toString()] = value.toJsonValue();
root[group.toString()] = settings;
doc.setObject(root);
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
return true;
}
bool Config::remove(QVariant group, QVariant key)
{
bool flag = false;
//构建日志目录
QDir *dir = new QDir;
if(!dir->exists("./config"))
{
dir->mkdir("./config");//如果文件夹不存在就新建
}
//读取现有文档,获取obj
QFile jsonFile(ConfigFile);
if (!jsonFile.open(QIODevice::ReadOnly | QIODevice::Text)) {
return false;
}
QByteArray bytes = jsonFile.readAll();
jsonFile.close();
QJsonParseError jsonParseError;
QJsonDocument doc = QJsonDocument::fromJson(bytes, &jsonParseError);
if (jsonParseError.error != QJsonParseError::NoError) {
return false;
}
QJsonObject settings;
QJsonObject root = doc.object();
if(root.contains(group.toString()))
{
settings = root.value(group.toString()).toObject();
}
else
{
//如果没有找到设置的内容就返回
return false;
}
if(settings.contains(key.toString()))
{
settings.remove(key.toString());
flag = true;
}
root[group.toString()] = settings;
doc.setObject(root);
QFile savefile(ConfigFile);
if(!savefile.open(QIODevice::WriteOnly|QIODevice::Truncate)) {
qDebug() << "file open error";
}
savefile.write(doc.toJson());
savefile.close();
return flag;
}
QString Config::Bin2Hex(QByteArray raw)
{
//原始数据转16进制代码
QString str;
QString data = raw.toHex().data();//以十六进制显示
data = data.toUpper ();//转换为大写
for(int i = 0;i<data.length ();i+=2)//填加空格
{
QString st = data.mid (i,2);
str += st;
str += " ";
}
return str;
}
QStringList Config::getFiles(const QString &filePath,const QString &fileSuffix)
{
QStringList list;
list.clear();
QDir Dir(filePath); //查看工作路径是否存在
if(!Dir.exists()){ return list;} //如果文件夹不存在则返回
Dir.setFilter(QDir::Files); //设置过滤器只查看文件
QFileInfoList filelist = Dir.entryInfoList(QDir::Files); //获取所有文件
foreach (QFileInfo file, filelist) //遍历只加载.fileSuffix到文件列表
{
if(file.fileName().split(".").back() == fileSuffix) //判断进行再次确认是.fileSuffix
{
list.push_back(file.absoluteFilePath());
}
}
return list;
}