mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-04-07 11:05:33 +08:00
* db to entity flags as it also features entities not from DB * Flag enums singular (discussed with MS / slack)
82 lines
3.1 KiB
C++
82 lines
3.1 KiB
C++
/* Copyright (C) 2015
|
|
* swift project Community / Contributors
|
|
*
|
|
* This file is part of swift project. It is subject to the license terms in the LICENSE file found in the top-level
|
|
* directory of this distribution and at http://www.swift-project.org/license.html. No part of swift project,
|
|
* including this file, may be copied, modified, propagated, or distributed except according to the terms
|
|
* contained in the LICENSE file.
|
|
*/
|
|
|
|
#include "databasereader.h"
|
|
#include "blackmisc/logmessage.h"
|
|
#include "blackmisc/datastoreutility.h"
|
|
#include <QJsonDocument>
|
|
|
|
using namespace BlackMisc;
|
|
using namespace BlackMisc::Network;
|
|
|
|
namespace BlackCore
|
|
{
|
|
CDatabaseReader::CDatabaseReader(QObject *owner, const QString &name) :
|
|
BlackMisc::CThreadedReader(owner, name)
|
|
{ }
|
|
|
|
void CDatabaseReader::readInBackgroundThread(CEntityFlags::Entity entities)
|
|
{
|
|
if (m_shutdown) { return; }
|
|
bool s = QMetaObject::invokeMethod(this, "ps_read", Q_ARG(BlackMisc::Network::CEntityFlags::Entity, entities));
|
|
Q_ASSERT_X(s, Q_FUNC_INFO, "Invoke failed");
|
|
Q_UNUSED(s);
|
|
}
|
|
|
|
CDatabaseReader::JsonDatastoreResponse CDatabaseReader::transformReplyIntoDatastoreResponse(QNetworkReply *nwReply) const
|
|
{
|
|
this->threadAssertCheck();
|
|
JsonDatastoreResponse datastoreResponse;
|
|
if (m_shutdown || this->isFinished())
|
|
{
|
|
CLogMessage(this).debug() << Q_FUNC_INFO;
|
|
CLogMessage(this).info("Terminated data parsing process"); // for users
|
|
nwReply->abort();
|
|
return datastoreResponse; // stop, terminate straight away, ending thread
|
|
}
|
|
|
|
if (nwReply->error() == QNetworkReply::NoError)
|
|
{
|
|
const QString dataFileData = nwReply->readAll().trimmed();
|
|
nwReply->close(); // close asap
|
|
if (dataFileData.isEmpty()) { datastoreResponse.updated = QDateTime::currentDateTimeUtc(); return datastoreResponse; }
|
|
|
|
QJsonDocument jsonResponse = QJsonDocument::fromJson(dataFileData.toUtf8());
|
|
if (jsonResponse.isArray())
|
|
{
|
|
// directly an array, no further info
|
|
datastoreResponse.jsonArray = jsonResponse.array();
|
|
datastoreResponse.updated = QDateTime::currentDateTimeUtc();
|
|
}
|
|
else
|
|
{
|
|
QJsonObject responseObject(jsonResponse.object());
|
|
datastoreResponse.jsonArray = responseObject["data"].toArray();
|
|
QString ts(responseObject["latest"].toString());
|
|
datastoreResponse.updated = ts.isEmpty() ? QDateTime::currentDateTimeUtc() : CDatastoreUtility::parseTimestamp(ts);
|
|
}
|
|
return datastoreResponse;
|
|
}
|
|
|
|
// no valid response
|
|
QString error(nwReply->errorString());
|
|
QString url(nwReply->url().toString());
|
|
CLogMessage(this).warning("Reading data failed %1 %2") << error << url;
|
|
nwReply->abort();
|
|
return datastoreResponse;
|
|
}
|
|
|
|
bool CDatabaseReader::canConnect() const
|
|
{
|
|
QString m;
|
|
return canConnect(m);
|
|
}
|
|
|
|
} // namespace
|