127 lines
4.9 KiB
C++
127 lines
4.9 KiB
C++
#include "globaldefine.h"
|
|
#include "devicepanel.h"
|
|
#include "deviceitem.h"
|
|
#include "gutil/qnetwork.h"
|
|
#include <QDir>
|
|
#include <QDateTime>
|
|
#include <QCoreApplication>
|
|
#include <QMessageBox>
|
|
#include <QMetaEnum>
|
|
|
|
QList<LedCard> gSelCards;
|
|
bool gVideoCompress = true;
|
|
bool gVideoTranscoding = true;
|
|
bool gTextAntialiasing = false;
|
|
bool gShowLoraScreen = false;
|
|
bool gWidthSplit = false;
|
|
|
|
DeviceItem *findItem(QString id) {
|
|
int cnt = gDevicePanel->mDeviceTable->topLevelItemCount();
|
|
for(int i=0; i<cnt; ++i) {
|
|
auto item = (DeviceItem*) gDevicePanel->mDeviceTable->topLevelItem(i);
|
|
if(item==0) continue;
|
|
if(item->mCard.id==id) return item;
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
QString checkReply(QNetworkReply *reply, QJsonDocument *outJson) {
|
|
auto err = errStr(reply);
|
|
if(! err.isEmpty()) {
|
|
auto data = reply->readAll();
|
|
if(! data.isEmpty()) err = err+"\n"+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
return err;
|
|
}
|
|
if(outJson) {
|
|
auto data = reply->readAll();
|
|
QJsonParseError jsonErr;
|
|
*outJson = QJsonDocument::fromJson(data, &jsonErr);
|
|
if(jsonErr.error != QJsonParseError::NoError) return "Json error: "+jsonErr.errorString()+"\n"+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
}
|
|
return "";
|
|
}
|
|
QString checkReplyForJson(QNetworkReply *reply, QJsonDocument *outJson, QByteArray *outData) {
|
|
auto err = errStr(reply);
|
|
auto data = reply->readAll();
|
|
if(outData) *outData = data;
|
|
if(! err.isEmpty()) {
|
|
if(! data.isEmpty()) err = err+"\n"+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
return err;
|
|
}
|
|
QJsonParseError jsonErr;
|
|
QJsonDocument json = QJsonDocument::fromJson(data, &jsonErr);
|
|
if(jsonErr.error != QJsonParseError::NoError) return "Json error: "+jsonErr.errorString()+"\n"+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
if(! json["success"].toBool()) return QCoreApplication::translate("Def","Fail")+". "+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
if(outJson) outJson->swap(json);
|
|
return "";
|
|
}
|
|
QString checkReplyForJson(QNetworkReply *reply, QString errField) {
|
|
auto err = errStr(reply);
|
|
auto data = reply->readAll();
|
|
if(! err.isEmpty()) {
|
|
if(! data.isEmpty()) err = err+"\n"+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
return err;
|
|
}
|
|
QJsonParseError jsonErr;
|
|
QJsonDocument json = QJsonDocument::fromJson(data, &jsonErr);
|
|
if(jsonErr.error != QJsonParseError::NoError) return "Json error: "+jsonErr.errorString()+"\n"+QCoreApplication::translate("Def","Device replied")+": "+data;
|
|
if(! json["success"].toBool()) {
|
|
auto errStr = json[errField].toString();
|
|
return QCoreApplication::translate("Def","Fail")+". "+QCoreApplication::translate("Def","Device replied")+": "+(errStr.isEmpty() ? data : errStr);
|
|
}
|
|
return "";
|
|
}
|
|
|
|
quint64 dirFileSize(const QString &path) {
|
|
QDir dir(path);
|
|
quint64 size = 0;
|
|
auto infos = dir.entryInfoList(QDir::Files);
|
|
foreach(QFileInfo fileInfo, infos) size += fileInfo.size();
|
|
auto subDirs = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
|
|
foreach(QString subDir, subDirs) size += dirFileSize(path + QDir::separator() + subDir);
|
|
return size;
|
|
}
|
|
|
|
bool copyDir(const QString &source, const QString &destination, bool override) {
|
|
QDir directory(source);
|
|
if(!directory.exists()) return false;
|
|
QString srcPath = QDir::toNativeSeparators(source);
|
|
if(!srcPath.endsWith(QDir::separator())) srcPath += QDir::separator();
|
|
QString dstPath = QDir::toNativeSeparators(destination);
|
|
if (!dstPath.endsWith(QDir::separator())) dstPath += QDir::separator();
|
|
|
|
bool error = false;
|
|
QStringList fileNames = directory.entryList(QDir::AllEntries | QDir::NoDotAndDotDot | QDir::Hidden);
|
|
for (QStringList::size_type i=0; i != fileNames.size(); ++i)
|
|
{
|
|
QString fileName = fileNames.at(i);
|
|
QString srcFilePath = srcPath + fileName;
|
|
QString dstFilePath = dstPath + fileName;
|
|
QFileInfo fileInfo(srcFilePath);
|
|
if (fileInfo.isFile() || fileInfo.isSymLink())
|
|
{
|
|
if (override)
|
|
{
|
|
QFile::setPermissions(dstFilePath, QFile::WriteOwner);
|
|
}
|
|
QFile::copy(srcFilePath, dstFilePath);
|
|
}
|
|
else if (fileInfo.isDir())
|
|
{
|
|
QDir dstDir(dstFilePath);
|
|
dstDir.mkpath(dstFilePath);
|
|
if (!copyDir(srcFilePath, dstFilePath, override))
|
|
{
|
|
error = true;
|
|
}
|
|
}
|
|
}
|
|
return !error;
|
|
}
|
|
unsigned char GetCheckCodeIn8(unsigned char * pBuffer,unsigned int uiSize) {
|
|
unsigned int i=0;
|
|
unsigned char ucCheckCode=0;
|
|
for (i=0;i<uiSize;i++) ucCheckCode+=pBuffer[i];
|
|
return (~ucCheckCode)&0x0ff;
|
|
}
|