diff --git a/src/blackcore/databasewriter.cpp b/src/blackcore/databasewriter.cpp index 84af3d874..715ffadfe 100644 --- a/src/blackcore/databasewriter.cpp +++ b/src/blackcore/databasewriter.cpp @@ -8,6 +8,7 @@ */ #include "databasewriter.h" +#include "blackcore/cookiemanager.h" #include "blackmisc/logmessage.h" #include "blackmisc/datastoreutility.h" #include "blackmisc/network/networkutils.h" @@ -25,36 +26,40 @@ namespace BlackCore { CDatabaseWriter::CDatabaseWriter(const Network::CUrl &baseUrl, QObject *parent) : QObject(parent), - m_modelUrl(getModelWriteUrl(baseUrl)) + m_modelPublishUrl(getModelPublishUrl(baseUrl)) { this->m_networkManager = new QNetworkAccessManager(this); + CCookieManager::setToAccessManager(this->m_networkManager); this->connect(this->m_networkManager, &QNetworkAccessManager::finished, this, &CDatabaseWriter::ps_postResponse); } - CStatusMessageList CDatabaseWriter::asyncWriteModel(const CAircraftModel &model) + CStatusMessageList CDatabaseWriter::asyncPublishModels(const CAircraftModelList &models) { - CStatusMessageList msg; + CStatusMessageList msgs; if (m_shutdown) { - msg.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Database writer shuts down")); - return msg; + msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Database writer shuts down")); + return msgs; } if (m_pendingReply) { - msg.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Another write operation in progress")); - return msg; + msgs.push_back(CStatusMessage(CStatusMessage::SeverityWarning, "Another write operation in progress")); + return msgs; } - QUrl url(m_modelUrl.toQUrl()); + QUrl url(m_modelPublishUrl.toQUrl()); QNetworkRequest request(url); QHttpMultiPart *multiPart = new QHttpMultiPart(QHttpMultiPart::FormDataType, this); - multiPart->append(CNetworkUtils::getJsonTextMutlipart(model.toJson())); - if (m_setup.get().dbDebugFlag()) { multiPart->append(CNetworkUtils::getMultipartWithDebugFlag()); } + multiPart->append(CNetworkUtils::getJsonTextMultipart(models.toDatabaseJson())); + if (m_setup.get().dbDebugFlag()) + { + multiPart->append(CNetworkUtils::getMultipartWithDebugFlag()); + } m_pendingReply = this->m_networkManager->post(request, multiPart); multiPart->setParent(m_pendingReply); - return msg; + return msgs; } void CDatabaseWriter::gracefulShutdown() @@ -69,8 +74,11 @@ namespace BlackCore void CDatabaseWriter::ps_postResponse(QNetworkReply *nwReplyPtr) { + static const CLogCategoryList cats(CLogCategoryList(this).join({ CLogCategory::swiftDbWebservice()})); QScopedPointer nwReply(nwReplyPtr); m_pendingReply = nullptr; + QUrl url(nwReply->url()); + QString urlString(url.toString()); if (m_shutdown) { @@ -82,30 +90,32 @@ namespace BlackCore { const QString dataFileData(nwReply->readAll().trimmed()); nwReply->close(); // close asap - if (dataFileData.isEmpty()) { - CLogMessage(this).error("No response data"); + const CStatusMessageList msgs({CStatusMessage(cats, CStatusMessage::SeverityError, "No response data from " + urlString)}); + emit published(CAircraftModelList(), CAircraftModelList(), msgs); return; } + CAircraftModelList modelsPublished; + CAircraftModelList modelsSkipped; CStatusMessageList msgs; - CVariant id; - bool success = CDatastoreUtility::parseSwiftWriteResponse(dataFileData, msgs, id); - CLogMessage(this).preformatted(msgs); + bool success = CDatastoreUtility::parseSwiftPublishResponse(dataFileData, modelsPublished, modelsSkipped, msgs); + emit published(modelsPublished, modelsSkipped, msgs); Q_UNUSED(success); } else { QString error = nwReply->errorString(); nwReply->close(); // close asap - CLogMessage(this).error(error); + const CStatusMessageList msgs( {CStatusMessage(cats, CStatusMessage::SeverityError, "HTTP error: " + error)}); + emit published(CAircraftModelList(), CAircraftModelList(), msgs); } } - Network::CUrl CDatabaseWriter::getModelWriteUrl(const Network::CUrl &baseUrl) + CUrl CDatabaseWriter::getModelPublishUrl(const Network::CUrl &baseUrl) { - return baseUrl.withAppendedPath("service/swiftwritemodel.php"); + return baseUrl.withAppendedPath("service/publishmodels.php"); } QList CDatabaseWriter::splitData(const QByteArray &data, int size) @@ -121,5 +131,4 @@ namespace BlackCore } return arrays; } - } // namespace diff --git a/src/blackcore/databasewriter.h b/src/blackcore/databasewriter.h index 0da49cf39..b12d43a73 100644 --- a/src/blackcore/databasewriter.h +++ b/src/blackcore/databasewriter.h @@ -15,7 +15,7 @@ #include "blackcore/blackcoreexport.h" #include "blackcore/data/globalsetup.h" #include "blackmisc/threadedreader.h" -#include "blackmisc/simulation/aircraftmodel.h" +#include "blackmisc/simulation/aircraftmodellist.h" #include #include @@ -33,24 +33,28 @@ namespace BlackCore CDatabaseWriter(const BlackMisc::Network::CUrl &baseUrl, QObject *parent); //! Write model to DB - BlackMisc::CStatusMessageList asyncWriteModel(const BlackMisc::Simulation::CAircraftModel &model); + BlackMisc::CStatusMessageList asyncPublishModels(const BlackMisc::Simulation::CAircraftModelList &models); //! Shutdown void gracefulShutdown(); + signals: + //! Published models, the response to \sa asyncPublishModels + void published(const BlackMisc::Simulation::CAircraftModelList &modelsPublished, const BlackMisc::Simulation::CAircraftModelList &modelsSkipped, const BlackMisc::CStatusMessageList &messages); + private slots: //! Post response void ps_postResponse(QNetworkReply *nwReplyPtr); private: BlackMisc::CData m_setup {this}; //!< data cache - BlackMisc::Network::CUrl m_modelUrl; + BlackMisc::Network::CUrl m_modelPublishUrl; QNetworkAccessManager *m_networkManager = nullptr; QNetworkReply *m_pendingReply = nullptr; bool m_shutdown = false; //! URL model web service - static BlackMisc::Network::CUrl getModelWriteUrl(const BlackMisc::Network::CUrl &baseUrl); + static BlackMisc::Network::CUrl getModelPublishUrl(const BlackMisc::Network::CUrl &baseUrl); //! Split data array static QList splitData(const QByteArray &data, int size);