Update chat list more reliably

This commit is contained in:
Sebastian Wolf 2023-08-08 22:50:04 +02:00
parent 29621b739a
commit 5394fde136
No known key found for this signature in database
GPG key ID: CEA9522B5F38A90A
2 changed files with 14 additions and 5 deletions

View file

@ -561,6 +561,15 @@ int ChatListModel::updateChatOrder(int chatIndex)
return newIndex; return newIndex;
} }
void ChatListModel::enableRefreshTimer()
{
// Start timestamp refresh timer if not yet active (usually when the first visible chat is discovered)
if (!relativeTimeRefreshTimer->isActive()) {
LOG("Enabling refresh timer");
relativeTimeRefreshTimer->start();
}
}
void ChatListModel::calculateUnreadState() void ChatListModel::calculateUnreadState()
{ {
if (this->appSettings->onlineOnlyMode()) { if (this->appSettings->onlineOnlyMode()) {
@ -599,6 +608,7 @@ void ChatListModel::addVisibleChat(ChatData *chat)
this->tdLibWrapper->registerJoinChat(); this->tdLibWrapper->registerJoinChat();
emit chatJoined(chat->chatId, chat->chatData.value("title").toString()); emit chatJoined(chat->chatId, chat->chatData.value("title").toString());
} }
enableRefreshTimer();
} }
void ChatListModel::updateChatVisibility(const TDLibWrapper::Group *group) void ChatListModel::updateChatVisibility(const TDLibWrapper::Group *group)
@ -687,6 +697,7 @@ void ChatListModel::setShowAllChats(bool showAll)
void ChatListModel::handleChatDiscovered(const QString &, const QVariantMap &chatToBeAdded) void ChatListModel::handleChatDiscovered(const QString &, const QVariantMap &chatToBeAdded)
{ {
LOG("New chat discovered");
ChatData *chat = new ChatData(tdLibWrapper, chatToBeAdded); ChatData *chat = new ChatData(tdLibWrapper, chatToBeAdded);
const TDLibWrapper::Group *group = tdLibWrapper->getGroup(chat->groupId); const TDLibWrapper::Group *group = tdLibWrapper->getGroup(chat->groupId);
@ -705,12 +716,8 @@ void ChatListModel::handleChatDiscovered(const QString &, const QVariantMap &cha
LOG("Hidden chat" << chat->chatId); LOG("Hidden chat" << chat->chatId);
hiddenChats.insert(chat->chatId, chat); hiddenChats.insert(chat->chatId, chat);
} else { } else {
LOG("Visible chat" << chat->chatId);
addVisibleChat(chat); addVisibleChat(chat);
// Start timestamp refresh timer when the first visible chat is discovered
if (!relativeTimeRefreshTimer->isActive()) {
relativeTimeRefreshTimer->start();
}
} }
} }
@ -1034,5 +1041,6 @@ void ChatListModel::handleRelativeTimeRefreshTimer()
LOG("Refreshing timestamps"); LOG("Refreshing timestamps");
QVector<int> roles; QVector<int> roles;
roles.append(ChatListModel::RoleLastMessageDate); roles.append(ChatListModel::RoleLastMessageDate);
roles.append(ChatListModel::RoleLastMessageStatus);
emit dataChanged(index(0), index(chatList.size() - 1), roles); emit dataChanged(index(0), index(chatList.size() - 1), roles);
} }

View file

@ -108,6 +108,7 @@ private:
void updateChatVisibility(const TDLibWrapper::Group *group); void updateChatVisibility(const TDLibWrapper::Group *group);
void updateSecretChatVisibility(const QVariantMap secretChatDetails); void updateSecretChatVisibility(const QVariantMap secretChatDetails);
int updateChatOrder(int chatIndex); int updateChatOrder(int chatIndex);
void enableRefreshTimer();
private: private:
TDLibWrapper *tdLibWrapper; TDLibWrapper *tdLibWrapper;