Avoid UI updates in Chat selection screen when forwarding a chat, by cloning the chat list model.
This commit is contained in:
parent
fd7563bc88
commit
23d361a987
4 changed files with 40 additions and 2 deletions
|
@ -91,6 +91,7 @@ public:
|
|||
QVector<int> updateLastMessage(const QVariantMap &message);
|
||||
QVector<int> updateGroup(const TDLibWrapper::Group *group);
|
||||
QVector<int> updateSecretChat(const QVariantMap &secretChatDetails);
|
||||
ChatData* clone();
|
||||
TDLibWrapper *tdLibWrapper;
|
||||
|
||||
public:
|
||||
|
@ -384,6 +385,24 @@ QVector<int> ChatListModel::ChatData::updateSecretChat(const QVariantMap &secret
|
|||
return changedRoles;
|
||||
}
|
||||
|
||||
ChatListModel::ChatData* ChatListModel::ChatData::clone() {
|
||||
QVariantMap clonedChatData;
|
||||
|
||||
QList<QString> keys = chatData.keys();
|
||||
for(int i = 0; i < keys.count(); i++) {
|
||||
clonedChatData.insert(keys[i], QVariant(chatData[keys[i]]));
|
||||
}
|
||||
ChatData* res = new ChatData(tdLibWrapper, clonedChatData);
|
||||
res->chatId = chatId;
|
||||
res->order = order;
|
||||
res->groupId = groupId;
|
||||
res->verified = verified;
|
||||
res->chatType = chatType;
|
||||
res->memberStatus = memberStatus;
|
||||
res->secretChatState = secretChatState;
|
||||
return res;
|
||||
}
|
||||
|
||||
ChatListModel::ChatListModel(TDLibWrapper *tdLibWrapper, AppSettings *appSettings) : showHiddenChats(false)
|
||||
{
|
||||
this->tdLibWrapper = tdLibWrapper;
|
||||
|
@ -426,6 +445,15 @@ ChatListModel::~ChatListModel()
|
|||
qDeleteAll(hiddenChats.values());
|
||||
}
|
||||
|
||||
ChatListModel* ChatListModel::clone() {
|
||||
ChatListModel* res = new ChatListModel(tdLibWrapper, appSettings);
|
||||
res->relativeTimeRefreshTimer->stop();
|
||||
for(int i = 0; i < chatList.count(); i++) {
|
||||
res->chatList.append(chatList.at(i)->clone());
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
void ChatListModel::reset()
|
||||
{
|
||||
chatList.clear();
|
||||
|
|
|
@ -75,6 +75,7 @@ public:
|
|||
|
||||
bool showAllChats() const;
|
||||
void setShowAllChats(bool showAll);
|
||||
ChatListModel* clone();
|
||||
|
||||
private slots:
|
||||
void handleChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
||||
|
|
|
@ -33,7 +33,9 @@ ChatPermissionFilterModel::ChatPermissionFilterModel(QObject *parent) : QSortFil
|
|||
|
||||
void ChatPermissionFilterModel::setSource(QObject *model)
|
||||
{
|
||||
setSourceModel(qobject_cast<ChatListModel*>(model));
|
||||
ChatListModel* chatListModel = qobject_cast<ChatListModel*>(model);
|
||||
ChatListModel* chatListModelClone = chatListModel->clone();
|
||||
setSourceModel(chatListModelClone);
|
||||
}
|
||||
|
||||
void ChatPermissionFilterModel::setSourceModel(QAbstractItemModel *model)
|
||||
|
@ -45,6 +47,13 @@ void ChatPermissionFilterModel::setSourceModel(QAbstractItemModel *model)
|
|||
}
|
||||
}
|
||||
|
||||
ChatPermissionFilterModel::~ChatPermissionFilterModel() {
|
||||
QAbstractItemModel* _sourceModel = sourceModel();
|
||||
if(_sourceModel != nullptr) {
|
||||
delete _sourceModel;
|
||||
}
|
||||
}
|
||||
|
||||
TDLibWrapper *ChatPermissionFilterModel::getTDLibWrapper() const
|
||||
{
|
||||
return tdLibWrapper;
|
||||
|
|
|
@ -31,7 +31,7 @@ class ChatPermissionFilterModel : public QSortFilterProxyModel
|
|||
|
||||
public:
|
||||
ChatPermissionFilterModel(QObject *parent = Q_NULLPTR);
|
||||
|
||||
~ChatPermissionFilterModel() override;
|
||||
TDLibWrapper *getTDLibWrapper() const;
|
||||
void setTDLibWrapper(QObject* obj);
|
||||
|
||||
|
|
Loading…
Reference in a new issue