From 4e48d3c2f26b5f4ee851060bad3422afc750df40 Mon Sep 17 00:00:00 2001 From: 0xFEEDC0DE64 <0xFEEDC0DE64@gmail.com> Date: Wed, 20 Dec 2017 19:28:18 +0100 Subject: [PATCH] Added second request for user data to get more data #19 --- zeiterfassunglib/replies/getuserinforeply.cpp | 128 +++++++++++++++--- zeiterfassunglib/replies/getuserinforeply.h | 21 ++- zeiterfassunglib/zeiterfassungapi.cpp | 62 +++------ 3 files changed, 146 insertions(+), 65 deletions(-) diff --git a/zeiterfassunglib/replies/getuserinforeply.cpp b/zeiterfassunglib/replies/getuserinforeply.cpp index 73d751b..60caed0 100644 --- a/zeiterfassunglib/replies/getuserinforeply.cpp +++ b/zeiterfassunglib/replies/getuserinforeply.cpp @@ -4,14 +4,21 @@ #include #include #include +#include #include "zeiterfassungapi.h" -GetUserInfoReply::GetUserInfoReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung) : +GetUserInfoReply::GetUserInfoReply(std::unique_ptr &&reply0, std::unique_ptr &&reply1, + ZeiterfassungApi *zeiterfassung) : ZeiterfassungReply(zeiterfassung), - m_reply(std::move(reply)) + m_reply0(std::move(reply0)), + m_reply1(std::move(reply1)) { - connect(m_reply.get(), &QNetworkReply::finished, this, &GetUserInfoReply::requestFinished); + Q_ASSERT(m_reply0 != Q_NULLPTR); + Q_ASSERT(m_reply1 != Q_NULLPTR); + + connect(m_reply0.get(), &QNetworkReply::finished, this, &GetUserInfoReply::request0Finished); + connect(m_reply1.get(), &QNetworkReply::finished, this, &GetUserInfoReply::request1Finished); } const GetUserInfoReply::UserInfo &GetUserInfoReply::userInfo() const @@ -19,29 +26,32 @@ const GetUserInfoReply::UserInfo &GetUserInfoReply::userInfo() const return m_userInfo; } -void GetUserInfoReply::requestFinished() +void GetUserInfoReply::request0Finished() { - if(m_reply->error() != QNetworkReply::NoError) + if(m_reply0->error() != QNetworkReply::NoError) { setSuccess(false); - setMessage(tr("Request error occured: %0").arg(m_reply->error())); + setMessage(tr("Request 0 error occured: %0").arg(m_reply0->error())); + m_reply1 = Q_NULLPTR; goto end; } { QJsonParseError error; - auto document = QJsonDocument::fromJson(m_reply->readAll(), &error); + auto document = QJsonDocument::fromJson(m_reply0->readAll(), &error); if(error.error != QJsonParseError::NoError) { setSuccess(false); - setMessage(tr("Parsing JSON failed: %0").arg(error.errorString())); + setMessage(tr("Parsing JSON 0 failed: %0").arg(error.errorString())); + m_reply1 = Q_NULLPTR; goto end; } if(!document.isObject()) { setSuccess(false); - setMessage(tr("JSON document is not an object!")); + setMessage(tr("JSON document 0 is not an object!")); + m_reply1 = Q_NULLPTR; goto end; } @@ -50,7 +60,8 @@ void GetUserInfoReply::requestFinished() if(!rootObj.contains(QStringLiteral("evoAppsUser"))) { setSuccess(false); - setMessage(tr("JSON does not contain evoAppsUser!")); + setMessage(tr("JSON 0 does not contain evoAppsUser!")); + m_reply1 = Q_NULLPTR; goto end; } @@ -60,23 +71,100 @@ void GetUserInfoReply::requestFinished() { setSuccess(false); setMessage(tr("evoAppsUser is not an object!")); + m_reply1 = Q_NULLPTR; goto end; } auto evoAppsUserObj = evoAppsUser.toObject(); - setSuccess(true); - m_userInfo = { - evoAppsUserObj.value(QStringLiteral("persNr")).toInt(), - evoAppsUserObj.value(QStringLiteral("email")).toString(), - evoAppsUserObj.value(QStringLiteral("longUsername")).toString(), - evoAppsUserObj.value(QStringLiteral("text")).toString(), - evoAppsUserObj.value(QStringLiteral("username")).toString() - }; + if(!m_reply1) + setSuccess(true); + + m_userInfo.userId = evoAppsUserObj.value(QStringLiteral("persNr")).toInt(); + m_userInfo.email = evoAppsUserObj.value(QStringLiteral("email")).toString(); + m_userInfo.longUsername = evoAppsUserObj.value(QStringLiteral("longUsername")).toString(); + m_userInfo.text = evoAppsUserObj.value(QStringLiteral("text")).toString(); + m_userInfo.username = evoAppsUserObj.value(QStringLiteral("username")).toString(); } end: - m_reply = Q_NULLPTR; + m_reply0 = Q_NULLPTR; - Q_EMIT finished(); + if(!m_reply1) + Q_EMIT finished(); +} + +void GetUserInfoReply::request1Finished() +{ + if(m_reply1->error() != QNetworkReply::NoError) + { + setSuccess(false); + setMessage(tr("Request 1 error occured: %0").arg(m_reply0->error())); + m_reply0 = Q_NULLPTR; + goto end; + } + + { + QJsonParseError error; + auto document = QJsonDocument::fromJson(m_reply1->readAll(), &error); + if(error.error != QJsonParseError::NoError) + { + setSuccess(false); + setMessage(tr("Parsing JSON 1 failed: %0").arg(error.errorString())); + m_reply0 = Q_NULLPTR; + goto end; + } + + if(!document.isArray()) + { + setSuccess(false); + setMessage(tr("JSON document 1 is not an array!")); + m_reply0 = Q_NULLPTR; + goto end; + } + + auto arr = document.array(); + + if(arr.isEmpty()) + { + setSuccess(false); + setMessage(tr("JSON array 1 is empty!")); + m_reply0 = Q_NULLPTR; + goto end; + } + + auto first = arr.first(); + + if(!first.isObject()) + { + setSuccess(false); + setMessage(tr("JSON array value is not an object!")); + m_reply0 = Q_NULLPTR; + goto end; + } + + auto obj = first.toObject(); + + if(!m_reply0) + setSuccess(true); + + m_userInfo.gemeinde = obj.value(QStringLiteral("gemeinde")).toString(); + m_userInfo.ort = obj.value(QStringLiteral("ort")).toString(); + m_userInfo.angFrom = QDate::fromString(QString::number(obj.value(QStringLiteral("angFrom")).toInt()), QStringLiteral("yyyyMMdd")); + m_userInfo.angTill = QDate::fromString(QString::number(obj.value(QStringLiteral("angTill")).toInt()), QStringLiteral("yyyyMMdd")); + m_userInfo.gebOrt = obj.value(QStringLiteral("gebOrt")).toString(); + m_userInfo.plz = obj.value(QStringLiteral("plz")).toString(); + m_userInfo.religion = obj.value(QStringLiteral("religion")).toString(); + m_userInfo.bereich = obj.value(QStringLiteral("bereich")).toString(); + m_userInfo.verwendgr = obj.value(QStringLiteral("verwendgr")).toString(); + m_userInfo.taetig = obj.value(QStringLiteral("taetig")).toString(); + m_userInfo.arbverh = obj.value(QStringLiteral("arbverh")).toString(); + m_userInfo.betriebsnr = obj.value(QStringLiteral("betriebsnr")).toString(); + } + + end: + m_reply1 = Q_NULLPTR; + + if(!m_reply0) + Q_EMIT finished(); } diff --git a/zeiterfassunglib/replies/getuserinforeply.h b/zeiterfassunglib/replies/getuserinforeply.h index 30e2579..4a4bb76 100644 --- a/zeiterfassunglib/replies/getuserinforeply.h +++ b/zeiterfassunglib/replies/getuserinforeply.h @@ -15,7 +15,8 @@ class ZEITERFASSUNGLIBSHARED_EXPORT GetUserInfoReply : public ZeiterfassungReply Q_OBJECT public: - GetUserInfoReply(std::unique_ptr &&reply, ZeiterfassungApi *zeiterfassung); + GetUserInfoReply(std::unique_ptr &&reply0, std::unique_ptr &&reply1, + ZeiterfassungApi *zeiterfassung); struct UserInfo { @@ -24,15 +25,29 @@ public: QString longUsername; QString text; QString username; + QString gemeinde; + QString ort; + QDate angFrom; + QDate angTill; + QString gebOrt; + QString plz; + QString religion; + QString bereich; + QString verwendgr; + QString taetig; + QString arbverh; + QString betriebsnr; }; const UserInfo &userInfo() const; private Q_SLOTS: - void requestFinished(); + void request0Finished(); + void request1Finished(); private: - std::unique_ptr m_reply; + std::unique_ptr m_reply0; + std::unique_ptr m_reply1; UserInfo m_userInfo; }; diff --git a/zeiterfassunglib/zeiterfassungapi.cpp b/zeiterfassunglib/zeiterfassungapi.cpp index 0b4298e..b6dd10a 100644 --- a/zeiterfassunglib/zeiterfassungapi.cpp +++ b/zeiterfassunglib/zeiterfassungapi.cpp @@ -53,9 +53,7 @@ std::unique_ptr ZeiterfassungApi::doLoginPage() { QNetworkRequest request(QUrl(m_url % "pages/login.jsp")); - auto reply = std::unique_ptr(m_manager->get(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } std::unique_ptr ZeiterfassungApi::doLogin(const QString &username, const QString &password) @@ -66,19 +64,19 @@ std::unique_ptr ZeiterfassungApi::doLogin(const QString &username, c auto data = QStringLiteral("j_username=%0&j_password=%1&login=Anmelden").arg(username).arg(password).toUtf8(); - auto reply = std::unique_ptr(m_manager->post(request, data)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->post(request, data)), this); } std::unique_ptr ZeiterfassungApi::doUserInfo() { - QNetworkRequest request(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO")); - request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("home")); + QNetworkRequest request0(QUrl(m_url % "json/evoAppsUserInfoDialogController/load-EvoAppsUserInfoTO")); + request0.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("home")); - auto reply = std::unique_ptr(m_manager->get(request)); + QNetworkRequest request1(QUrl(m_url % "json/persons")); + request1.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request0)), + std::unique_ptr(m_manager->get(request1)), this); } std::unique_ptr ZeiterfassungApi::doGetBookings(int userId, const QDate &start, const QDate &end) @@ -90,9 +88,7 @@ std::unique_ptr ZeiterfassungApi::doGetBookings(int userId, co .arg(userId))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - auto reply = std::unique_ptr(m_manager->get(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } std::unique_ptr ZeiterfassungApi::doCreateBooking(int userId, const QDate &date, const QTime &time, const QTime ×pan, @@ -114,9 +110,9 @@ std::unique_ptr ZeiterfassungApi::doCreateBooking(int userId obj[QStringLiteral("einstuf")] = QStringLiteral(""); obj[QStringLiteral("text")] = text; - auto reply = std::unique_ptr(m_manager->post(request, QJsonDocument(obj).toJson())); + auto data = QJsonDocument(obj).toJson(); - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->post(request, data)), this); } std::unique_ptr ZeiterfassungApi::doUpdateBooking(int bookingId, int userId, const QDate &date, const QTime &time, @@ -140,9 +136,7 @@ std::unique_ptr ZeiterfassungApi::doUpdateBooking(int bookin auto data = QJsonDocument(obj).toJson(); - auto reply = std::unique_ptr(m_manager->put(request, data)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->put(request, data)), this); } std::unique_ptr ZeiterfassungApi::doDeleteBooking(int bookingId) @@ -152,9 +146,7 @@ std::unique_ptr ZeiterfassungApi::doDeleteBooking(int bookin .arg(bookingId))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - auto reply = std::unique_ptr(m_manager->deleteResource(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->deleteResource(request)), this); } std::unique_ptr ZeiterfassungApi::doGetTimeAssignments(int userId, const QDate &start, const QDate &end) @@ -166,9 +158,7 @@ std::unique_ptr ZeiterfassungApi::doGetTimeAssignments( .arg(userId))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - auto reply = std::unique_ptr(m_manager->get(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } std::unique_ptr ZeiterfassungApi::doCreateTimeAssignment(int userId, const QDate &date, const QTime &time, @@ -209,9 +199,7 @@ std::unique_ptr ZeiterfassungApi::doCreateTimeAssignm auto data = QJsonDocument(obj).toJson(); - auto reply = std::unique_ptr(m_manager->post(request, data)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->post(request, data)), this); } std::unique_ptr ZeiterfassungApi::doUpdateTimeAssignment(int timeAssignmentId, int userId, const QDate &date, @@ -257,9 +245,7 @@ std::unique_ptr ZeiterfassungApi::doUpdateTimeAssignm auto data = QJsonDocument(obj).toJson(); - auto reply = std::unique_ptr(m_manager->put(request, data)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->put(request, data)), this); } std::unique_ptr ZeiterfassungApi::doDeleteTimeAssignment(int timeAssignmentId) @@ -269,9 +255,7 @@ std::unique_ptr ZeiterfassungApi::doDeleteTimeAssignm .arg(timeAssignmentId))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - auto reply = std::unique_ptr(m_manager->deleteResource(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->deleteResource(request)), this); } std::unique_ptr ZeiterfassungApi::doGetProjects(int userId, const QDate &date) @@ -282,9 +266,7 @@ std::unique_ptr ZeiterfassungApi::doGetProjects(int userId, co .arg(date.toString(QStringLiteral("yyyyMMdd"))))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - auto reply = std::unique_ptr(m_manager->get(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } std::unique_ptr ZeiterfassungApi::doGetReport(int userId, const QDate &date) @@ -295,9 +277,7 @@ std::unique_ptr ZeiterfassungApi::doGetReport(int userId, const .arg(date.toString(QStringLiteral("yyyyMMdd"))))); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("bookingCalendar")); - auto reply = std::unique_ptr(m_manager->get(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); } std::unique_ptr ZeiterfassungApi::doGetPresenceStatus() @@ -305,7 +285,5 @@ std::unique_ptr ZeiterfassungApi::doGetPresenceStatus() QNetworkRequest request(QUrl(m_url % "json/presencestatus")); request.setRawHeader(QByteArrayLiteral("sisAppName"), QByteArrayLiteral("presenceStatus")); - auto reply = std::unique_ptr(m_manager->get(request)); - - return std::make_unique(std::move(reply), this); + return std::make_unique(std::unique_ptr(m_manager->get(request)), this); }