diff --git a/src/dialogs/RoomSettings.cpp b/src/dialogs/RoomSettings.cpp index 4e56b130..a9739f3e 100644 --- a/src/dialogs/RoomSettings.cpp +++ b/src/dialogs/RoomSettings.cpp @@ -90,72 +90,7 @@ EditModal::EditModal(const QString &roomId, QWidget *parent) labelLayout->addWidget(errorField_); layout->addLayout(labelLayout); - connect(applyBtn_, &QPushButton::clicked, [this]() { - // Check if the values are changed from the originals. - auto newName = nameInput_->text().trimmed(); - auto newTopic = topicInput_->text().trimmed(); - - errorField_->hide(); - - if (newName == initialName_ && newTopic == initialTopic_) { - close(); - return; - } - - using namespace mtx::events; - auto proxy = std::make_shared(); - connect(proxy.get(), &ThreadProxy::topicEventSent, this, [this]() { - errorField_->hide(); - close(); - }); - connect( - proxy.get(), &ThreadProxy::nameEventSent, this, [this](const QString &newName) { - errorField_->hide(); - emit nameChanged(newName); - close(); - }); - connect(proxy.get(), &ThreadProxy::error, this, [this](const QString &msg) { - errorField_->setText(msg); - errorField_->show(); - }); - - if (newName != initialName_ && !newName.isEmpty()) { - state::Name body; - body.name = newName.toStdString(); - - http::client()->send_state_event( - roomId_.toStdString(), - body, - [proxy, newName](const mtx::responses::EventId &, - mtx::http::RequestErr err) { - if (err) { - emit proxy->error( - QString::fromStdString(err->matrix_error.error)); - return; - } - - emit proxy->nameEventSent(newName); - }); - } - - if (newTopic != initialTopic_ && !newTopic.isEmpty()) { - state::Topic body; - body.topic = newTopic.toStdString(); - - http::client()->send_state_event( - roomId_.toStdString(), - body, - [proxy](const mtx::responses::EventId &, mtx::http::RequestErr err) { - if (err) { - emit proxy->error( - QString::fromStdString(err->matrix_error.error)); - return; - } - - emit proxy->topicEventSent(); - }); - } - }); + connect(applyBtn_, &QPushButton::clicked, this, &EditModal::applyClicked); connect(cancelBtn_, &QPushButton::clicked, this, &EditModal::close); auto window = QApplication::activeWindow(); @@ -163,6 +98,63 @@ EditModal::EditModal(const QString &roomId, QWidget *parent) move(center.x() - (width() * 0.5), center.y() - (height() * 0.5)); } +void +EditModal::applyClicked() +{ + // Check if the values are changed from the originals. + auto newName = nameInput_->text().trimmed(); + auto newTopic = topicInput_->text().trimmed(); + + errorField_->hide(); + + if (newName == initialName_ && newTopic == initialTopic_) { + close(); + return; + } + + using namespace mtx::events; + auto proxy = std::make_shared(); + connect(proxy.get(), &ThreadProxy::topicEventSent, this, &EditModal::topicEventSent); + connect(proxy.get(), &ThreadProxy::nameEventSent, this, &EditModal::nameEventSent); + connect(proxy.get(), &ThreadProxy::error, this, &EditModal::error); + + if (newName != initialName_ && !newName.isEmpty()) { + state::Name body; + body.name = newName.toStdString(); + + http::client()->send_state_event( + roomId_.toStdString(), + body, + [proxy, newName](const mtx::responses::EventId &, mtx::http::RequestErr err) { + if (err) { + emit proxy->error( + QString::fromStdString(err->matrix_error.error)); + return; + } + + emit proxy->nameEventSent(newName); + }); + } + + if (newTopic != initialTopic_ && !newTopic.isEmpty()) { + state::Topic body; + body.topic = newTopic.toStdString(); + + http::client()->send_state_event( + roomId_.toStdString(), + body, + [proxy](const mtx::responses::EventId &, mtx::http::RequestErr err) { + if (err) { + emit proxy->error( + QString::fromStdString(err->matrix_error.error)); + return; + } + + emit proxy->topicEventSent(); + }); + } +} + void EditModal::setFields(const QString &roomName, const QString &roomTopic) { diff --git a/src/dialogs/RoomSettings.h b/src/dialogs/RoomSettings.h index dd729250..c2c81cdb 100644 --- a/src/dialogs/RoomSettings.h +++ b/src/dialogs/RoomSettings.h @@ -3,6 +3,7 @@ #include #include #include +#include #include "Cache.h" @@ -12,8 +13,6 @@ class QComboBox; class QHBoxLayout; class QShowEvent; class LoadingIndicator; -class QLabel; -class QLabel; class QLayout; class QPixmap; class TextField; @@ -69,6 +68,28 @@ public: signals: void nameChanged(const QString &roomName); +private slots: + void topicEventSent() + { + errorField_->hide(); + close(); + } + + void nameEventSent(const QString &name) + { + errorField_->hide(); + emit nameChanged(name); + close(); + } + + void error(const QString &msg) + { + errorField_->setText(msg); + errorField_->show(); + } + + void applyClicked(); + private: QString roomId_; QString initialName_;