From 4bee34fbd6c0633ca0c58e78fdcbfee46c21da83 Mon Sep 17 00:00:00 2001 From: Yannik Schmidt Date: Sat, 5 Sep 2020 21:34:23 +0200 Subject: [PATCH] implement adding new serverconfig --- multivalueinputdialog.cpp | 24 ++++++++ multivalueinputdialog.h | 13 +++++ serverconfig.cpp | 110 +++++++++++++++++++++++++++++------- serverconfig.h | 5 ++ serverconnection.cpp | 33 +++++++++-- serverconnection.h | 5 +- speech-server-client-qt.pro | 6 +- 7 files changed, 169 insertions(+), 27 deletions(-) create mode 100644 multivalueinputdialog.cpp create mode 100644 multivalueinputdialog.h diff --git a/multivalueinputdialog.cpp b/multivalueinputdialog.cpp new file mode 100644 index 0000000..fc1ed2a --- /dev/null +++ b/multivalueinputdialog.cpp @@ -0,0 +1,24 @@ +#include "multivalueinputdialog.h" + +#include +#include +#include + +MultiValueInputDialog::MultiValueInputDialog(QStringList *inputValueLabels, QWidgetList *inputWidgets){ + + QFormLayout *form = new QFormLayout(); + for(int i = 0; isize(); i++){ + form->addRow(new QLabel(inputValueLabels->at(i))); + form->addRow(inputWidgets->at(i)); + } + // Add some text above the fields + + // Add some standard buttons (Cancel/Ok) at the bottom of the dialog + QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this); + form->addRow(buttonBox); + + connect(buttonBox, SIGNAL(accepted()), this, SLOT(accept())); + connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); + + this->setLayout(form); +} diff --git a/multivalueinputdialog.h b/multivalueinputdialog.h new file mode 100644 index 0000000..8abc4f4 --- /dev/null +++ b/multivalueinputdialog.h @@ -0,0 +1,13 @@ +#ifndef MULTIVALUEINPUTDIALOG_H +#define MULTIVALUEINPUTDIALOG_H + +#include +#include + +class MultiValueInputDialog : public QDialog +{ +public: + MultiValueInputDialog(QStringList *inputValueLabels, QWidgetList *inputWidgets); +}; + +#endif // MULTIVALUEINPUTDIALOG_H diff --git a/serverconfig.cpp b/serverconfig.cpp index d98228a..bd16f08 100644 --- a/serverconfig.cpp +++ b/serverconfig.cpp @@ -7,11 +7,14 @@ #include #include +#include "multivalueinputdialog.h" +#include "urls.h" + ServerConfig::ServerConfig(QWidget *parent, QSettings *settings) : QMainWindow(parent) { mySettings = settings; - ServerConnection *sc = new ServerConnection(this, mySettings); + sc = new ServerConnection(this, mySettings); connect(sc->getNetworkManager(), SIGNAL(finished(QNetworkReply*)), this, SLOT(finishedRequest(QNetworkReply*)), Qt::UniqueConnection); sc->getUnifiedServerConfig(); @@ -62,6 +65,9 @@ ServerConfig::ServerConfig(QWidget *parent, QSettings *settings) : QMainWindow(p innerLayoutContext->addWidget(addNewContext); context->setLayout(innerLayoutContext); + /* connect buttons */ + connect(addNew, SIGNAL (released()), this, SLOT (addNewPP())); + connect(addNewContext, SIGNAL (released()), this, SLOT (addNewContext())); /* setup main window */ mainLayout = new QGridLayout(); @@ -72,6 +78,44 @@ ServerConfig::ServerConfig(QWidget *parent, QSettings *settings) : QMainWindow(p this->setCentralWidget(mainWidget); } +void ServerConfig::addNewPP(){ + + QStringList *sl = new QStringList(); + sl->append("Schlüsselword"); + sl->append("Ersetzung"); + + QWidgetList *wl = new QWidgetList(); + wl->append(new QLineEdit()); + wl->append(new QLineEdit()); + + MultiValueInputDialog *dialog = new MultiValueInputDialog(sl, wl); + if (dialog->exec() == QDialog::Accepted) { + auto keyword = static_cast(wl->at(0)); + auto replace = static_cast(wl->at(0)); + + if(!keyword->text().isEmpty() && !replace->text().isEmpty()){ + sc->submitPostProcessorChange(keyword->text(), replace->text()); + } + } +} + +void ServerConfig::addNewContext() +{ + QStringList *sl = new QStringList(); + sl->append("Ausdruck"); + + QWidgetList *wl = new QWidgetList(); + wl->append(new QLineEdit()); + + MultiValueInputDialog *dialog = new MultiValueInputDialog(sl, wl); + if (dialog->exec() == QDialog::Accepted) { + auto lineEdit = static_cast(wl->at(0)); + if(!lineEdit->text().isEmpty()){ + sc->submitSpeechContextPhraseChange(lineEdit->text()); + } + } +} + QWidget* ServerConfig::loatListItemUiForm() { QUiLoader loader; @@ -91,29 +135,57 @@ void ServerConfig::finishedRequest(QNetworkReply *reply){ return; } - /* get filename and tracking id from replay */ - QJsonObject json = QJsonDocument::fromJson(reply->readAll()).object(); + QString addPP = sc->buildURLFromLocation(PP_EDIT); + QString addContext = sc->buildURLFromLocation(CONTEXT_EDIT); + if(QString::compare(reply->url().toString(), addPP) == 0){ + sc->getUnifiedServerConfig(); + }else if(QString::compare(reply->url().toString(), addContext) == 0){ + sc->getUnifiedServerConfig(); + }else{ + /* this is the unified server config query */ + /* 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(); + auto keywordMap = json["keyword-map"].toObject(); + auto phrases = json["phrases"].toArray(); - contextTable->clear(); + contextTable->clear(); + contextTable->setRowCount(0); + ppTable->clear(); + ppTable->setRowCount(0); - for(int i = 0; i < phrases.size(); i++){ - contextTable->insertRow(i); - contextTable->setItem(i, 0, new QTableWidgetItem(phrases.at(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); + for(int i = 0; i < phrases.size(); i++){ + contextTable->insertRow(i); + contextTable->setItem(i, 0, new QTableWidgetItem(phrases.at(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); + contextTable->setCellWidget(i, 1, deleteCell); + } + + for(int i = 0; i < keywordMap.keys().size(); i++){ + auto key = keywordMap.keys().at(i); + ppTable->insertRow(i); + ppTable->setItem(i, 0, new QTableWidgetItem(key)); + ppTable->setItem(i, 1, new QTableWidgetItem(keywordMap[key].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); + + ppTable->setCellWidget(i, 2, deleteCell); + } + + this->repaint(); } - this->repaint(); - } ServerConfig::~ServerConfig() diff --git a/serverconfig.h b/serverconfig.h index 4131941..c35e0d9 100644 --- a/serverconfig.h +++ b/serverconfig.h @@ -1,6 +1,8 @@ #ifndef SERVERCONFIG_H #define SERVERCONFIG_H +#include "serverconnection.h" + #include #include #include @@ -19,12 +21,15 @@ public: virtual ~ServerConfig(); private slots: void finishedRequest(QNetworkReply*); + void addNewPP(); + void addNewContext(); private: QGridLayout* mainLayout; QSettings* mySettings; QWidget *loatListItemUiForm(); QTableWidget* ppTable; QTableWidget* contextTable; + ServerConnection* sc; }; #endif // SERVERCONFIG_H diff --git a/serverconnection.cpp b/serverconnection.cpp index 2d71f43..ac020f7 100644 --- a/serverconnection.cpp +++ b/serverconnection.cpp @@ -22,6 +22,10 @@ QString ServerConnection::buildURLFromLocation(QVariant location){ return buildURLFromLocation(location.toString()); } +QString ServerConnection::buildURLFromLocation(const char *location){ + return buildURLFromLocation(QString(location)); +} + QString ServerConnection::buildURLFromLocation(QString location){ QString proto = mySettings->value(SETTING_PROTO).toString(); QString host = mySettings->value(SETTING_HOST).toString(); @@ -90,18 +94,39 @@ QNetworkAccessManager *ServerConnection::getNetworkManager(){ return networkManager; } -void ServerConnection::submitPostProcessorChange(QJsonDocument jsonDocument){ +void ServerConnection::submitPostProcessorChange(QString keyword, QString repl, bool remove){ + + QJsonObject json = QJsonObject(); + json["keyword-regex"] = keyword; + json["replacement"] = repl; + if(remove){ + json["action"] = "delete"; + }else{ + json["action"] = "add"; + } + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(PP_EDIT))); QNetworkRequest request(serviceUrl); request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); - networkManager->post(request, jsonDocument.toJson()); + request.setHeader(QNetworkRequest::ContentTypeHeader, MIME_JSON); + networkManager->post(request, QJsonDocument(json).toJson()); } -void ServerConnection::submitSpeechContextPhraseChange(QJsonDocument jsonDocument){ +void ServerConnection::submitSpeechContextPhraseChange(QString phrase, bool remove){ + + QJsonObject json = QJsonObject(); + json["phrase"] = phrase; + if(remove){ + json["action"] = "delete"; + }else{ + json["action"] = "add"; + } + QUrl serviceUrl = QUrl(buildURLFromLocation(QString(CONTEXT_EDIT))); QNetworkRequest request(serviceUrl); request.setRawHeader(AUTH_HEADER_NAME, authHeaderData); - networkManager->post(request, jsonDocument.toJson()); + request.setHeader(QNetworkRequest::ContentTypeHeader, MIME_JSON); + networkManager->post(request, QJsonDocument(json).toJson()); } void ServerConnection::getSpeechContextPhrases(){ diff --git a/serverconnection.h b/serverconnection.h index 026a5aa..63ecbdc 100644 --- a/serverconnection.h +++ b/serverconnection.h @@ -17,10 +17,11 @@ public: QNetworkAccessManager *getNetworkManager(); void queryServerVersion(); void getPostProcessorMap(); - void submitPostProcessorChange(QJsonDocument jsonDocument); - void submitSpeechContextPhraseChange(QJsonDocument jsonDocument); + void submitPostProcessorChange(QString keyword, QString repl, bool remove = false); + void submitSpeechContextPhraseChange(QString phrase, bool remove = false); void getSpeechContextPhrases(); void getUnifiedServerConfig(); + QString buildURLFromLocation(const char *location); public slots: void queryStatusAll(); private slots: diff --git a/speech-server-client-qt.pro b/speech-server-client-qt.pro index 24524fc..0912b9b 100644 --- a/speech-server-client-qt.pro +++ b/speech-server-client-qt.pro @@ -38,7 +38,8 @@ SOURCES += \ settings.cpp \ about.cpp \ serverconnection.cpp \ - serverconfig.cpp + serverconfig.cpp \ + multivalueinputdialog.cpp HEADERS += \ mainwindow.h \ @@ -48,7 +49,8 @@ HEADERS += \ about.h \ serverconnection.h \ serverconfig.h \ - urls.h + urls.h \ + multivalueinputdialog.h FORMS += \ mainwindow.ui \