diff --git a/src/apps/qml/qml/Desktop.qml b/src/apps/qml/qml/Desktop.qml --- a/src/apps/qml/qml/Desktop.qml +++ b/src/apps/qml/qml/Desktop.qml @@ -64,11 +64,15 @@ if (roomID === selectedRoomID) { return; } + if (appid.messageModel) { + appid.messageModel.deactivate() + } appid.rocketChatAccount.switchingToRoom(roomID) appid.rocketChatAccount.setUserCurrentMessage(appid.userInputMessageText, selectedRoomID) appid.selectedRoomID = roomID; appid.messageModel = appid.rocketChatAccount.messageModelForRoom(roomID) appid.messageModel.enableQmlHacks(true) + appid.messageModel.activate() appid.selectedRoom = appid.rocketChatAccount.roomWrapper(roomID) appid.userModel = appid.rocketChatAccount.usersForRoomFilterProxyModel(roomID) } diff --git a/src/core/model/messagemodel.h b/src/core/model/messagemodel.h --- a/src/core/model/messagemodel.h +++ b/src/core/model/messagemodel.h @@ -132,6 +132,9 @@ Q_REQUIRED_RESULT QString roomId() const; + Q_INVOKABLE void activate(); + Q_INVOKABLE void deactivate(); + private Q_SLOTS: void slotFileDownloaded(const QString &filePath, const QUrl &cacheImageUrl); diff --git a/src/core/model/messagemodel.cpp b/src/core/model/messagemodel.cpp --- a/src/core/model/messagemodel.cpp +++ b/src/core/model/messagemodel.cpp @@ -81,9 +81,6 @@ connect(mRoom, &Room::rolesChanged, this, &MessageModel::refresh); connect(mRoom, &Room::ignoredUsersChanged, this, &MessageModel::refresh); } - if (mRocketChatAccount) { - connect(mRocketChatAccount, &RocketChatAccount::fileDownloaded, this, &MessageModel::slotFileDownloaded); - } } MessageModel::~MessageModel() @@ -122,6 +119,20 @@ mQmlHacks = qmlHacks; } +void MessageModel::activate() +{ + if (mRocketChatAccount) { + connect(mRocketChatAccount, &RocketChatAccount::fileDownloaded, this, &MessageModel::slotFileDownloaded); + } +} + +void MessageModel::deactivate() +{ + if (mRocketChatAccount) { + disconnect(mRocketChatAccount, &RocketChatAccount::fileDownloaded, this, &MessageModel::slotFileDownloaded); + } +} + void MessageModel::refresh() { beginResetModel(); diff --git a/src/widgets/room/messagelistview.cpp b/src/widgets/room/messagelistview.cpp --- a/src/widgets/room/messagelistview.cpp +++ b/src/widgets/room/messagelistview.cpp @@ -58,8 +58,14 @@ void MessageListView::setChannelSelected(const QString &roomId) { + MessageModel *oldModel = qobject_cast(model()); + if (oldModel) { + oldModel->deactivate(); + } Ruqola::self()->rocketChatAccount()->switchingToRoom(roomId); - setModel(Ruqola::self()->rocketChatAccount()->messageModelForRoom(roomId)); + MessageModel *model = Ruqola::self()->rocketChatAccount()->messageModelForRoom(roomId); + setModel(model); + model->activate(); mRoomID = roomId; }