Implemented GetProjectsReply

This commit is contained in:
0xFEEDC0DE64
2017-12-10 18:59:36 +01:00
parent 6b43c90e5b
commit 28ce3956a6
3 changed files with 92 additions and 63 deletions
+82 -3
View File
@@ -1,7 +1,86 @@
#include "getprojectsreply.h"
GetProjectsReply::GetProjectsReply(QNetworkReply *reply, ZeiterfassungApi *zeiterfassung)
: ZeiterfassungReply(zeiterfassung)
{
#include <QNetworkReply>
#include <QJsonParseError>
#include <QJsonDocument>
#include <QJsonObject>
#include <QJsonValue>
#include <QJsonArray>
GetProjectsReply::GetProjectsReply(QNetworkReply *reply, ZeiterfassungApi *zeiterfassung) :
ZeiterfassungReply(zeiterfassung),
m_reply(reply)
{
connect(reply, &QNetworkReply::finished, this, &ZeiterfassungReply::requestFinished);
}
const QVector<ZeiterfassungApi::Project> &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();
}
+10
View File
@@ -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<ZeiterfassungApi::Project> &projects() const;
private Q_SLOTS:
void requestFinished();
private:
QNetworkReply *m_reply;
QVector<ZeiterfassungApi::Project> m_projects;
};
#endif // GETPROJECTSREPLY_H
-60
View File
@@ -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<Project> 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)