From 28ce3956a68cb2d3595686c8cfdb461706be7af2 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Sun, 10 Dec 2017 18:59:36 +0100 Subject: [PATCH] Implemented GetProjectsReply --- replies/getprojectsreply.cpp | 85 ++++++++++++++++++++++++++++++++++-- replies/getprojectsreply.h | 10 +++++ zeiterfassungapi.cpp | 60 ------------------------- 3 files changed, 92 insertions(+), 63 deletions(-) diff --git a/replies/getprojectsreply.cpp b/replies/getprojectsreply.cpp index 30201a3..b212956 100644 --- a/replies/getprojectsreply.cpp +++ b/replies/getprojectsreply.cpp @@ -1,7 +1,86 @@ #include "getprojectsreply.h" -GetProjectsReply::GetProjectsReply(QNetworkReply *reply, ZeiterfassungApi *zeiterfassung) - : ZeiterfassungReply(zeiterfassung) -{ +#include +#include +#include +#include +#include +#include +GetProjectsReply::GetProjectsReply(QNetworkReply *reply, ZeiterfassungApi *zeiterfassung) : + ZeiterfassungReply(zeiterfassung), + m_reply(reply) +{ + connect(reply, &QNetworkReply::finished, this, &ZeiterfassungReply::requestFinished); +} + +const QVector &GetProjectsReply::projects() const +{ + return m_projects; +} + +void GetProjectsReply::requestFinished() +{ + if(m_replies.getProjects->error() != QNetworkReply::NoError) + { + setSuccess(false); + setMessage(tr("Request error occured: %0").arg(m_replies.getProjects->error())); + goto end; + } + + { + QJsonParseError error; + QJsonDocument document = QJsonDocument::fromJson(m_replies.getProjects->readAll(), &error); + if(error.error != QJsonParseError::NoError) + { + setSuccess(false); + setMessage(tr("Parsing JSON failed: %0").arg(error.errorString())); + goto end; + } + + if(!document.isObject()) + { + setSuccess(false); + setMessage(tr("JSON document is not an object!")); + goto end; + } + + auto rootObj = document.object(); + + if(!rootObj.contains(QStringLiteral("elements"))) + { + setSuccess(false); + setMessage(tr("JSON does not contain elements!")); + goto end; + } + + auto elements = rootObj.value(QStringLiteral("elements")); + + if(!elements.isArray()) + { + setSuccess(false); + setMessage(tr("elements is not an array!")); + goto end; + } + + auto elementsArr = elements.toArray(); + + setSuccess(true); + m_projects.clear(); + for(const auto &val : elementsArr) + { + auto obj = val.toObject(); + + m_projects.append({ + obj.value(QStringLiteral("label")).toString(), + obj.value(QStringLiteral("value")).toString() + }); + } + } + + end: + m_replies.getProjects->deleteLater(); + m_replies.getProjects = Q_NULLPTR; + + Q_EMIT finished(); } diff --git a/replies/getprojectsreply.h b/replies/getprojectsreply.h index 7822cc8..281cde6 100644 --- a/replies/getprojectsreply.h +++ b/replies/getprojectsreply.h @@ -2,6 +2,7 @@ #define GETPROJECTSREPLY_H #include "zeiterfassungreply.h" +#include "zeiterfassungapi.h" class QNetworkReply; @@ -11,6 +12,15 @@ class GetProjectsReply : public ZeiterfassungReply public: GetProjectsReply(QNetworkReply *reply, ZeiterfassungApi *zeiterfassung); + + const QVector &projects() const; + +private Q_SLOTS: + void requestFinished(); + +private: + QNetworkReply *m_reply; + QVector m_projects; }; #endif // GETPROJECTSREPLY_H diff --git a/zeiterfassungapi.cpp b/zeiterfassungapi.cpp index c280c82..b61d962 100644 --- a/zeiterfassungapi.cpp +++ b/zeiterfassungapi.cpp @@ -291,66 +291,6 @@ GetAuswertungReply *ZeiterfassungApi::doGetAuswertung(int userId, const QDate &d return new GetAuswertungReply(reply, this); } -void ZeiterfassungApi::getProjectsRequestFinished() -{ - if(m_replies.getProjects->error() != QNetworkReply::NoError) - { - Q_EMIT getProjectsFinished(false, tr("Request error occured: %0").arg(m_replies.getProjects->error()), {}); - goto end; - } - - { - QJsonParseError error; - QJsonDocument document = QJsonDocument::fromJson(m_replies.getProjects->readAll(), &error); - if(error.error != QJsonParseError::NoError) - { - Q_EMIT getProjectsFinished(false, tr("Parsing JSON failed: %0").arg(error.errorString()), {}); - goto end; - } - - if(!document.isObject()) - { - Q_EMIT getProjectsFinished(false, tr("JSON document is not an object!"), {}); - goto end; - } - - auto rootObj = document.object(); - - if(!rootObj.contains(QStringLiteral("elements"))) - { - Q_EMIT getProjectsFinished(false, tr("JSON does not contain elements!"), {}); - goto end; - } - - auto elements = rootObj.value(QStringLiteral("elements")); - - if(!elements.isArray()) - { - Q_EMIT getProjectsFinished(false, tr("elements is not an array!"), {}); - goto end; - } - - auto elementsArr = elements.toArray(); - QVector projects; - - for(const auto &val : elementsArr) - { - auto obj = val.toObject(); - - projects.append({ - obj.value(QStringLiteral("label")).toString(), - obj.value(QStringLiteral("value")).toString() - }); - } - - Q_EMIT getProjectsFinished(true, QString(), projects); - } - - end: - m_replies.getProjects->deleteLater(); - m_replies.getProjects = Q_NULLPTR; -} - void ZeiterfassungApi::getAuswertungRequest0Finished() { if(m_replies.getAuswertung->error() != QNetworkReply::NoError)