app/sources/serverconn.cpp
dorian ec4f8a1de5 - initial commit:
- basic functionality implemented
2019-04-20 22:57:40 +02:00

134 lines
3.9 KiB
C++

#include "headers/serverconn.h"
ServerConn::ServerConn(QObject *parent) : QObject(parent)
{
}
void ServerConn::refreshFoodplan() {
QVariant tmpFoodplan;
QVariantMap ret = this->senddata(QUrl("http://egw.ifsc-climbing.org/egw/ranking/json.php"));
if(ret["status"] != 200){
// request was a failure
return;
}
QJsonDocument jsonReply = QJsonDocument::fromJson(ret["text"].toString().toUtf8());
this->foodplan = jsonReply.toVariant();
//qDebug() << this->foodplan;
emit this->foodplanChanged();
}
QVariant ServerConn::getCalendar(QString nation){
QVariantMap ret = this->senddata(QUrl("http://egw.ifsc-climbing.org/egw/ranking/json.php?year=2018&nation=" + nation));
if(ret["status"] != 200){
// request was a failure
return QVariantMap({{"status", ret["status"]}, {"data", ""}});
}
QJsonDocument jsonReply = QJsonDocument::fromJson(ret["text"].toString().toUtf8());
QVariantMap rankingData = {{"status", 200}, {"data", jsonReply.toVariant()}};
return rankingData;
}
QVariant ServerConn::getRanking(int competiotionId, int categoryId, bool registrationData, int routeNumber) {
QString requestUrl = "http://egw.ifsc-climbing.org/egw/ranking/json.php?comp="+ QString::number( competiotionId ) +"&cat="+ QString::number( categoryId ) + (registrationData ? "&type=starters":"") + "&route=" + ((routeNumber == -2) ? "":QString::number(routeNumber));
qDebug() << requestUrl;
QVariantMap ret = this->senddata(QUrl(requestUrl));
if(ret["status"] != 200){
// request was a failure
return QVariantMap({{"status", ret["status"]}, {"data", ""}});
}
QJsonDocument jsonReply = QJsonDocument::fromJson(ret["text"].toString().toUtf8());
QVariantMap rankingData = {{"status", 200}, {"data", jsonReply.toVariant()}};
return rankingData;
}
// ------------------------
// --- Helper functions ---
// ------------------------
QVariantMap ServerConn::senddata(QUrl serviceUrl, QUrlQuery pdata)
{
// create network manager
QNetworkAccessManager * networkManager = new QNetworkAccessManager();
QVariantMap ret; //this is a custom type to store the return-data
// Create network request
QNetworkRequest request(serviceUrl);
request.setHeader(QNetworkRequest::ContentTypeHeader,
"application/x-www-form-urlencoded");
QSslConfiguration config = QSslConfiguration::defaultConfiguration();
config.setProtocol(QSsl::TlsV1_2);
request.setSslConfiguration(config);
//send a POST request with the given url and data to the server
QNetworkReply *reply;
if(pdata.isEmpty()){
// if no post data is given -> send a GET request
reply = networkManager->get(request);
}
else {
// if post data is given -> send POST request
reply = networkManager->post(request, pdata.toString(QUrl::FullyEncoded).toUtf8());
}
// loop to wait until the request has finished before processing the data
QEventLoop loop;
// timer to cancel the request after 3 seconds
QTimer timer;
timer.setSingleShot(true);
// quit the loop when the request finised
loop.connect(networkManager, SIGNAL(finished(QNetworkReply*)), SLOT(quit()));
// or the timer timed out
loop.connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit()));
// start the timer
timer.start(10000);
// start the loop
loop.exec();
//get the status code
QVariant status_code = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute);
ret.insert("status", status_code.toInt());
//get the full text response
ret.insert("text", QString::fromUtf8(reply->readAll()));
// delete the reply object
delete reply;
// delete the newtwork access manager object
delete networkManager;
//return the data
return(ret);
}
// -------------------------
// --- Functions for QML ---
// -------------------------
QVariant ServerConn::getFoodplan() {
return this->foodplan;
}