From b7023d348b53f2a0ed3fe9ab7e6ceaf6919b7345 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Fri, 4 Sep 2020 23:33:24 +0200 Subject: [PATCH] implement server settings window (readonly) --- .gitignore | 2 + about.cpp | 1 - listItemServeConfig.ui | 37 +++++++++++ mainwindow.cpp | 8 +++ mainwindow.h | 1 + serverconfig.cpp | 121 ++++++++++++++++++++++++++++++++++++ serverconfig.h | 30 +++++++++ serverconfigitem.ui | 34 ++++++++++ serverconnection.cpp | 51 +++++++++++++-- serverconnection.h | 5 ++ settings.ui | 23 ------- speech-server-client-qt.pro | 12 ++-- urls.h | 13 ++++ 13 files changed, 304 insertions(+), 34 deletions(-) create mode 100644 listItemServeConfig.ui create mode 100644 serverconfig.cpp create mode 100644 serverconfig.h create mode 100644 serverconfigitem.ui delete mode 100644 settings.ui create mode 100644 urls.h diff --git a/.gitignore b/.gitignore index 8a9d35c..bb6b7b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,3 @@ *.user +*.stash +Makefile diff --git a/about.cpp b/about.cpp index 85599de..8a1ad16 100644 --- a/about.cpp +++ b/about.cpp @@ -1,6 +1,5 @@ #include "about.h" #include "serverconnection.h" -#include "ui_about.h" #include #include diff --git a/listItemServeConfig.ui b/listItemServeConfig.ui new file mode 100644 index 0000000..e5878e9 --- /dev/null +++ b/listItemServeConfig.ui @@ -0,0 +1,37 @@ + + + MainWindow + + + + 0 + 0 + 800 + 600 + + + + MainWindow + + + + + + + + + + + + 0 + 0 + 800 + 20 + + + + + + + + diff --git a/mainwindow.cpp b/mainwindow.cpp index e2880ef..26ca4fd 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -1,6 +1,7 @@ #include "about.h" #include "mainwindow.h" #include "notificationwidget.h" +#include "serverconfig.h" #include "settings.h" #include "ui_mainwindow.h" #include @@ -80,6 +81,7 @@ MainWindow::MainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::MainWind timer->start(1000); /* add handler for menu configuration */ + ui->menuKonfiguration->addAction("Spracherkennung", this, SLOT(openSpeechConfigWindow()) ); ui->menuKonfiguration->addAction("Konfiguration", this, SLOT(openConfigurationWindow()) ); ui->menuKonfiguration->addAction("Über diese Software", this, SLOT(openAboutWindow()) ); @@ -87,6 +89,12 @@ MainWindow::MainWindow(QWidget *parent):QMainWindow(parent), ui(new Ui::MainWind this->setWindowTitle(WINDOW_TITLE); } +void MainWindow::openSpeechConfigWindow(){ + ServerConfig *serverConfig = new ServerConfig(this, mySettings); + serverConfig->setAttribute(Qt::WA_DeleteOnClose); + serverConfig->show(); +} + void MainWindow::openConfigurationWindow(){ Settings *settingsWindow = new Settings(); settingsWindow->selectSettings(this->mySettings); diff --git a/mainwindow.h b/mainwindow.h index 6cc1345..fa7aad9 100644 --- a/mainwindow.h +++ b/mainwindow.h @@ -29,6 +29,7 @@ private slots: void openConfigurationWindow(); void appyConfigChanges(); void openAboutWindow(); + void openSpeechConfigWindow(); private: Ui::MainWindow *ui; QTableWidget *tw; diff --git a/serverconfig.cpp b/serverconfig.cpp new file mode 100644 index 0000000..29763c5 --- /dev/null +++ b/serverconfig.cpp @@ -0,0 +1,121 @@ +#include "serverconfig.h" +#include "serverconnection.h" + +#include +#include +#include +#include +#include + +ServerConfig::ServerConfig(QWidget *parent, QSettings *settings) : QMainWindow(parent) { + + mySettings = settings; + + ServerConnection *sc = new ServerConnection(this, mySettings); + connect(sc->getNetworkManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedRequest(QNetworkReply*)), Qt::UniqueConnection); + sc->getUnifiedServerConfig(); + + /* post processing group */ + QGroupBox *pp = new QGroupBox(); + pp->setTitle("Post Processing"); + ppTable = new QTableWidget(); + + /* table ui */ + ppTable->verticalHeader()->setVisible(false); + ppTable->horizontalHeader()->setVisible(false); + ppTable->setRowCount(0); + + QStringList *headerList = new QStringList(); + headerList->append("Suchwort"); + headerList->append("Ersetzen durch"); + headerList->append("Entfernen"); + + ppTable->setColumnCount(headerList->length()); + ppTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + QGridLayout *innerLayoutPP = new QGridLayout(); + QPushButton *addNew = new QPushButton("Neue Regel"); + innerLayoutPP->addWidget(ppTable); + innerLayoutPP->addWidget(addNew); + pp->setLayout(innerLayoutPP); + + /* context phrases group */ + QGridLayout *innerLayoutContext = new QGridLayout(); + QGroupBox *context = new QGroupBox(); + context->setTitle("Spracherkennungs Wörter"); + contextTable = new QTableWidget(); + + /* table ui */ + contextTable->verticalHeader()->setVisible(false); + contextTable->horizontalHeader()->setVisible(false); + contextTable->setRowCount(0); + + QStringList *headerListContext = new QStringList(); + headerListContext->append("Ausdruck/Wort"); + headerListContext->append("Entfernen"); + + contextTable->setColumnCount(headerList->length()); + contextTable->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); + + QPushButton *addNewContext = new QPushButton("Neuer Ausdruck"); + innerLayoutContext->addWidget(contextTable); + innerLayoutContext->addWidget(addNewContext); + context->setLayout(innerLayoutContext); + + + /* setup main window */ + mainLayout = new QGridLayout(); + mainLayout->addWidget(pp); + mainLayout->addWidget(context); + QWidget *mainWidget = new QWidget(this); + mainWidget->setLayout(mainLayout); + this->setCentralWidget(mainWidget); +} + +QWidget* ServerConfig::loatListItemUiForm() +{ + QUiLoader loader; + + QFile file(":/forms/serverconfigitem.ui"); + file.open(QFile::ReadOnly); + + QWidget *formWidget = loader.load(&file, this); + file.close(); + + return formWidget; +} + +void ServerConfig::finishedRequest(QNetworkReply *reply){ + if(reply->error() != QNetworkReply::NoError){ + return; + } + + /* get filename and tracking id from replay */ + QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); + + auto keywordMap = json["keyword-map"].toObject(); + auto phrases = json["phrases"].toArray(); + + contextTable->clear(); + for(int i = 0; i < phrases.size(); i++){ + contextTable->setItem(i, 0, new QTableWidgetItem(phrases.takeAt(i).toString())); + contextTable->setItem(i, 0, new QTableWidgetItem(phrases.takeAt(i).toString())); + + auto *deleteButtonLayout = new QGridLayout(); + auto *deleteCell = new QWidget(); + auto *deleteButton = new QPushButton("Entfernen"); + deleteButton->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + deleteButtonLayout->addWidget(deleteButton); + deleteButtonLayout->setContentsMargins(0,0,0,0); + deleteCell->setLayout(deleteButtonLayout); + + contextTable->setCellWidget(i, 1, deleteCell); + } + + +} + +ServerConfig::~ServerConfig() +{ +} + diff --git a/serverconfig.h b/serverconfig.h new file mode 100644 index 0000000..4131941 --- /dev/null +++ b/serverconfig.h @@ -0,0 +1,30 @@ +#ifndef SERVERCONFIG_H +#define SERVERCONFIG_H + +#include +#include +#include +#include +#include +#include + + + +class ServerConfig : public QMainWindow +{ + Q_OBJECT + +public: + explicit ServerConfig(QWidget *parent = nullptr, QSettings *settings = nullptr); + virtual ~ServerConfig(); +private slots: + void finishedRequest(QNetworkReply*); +private: + QGridLayout* mainLayout; + QSettings* mySettings; + QWidget *loatListItemUiForm(); + QTableWidget* ppTable; + QTableWidget* contextTable; +}; + +#endif // SERVERCONFIG_H diff --git a/serverconfigitem.ui b/serverconfigitem.ui new file mode 100644 index 0000000..6cef3c1 --- /dev/null +++ b/serverconfigitem.ui @@ -0,0 +1,34 @@ + + + Form + + + + 0 + 0 + 400 + 300 + + + + Form + + + + + + + + + + + + Löschen + + + + + + + + diff --git a/serverconnection.cpp b/serverconnection.cpp index 6cbc43b..2d71f43 100644 --- a/serverconnection.cpp +++ b/serverconnection.cpp @@ -5,6 +5,10 @@ #include #include #include +#include + +#define AUTH_HEADER_NAME "Authorization" +#define MIME_JSON "application/json" ServerConnection::ServerConnection(QObject *parent, QSettings *settings) { @@ -47,7 +51,7 @@ void ServerConnection::queryStatusAll(){ QString statusRequestUrl = buildURLFromLocation(mySettings->value(SETTING_LOC_STATE)); QUrl trackingUrl = QUrl(statusRequestUrl); QNetworkRequest request(trackingUrl); - request.setRawHeader("Authorization", authHeaderData); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); networkManager->get(request); //qDebug("Status query sent"); } @@ -57,7 +61,7 @@ void ServerConnection::queryTransscript(QString trackingId){ QString paramUrl = QString("%1?id=%2").arg(url, trackingId); QUrl transcriptUrl = QUrl(paramUrl); QNetworkRequest request(transcriptUrl); - request.setRawHeader("Authorization", authHeaderData); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); networkManager->get(request); } @@ -66,8 +70,8 @@ void ServerConnection::submitFile(QJsonDocument jsonDocument){ /* prepare request */ QUrl serviceUrl = QUrl(buildURLFromLocation(mySettings->value(SETTING_LOC_SUBMIT))); QNetworkRequest request(serviceUrl); - request.setRawHeader("Authorization", authHeaderData); - request.setHeader(QNetworkRequest::ContentTypeHeader, "application/json"); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); + request.setHeader(QNetworkRequest::ContentTypeHeader, MIME_JSON); /* make request */ networkManager->post(request, jsonDocument.toJson()); @@ -76,12 +80,47 @@ void ServerConnection::submitFile(QJsonDocument jsonDocument){ } void ServerConnection::queryServerVersion(){ - QUrl serviceUrl = QUrl(buildURLFromLocation(QString("/server-info"))); + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(SERVER_INFO))); QNetworkRequest request(serviceUrl); - request.setRawHeader("Authorization", authHeaderData); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); networkManager->get(request); } QNetworkAccessManager *ServerConnection::getNetworkManager(){ return networkManager; } + +void ServerConnection::submitPostProcessorChange(QJsonDocument jsonDocument){ + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(PP_EDIT))); + QNetworkRequest request(serviceUrl); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); + networkManager->post(request, jsonDocument.toJson()); +} + +void ServerConnection::submitSpeechContextPhraseChange(QJsonDocument jsonDocument){ + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(CONTEXT_EDIT))); + QNetworkRequest request(serviceUrl); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); + networkManager->post(request, jsonDocument.toJson()); +} + +void ServerConnection::getSpeechContextPhrases(){ + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(CONTEXT_GET))); + QNetworkRequest request(serviceUrl); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); + networkManager->get(request); +} + +void ServerConnection::getPostProcessorMap(){ + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(PP_GET))); + QNetworkRequest request(serviceUrl); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); + networkManager->get(request); +} + +void ServerConnection::getUnifiedServerConfig(){ + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(UNIFIED_GET))); + QNetworkRequest request(serviceUrl); + request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); + networkManager->get(request); +} diff --git a/serverconnection.h b/serverconnection.h index 4466439..026a5aa 100644 --- a/serverconnection.h +++ b/serverconnection.h @@ -16,6 +16,11 @@ public: QString buildURLFromLocation(QString location); QNetworkAccessManager *getNetworkManager(); void queryServerVersion(); + void getPostProcessorMap(); + void submitPostProcessorChange(QJsonDocument jsonDocument); + void submitSpeechContextPhraseChange(QJsonDocument jsonDocument); + void getSpeechContextPhrases(); + void getUnifiedServerConfig(); public slots: void queryStatusAll(); private slots: diff --git a/settings.ui b/settings.ui deleted file mode 100644 index d37edf0..0000000 --- a/settings.ui +++ /dev/null @@ -1,23 +0,0 @@ - - - settings - - - - 0 - 0 - 281 - 245 - - - - MainWindow - - - - - - - - - diff --git a/speech-server-client-qt.pro b/speech-server-client-qt.pro index 64cbea3..24524fc 100644 --- a/speech-server-client-qt.pro +++ b/speech-server-client-qt.pro @@ -8,7 +8,7 @@ GIT_STR_VERSION = $$system(git describe) DATE_STR = $$system(date) HOSTNAME_STR = $$system(hostname) -QT += core gui network +QT += core gui network uitools greaterThan(QT_MAJOR_VERSION, 4): QT += widgets @@ -37,7 +37,8 @@ SOURCES += \ notificationwidget.cpp \ settings.cpp \ about.cpp \ - serverconnection.cpp + serverconnection.cpp \ + serverconfig.cpp HEADERS += \ mainwindow.h \ @@ -45,11 +46,14 @@ HEADERS += \ settings.h \ settingkeys.h \ about.h \ - serverconnection.h + serverconnection.h \ + serverconfig.h \ + urls.h FORMS += \ mainwindow.ui \ - settings.ui + listItemServeConfig.ui \ + serverconfigitem.ui # Default rules for deployment. qnx: target.path = /tmp/$${TARGET}/bin diff --git a/urls.h b/urls.h new file mode 100644 index 0000000..cff1ca2 --- /dev/null +++ b/urls.h @@ -0,0 +1,13 @@ +#ifndef URLS_H +#define URLS_H + +#define PP_GET "/keyword-map" +#define PP_EDIT "/add-pp-keyword" + +#define CONTEXT_GET "/context-phrases" +#define CONTEXT_EDIT "/add-context-phrase" + +#define UNIFIED_GET "/unified-server-settings" +#define SERVER_INFO "/server-info" + +#endif // URLS_H