Merge branch 'feature/onlineUserAccounts' into develop
This commit is contained in:
@ -8,8 +8,7 @@
|
|||||||
|
|
||||||
EditItemDialog::EditItemDialog(QTableView* tableView, QWidget* parent)
|
EditItemDialog::EditItemDialog(QTableView* tableView, QWidget* parent)
|
||||||
: AbstractDialog(QDialogButtonBox::Ok, parent)
|
: AbstractDialog(QDialogButtonBox::Ok, parent)
|
||||||
, m_tableView(tableView)
|
, m_tableView(tableView) {}
|
||||||
, m_qrCodeDisplay(new QLabel("QR Code")) {}
|
|
||||||
|
|
||||||
void EditItemDialog::createContent() {
|
void EditItemDialog::createContent() {
|
||||||
if (m_contentContainer) {
|
if (m_contentContainer) {
|
||||||
@ -26,11 +25,11 @@ void EditItemDialog::createContent() {
|
|||||||
m_detailMapper->setModelMappings(m_tableView);
|
m_detailMapper->setModelMappings(m_tableView);
|
||||||
innerLayout->addWidget(m_detailMapper);
|
innerLayout->addWidget(m_detailMapper);
|
||||||
|
|
||||||
updateQRCode();
|
|
||||||
connect(m_detailMapper, &ItemDetailMapper::contentChanged, this, &EditItemDialog::updateQRCode);
|
|
||||||
innerLayout->addWidget(m_qrCodeDisplay);
|
|
||||||
|
|
||||||
m_outerLayout->insertWidget(0, m_contentContainer);
|
m_outerLayout->insertWidget(0, m_contentContainer);
|
||||||
|
|
||||||
|
/// online user stuff
|
||||||
|
connect(m_detailMapper, &ItemDetailMapper::createOnlineAccountTriggered, this,
|
||||||
|
&EditItemDialog::createOnlineAccountTriggered);
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditItemDialog::accept() {
|
void EditItemDialog::accept() {
|
||||||
@ -42,16 +41,3 @@ void EditItemDialog::reject() {
|
|||||||
m_detailMapper->revert();
|
m_detailMapper->revert();
|
||||||
QDialog::reject();
|
QDialog::reject();
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditItemDialog::updateQRCode(const QString text) {
|
|
||||||
QImage unscaledImage;
|
|
||||||
if (text.isEmpty()) {
|
|
||||||
unscaledImage = QImage("://no-picture-taking.png");
|
|
||||||
} else {
|
|
||||||
unscaledImage = m_generator.generateQr(text);
|
|
||||||
}
|
|
||||||
QImage image = unscaledImage.scaled(250, 250);
|
|
||||||
|
|
||||||
m_qrCodeDisplay->setPixmap(QPixmap::fromImage(image));
|
|
||||||
m_qrCodeDisplay->setToolTip(text);
|
|
||||||
}
|
|
||||||
|
|||||||
@ -1,7 +1,6 @@
|
|||||||
#ifndef EDITITEMDIALOG_H
|
#ifndef EDITITEMDIALOG_H
|
||||||
#define EDITITEMDIALOG_H
|
#define EDITITEMDIALOG_H
|
||||||
|
|
||||||
#include "QrCodeGenerator.h"
|
|
||||||
#include "abstractdialog.h"
|
#include "abstractdialog.h"
|
||||||
|
|
||||||
class QDoubleSpinBox;
|
class QDoubleSpinBox;
|
||||||
@ -20,34 +19,15 @@ class EditItemDialog : public AbstractDialog {
|
|||||||
/// AbstractDialog interface
|
/// AbstractDialog interface
|
||||||
void createContent() override;
|
void createContent() override;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void createOnlineAccountTriggered(const QString& mailAddress);
|
||||||
public slots:
|
public slots:
|
||||||
void accept() override;
|
void accept() override;
|
||||||
void reject() override;
|
void reject() override;
|
||||||
|
|
||||||
private slots:
|
|
||||||
void updateQRCode(const QString text = "");
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QTableView* m_tableView = nullptr;
|
QTableView* m_tableView = nullptr;
|
||||||
ItemDetailMapper* m_detailMapper;
|
ItemDetailMapper* m_detailMapper;
|
||||||
|
|
||||||
QLabel* m_nameLabel = nullptr;
|
|
||||||
QLineEdit* m_nameEdit = nullptr;
|
|
||||||
|
|
||||||
QLabel* m_descriptionLabel = nullptr;
|
|
||||||
QLineEdit* m_descriptionEdit = nullptr;
|
|
||||||
|
|
||||||
QLabel* m_infoLabel = nullptr;
|
|
||||||
QLineEdit* m_infoEdit = nullptr;
|
|
||||||
|
|
||||||
QLabel* m_amountLabel = nullptr;
|
|
||||||
QSpinBox* m_amountBox = nullptr;
|
|
||||||
|
|
||||||
QLabel* m_factorLabel = nullptr;
|
|
||||||
QDoubleSpinBox* m_factorBox = nullptr;
|
|
||||||
|
|
||||||
QLabel* m_qrCodeDisplay = nullptr;
|
|
||||||
QrCodeGenerator m_generator;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // EDITITEMDIALOG_H
|
#endif // EDITITEMDIALOG_H
|
||||||
|
|||||||
@ -16,7 +16,6 @@
|
|||||||
#include "genericcore.h"
|
#include "genericcore.h"
|
||||||
#include "model/generalsortfiltermodel.h"
|
#include "model/generalsortfiltermodel.h"
|
||||||
#include "model/metadata.h"
|
#include "model/metadata.h"
|
||||||
#include "model/modelsummary.h"
|
|
||||||
#include "model/tablemodel.h"
|
#include "model/tablemodel.h"
|
||||||
#include "widgets/biddingroundcontrol.h"
|
#include "widgets/biddingroundcontrol.h"
|
||||||
#include "widgets/comboboxdelegate.h"
|
#include "widgets/comboboxdelegate.h"
|
||||||
@ -75,6 +74,10 @@ MainWindow::MainWindow(QWidget* parent)
|
|||||||
onCurrentChanged(QModelIndex(), QModelIndex());
|
onCurrentChanged(QModelIndex(), QModelIndex());
|
||||||
|
|
||||||
setupEventTab();
|
setupEventTab();
|
||||||
|
|
||||||
|
// #ifndef QT_DEBUG
|
||||||
|
initServerConnection();
|
||||||
|
// #endif
|
||||||
}
|
}
|
||||||
|
|
||||||
MainWindow::~MainWindow() { delete ui; }
|
MainWindow::~MainWindow() { delete ui; }
|
||||||
@ -563,3 +566,8 @@ void MainWindow::setupEventTab() {
|
|||||||
|
|
||||||
ui->tabWidget->insertTab(0, containerWidget, "Event (&1)");
|
ui->tabWidget->insertTab(0, containerWidget, "Event (&1)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::initServerConnection() {
|
||||||
|
connect(m_editItemDialog.get(), &EditItemDialog::createOnlineAccountTriggered, m_core.get(),
|
||||||
|
&GenericCore::onCreateOnlineAccountTriggered);
|
||||||
|
}
|
||||||
|
|||||||
@ -120,5 +120,7 @@ class MainWindow : public QMainWindow {
|
|||||||
void createGuiDialogs();
|
void createGuiDialogs();
|
||||||
|
|
||||||
void setupEventTab();
|
void setupEventTab();
|
||||||
|
|
||||||
|
void initServerConnection();
|
||||||
};
|
};
|
||||||
#endif // MAINWINDOW_H
|
#endif // MAINWINDOW_H
|
||||||
|
|||||||
@ -15,7 +15,8 @@
|
|||||||
#include "model/metadata.h"
|
#include "model/metadata.h"
|
||||||
|
|
||||||
ItemDetailMapper::ItemDetailMapper(QWidget* parent)
|
ItemDetailMapper::ItemDetailMapper(QWidget* parent)
|
||||||
: QWidget{parent} {
|
: QWidget{parent}
|
||||||
|
, m_qrCodeDisplay(new QLabel("QR Code")) {
|
||||||
/// model mapping
|
/// model mapping
|
||||||
m_mapper = std::make_unique<QDataWidgetMapper>(this);
|
m_mapper = std::make_unique<QDataWidgetMapper>(this);
|
||||||
/// BUG: If multiple columns are changed not all changes are applied.
|
/// BUG: If multiple columns are changed not all changes are applied.
|
||||||
@ -35,7 +36,8 @@ ItemDetailMapper::ItemDetailMapper(QWidget* parent)
|
|||||||
connect(m_nextButton, &QAbstractButton::clicked, this, &ItemDetailMapper::toNext);
|
connect(m_nextButton, &QAbstractButton::clicked, this, &ItemDetailMapper::toNext);
|
||||||
|
|
||||||
/// the individual widgets
|
/// the individual widgets
|
||||||
// REFACTOR deduce label names and types from meta data & use a factory
|
// REFACTOR deduce types from meta data & use a factory
|
||||||
|
/// left layout
|
||||||
m_numberLabel = new QLabel(GET_HEADER_FOR_COLUMN(0));
|
m_numberLabel = new QLabel(GET_HEADER_FOR_COLUMN(0));
|
||||||
m_numberBox = new QSpinBox();
|
m_numberBox = new QSpinBox();
|
||||||
m_numberBox->setMaximum(1000);
|
m_numberBox->setMaximum(1000);
|
||||||
@ -86,36 +88,83 @@ ItemDetailMapper::ItemDetailMapper(QWidget* parent)
|
|||||||
m_mailEdit->setMinimumWidth(200);
|
m_mailEdit->setMinimumWidth(200);
|
||||||
m_mailLabel->setBuddy(m_mailEdit);
|
m_mailLabel->setBuddy(m_mailEdit);
|
||||||
|
|
||||||
QGridLayout* layout = new QGridLayout();
|
/// right layout
|
||||||
layout->addWidget(m_numberLabel, 0, 0, 1, 1);
|
m_createOnlineAccountButton = new QPushButton(tr("&Create account"));
|
||||||
layout->addWidget(m_numberBox, 0, 1, 1, 1);
|
m_sendInviteMailButton = new QPushButton(tr("&Send invite"));
|
||||||
layout->addWidget(m_lastNameLabel, 1, 0, 1, 1);
|
|
||||||
layout->addWidget(m_lastNameEdit, 1, 1, 1, 1);
|
|
||||||
layout->addWidget(m_firstNameLabel, 2, 0, 1, 1);
|
|
||||||
layout->addWidget(m_firstNameEdit, 2, 1, 1, 1);
|
|
||||||
layout->addWidget(m_shareTypeLabel, 3, 0, 1, 1);
|
|
||||||
layout->addWidget(m_shareTypeBox, 3, 1, 1, 1);
|
|
||||||
layout->addWidget(m_amountLabel, 4, 0, 1, 1);
|
|
||||||
layout->addWidget(m_amountSpinBox, 4, 1, 1, 1);
|
|
||||||
layout->addWidget(m_biddingTypeLabel, 5, 0, 1, 1);
|
|
||||||
layout->addWidget(m_biddingTypeBox, 5, 1, 1, 1);
|
|
||||||
layout->addWidget(m_bidding1Label, 6, 0, 1, 1);
|
|
||||||
layout->addWidget(m_bidding1SpinBox, 6, 1, 1, 1);
|
|
||||||
layout->addWidget(m_bidding2Label, 7, 0, 1, 1);
|
|
||||||
layout->addWidget(m_bidding2SpinBox, 7, 1, 1, 1);
|
|
||||||
layout->addWidget(m_bidding3Label, 8, 0, 1, 1);
|
|
||||||
layout->addWidget(m_bidding3SpinBox, 8, 1, 1, 1);
|
|
||||||
layout->addWidget(m_depotWish1Label, 9, 0, 1, 1);
|
|
||||||
layout->addWidget(m_depotWish1Edit, 9, 1, 1, 1);
|
|
||||||
layout->addWidget(m_depotWish2Label, 10, 0, 1, 1);
|
|
||||||
layout->addWidget(m_depotWish2Edit, 10, 1, 1, 1);
|
|
||||||
layout->addWidget(m_mailLabel, 11, 0, 1, 1);
|
|
||||||
layout->addWidget(m_mailEdit, 11, 1, 1, 1);
|
|
||||||
|
|
||||||
layout->addWidget(m_previousButton, 12, 0, 1, 1);
|
m_onlineIdLabel = new QLabel(GET_HEADER_FOR_COLUMN(12));
|
||||||
layout->addWidget(m_nextButton, 12, 1, 1, 1);
|
m_onlineIdDisplay = new QLineEdit();
|
||||||
|
m_onlineIdDisplay->setReadOnly(true);
|
||||||
|
m_onlineIdLabel->setBuddy(m_onlineIdDisplay);
|
||||||
|
|
||||||
setLayout(layout);
|
m_accessCodeLabel = new QLabel(GET_HEADER_FOR_COLUMN(13));
|
||||||
|
m_accessCodeDisplay = new QLineEdit();
|
||||||
|
m_accessCodeDisplay->setReadOnly(true);
|
||||||
|
m_accessCodeLabel->setBuddy(m_onlineIdDisplay);
|
||||||
|
|
||||||
|
updateQRCode();
|
||||||
|
connect(this, &ItemDetailMapper::contentChanged, this, &ItemDetailMapper::updateQRCode);
|
||||||
|
|
||||||
|
m_accessUrlDisplay = new QLineEdit();
|
||||||
|
m_accessUrlDisplay->setReadOnly(true);
|
||||||
|
|
||||||
|
QGridLayout* leftLayout = new QGridLayout();
|
||||||
|
leftLayout->addWidget(m_numberLabel, 0, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_numberBox, 0, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_lastNameLabel, 1, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_lastNameEdit, 1, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_firstNameLabel, 2, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_firstNameEdit, 2, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_shareTypeLabel, 3, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_shareTypeBox, 3, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_amountLabel, 4, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_amountSpinBox, 4, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_biddingTypeLabel, 5, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_biddingTypeBox, 5, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_bidding1Label, 6, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_bidding1SpinBox, 6, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_bidding2Label, 7, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_bidding2SpinBox, 7, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_bidding3Label, 8, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_bidding3SpinBox, 8, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_depotWish1Label, 9, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_depotWish1Edit, 9, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_depotWish2Label, 10, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_depotWish2Edit, 10, 1, 1, 1);
|
||||||
|
leftLayout->addWidget(m_mailLabel, 11, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_mailEdit, 11, 1, 1, 1);
|
||||||
|
|
||||||
|
leftLayout->addWidget(m_previousButton, 12, 0, 1, 1);
|
||||||
|
leftLayout->addWidget(m_nextButton, 12, 1, 1, 1);
|
||||||
|
|
||||||
|
/// right layout
|
||||||
|
QVBoxLayout* rightLayout = new QVBoxLayout;
|
||||||
|
QHBoxLayout* onlineAccountControlLayout = new QHBoxLayout;
|
||||||
|
onlineAccountControlLayout->addWidget(m_createOnlineAccountButton);
|
||||||
|
onlineAccountControlLayout->addWidget(m_sendInviteMailButton);
|
||||||
|
rightLayout->addLayout(onlineAccountControlLayout);
|
||||||
|
QGridLayout* rightGridLayout = new QGridLayout();
|
||||||
|
rightGridLayout->addWidget(m_onlineIdLabel, 0, 0, 1, 1);
|
||||||
|
rightGridLayout->addWidget(m_onlineIdDisplay, 0, 1, 1, 1);
|
||||||
|
rightGridLayout->addWidget(m_accessCodeLabel, 1, 0, 1, 1);
|
||||||
|
rightGridLayout->addWidget(m_accessCodeDisplay, 1, 1, 1, 1);
|
||||||
|
rightGridLayout->addWidget(m_qrCodeDisplay, 2, 0, 6, 2);
|
||||||
|
rightGridLayout->addWidget(m_accessUrlDisplay, 9, 0, 1, 2);
|
||||||
|
rightLayout->addLayout(rightGridLayout);
|
||||||
|
|
||||||
|
QHBoxLayout* outerLayout = new QHBoxLayout;
|
||||||
|
outerLayout->addLayout(leftLayout);
|
||||||
|
outerLayout->addLayout(rightLayout);
|
||||||
|
setLayout(outerLayout);
|
||||||
|
|
||||||
|
/// online user account
|
||||||
|
connect(m_mailEdit, &QLineEdit::textChanged, this, &ItemDetailMapper::onMailEditChanged);
|
||||||
|
connect(m_onlineIdDisplay, &QLineEdit::textChanged, this, &ItemDetailMapper::onOnlineIDChanged);
|
||||||
|
connect(m_accessCodeDisplay, &QLineEdit::textChanged, this,
|
||||||
|
&ItemDetailMapper::onAccessCodeChanged);
|
||||||
|
|
||||||
|
connect(m_createOnlineAccountButton, &QAbstractButton::clicked, this,
|
||||||
|
&ItemDetailMapper::onCreateOnlineAccountTriggered);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ItemDetailMapper::setModelMappings(QTableView* tableView) {
|
void ItemDetailMapper::setModelMappings(QTableView* tableView) {
|
||||||
@ -138,6 +187,9 @@ void ItemDetailMapper::setModelMappings(QTableView* tableView) {
|
|||||||
m_mapper->addMapping(m_depotWish2Edit, 10);
|
m_mapper->addMapping(m_depotWish2Edit, 10);
|
||||||
m_mapper->addMapping(m_mailEdit, 11);
|
m_mapper->addMapping(m_mailEdit, 11);
|
||||||
|
|
||||||
|
m_mapper->addMapping(m_onlineIdDisplay, 12);
|
||||||
|
m_mapper->addMapping(m_accessCodeDisplay, 13);
|
||||||
|
|
||||||
m_mapper->setCurrentIndex(m_selectionModel->currentIndex().row());
|
m_mapper->setCurrentIndex(m_selectionModel->currentIndex().row());
|
||||||
|
|
||||||
connect(m_model, &QAbstractItemModel::rowsInserted, this, &ItemDetailMapper::rowsInserted);
|
connect(m_model, &QAbstractItemModel::rowsInserted, this, &ItemDetailMapper::rowsInserted);
|
||||||
@ -152,16 +204,6 @@ bool ItemDetailMapper::submit() { return m_mapper->submit(); }
|
|||||||
|
|
||||||
void ItemDetailMapper::revert() { m_mapper->revert(); }
|
void ItemDetailMapper::revert() { m_mapper->revert(); }
|
||||||
|
|
||||||
void ItemDetailMapper::onCurrentIndexChanged(const QModelIndex& current,
|
|
||||||
const QModelIndex& /*previous*/) {
|
|
||||||
if (!isEnabled()) {
|
|
||||||
setEnabled(true);
|
|
||||||
}
|
|
||||||
m_mapper->setCurrentModelIndex(current);
|
|
||||||
updateButtons(current.row());
|
|
||||||
emitContentChanged(current);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ItemDetailMapper::rowsInserted(const QModelIndex& parent, int start, int end) {
|
void ItemDetailMapper::rowsInserted(const QModelIndex& parent, int start, int end) {
|
||||||
updateButtons(m_mapper->currentIndex());
|
updateButtons(m_mapper->currentIndex());
|
||||||
}
|
}
|
||||||
@ -209,3 +251,63 @@ void ItemDetailMapper::emitContentChanged(const QModelIndex& currentIndex) {
|
|||||||
}
|
}
|
||||||
emit contentChanged(toStringText);
|
emit contentChanged(toStringText);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ItemDetailMapper::onCurrentIndexChanged(const QModelIndex& current,
|
||||||
|
const QModelIndex& /*previous*/) {
|
||||||
|
if (!isEnabled()) {
|
||||||
|
setEnabled(true);
|
||||||
|
}
|
||||||
|
m_mapper->setCurrentModelIndex(current);
|
||||||
|
updateButtons(current.row());
|
||||||
|
emitContentChanged(current);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemDetailMapper::updateQRCode(const QString text) {
|
||||||
|
QImage unscaledImage;
|
||||||
|
if (text.isEmpty()) {
|
||||||
|
unscaledImage = QImage("://no-picture-taking.png");
|
||||||
|
} else {
|
||||||
|
unscaledImage = m_generator.generateQr(text);
|
||||||
|
}
|
||||||
|
QImage image = unscaledImage.scaled(250, 250);
|
||||||
|
|
||||||
|
m_qrCodeDisplay->setPixmap(QPixmap::fromImage(image));
|
||||||
|
m_qrCodeDisplay->setToolTip(text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemDetailMapper::onMailEditChanged(const QString& text) {
|
||||||
|
if (text.isEmpty()) {
|
||||||
|
m_createOnlineAccountButton->setEnabled(false);
|
||||||
|
m_sendInviteMailButton->setEnabled(false);
|
||||||
|
} else {
|
||||||
|
onOnlineIDChanged(m_onlineIdDisplay->text());
|
||||||
|
onAccessCodeChanged(m_accessCodeDisplay->text());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemDetailMapper::onOnlineIDChanged(const QString& text) {
|
||||||
|
if (text.isEmpty()) {
|
||||||
|
m_createOnlineAccountButton->setEnabled(true);
|
||||||
|
m_sendInviteMailButton->setEnabled(false);
|
||||||
|
} else {
|
||||||
|
m_createOnlineAccountButton->setEnabled(false);
|
||||||
|
m_sendInviteMailButton->setEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemDetailMapper::onAccessCodeChanged(const QString& text) {
|
||||||
|
if (text.isEmpty()) {
|
||||||
|
m_sendInviteMailButton->setEnabled(false);
|
||||||
|
m_accessUrlDisplay->setText("");
|
||||||
|
updateQRCode("");
|
||||||
|
} else {
|
||||||
|
m_sendInviteMailButton->setEnabled(true);
|
||||||
|
const QString accessUrl = "http://127.0.0.1:4000/api/users/" + text;
|
||||||
|
m_accessUrlDisplay->setText(accessUrl);
|
||||||
|
updateQRCode(accessUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ItemDetailMapper::onCreateOnlineAccountTriggered() {
|
||||||
|
emit createOnlineAccountTriggered(m_mailEdit->text());
|
||||||
|
}
|
||||||
|
|||||||
@ -15,6 +15,8 @@ class QItemSelectionModel;
|
|||||||
class QStringListModel;
|
class QStringListModel;
|
||||||
class QTableView;
|
class QTableView;
|
||||||
|
|
||||||
|
#include "QrCodeGenerator.h"
|
||||||
|
|
||||||
class ItemDetailMapper : public QWidget {
|
class ItemDetailMapper : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
@ -28,14 +30,22 @@ class ItemDetailMapper : public QWidget {
|
|||||||
signals:
|
signals:
|
||||||
void contentChanged(const QString text);
|
void contentChanged(const QString text);
|
||||||
|
|
||||||
|
void createOnlineAccountTriggered(const QString& mailAddress);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void onCurrentIndexChanged(const QModelIndex& current, const QModelIndex& previous);
|
|
||||||
void rowsInserted(const QModelIndex& parent, int start, int end);
|
void rowsInserted(const QModelIndex& parent, int start, int end);
|
||||||
void rowsRemoved(const QModelIndex& parent, int start, int end);
|
void rowsRemoved(const QModelIndex& parent, int start, int end);
|
||||||
void toPrevious();
|
void toPrevious();
|
||||||
void toNext();
|
void toNext();
|
||||||
void updateButtons(int row);
|
void updateButtons(int row);
|
||||||
void emitContentChanged(const QModelIndex& currentIndex);
|
void emitContentChanged(const QModelIndex& currentIndex);
|
||||||
|
void onCurrentIndexChanged(const QModelIndex& current, const QModelIndex& previous);
|
||||||
|
|
||||||
|
void updateQRCode(const QString text = "");
|
||||||
|
void onMailEditChanged(const QString& text);
|
||||||
|
void onOnlineIDChanged(const QString& text);
|
||||||
|
void onAccessCodeChanged(const QString& text);
|
||||||
|
void onCreateOnlineAccountTriggered();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
/// *** members ***
|
/// *** members ***
|
||||||
@ -46,7 +56,8 @@ class ItemDetailMapper : public QWidget {
|
|||||||
|
|
||||||
std::unique_ptr<QDataWidgetMapper> m_mapper;
|
std::unique_ptr<QDataWidgetMapper> m_mapper;
|
||||||
|
|
||||||
/// GUI elements
|
/// *** GUI elements ***
|
||||||
|
/// left layout
|
||||||
QLabel* m_numberLabel;
|
QLabel* m_numberLabel;
|
||||||
QSpinBox* m_numberBox;
|
QSpinBox* m_numberBox;
|
||||||
|
|
||||||
@ -82,7 +93,21 @@ class ItemDetailMapper : public QWidget {
|
|||||||
QLabel* m_mailLabel;
|
QLabel* m_mailLabel;
|
||||||
QLineEdit* m_mailEdit;
|
QLineEdit* m_mailEdit;
|
||||||
|
|
||||||
/// Model mapper stuff
|
/// right layout
|
||||||
|
QPushButton* m_createOnlineAccountButton = nullptr;
|
||||||
|
QPushButton* m_sendInviteMailButton = nullptr;
|
||||||
|
|
||||||
|
QLabel* m_onlineIdLabel;
|
||||||
|
QLineEdit* m_onlineIdDisplay = nullptr;
|
||||||
|
QLabel* m_accessCodeLabel;
|
||||||
|
QLineEdit* m_accessCodeDisplay = nullptr;
|
||||||
|
|
||||||
|
QLabel* m_qrCodeDisplay = nullptr;
|
||||||
|
QrCodeGenerator m_generator;
|
||||||
|
|
||||||
|
QLineEdit* m_accessUrlDisplay = nullptr;
|
||||||
|
|
||||||
|
/// *** Model mapper stuff ***
|
||||||
QPushButton* m_nextButton;
|
QPushButton* m_nextButton;
|
||||||
QPushButton* m_previousButton;
|
QPushButton* m_previousButton;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -70,7 +70,25 @@ QByteArray JsonParser::itemValuesListToJson(const QList<ModelItemValues>& itemVa
|
|||||||
return jsonDoc.toJson(QJsonDocument::Compact);
|
return jsonDoc.toJson(QJsonDocument::Compact);
|
||||||
}
|
}
|
||||||
|
|
||||||
JsonParser::JsonParser() {}
|
QByteArray JsonParser::ToJsonObject(const QHash<QString, QVariant>& values,
|
||||||
|
const QString& objectName) {
|
||||||
|
QJsonDocument jsonDoc;
|
||||||
|
QJsonObject rootObject;
|
||||||
|
QJsonObject itemObject;
|
||||||
|
|
||||||
|
QHashIterator<QString, QVariant> i(values);
|
||||||
|
while (i.hasNext()) {
|
||||||
|
i.next();
|
||||||
|
const QString key = i.key();
|
||||||
|
const QVariant value = i.value();
|
||||||
|
itemObject.insert(key, value.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
rootObject.insert(objectName, itemObject);
|
||||||
|
jsonDoc.setObject(rootObject);
|
||||||
|
|
||||||
|
return jsonDoc.toJson(QJsonDocument::Compact);
|
||||||
|
}
|
||||||
|
|
||||||
QJsonArray JsonParser::extractItemArray(const QJsonDocument& doc, const QString& objectName) {
|
QJsonArray JsonParser::extractItemArray(const QJsonDocument& doc, const QString& objectName) {
|
||||||
QJsonArray itemArray;
|
QJsonArray itemArray;
|
||||||
@ -83,6 +101,8 @@ QJsonArray JsonParser::extractItemArray(const QJsonDocument& doc, const QString&
|
|||||||
return itemArray;
|
return itemArray;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JsonParser::JsonParser() {}
|
||||||
|
|
||||||
ModelItemValues JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) {
|
ModelItemValues JsonParser::jsonObjectToItemValues(const QJsonObject& itemJsonObject) {
|
||||||
ModelItemValues values;
|
ModelItemValues values;
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,8 @@ class JsonParser {
|
|||||||
const QString& rootValueName = "");
|
const QString& rootValueName = "");
|
||||||
static QByteArray itemValuesListToJson(const QList<ModelItemValues>& itemValuesList,
|
static QByteArray itemValuesListToJson(const QList<ModelItemValues>& itemValuesList,
|
||||||
const QString& objectName = "");
|
const QString& objectName = "");
|
||||||
|
static QByteArray ToJsonObject(const QHash<QString, QVariant>& Values,
|
||||||
|
const QString& objectName = "");
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit JsonParser();
|
explicit JsonParser();
|
||||||
|
|||||||
@ -160,6 +160,24 @@ void GenericCore::onBiddingsChanged(int round, QList<bidding> biddings) {
|
|||||||
// NEXT merge biddings into model
|
// NEXT merge biddings into model
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GenericCore::onCreateOnlineAccountTriggered(const QString& mailAddress) {
|
||||||
|
qInfo() << "Creating online account for:" << mailAddress;
|
||||||
|
QHash<QString, QVariant> hash;
|
||||||
|
hash.insert("email", mailAddress);
|
||||||
|
const QByteArray jsonDoc = JsonParser::ToJsonObject(hash, "user");
|
||||||
|
emit sendPostRequest(RegisterUser, jsonDoc);
|
||||||
|
}
|
||||||
|
|
||||||
|
void GenericCore::onOnlineUserAccountReceived(const QString mailAddress,
|
||||||
|
const QString uuid,
|
||||||
|
const QString accessToken) {
|
||||||
|
m_mainModel->setOnlineCredentials(mailAddress, uuid, accessToken);
|
||||||
|
|
||||||
|
const QString message = QString("Online credentials received for: %1").arg(mailAddress);
|
||||||
|
emit displayStatusMessage(message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GenericCore::setupModels() {
|
void GenericCore::setupModels() {
|
||||||
m_mainModel = make_shared<TableModel>(m_modelUndoStack);
|
m_mainModel = make_shared<TableModel>(m_modelUndoStack);
|
||||||
m_sortFilterModel = make_shared<GeneralSortFilterModel>(m_mainModel);
|
m_sortFilterModel = make_shared<GeneralSortFilterModel>(m_mainModel);
|
||||||
|
|||||||
@ -49,12 +49,18 @@ class GenericCore : public QObject {
|
|||||||
public slots:
|
public slots:
|
||||||
void onBiddingsChanged(int round, QList<bidding> biddings);
|
void onBiddingsChanged(int round, QList<bidding> biddings);
|
||||||
|
|
||||||
|
void onCreateOnlineAccountTriggered(const QString& mailAddress);
|
||||||
|
void onOnlineUserAccountReceived(const QString mailAddress,
|
||||||
|
const QString uuid,
|
||||||
|
const QString accessToken);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void displayStatusMessage(QString message);
|
void displayStatusMessage(QString message);
|
||||||
|
|
||||||
/// *** server communication ***
|
/// *** server communication ***
|
||||||
/// request signals
|
/// request signals
|
||||||
void sendGetRequest(GetRequestTypes type, QVariant data = QVariant());
|
void sendGetRequest(GetRequestTypes type, QVariant data = QVariant());
|
||||||
|
void sendPostRequest(PostRequestTypes type, QByteArray data);
|
||||||
/// response signals
|
/// response signals
|
||||||
void currentBiddingRoundChanged(int round, bool isRunning);
|
void currentBiddingRoundChanged(int round, bool isRunning);
|
||||||
|
|
||||||
|
|||||||
@ -91,6 +91,7 @@ enum GetRequestTypes {
|
|||||||
GetBiddingsOfSpecificRound,
|
GetBiddingsOfSpecificRound,
|
||||||
GetBiddingsOfHighestRound
|
GetBiddingsOfHighestRound
|
||||||
};
|
};
|
||||||
|
enum PostRequestTypes { RegisterUser };
|
||||||
|
|
||||||
/// functions
|
/// functions
|
||||||
static UserRoles GET_ROLE_FOR_COLUMN(const int column) {
|
static UserRoles GET_ROLE_FOR_COLUMN(const int column) {
|
||||||
|
|||||||
@ -231,6 +231,14 @@ bool TableModel::updateItem(const ModelItemValues& itemValues) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TableModel::setOnlineCredentials(const QString& mail,
|
||||||
|
const QString& uuid,
|
||||||
|
const QString& token) {
|
||||||
|
QModelIndex itemIndex = getIndexByRoleValue(mail, MailRole);
|
||||||
|
setItemData(itemIndex, {{OnlineIdRole, uuid}, {AccessCodeRole, token}});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TableModel::removeRows(int firstRow, int nRows, const QModelIndex& parentIndex) {
|
bool TableModel::removeRows(int firstRow, int nRows, const QModelIndex& parentIndex) {
|
||||||
if (parentIndex != QModelIndex()) {
|
if (parentIndex != QModelIndex()) {
|
||||||
qWarning() << "Removing of child rows is not supported yet!";
|
qWarning() << "Removing of child rows is not supported yet!";
|
||||||
@ -282,29 +290,6 @@ void TableModel::insertItems(int startPosition,
|
|||||||
m_undoStack->push(insertCommand);
|
m_undoStack->push(insertCommand);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TableModel::onRowCountChanged(const QModelIndex& parent, int first, int last) {
|
|
||||||
Q_UNUSED(first);
|
|
||||||
Q_UNUSED(last);
|
|
||||||
|
|
||||||
if (parent != QModelIndex()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
emit rowCountChanged();
|
|
||||||
emit nExpectedBiddingsChanged();
|
|
||||||
|
|
||||||
emit nPlacedBiddingsChanged(1);
|
|
||||||
emit nPlacedBiddingsChanged(2);
|
|
||||||
emit nPlacedBiddingsChanged(3);
|
|
||||||
|
|
||||||
emit biddingSumChanged(1);
|
|
||||||
emit biddingSumChanged(2);
|
|
||||||
emit biddingSumChanged(3);
|
|
||||||
|
|
||||||
emit biddingAverageChanged(1);
|
|
||||||
emit biddingAverageChanged(2);
|
|
||||||
emit biddingAverageChanged(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
int TableModel::nExpectedBiddings() const {
|
int TableModel::nExpectedBiddings() const {
|
||||||
int result = 0;
|
int result = 0;
|
||||||
for (auto i = m_items.begin(), end = m_items.end(); i != end; ++i) {
|
for (auto i = m_items.begin(), end = m_items.end(); i != end; ++i) {
|
||||||
@ -352,6 +337,29 @@ qreal TableModel::biddingAverage3() const {
|
|||||||
return averageBidding;
|
return averageBidding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TableModel::onRowCountChanged(const QModelIndex& parent, int first, int last) {
|
||||||
|
Q_UNUSED(first);
|
||||||
|
Q_UNUSED(last);
|
||||||
|
|
||||||
|
if (parent != QModelIndex()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emit rowCountChanged();
|
||||||
|
emit nExpectedBiddingsChanged();
|
||||||
|
|
||||||
|
emit nPlacedBiddingsChanged(1);
|
||||||
|
emit nPlacedBiddingsChanged(2);
|
||||||
|
emit nPlacedBiddingsChanged(3);
|
||||||
|
|
||||||
|
emit biddingSumChanged(1);
|
||||||
|
emit biddingSumChanged(2);
|
||||||
|
emit biddingSumChanged(3);
|
||||||
|
|
||||||
|
emit biddingAverageChanged(1);
|
||||||
|
emit biddingAverageChanged(2);
|
||||||
|
emit biddingAverageChanged(3);
|
||||||
|
}
|
||||||
|
|
||||||
void TableModel::execInsertItems(const int firstRow, const QList<ModelItemValues> valueList) {
|
void TableModel::execInsertItems(const int firstRow, const QList<ModelItemValues> valueList) {
|
||||||
const int nRows = valueList.size();
|
const int nRows = valueList.size();
|
||||||
qDebug() << "Inserting" << nRows << "items...";
|
qDebug() << "Inserting" << nRows << "items...";
|
||||||
@ -387,8 +395,8 @@ void TableModel::execEditItemData(const int row, const QMap<int, QVariant>& chan
|
|||||||
roles.insert(0, Qt::DisplayRole);
|
roles.insert(0, Qt::DisplayRole);
|
||||||
emit dataChanged(firstIndex, lastIndex, roles.toVector());
|
emit dataChanged(firstIndex, lastIndex, roles.toVector());
|
||||||
|
|
||||||
// NEXT check which roles are changed & trigger only changed properties
|
if (roles.contains(BiddingTypeRole) || roles.contains(ShareAmountRole) ||
|
||||||
if (roles.contains(BiddingTypeRole) || roles.contains(ShareAmountRole)) {
|
roles.contains(ShareTypeRole)) {
|
||||||
emit nExpectedBiddingsChanged();
|
emit nExpectedBiddingsChanged();
|
||||||
}
|
}
|
||||||
if (roles.contains(ShareAmountRole) || roles.contains(ShareTypeRole)) {
|
if (roles.contains(ShareAmountRole) || roles.contains(ShareTypeRole)) {
|
||||||
@ -575,3 +583,29 @@ qreal TableModel::totalSharesWithBiddings(const UserRoles biddingRole) const {
|
|||||||
qInfo() << "Biddings exist for " << result << "shares!";
|
qInfo() << "Biddings exist for " << result << "shares!";
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QModelIndex TableModel::getIndexByRoleValue(const QString& valueString, const int role) const {
|
||||||
|
const QString text =
|
||||||
|
QString("Searching list item with value '%1' for role '%2'").arg(valueString, role);
|
||||||
|
qInfo() << text;
|
||||||
|
int itemRow = -1;
|
||||||
|
|
||||||
|
for (auto i = m_items.begin(), end = m_items.end(); i != end; ++i) {
|
||||||
|
const QString mailValue = (*i)->data(role).toString();
|
||||||
|
qDebug() << "found value:" << mailValue;
|
||||||
|
if (valueString == mailValue) {
|
||||||
|
itemRow = i - m_items.constBegin();
|
||||||
|
qInfo() << "Found item at row:" << itemRow;
|
||||||
|
break;
|
||||||
|
} else {
|
||||||
|
qDebug() << "Not the right item. Continuing search...";
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (itemRow < 0 || itemRow >= m_items.length()) {
|
||||||
|
qWarning() << "Couldn't find item with mail address:" << valueString << "- Returning...";
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
const QModelIndex itemIndex = index(itemRow, 0);
|
||||||
|
return itemIndex;
|
||||||
|
}
|
||||||
|
|||||||
@ -44,6 +44,7 @@ class TableModel : public QAbstractTableModel {
|
|||||||
QString updateItemsFromJson(const QByteArray& jsonData);
|
QString updateItemsFromJson(const QByteArray& jsonData);
|
||||||
bool updateItem(const ModelItemValues& itemValues);
|
bool updateItem(const ModelItemValues& itemValues);
|
||||||
|
|
||||||
|
void setOnlineCredentials(const QString& mail, const QString& uuid, const QString& token);
|
||||||
public slots:
|
public slots:
|
||||||
// bool insertRows(int position, int rows, const QModelIndex& parentIndex = QModelIndex())
|
// bool insertRows(int position, int rows, const QModelIndex& parentIndex = QModelIndex())
|
||||||
// override;
|
// override;
|
||||||
@ -105,6 +106,8 @@ class TableModel : public QAbstractTableModel {
|
|||||||
int biddingSum(const UserRoles biddingRole) const;
|
int biddingSum(const UserRoles biddingRole) const;
|
||||||
qreal averageBiddingAmount(const UserRoles biddingRole) const;
|
qreal averageBiddingAmount(const UserRoles biddingRole) const;
|
||||||
qreal totalSharesWithBiddings(const UserRoles biddingRole) const;
|
qreal totalSharesWithBiddings(const UserRoles biddingRole) const;
|
||||||
|
|
||||||
|
QModelIndex getIndexByRoleValue(const QString& valueString, const int role) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TABLEMODEL_H
|
#endif // TABLEMODEL_H
|
||||||
|
|||||||
@ -9,6 +9,8 @@ static const QString apiPrefix = "/api/";
|
|||||||
|
|
||||||
static const QString ROUTE_ITEMS = apiPrefix + "items";
|
static const QString ROUTE_ITEMS = apiPrefix + "items";
|
||||||
|
|
||||||
|
static const QString ROUTE_REGISTER_USER = apiPrefix + "users";
|
||||||
|
|
||||||
static const QString ROUTE_BIDDINGROUNDS = apiPrefix + "bidding_rounds";
|
static const QString ROUTE_BIDDINGROUNDS = apiPrefix + "bidding_rounds";
|
||||||
static const QString ROUTE_CURRENT_BIDDINGROUND = ROUTE_BIDDINGROUNDS + "/get_current";
|
static const QString ROUTE_CURRENT_BIDDINGROUND = ROUTE_BIDDINGROUNDS + "/get_current";
|
||||||
static const QString ROUTE_START_BIDDINGROUND = ROUTE_BIDDINGROUNDS + "/start_new";
|
static const QString ROUTE_START_BIDDINGROUND = ROUTE_BIDDINGROUNDS + "/start_new";
|
||||||
|
|||||||
@ -20,7 +20,11 @@ ServerCommunicator::ServerCommunicator(GenericCore* core)
|
|||||||
|
|
||||||
connect(m_core, &GenericCore::sendGetRequest, this,
|
connect(m_core, &GenericCore::sendGetRequest, this,
|
||||||
&ServerCommunicator::onSendGetRequestTriggered);
|
&ServerCommunicator::onSendGetRequestTriggered);
|
||||||
|
connect(m_core, &GenericCore::sendPostRequest, this,
|
||||||
|
&ServerCommunicator::onSendPostRequestTriggered);
|
||||||
connect(this, &ServerCommunicator::biddingsChanged, m_core, &GenericCore::onBiddingsChanged);
|
connect(this, &ServerCommunicator::biddingsChanged, m_core, &GenericCore::onBiddingsChanged);
|
||||||
|
connect(this, &ServerCommunicator::onlineUserAccountReceived, m_core,
|
||||||
|
&GenericCore::onOnlineUserAccountReceived);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ServerCommunicator::sslSupported() const {
|
bool ServerCommunicator::sslSupported() const {
|
||||||
@ -44,66 +48,6 @@ void ServerCommunicator::setUrl(const QUrl& url) {
|
|||||||
emit urlChanged();
|
emit urlChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ServerCommunicator::fetchItems() {
|
|
||||||
/// Set up a GET request
|
|
||||||
m_restManager->get(m_serviceApi->createRequest(ROUTE_ITEMS), this, [this](QRestReply& reply) {
|
|
||||||
if (reply.isSuccess()) {
|
|
||||||
qInfo() << "Fetching items successful.";
|
|
||||||
const QJsonDocument doc = reply.readJson().value();
|
|
||||||
emit itemsFetched(doc.toJson());
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (reply.hasError()) {
|
|
||||||
const QString errorString = reply.errorString();
|
|
||||||
qCritical() << "ERROR:" << errorString;
|
|
||||||
emit itemsFetchFailure(errorString);
|
|
||||||
} else {
|
|
||||||
int statusCode = reply.httpStatus();
|
|
||||||
qCritical() << "ERROR:" << statusCode;
|
|
||||||
emit itemsFetchFailure(QString::number(statusCode));
|
|
||||||
emit itemsFetchFailure(QString("HTTP status code: %1").arg(statusCode));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServerCommunicator::postItems(const QByteArray& jsonData) {
|
|
||||||
QNetworkReply* reply = m_restManager->post(m_serviceApi->createRequest(ROUTE_ITEMS), jsonData);
|
|
||||||
|
|
||||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
|
||||||
if (reply->error() == QNetworkReply::NoError) {
|
|
||||||
QByteArray responseData = reply->readAll();
|
|
||||||
const QString message = QString("POST successful! Response: %1").arg(responseData);
|
|
||||||
qInfo() << message;
|
|
||||||
emit postRequestSuccessful(responseData);
|
|
||||||
} else {
|
|
||||||
const QString message = QString("Error: %1").arg(reply->errorString());
|
|
||||||
qDebug() << message;
|
|
||||||
emit postRequestFailure(message);
|
|
||||||
}
|
|
||||||
reply->deleteLater();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServerCommunicator::deleteItem(const QString& id) {
|
|
||||||
const QString deleteRoute = QString("%1/%2").arg(ROUTE_ITEMS, id);
|
|
||||||
QNetworkReply* reply = m_restManager->deleteResource(m_serviceApi->createRequest(deleteRoute));
|
|
||||||
|
|
||||||
QObject::connect(reply, &QNetworkReply::finished, [=]() {
|
|
||||||
if (reply->error() == QNetworkReply::NoError) {
|
|
||||||
QByteArray responseData = reply->readAll();
|
|
||||||
const QString message = QString("DELETE successful! Response: %1").arg(responseData);
|
|
||||||
qInfo() << message;
|
|
||||||
emit deleteRequestSuccessful(responseData);
|
|
||||||
} else {
|
|
||||||
const QString message = QString("Error: %1").arg(reply->errorString());
|
|
||||||
qDebug() << message;
|
|
||||||
emit deleteRequestFailure(message);
|
|
||||||
}
|
|
||||||
reply->deleteLater();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
void ServerCommunicator::setServerConfiguration(const QString url,
|
void ServerCommunicator::setServerConfiguration(const QString url,
|
||||||
const QString email,
|
const QString email,
|
||||||
const QString password) {
|
const QString password) {
|
||||||
@ -191,6 +135,67 @@ void ServerCommunicator::onGetReplyFailure(const GetRequestTypes type, const QSt
|
|||||||
m_core->displayStatusMessage(message);
|
m_core->displayStatusMessage(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServerCommunicator::onSendPostRequestTriggered(const PostRequestTypes type,
|
||||||
|
const QByteArray data) {
|
||||||
|
QString path;
|
||||||
|
switch (type) {
|
||||||
|
case RegisterUser:
|
||||||
|
path = ROUTE_REGISTER_USER;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qWarning() << "No route found for PostRequestType:" << type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO move into default case of switch statement?
|
||||||
|
if (path.isEmpty()) {
|
||||||
|
qDebug() << "Empty path -> Not sending a request.";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QNetworkRequest request = m_serviceApi->createRequest(path);
|
||||||
|
|
||||||
|
m_restManager->post(request, data, this, [this, type](QRestReply& reply) {
|
||||||
|
if (reply.isSuccess()) {
|
||||||
|
int statusCode = reply.httpStatus();
|
||||||
|
qInfo() << "Request successful. Status code:" << statusCode;
|
||||||
|
const QJsonDocument doc = reply.readJson().value();
|
||||||
|
onPostReplySuccessful(type, doc);
|
||||||
|
} else {
|
||||||
|
if (reply.hasError()) {
|
||||||
|
const QString errorString = reply.errorString();
|
||||||
|
qWarning() << "Network error:" << errorString;
|
||||||
|
onPostReplyFailure(type, errorString);
|
||||||
|
} else {
|
||||||
|
int statusCode = reply.httpStatus();
|
||||||
|
qWarning() << "Request not successful:" << statusCode;
|
||||||
|
qCritical() << "Content:" << reply.readJson();
|
||||||
|
onPostReplyFailure(type, QString("HTTP status code: %1").arg(statusCode));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerCommunicator::onPostReplySuccessful(const PostRequestTypes type,
|
||||||
|
const QJsonDocument doc) {
|
||||||
|
switch (type) {
|
||||||
|
case RegisterUser:
|
||||||
|
qInfo() << "Register user successful:" << type;
|
||||||
|
onlineUserAccountReply(doc);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
qWarning() << "Can't match request type:" << type;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ServerCommunicator::onPostReplyFailure(const PostRequestTypes type,
|
||||||
|
const QString errorString) {
|
||||||
|
const QString message =
|
||||||
|
QString("Request of type %1 returned: %2").arg(QString::number(type), errorString);
|
||||||
|
m_core->displayStatusMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
void ServerCommunicator::currentBiddingRoundChangedReply(const QJsonDocument jsonDoc) {
|
void ServerCommunicator::currentBiddingRoundChangedReply(const QJsonDocument jsonDoc) {
|
||||||
qInfo() << "Current bidding round received.";
|
qInfo() << "Current bidding round received.";
|
||||||
const QJsonObject rootObject = jsonDoc["data"].toObject();
|
const QJsonObject rootObject = jsonDoc["data"].toObject();
|
||||||
@ -214,6 +219,16 @@ void ServerCommunicator::currentBiddingsReply(const QJsonDocument jsonDoc) {
|
|||||||
.depotWishOne = "one",
|
.depotWishOne = "one",
|
||||||
.depotWishTwo = "two"};
|
.depotWishTwo = "two"};
|
||||||
const QList<bidding> biddings{dummyBidding};
|
const QList<bidding> biddings{dummyBidding};
|
||||||
|
|
||||||
emit biddingsChanged(roundNumber, biddings);
|
emit biddingsChanged(roundNumber, biddings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ServerCommunicator::onlineUserAccountReply(const QJsonDocument jsonDoc) {
|
||||||
|
qInfo() << "Online user account received.";
|
||||||
|
// TODO move data extraction of jsonDoc into JsonParser
|
||||||
|
const QJsonObject rootObject = jsonDoc["data"].toObject();
|
||||||
|
const QString emailAddress = rootObject["email"].toString();
|
||||||
|
const QString uuid = rootObject["id"].toString();
|
||||||
|
const QString token = rootObject["token"].toString();
|
||||||
|
|
||||||
|
emit onlineUserAccountReceived(emailAddress, uuid, token);
|
||||||
|
}
|
||||||
|
|||||||
@ -29,9 +29,9 @@ class ServerCommunicator : public QObject {
|
|||||||
void onGetReplySuccessful(const GetRequestTypes type, const QJsonDocument doc);
|
void onGetReplySuccessful(const GetRequestTypes type, const QJsonDocument doc);
|
||||||
void onGetReplyFailure(const GetRequestTypes type, const QString errorString);
|
void onGetReplyFailure(const GetRequestTypes type, const QString errorString);
|
||||||
|
|
||||||
void fetchItems();
|
void onSendPostRequestTriggered(const PostRequestTypes type, const QByteArray data);
|
||||||
void postItems(const QByteArray& jsonData);
|
void onPostReplySuccessful(const PostRequestTypes type, const QJsonDocument doc);
|
||||||
void deleteItem(const QString& id);
|
void onPostReplyFailure(const PostRequestTypes type, const QString errorString);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void urlChanged();
|
void urlChanged();
|
||||||
@ -45,6 +45,9 @@ class ServerCommunicator : public QObject {
|
|||||||
|
|
||||||
void currentBiddingRoundChanged(int round, bool isRunning);
|
void currentBiddingRoundChanged(int round, bool isRunning);
|
||||||
void biddingsChanged(int round, QList<bidding> biddings);
|
void biddingsChanged(int round, QList<bidding> biddings);
|
||||||
|
void onlineUserAccountReceived(const QString mailAddress,
|
||||||
|
const QString uuid,
|
||||||
|
const QString accessToken);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
GenericCore* m_core = nullptr;
|
GenericCore* m_core = nullptr;
|
||||||
@ -60,6 +63,7 @@ class ServerCommunicator : public QObject {
|
|||||||
/// reply parser
|
/// reply parser
|
||||||
void currentBiddingRoundChangedReply(const QJsonDocument jsonDoc);
|
void currentBiddingRoundChangedReply(const QJsonDocument jsonDoc);
|
||||||
void currentBiddingsReply(const QJsonDocument jsonDoc);
|
void currentBiddingsReply(const QJsonDocument jsonDoc);
|
||||||
|
void onlineUserAccountReply(const QJsonDocument jsonDoc);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // SERVERCOMMUNICATOR_H
|
#endif // SERVERCOMMUNICATOR_H
|
||||||
|
|||||||
Reference in New Issue
Block a user