diff --git a/about.cpp b/about.cpp index d85e33c..af98306 100644 --- a/about.cpp +++ b/about.cpp @@ -1,49 +1,75 @@ #include "about.h" +#include "serverconnection.h" #include "ui_about.h" #include #include +#include #include -About::About(QWidget *parent) : QMainWindow(parent) { +#define Y_POS_VERSION 0 +#define Y_POS_SERVER_INFO 1 - QGridLayout *mainLayout = new QGridLayout(); +About::About(QWidget *parent, QSettings *settings) : QMainWindow(parent) { + + mySettings = settings; + mainLayout = new QGridLayout(); - /* config options layout */ - QGridLayout *layoutLegal = new QGridLayout(); - QGridLayout *layoutSoftwareinfo = new QGridLayout(); - /* create legal box */ + QGridLayout *layoutLegal = new QGridLayout(); QGroupBox *legalGroup = new QGroupBox(); - + legalGroup->setTitle("Rechtliches"); + QLabel *licenseLabel = new QLabel("Diese Software wird unter derGPLv3verbreitet.
Code und Kompelierungsinstruktionen sind konform zur Lizenzhier zugänglich."); + licenseLabel->setOpenExternalLinks(true); + layoutLegal->addWidget(licenseLabel, 0, 0); + layoutLegal->addWidget(new QLabel("Author: Yannik Schmidt"), 1, 0); + legalGroup->setLayout(layoutLegal); /* create software infor group */ - QGroupBox *softwareInfoGroup = new QGroupBox(); + layoutSoftwareinfo = new QGridLayout(); + softwareInfoGroup = new QGroupBox(); QString *version = getCurrentVersion(); - QLabel *richText = new QLabel(); - richText->setText(*version); - softwareInfoGroup->setTitle("Software Information"); + QLabel *versionLabelIdent = new QLabel("Version:"); + QLabel *versionLabel = new QLabel(); + serverInfo = new QLabel("Wird ermittelt.."); + versionLabel->setText(*version); - layoutSoftwareinfo->addWidget(richText); + softwareInfoGroup->setTitle("Software Information"); + layoutSoftwareinfo->addWidget(versionLabelIdent, Y_POS_VERSION, 0); + layoutSoftwareinfo->addWidget(versionLabel, Y_POS_VERSION, 1); + layoutSoftwareinfo->addWidget(new QLabel("Server:"), Y_POS_SERVER_INFO, 0); + layoutSoftwareinfo->addWidget(serverInfo, Y_POS_SERVER_INFO, 1); softwareInfoGroup->setLayout(layoutSoftwareinfo); /* add groups to main layout */ mainLayout->addWidget(softwareInfoGroup); + mainLayout->addWidget(legalGroup); /* setup main window */ QWidget *mainWidget = new QWidget(this); mainWidget->setLayout(mainLayout); this->setCentralWidget(mainWidget); + + /* get server info and set as soon as possible*/ + ServerConnection *sc = new ServerConnection(this, mySettings); + connect(sc->getNetworkManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(handleServerVersion(QNetworkReply*))); + sc->queryServerVersion(); } About::~About() { } -QString* About::getCurrentVersion(){ - return new QString("

LOLOLOL

"); +void About::handleServerVersion(QNetworkReply* reply){ + if(reply->error() != QNetworkReply::NoError){ + serverInfo->setText(reply->errorString()); + }else { + QJsonDocument json = QJsonDocument::fromJson(reply->readAll()); + auto serverInfoValue = json["server-version"].toString(); + serverInfo->setText(serverInfoValue); + } } -QString* About::getServerVersion(){ - return new QString("

LOLOLOL

"); +QString* About::getCurrentVersion(){ + return new QString(GIT_VERSION); } diff --git a/about.h b/about.h index 4f15acf..8c47cc2 100644 --- a/about.h +++ b/about.h @@ -1,19 +1,31 @@ #ifndef ABOUT_H #define ABOUT_H +#include +#include +#include #include +#include +#include class About : public QMainWindow { Q_OBJECT public: - explicit About(QWidget *parent = nullptr); + explicit About(QWidget *parent = nullptr, QSettings *settings = nullptr); ~About(); +private slots: + void handleServerVersion(QNetworkReply*); private: + QGridLayout* mainLayout; + QGridLayout* layoutSoftwareinfo; + QLabel* serverInfo; + QGroupBox* softwareInfoGroup; + QSettings* mySettings; QString* getCurrentVersion(); - QString *getServerVersion(); + QString* getServerVersion(); }; #endif // ABOUT_H diff --git a/mainwindow.cpp b/mainwindow.cpp index a24f6ad..86c77ba 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -96,7 +96,7 @@ void MainWindow::openConfigurationWindow(){ } void MainWindow::openAboutWindow(){ - About *aboutWindow = new About(); + About *aboutWindow = new About(this, mySettings); aboutWindow->setAttribute(Qt::WA_DeleteOnClose); aboutWindow->show(); } diff --git a/serverconnection.cpp b/serverconnection.cpp index 6b47f85..6cbc43b 100644 --- a/serverconnection.cpp +++ b/serverconnection.cpp @@ -8,7 +8,6 @@ ServerConnection::ServerConnection(QObject *parent, QSettings *settings) { - setAuthHeader(settings->value(SETTING_USER).toString(), settings->value(SETTING_PASS).toString()); networkManager = new QNetworkAccessManager(parent); mySettings = settings; @@ -76,6 +75,13 @@ void ServerConnection::submitFile(QJsonDocument jsonDocument){ qDebug("Request submitted"); } +void ServerConnection::queryServerVersion(){ + QUrl serviceUrl = QUrl(buildURLFromLocation(QString("/server-info"))); + QNetworkRequest request(serviceUrl); + request.setRawHeader("Authorization", authHeaderData); + networkManager->get(request); +} + QNetworkAccessManager *ServerConnection::getNetworkManager(){ return networkManager; } diff --git a/serverconnection.h b/serverconnection.h index 679dda7..4466439 100644 --- a/serverconnection.h +++ b/serverconnection.h @@ -15,6 +15,7 @@ public: QString buildURLFromLocation(QVariant location); QString buildURLFromLocation(QString location); QNetworkAccessManager *getNetworkManager(); + void queryServerVersion(); public slots: void queryStatusAll(); private slots: diff --git a/settings.cpp b/settings.cpp index 7890f26..88995b2 100644 --- a/settings.cpp +++ b/settings.cpp @@ -1,13 +1,22 @@ +#include "serverconnection.h" #include "settings.h" #include "ui_settings.h" +#include +#include +#include +#include #include #include +#include +#include +#include #include #include #include #define SETTINGS_WINDOW_TITLE "Konfiguration" +#define BUTTON_TEXT_CHECK "Konfiguration Testen" #define BUTTON_TEXT_ABORT "Abbrechen" #define BUTTON_TEXT_OK "OK" @@ -74,16 +83,60 @@ void Settings::selectSettings(QSettings *selectedSettings){ } /* buttons */ + auto check = new QPushButton(BUTTON_TEXT_CHECK); auto ok = new QPushButton(BUTTON_TEXT_OK); auto cancle = new QPushButton(BUTTON_TEXT_ABORT); - layout->addWidget(ok, configOptions->length(), 0); - layout->addWidget(cancle, configOptions->length(), 1); + layout->addWidget(check, configOptions->length(), 0); + layout->addWidget(ok, configOptions->length()+1, 0); + layout->addWidget(cancle, configOptions->length()+1, 1); + connect(check, SIGNAL(released()), this, SLOT(checkConfig())); connect(ok, SIGNAL(released()), this, SLOT(okClose())); connect(cancle, SIGNAL(released()), this, SLOT(cancleClose())); } +void Settings::checkConfig(){ + ServerConnection *sc = new ServerConnection(this, mySettings); + connect(sc->getNetworkManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(handleTestConnectionResult(QNetworkReply*))); + sc->queryServerVersion(); +} + +void Settings::handleTestConnectionResult(QNetworkReply* reply){ + QString *dialogText; + bool error = false; + + if(reply->error() != QNetworkReply::NoError){ + dialogText = new QString(reply->errorString()); + error = true; + }else { + dialogText = new QString("Verbinndung Ok"); + } + #ifdef Q_OS_LINUX + auto *fi = new QFileInfo(mySettings->value(SETTING_LINUX_EXPLORER).toString()); + if(!fi->isExecutable()){ + dialogText->append("\nExplorer nicht ausführbar!"); + error = true; + } + #endif + + QLabel *testResult = new QLabel("Ok!"); + testResult->setStyleSheet("QLabel { color : green; }"); + if(error){ + QMessageBox *info = new QMessageBox(); + info->setAttribute(Qt::WA_DeleteOnClose); + info->setWindowTitle("Konfiguration - Fehler!"); + info->setText(*dialogText); + info->show(); + testResult = new QLabel("Konfigurationsfehler."); + testResult->setStyleSheet("QLabel { color : red; }"); + } + + auto cw = this->findChild("centralwidget"); + QGridLayout *layout = static_cast(cw->layout()); + layout->addWidget(testResult, configOptions->length(), 1); +} + void Settings::cancleClose(){ if(false){ // TODO warning diff --git a/settings.h b/settings.h index bc906a6..474ae27 100644 --- a/settings.h +++ b/settings.h @@ -4,6 +4,7 @@ #include #include #include +#include namespace Ui { class settings; @@ -21,6 +22,8 @@ public: private slots: void okClose(); void cancleClose(); + void checkConfig(); + void handleTestConnectionResult(QNetworkReply *reply); private: Ui::settings *ui; QSettings *mySettings; diff --git a/untitled.pro b/untitled.pro index a9047ac..2f64ce1 100644 --- a/untitled.pro +++ b/untitled.pro @@ -4,6 +4,8 @@ # #------------------------------------------------- +GIT_STR_VERSION = $$system(git describe) + QT += core gui network greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -16,6 +18,7 @@ TEMPLATE = app # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS +DEFINES += "GIT_VERSION=\"\\\"$$GIT_STR_VERSION\\\"\"" # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line.