From 4e073152e43bad9d0c3c1fae6e5ae84d23f2646b Mon Sep 17 00:00:00 2001 From: dorian Date: Sat, 7 Dec 2019 15:38:35 +0100 Subject: [PATCH] - implemented new api and new authentication system - some styling improvements --- headers/serverconn.h | 7 +- qml/Components/CompatibleToolButton.qml | 167 ++++++------ qml/Components/FannyDataListView.qml | 11 - qml/Components/FoodPlanView.qml | 8 +- qml/Components/PullRefresher.qml | 327 ------------------------ qml/Forms/EventForm.qml | 15 +- qml/Forms/FoodPlanForm.qml | 8 + qml/Pages/LoginPage.qml | 72 +++--- qml/main.qml | 7 +- qml/qml.qrc | 1 - sources/appsettings.cpp | 4 + sources/serverconn.cpp | 95 ++++--- 12 files changed, 197 insertions(+), 525 deletions(-) delete mode 100644 qml/Components/PullRefresher.qml diff --git a/headers/serverconn.h b/headers/serverconn.h index 90a2a6b..855f132 100644 --- a/headers/serverconn.h +++ b/headers/serverconn.h @@ -44,12 +44,11 @@ class ServerConn : public QObject private: QString state; // can be: loggedIn ; notLoggedIn - QString username; - QString password; + QString token; - QVariantMap senddata(QUrl serviceUrl, QUrlQuery postData, bool raw = false); + QVariantMap senddata(QUrl serviceUrl, bool raw = false); - QList apiVersion = {0,2,1}; + QList apiVersion = {1,0,0}; FileHelper * fileHelper; QString mDocumentsWorkPath; diff --git a/qml/Components/CompatibleToolButton.qml b/qml/Components/CompatibleToolButton.qml index 9fdbcca..daa84ce 100644 --- a/qml/Components/CompatibleToolButton.qml +++ b/qml/Components/CompatibleToolButton.qml @@ -2,91 +2,98 @@ import QtQuick 2.0 import QtQuick.Controls 2.1 import QtQuick.Controls.Material 2.1 - Loader { - id: control +Loader { + id: control - property QIconSource icon: QIconSource {} + property QIconSource icon: QIconSource {} - property int fontPixelSize + property int fontPixelSize - property string text: "" + property string text - signal clicked + signal clicked - Connections { - target: icon - onNameChanged: { - control.syncProperties() - } - } - - onTextChanged: { + Connections { + target: icon + onNameChanged: { control.syncProperties() } - - function syncProperties() { - if(QtCompatiblityMode) { - control.sourceComponent = ancientToolButtonCp - control.item.text = control.text - control.item.font = control.font - - if(control.fontPixelSize !== undefined) { - control.item.font.pixelSize = control.fontPixelSize - } - } - else { - control.sourceComponent = modernToolButtonCp - - control.item.icon.name = control.icon.name - control.item.icon.color = control.icon.color - - control.item.icon.width = control.icon.width - control.item.icon.height = control.icon.height - } - } - - onItemChanged: { - control.syncProperties() - } - - Component.onCompleted: { - control.syncProperties() - } - - Connections { - target: control.item - - onClicked: { - control.clicked() - } - } - - Component { - id: ancientToolButtonCp - - ToolButton { - id: tb - - opacity: enabled ? 1.0 : 0.3 - - contentItem: Text { - text: tb.text - font: tb.font - color: app.style.style.textColor - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter - elide: Text.ElideRight - } - } - } - - Component { - id: modernToolButtonCp - - ToolButton { - height: implicitHeight - width: implicitWidth - } - } - } + + onTextChanged: { + control.syncProperties() + } + + function syncProperties() { + + if(control.status !== Loader.Ready) { + return + } + + if(QtCompatiblityMode) { + control.item.text = control.text + control.item.font = control.font + + if(control.fontPixelSize !== undefined) { + control.item.font.pixelSize = control.fontPixelSize + } + } + else { + control.item.icon.name = control.icon.name + control.item.icon.color = control.icon.color + + control.item.icon.width = control.icon.width + control.item.icon.height = control.icon.height + } + } + + onLoaded: { + control.syncProperties() + } + + Component.onCompleted: { + if(QtCompatiblityMode) { + control.sourceComponent = ancientToolButtonCp + } + else { + control.sourceComponent = modernToolButtonCp + } + } + + Connections { + target: control.item + + onClicked: { + control.clicked() + } + } + + Component { + id: ancientToolButtonCp + + ToolButton { + id: tb + + opacity: enabled ? 1.0 : 0.3 + + contentItem: Text { + text: tb.text + font: tb.font + color: app.style.style.textColor + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + elide: Text.ElideRight + } + } + } + + Component { + id: modernToolButtonCp + + ToolButton { + height: implicitHeight + width: implicitWidth + } + } + +} diff --git a/qml/Components/FannyDataListView.qml b/qml/Components/FannyDataListView.qml index f13bd6a..162c849 100644 --- a/qml/Components/FannyDataListView.qml +++ b/qml/Components/FannyDataListView.qml @@ -65,15 +65,4 @@ ListView { errorCode: control.status optionButtonFunction: control.optionButtonFunction } - - PullRefresher{ - target: control - - backgroundColor: app.style.style.buttonColor - pullIndicatorColor: app.style.style.textColor - - preRefreshDelay: 300 - - refreshPosition: height * 1.3 - } } diff --git a/qml/Components/FoodPlanView.qml b/qml/Components/FoodPlanView.qml index d1ab6f0..dd7e2a6 100644 --- a/qml/Components/FoodPlanView.qml +++ b/qml/Components/FoodPlanView.qml @@ -54,6 +54,8 @@ FannyDataListView { // label for the cookteam width: parent.width + height: text!=""? undefined:0 + wrapMode: Label.Wrap font.bold: true @@ -84,14 +86,16 @@ FannyDataListView { // label for the main dish width: parent.width + height: text!=""? undefined:0 + wrapMode: Label.Wrap - text: mainDish === "" ? "Aktuell keine Daten":mainDish + text: mainDish === ""&& mainDishLa === "" && garnish === "" ? "Aktuell keine Daten":mainDish } Rectangle { width: parent.width / 10 - height: mainDishVegLa.text!=""? 1:0 + height: mainDishVegLa.text != "" && mainDishLa.text != "" ? 1:0 color: "grey" } diff --git a/qml/Components/PullRefresher.qml b/qml/Components/PullRefresher.qml deleted file mode 100644 index 2375287..0000000 --- a/qml/Components/PullRefresher.qml +++ /dev/null @@ -1,327 +0,0 @@ -/* - blueROCK - for digital rock - Copyright (C) 2019 Dorian Zedler - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -import QtQuick 2.9 -import QtQuick.Controls 2.1 -import QtGraphicalEffects 1.0 - -Item { - id: control - - state: "idle" - - property var target // targeted ListView - - property bool autoConfigureTarget: true // should the target be automaticaly be configured? - - property int postRefreshDelay: 1000 // delay after reload funcion has finished - property int preRefreshDelay: 1000 // delay before reload funcion is called - - property int refreshPosition: height * 1.2 // position of the item when refreshing - property int dragOutPosition: height * 1.8 // maximum drag out - - property double dragRefreshPositionMultiplier: 0.5 // position of the item when starting to refresh - - property color backgroundColor: "white" // color for the pre-defined background - property color pullIndicatorColor: "black" // color for the pre-defined pull indicator - //property color busyIndicatorColor: "pink" // color for the pre-defined busy indicator - - readonly property double dragProgress: Math.min( userPosition / dragOutPosition, 1) - - property Component background: Item { - RectangularGlow { - anchors.fill: backgroundRe - - scale: 0.8 * backgroundRe.scale - cornerRadius: backgroundRe.radius - color: "black" - - glowRadius: 0.001 - spread: 0.2 - } - - Rectangle { - id: backgroundRe - - anchors.fill: parent - - radius: width * 0.5 - color: control.backgroundColor - } - } - property Component busyIndicator: BusyIndicator { running: true } - property Component pullIndicator: Canvas { - - property double drawProgress: control.dragProgress - - rotation: drawProgress > control.dragRefreshPositionMultiplier ? 180:0 - - onDrawProgressChanged: { - requestPaint() - } - - onPaint: { - var ctx = getContext("2d"); - - var topMargin = height * 0.1 - var bottomMargin = topMargin - var rightMargin = 0 - var leftMargin = 0 - - var arrowHeight = height - topMargin - bottomMargin - - var peakHeight = arrowHeight * 0.35 - var peakWidth = peakHeight - - var lineWidth = 2 - - var progress = drawProgress * 1 / control.dragRefreshPositionMultiplier > 1 ? 1 : drawProgress * 1 / control.dragRefreshPositionMultiplier - // modify all values to math the progress - - arrowHeight = arrowHeight * progress - if(progress > 0.3){ - peakHeight = peakHeight * (progress - 0.3) * 1/0.7 - peakWidth = peakWidth * (progress - 0.3) * 1/0.7 - } - else { - peakHeight = 0 - peakWidth = 0 - } - - // clear canvas - ctx.reset() - - ctx.lineWidth = lineWidth; - ctx.strokeStyle = control.pullIndicatorColor; - - // middle line - ctx.moveTo(width/2, topMargin); - ctx.lineTo(width/2, arrowHeight + topMargin); - - // right line - ctx.moveTo(width/2 - lineWidth * 0.3, arrowHeight + topMargin); - ctx.lineTo(width/2 + peakWidth,arrowHeight + topMargin - peakHeight); - // left line - ctx.moveTo(width/2 + lineWidth * 0.3, arrowHeight + topMargin); - ctx.lineTo(width/2 - peakWidth,arrowHeight + topMargin - peakHeight); - - ctx.stroke(); - } - - Behavior on rotation { - NumberAnimation { - duration: 100 - } - } - - } - - signal refreshRequested - - // internal properties - property int minimumPosition: 0 - property int maximumPosition: 0 - property int userPosition: 0 - property int position: Math.max( minimumPosition, Math.min(maximumPosition, userPosition)) - - height: 50 - width: height - - Component.onCompleted: { - if(control.autoConfigureTarget){ - target.boundsBehavior = Flickable.DragOverBounds - target.boundsMovement = Flickable.StopAtBounds - } - } - - function refresh() { - control.refreshRequested() - postRefreshTimer.start() - } - - anchors { - top: control.target.top - horizontalCenter: control.target.horizontalCenter - topMargin: control.position - height - } - - Connections { - target: control.target - onDragEnded: { - if(userPosition >= control.dragOutPosition * control.dragRefreshPositionMultiplier){ - control.state = "refreshing" - preRefreshTimer.start() - } - } - } - - Loader { - id: backgroundLd - - anchors.fill: parent - - sourceComponent: control.background - } - - Loader { - id: pullIndicatorLd - - anchors.centerIn: parent - - height: parent.height * 0.6 - width: height - - rotation: 180 - - sourceComponent: control.pullIndicator - } - - Loader { - id: busyIndicatorLd - - anchors.centerIn: parent - - height: parent.height * 0.7 - width: height - - opacity: 0 - - sourceComponent: control.busyIndicator - } - - Timer { - id: preRefreshTimer - interval: control.preRefreshDelay <= 0 ? 1:control.preRefreshDelay - running: false - repeat: false - onTriggered: { - control.refresh() - } - } - - Timer { - id: postRefreshTimer - interval: control.postRefreshDelay <= 0 ? 1:control.postRefreshDelay - running: false - repeat: false - onTriggered: { - control.state = "hidden" - } - } - - Behavior on minimumPosition { - enabled: !control.target.dragging && state !== "idle" - NumberAnimation { - duration: 100 - } - } - - states: [ - State { - name: "idle" - - PropertyChanges { - target: control - minimumPosition: userPosition > maximumPosition ? maximumPosition:userPosition - userPosition: -1 / (Math.abs( (target.verticalOvershoot > 0 ? 0:target.verticalOvershoot) * 0.001 + 0.003 ) + 1 / control.dragOutPosition * 0.001) + control.dragOutPosition // Math.abs( target.verticalOvershoot ) - maximumPosition: control.dragOutPosition - } - - PropertyChanges { - target: pullIndicatorLd - rotation: 0 - } - }, - State { - name: "refreshing" - PropertyChanges { - target: control - minimumPosition: control.refreshPosition - userPosition: 0 - maximumPosition: control.refreshPosition - - } - - PropertyChanges { - target: pullIndicatorLd - opacity: 0 - } - - PropertyChanges { - target: busyIndicatorLd - opacity: 1 - } - }, - State { - name: "hidden" - PropertyChanges { - target: control - minimumPosition: control.refreshPosition - userPosition: 0 - maximumPosition: control.refreshPosition - scale: 0 - } - - PropertyChanges { - target: pullIndicatorLd - opacity: 0 - } - - PropertyChanges { - target: busyIndicatorLd - opacity: 1 - } - } - ] - - transitions: [ - Transition { - NumberAnimation { - duration: 100 - properties: "rotation, opacity" - } - }, - - Transition { - from: "refreshing" - to: "hidden" - - PauseAnimation { - duration: 200 - } - - NumberAnimation { - duration: 200 - properties: "scale" - } - - onRunningChanged: { - if(control.state === "hidden" && !running){ - control.state = "idle" - } - } - }, - - Transition { - from: "hidden" - to: "idle" - } - - ] - -} diff --git a/qml/Forms/EventForm.qml b/qml/Forms/EventForm.qml index 05fdcc4..cb4f1d8 100644 --- a/qml/Forms/EventForm.qml +++ b/qml/Forms/EventForm.qml @@ -94,7 +94,7 @@ Page { property: "opacity" from: 1 to: 0 - duration: 200 + duration: 300 easing.type: Easing.InExpo } @@ -186,13 +186,8 @@ Page { text: to !== "" && model.text !== "" ? to + " | " + model.text:model.to + model.text } } - } - - - } - } Component { @@ -202,6 +197,14 @@ Page { } + Connections { + target: pageLoader.item + onRefresh: { + pageLoader.newSourceComponent = loadingFormComp + loadTimer.start() + } + } + Timer { id: loadTimer interval: 500 diff --git a/qml/Forms/FoodPlanForm.qml b/qml/Forms/FoodPlanForm.qml index 9605157..f131663 100644 --- a/qml/Forms/FoodPlanForm.qml +++ b/qml/Forms/FoodPlanForm.qml @@ -77,6 +77,14 @@ Page { } } + Connections { + target: pageLoader.item + onRefresh: { + pageLoader.newSource = "./LoadingForm.qml" + loadTimer.start() + } + } + Timer { id: loadTimer interval: 500 diff --git a/qml/Pages/LoginPage.qml b/qml/Pages/LoginPage.qml index 2a59e82..d97b46b 100644 --- a/qml/Pages/LoginPage.qml +++ b/qml/Pages/LoginPage.qml @@ -96,7 +96,7 @@ Page { Column { id: formCol - spacing: height * 0.01 + spacing: height * 0.02 width: app.landscape() ? root.width * 0.5:root.width height: app.landscape() ? root.height:root.height * 0.7 @@ -122,14 +122,13 @@ Page { height: formCol.rowHeight placeholderText: "Benutzername" - Keys.onReturnPressed: login(tiuname.text, tipasswd.text, cBperm.checked) + Keys.onReturnPressed: login(tiuname.text, tipasswd.text) } - TextField { id: tipasswd placeholderText: "Passwort" - Keys.onReturnPressed: login(tiuname.text, tipasswd.text, cBperm.checked) + Keys.onReturnPressed: login(tiuname.text, tipasswd.text) height: formCol.rowHeight @@ -192,16 +191,22 @@ Page { } - CheckDelegate { - id: cBperm + Label { + id: laStatus anchors.horizontalCenter: parent.horizontalCenter - height: formCol.rowHeight + height: formCol.rowHeight * 0.5 + width: parent.width - checked: true + fontSizeMode: Text.Fit + font.pixelSize: height + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter - text: qsTr("Angemeldet bleiben") + color: "red" + + text: qsTr("") } FancyButton { @@ -219,39 +224,27 @@ Page { text: qsTr("Anmelden") - onClicked: root.login(tiuname.text, tipasswd.text, cBperm.checked) - } - - FancyButton { - id: registerBt - - anchors { - horizontalCenter: parent.horizontalCenter - left: parent.left - margins: window.width * 0.05 - } - - height: formCol.rowHeight - - enabled: true - - text: qsTr("Registrieren") - - onClicked: Qt.openUrlExternally("http://www.fanny-leicht.de/j34/index.php/login?view=registration") + onClicked: root.login(tiuname.text, tipasswd.text) } Label { - id: laStatus + id: registerAndForgotLa anchors.horizontalCenter: parent.horizontalCenter height: formCol.rowHeight + verticalAlignment: Text.AlignVCenter + font.pixelSize: height * 0.3 + horizontalAlignment: Text.AlignHCenter - color: "red" + text: "Registrieren
Passwort vergessen?
Benutzername vergessen?" + + onLinkActivated: { + Qt.openUrlExternally(link) + } - text: qsTr("") } } @@ -291,7 +284,7 @@ Page { } } - function login(username, password, permanent){ + function login(username, password){ // hide the keyboard Qt.inputMethod.hide(); // open the busy dialog @@ -302,7 +295,7 @@ Page { loginButton.text = "Anmelden.." // trigger the login fucntion of the cpp backend and store the return code - var ret = serverConn.login(username, password, permanent); + var ret = serverConn.login(username, password, true); // the request has finished // close the busy dialog @@ -312,17 +305,10 @@ Page { // change the text of the login button back to "Anmelden" loginButton.text = "Anmelden" - // chekc if the login was successfull - if(ret === 200){ - // if it was -> set the app to inited and set the state of the app to loggedIn - _cppAppSettings.writeSetting("init", 1); - app.is_error = false; - app.state = "loggedIn" - } - else{ - // if it wasn't -> set the error label to the error short description of the retuned error code + // chekc if the login was not successfull + if(ret !== 200){ + // set the error label to the error short description of the retuned error code laStatus.text = app.getErrorInfo(ret)[1] } } - } diff --git a/qml/main.qml b/qml/main.qml index 6eca7d4..b6d5f14 100644 --- a/qml/main.qml +++ b/qml/main.qml @@ -131,7 +131,12 @@ ApplicationWindow { case 401: infoLevel = 3 errorString = "Ungültige Zugangsdaten" - errorDescription = "Der Server hat den Zugang verweigert, bitte überprüfe deine Zugangsdaten und versuche es erneut" + errorDescription = "Der Server hat den Zugang verweigert, bitte überprüfe deine Zugangsdaten und versuche es erneut." + break + case 403: + infoLevel = 3 + errorString = "Account nicht freigegeben" + errorDescription = "Die Anmeldedaten waren korrekt, der Account ist jedoch nicht freigegeben." break case 500: infoLevel = 3 diff --git a/qml/qml.qrc b/qml/qml.qrc index 972427e..f4b0097 100644 --- a/qml/qml.qrc +++ b/qml/qml.qrc @@ -17,7 +17,6 @@ Components/SettingsDelegate.qml Components/FannyDataListView.qml Components/ProgressCircle.qml - Components/PullRefresher.qml Components/CompatibleToolButton.qml Components/QIconSource.qml diff --git a/sources/appsettings.cpp b/sources/appsettings.cpp index 8cd53a1..8efb47a 100644 --- a/sources/appsettings.cpp +++ b/sources/appsettings.cpp @@ -42,6 +42,10 @@ AppSettings::AppSettings(QObject* parent) this->writeSetting("theme", "Light"); } + // remove remainings of the former login mechsnism + this->writeSetting("username", ""); + this->writeSetting("password", ""); + this->filtersFile = new QFile(path + "/fannyapp/filters.json"); } diff --git a/sources/serverconn.cpp b/sources/serverconn.cpp index c9a77b9..56e1a98 100644 --- a/sources/serverconn.cpp +++ b/sources/serverconn.cpp @@ -53,8 +53,7 @@ ServerConn::ServerConn(QObject *parent) : QObject(parent) if(perm == 1){ // permanent login -> restore login - this->username = pGlobalAppSettings->loadSetting("username"); - this->password = pGlobalAppSettings->loadSetting("password"); + this->token = pGlobalAppSettings->loadSetting("token"); this->setState("loggedIn"); } @@ -65,57 +64,54 @@ ServerConn::ServerConn(QObject *parent) : QObject(parent) int ServerConn::login(QString username, QString password, bool permanent) { - - // add the data to the request - QUrlQuery pdata; - pdata.addQueryItem("username", username); - pdata.addQueryItem("password", password); - // send the request - QVariantMap ret = this->senddata(QUrl("https://www.fanny-leicht.de/j34/templates/g5_helium/intern/events.php"), pdata); + QVariantMap ret = this->senddata(QUrl("https://www.fanny-leicht.de/j34/index.php/component/fannysubstitutionplan?task=api_login&username=" + username + "&password=" + password)); + + qDebug() << ret; if(ret["status"].toInt() == 200){ - // if not 200 was returned -> user data was correct - // store username and password in the class variables - this->username = username; - this->password = password; + QJsonDocument jsonDoc = QJsonDocument::fromJson(ret["text"].toString().toUtf8()); - if(permanent){ - // if the user wants to say logged in, store the username and password to the settings file - pGlobalAppSettings->writeSetting("permanent", "1"); - pGlobalAppSettings->writeSetting("username", username); - pGlobalAppSettings->writeSetting("password", password); + if(jsonDoc.toVariant().toMap()["result"].toInt() == 200) { + + this->token = jsonDoc.toVariant().toMap()["data"].toMap()["token"].toString(); + + if(permanent){ + // if the user wants to say logged in, store the username and password to the settings file + pGlobalAppSettings->writeSetting("permanent", "1"); + pGlobalAppSettings->writeSetting("token", this->token); + pGlobalAppSettings->writeSetting("password", password); + } + + // set state to loggedIn + this->setState("loggedIn"); + + qDebug() << "+----- logged in -----+"; + + // return success + return 200; + } + else { + ret["status"] = jsonDoc.toVariant().toMap()["result"].toInt(); } - - // set state to loggedIn - this->setState("loggedIn"); - - qDebug() << "+----- logged in -----+"; - - // return success - return(200); - } - else { - // if not 200 was returned -> error -> return the return code - this->setState("notLoggedIn"); - // -> reset the stored credentinals - pGlobalAppSettings->writeSetting("permanent", "0"); - pGlobalAppSettings->writeSetting("username", ""); - pGlobalAppSettings->writeSetting("password", ""); - return(ret["status"].toInt()); } + + // if not 200 was returned -> error -> return the return code + this->setState("notLoggedIn"); + // -> reset the stored credentinals + pGlobalAppSettings->writeSetting("permanent", "0"); + pGlobalAppSettings->writeSetting("token", ""); + return ret["status"].toInt(); } int ServerConn::logout() { // reset the data stored in the class - this->username = ""; - this->password = ""; + this->token = ""; // reset the data stored in the settings pGlobalAppSettings->writeSetting("permanent", "0"); - pGlobalAppSettings->writeSetting("username", ""); - pGlobalAppSettings->writeSetting("password", ""); + pGlobalAppSettings->writeSetting("token", ""); this->setState("notLoggedIn"); @@ -134,13 +130,13 @@ int ServerConn::getEvents(QString day) // add the data to the request QUrlQuery pdata; - pdata.addQueryItem("username", this->username); - pdata.addQueryItem("password", this->password); + pdata.addQueryItem("token", this->token); pdata.addQueryItem("mode", pGlobalAppSettings->loadSetting("teacherMode") == "true" ? "1":"0"); pdata.addQueryItem("day", day); // send the request - QVariantMap ret = this->senddata(QUrl("https://www.fanny-leicht.de/j34/templates/g5_helium/intern/events.php"), pdata); + QVariantMap ret = this->senddata(QUrl("https://www.fanny-leicht.de/j34/index.php/component/fannysubstitutionplan?task=api_getData&token=" + token + + "&mode=" + (pGlobalAppSettings->loadSetting("teacherMode") == "true" ? "1":"0") + "&day=" + day)); if(ret["status"].toInt() != 200){ // if the request didn't result in a success, clear the old events, as they are probaply incorrect and return the error code @@ -280,14 +276,14 @@ int ServerConn::openEventPdf(QString day) { // add the data to the request QUrlQuery pdata; - pdata.addQueryItem("username", this->username); - pdata.addQueryItem("password", this->password); + pdata.addQueryItem("token", this->token); pdata.addQueryItem("mode", pGlobalAppSettings->loadSetting("teacherMode") == "true" ? "1":"0"); pdata.addQueryItem("day", day); pdata.addQueryItem("asPdf", "true"); // send the request - QVariantMap ret = this->senddata(QUrl("https://www.fanny-leicht.de/j34/templates/g5_helium/intern/events.php"), pdata, true); + QVariantMap ret = this->senddata(QUrl("https://www.fanny-leicht.de/j34/index.php/component/fannysubstitutionplan?task=api_getData&token=" + token + + "&mode=" + (pGlobalAppSettings->loadSetting("teacherMode") == "true" ? "1":"0") + "&day=" + day + "&asPdf=true"), true); if(ret["status"].toInt() != 200){ // if the request didn't result in a success, clear the old events, as they are probaply incorrect and return the error code @@ -327,9 +323,8 @@ int ServerConn::getFoodPlan() url.append("&fields[]="+foodplanDataKey); } - QUrlQuery pdata; // send the request to the server - QVariantMap ret = this->senddata(QUrl(url), pdata); + QVariantMap ret = this->senddata(QUrl(url)); if(ret["status"].toInt() != 200){ // if the request didn't result in a success, return the error code @@ -404,7 +399,7 @@ int ServerConn::getFoodPlan() return(200); } -QVariantMap ServerConn::senddata(QUrl serviceUrl, QUrlQuery pdata, bool raw) +QVariantMap ServerConn::senddata(QUrl serviceUrl, bool raw) { // create network manager QNetworkAccessManager * networkManager = new QNetworkAccessManager(); @@ -438,11 +433,11 @@ QVariantMap ServerConn::senddata(QUrl serviceUrl, QUrlQuery pdata, bool raw) timer.start(10000); this->updateDownloadProgress(0, 1); - reply = networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8()); + reply = networkManager->get(request); connect(reply, &QNetworkReply::sslErrors, this, [=](){ reply->ignoreSslErrors(); }); connect(reply, SIGNAL(downloadProgress(qint64, qint64)), - this, SLOT(updateDownloadProgress(qint64, qint64))); + this, SLOT(updateDownloadProgress(qint64, qint64))); // start the loop loop.exec();