From 9eb1c496a0911a8c3dcab0a4e103440ba3c1e7ec Mon Sep 17 00:00:00 2001
From: Konstantinos Sideris <sideris.konstantin@gmail.com>
Date: Fri, 18 May 2018 21:43:58 +0300
Subject: [PATCH] Retrieve the current room state from cache when the edit
 modal opens

---
 include/dialogs/RoomSettings.hpp |  2 ++
 src/dialogs/RoomSettings.cpp     | 22 ++++++++++++++--------
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/include/dialogs/RoomSettings.hpp b/include/dialogs/RoomSettings.hpp
index 1434eee6b..375a531ee 100644
--- a/include/dialogs/RoomSettings.hpp
+++ b/include/dialogs/RoomSettings.hpp
@@ -93,6 +93,8 @@ private:
 
         void setAvatar(const QImage &img) { avatarImg_ = img; }
         void setupEditButton();
+        //! Retrieve the current room information from cache.
+        void retrieveRoomInfo();
 
         //! Whether the user would be able to change the name or the topic of the room.
         bool hasEditRights_ = true;
diff --git a/src/dialogs/RoomSettings.cpp b/src/dialogs/RoomSettings.cpp
index ff784158b..4d2f304b9 100644
--- a/src/dialogs/RoomSettings.cpp
+++ b/src/dialogs/RoomSettings.cpp
@@ -182,14 +182,7 @@ RoomSettings::RoomSettings(const QString &room_id, QWidget *parent)
   , room_id_{std::move(room_id)}
 {
         setMaximumWidth(420);
-
-        try {
-                info_ = cache::client()->singleRoomInfo(room_id_.toStdString());
-
-                setAvatar(QImage::fromData(cache::client()->image(info_.avatar_url)));
-        } catch (const lmdb::error &e) {
-                qWarning() << "failed to retrieve room info from cache" << room_id;
-        }
+        retrieveRoomInfo();
 
         constexpr int SettingsMargin = 2;
 
@@ -299,6 +292,8 @@ RoomSettings::setupEditButton()
         editFieldsBtn_->setIconSize(QSize(iconSize, iconSize));
 
         connect(editFieldsBtn_, &QPushButton::clicked, this, [this]() {
+                retrieveRoomInfo();
+
                 auto modal = new EditModal(room_id_, this->parentWidget());
                 modal->setFields(QString::fromStdString(info_.name),
                                  QString::fromStdString(info_.topic));
@@ -311,6 +306,17 @@ RoomSettings::setupEditButton()
         editLayout_->addWidget(editFieldsBtn_, 0, Qt::AlignRight | Qt::AlignTop);
 }
 
+void
+RoomSettings::retrieveRoomInfo()
+{
+        try {
+                info_ = cache::client()->singleRoomInfo(room_id_.toStdString());
+                setAvatar(QImage::fromData(cache::client()->image(info_.avatar_url)));
+        } catch (const lmdb::error &e) {
+                qWarning() << "failed to retrieve room info from cache" << room_id_;
+        }
+}
+
 void
 RoomSettings::saveSettings()
 {
-- 
GitLab