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> updateLastMessage(const QVariantMap &message);
|
||||||
QVector<int> updateGroup(const TDLibWrapper::Group *group);
|
QVector<int> updateGroup(const TDLibWrapper::Group *group);
|
||||||
QVector<int> updateSecretChat(const QVariantMap &secretChatDetails);
|
QVector<int> updateSecretChat(const QVariantMap &secretChatDetails);
|
||||||
|
ChatData* clone();
|
||||||
TDLibWrapper *tdLibWrapper;
|
TDLibWrapper *tdLibWrapper;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -384,6 +385,24 @@ QVector<int> ChatListModel::ChatData::updateSecretChat(const QVariantMap &secret
|
||||||
return changedRoles;
|
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)
|
ChatListModel::ChatListModel(TDLibWrapper *tdLibWrapper, AppSettings *appSettings) : showHiddenChats(false)
|
||||||
{
|
{
|
||||||
this->tdLibWrapper = tdLibWrapper;
|
this->tdLibWrapper = tdLibWrapper;
|
||||||
|
@ -426,6 +445,15 @@ ChatListModel::~ChatListModel()
|
||||||
qDeleteAll(hiddenChats.values());
|
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()
|
void ChatListModel::reset()
|
||||||
{
|
{
|
||||||
chatList.clear();
|
chatList.clear();
|
||||||
|
|
|
@ -75,6 +75,7 @@ public:
|
||||||
|
|
||||||
bool showAllChats() const;
|
bool showAllChats() const;
|
||||||
void setShowAllChats(bool showAll);
|
void setShowAllChats(bool showAll);
|
||||||
|
ChatListModel* clone();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void handleChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
void handleChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
||||||
|
|
|
@ -33,7 +33,9 @@ ChatPermissionFilterModel::ChatPermissionFilterModel(QObject *parent) : QSortFil
|
||||||
|
|
||||||
void ChatPermissionFilterModel::setSource(QObject *model)
|
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)
|
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
|
TDLibWrapper *ChatPermissionFilterModel::getTDLibWrapper() const
|
||||||
{
|
{
|
||||||
return tdLibWrapper;
|
return tdLibWrapper;
|
||||||
|
|
|
@ -31,7 +31,7 @@ class ChatPermissionFilterModel : public QSortFilterProxyModel
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ChatPermissionFilterModel(QObject *parent = Q_NULLPTR);
|
ChatPermissionFilterModel(QObject *parent = Q_NULLPTR);
|
||||||
|
~ChatPermissionFilterModel() override;
|
||||||
TDLibWrapper *getTDLibWrapper() const;
|
TDLibWrapper *getTDLibWrapper() const;
|
||||||
void setTDLibWrapper(QObject* obj);
|
void setTDLibWrapper(QObject* obj);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue