Files
GUI/src/recon/ReconManager.cpp
2024-04-25 15:01:58 +08:00

142 lines
4.0 KiB
C++

#include "ReconManager.h"
#include "ReconClient.h"
#include "json/jsonobject.h"
#include <QTimer>
#include "QDebug"
namespace
{
const std::string CRT_FILE = "./cfgs/client.crt";
const std::string KEY_FILE = "./cfgs/client.key";
std::string toReconServerAddress(const QString& aIp, const QString& aPort)
{
return ("https://" + aIp + ":" + aPort).toStdString();
}
}
ReconManager* ReconManager::getInstance()
{
static ReconManager instance;
return &instance;
}
ReconManager::ReconManager(QObject* aParent)
: QObject(aParent)
, mReconClient(new ReconClient(CRT_FILE, KEY_FILE))
, mIsConnected(false)
{
init();
}
ReconManager::~ReconManager()
{
delete mReconClient;
}
void ReconManager::init()
{
host reconServerInfo = JsonObject::Instance()->getServer(JsonObject::RECON);
mReconClient->SetHost(toReconServerAddress(reconServerInfo.ip , reconServerInfo.port));
}
void ReconManager::setReconIpAndPort(const QString& aIp, const QString& aPort)
{
mReconClient->SetHost(toReconServerAddress(aIp, aPort));
}
void ReconManager::createEmptyScan(const QString& aScanID, const QString& aPath)
{
Scan empty{aScanID.toStdString(), "", "", aPath.toStdString(),0};
auto result = mReconClient->Create(empty);
if(result.good())
{
qDebug()<< "create empty scan success, scanID: "<< aScanID;
emit createEmptyScanResponsed(true, aScanID);
}
else
{
qDebug()<< "Create empty scan fail by %s\n" << result.error().data();
emit createEmptyScanResponsed(false, aScanID, result.error().data());
}
}
void ReconManager::createScan(const QString& aScanID, const QString& aPatientID, const QString& aReferenceID, const QString& aPath)
{
Scan scan{aScanID.toStdString(), aPatientID.toStdString(), aReferenceID.toStdString(), aPath.toStdString(), 1};
auto response = mReconClient->Create(scan);
if(response.good())
{
qDebug()<< "Recon create scan success, scanID: "<< aScanID;
emit createScanResponsed(true, aScanID);
}
else
{
qDebug()<< "Recon create scan failed by " << response.error().data();
emit createScanResponsed(false, aScanID, response.error().data());
}
}
void ReconManager::queryReconStatus(const QStringList& aScanIDs)
{
QMap<QString, int> result;
for(QString scanID : aScanIDs)
{
int state;
auto response = mReconClient->QueryScan(scanID.toStdString(), state);
if(response.bad())
{
QString msg = QString("Recon query failed by ") + response.error().data();
qDebug()<< msg;
emit queryReconStateResponsed(false, QVariant::fromValue(msg));
continue;
}
result.insert(scanID, state);
}
emit queryReconStateResponsed(true, QVariant::fromValue(result));
}
void ReconManager::checkReconConnection()
{
auto response = mReconClient->CheckActive();
if(mIsConnected != response.good())
{
emit checkReconConnectionResponsed(response.good());
}
if(mIsConnected == false && response.good())
{
emit restartCreatReconRecord();
}
mIsConnected = response.good();
}
void ReconManager::setPacsSettings(const QString& aClientAETitle, const QString& aServerAETitle, const QString& aServerIP, int aServerPort)
{
PACSSetting settings = {aClientAETitle.toStdString(), aServerAETitle.toStdString(), aServerIP.toStdString(), aServerPort};
auto response = mReconClient->SetPACSSetting(settings);
if(response.bad())
{
QString msg = QString("Set PACS settings failed : ") + response.error().data();
qDebug()<< msg;
emit setPacsSettingsResponsed(false, QVariant::fromValue(msg));
return;
}
emit setPacsSettingsResponsed(true, QVariant::fromValue(QString("Set PACS settings succeed.")));
}
void ReconManager::getReconVersion()
{
auto result = mReconClient->QueryVersion();
if(result.good())
{
emit getReconVersionResponsed(QString::fromStdString(result.message()));
}
}
bool ReconManager::isConnected()
{
return mIsConnected;
}