Sorting and updating is complicated
This commit is contained in:
parent
0a04169f4f
commit
3948920a93
7 changed files with 19 additions and 14 deletions
|
@ -50,7 +50,7 @@ Page {
|
||||||
|
|
||||||
Timer {
|
Timer {
|
||||||
id: chatListSorterTimer
|
id: chatListSorterTimer
|
||||||
interval: 1000
|
interval: 100
|
||||||
running: false
|
running: false
|
||||||
repeat: false
|
repeat: false
|
||||||
onTriggered: {
|
onTriggered: {
|
||||||
|
@ -131,6 +131,10 @@ Page {
|
||||||
chatListSorterTimer.stop();
|
chatListSorterTimer.stop();
|
||||||
chatListSorterTimer.start();
|
chatListSorterTimer.start();
|
||||||
}
|
}
|
||||||
|
onChatLastMessageUpdated: {
|
||||||
|
chatListSorterTimer.stop();
|
||||||
|
chatListSorterTimer.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
|
|
|
@ -5,7 +5,7 @@ ChatListModel::ChatListModel(TDLibWrapper *tdLibWrapper)
|
||||||
{
|
{
|
||||||
this->tdLibWrapper = tdLibWrapper;
|
this->tdLibWrapper = tdLibWrapper;
|
||||||
connect(this->tdLibWrapper, SIGNAL(newChatDiscovered(QString, QVariantMap)), this, SLOT(handleChatDiscovered(QString, QVariantMap)));
|
connect(this->tdLibWrapper, SIGNAL(newChatDiscovered(QString, QVariantMap)), this, SLOT(handleChatDiscovered(QString, QVariantMap)));
|
||||||
connect(this->tdLibWrapper, SIGNAL(chatLastMessageUpdated(QString, QVariantMap)), this, SLOT(handleChatLastMessageUpdated(QString, QVariantMap)));
|
connect(this->tdLibWrapper, SIGNAL(chatLastMessageUpdated(QString, QString, QVariantMap)), this, SLOT(handleChatLastMessageUpdated(QString, QString, QVariantMap)));
|
||||||
connect(this->tdLibWrapper, SIGNAL(chatOrderUpdated(QString, QString)), this, SLOT(handleChatOrderUpdated(QString, QString)));
|
connect(this->tdLibWrapper, SIGNAL(chatOrderUpdated(QString, QString)), this, SLOT(handleChatOrderUpdated(QString, QString)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@ void ChatListModel::updateSorting()
|
||||||
this->chatListMutex.lock();
|
this->chatListMutex.lock();
|
||||||
qDebug() << "[ChatListModel] List sorting will be updated...";
|
qDebug() << "[ChatListModel] List sorting will be updated...";
|
||||||
|
|
||||||
beginResetModel();
|
emit layoutAboutToBeChanged();
|
||||||
std::sort(this->chatList.begin(), this->chatList.end(), compareChats);
|
std::sort(this->chatList.begin(), this->chatList.end(), compareChats);
|
||||||
|
|
||||||
this->chatIndexMap.clear();
|
this->chatIndexMap.clear();
|
||||||
|
@ -66,7 +66,7 @@ void ChatListModel::updateSorting()
|
||||||
QString currentChatId = this->chatList.at(i).toMap().value("id").toString();
|
QString currentChatId = this->chatList.at(i).toMap().value("id").toString();
|
||||||
this->chatIndexMap.insert(currentChatId, i);
|
this->chatIndexMap.insert(currentChatId, i);
|
||||||
}
|
}
|
||||||
endResetModel();
|
emit layoutChanged();
|
||||||
this->chatListMutex.unlock();
|
this->chatListMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,13 +79,14 @@ void ChatListModel::handleChatDiscovered(const QString &chatId, const QVariantMa
|
||||||
this->chatListMutex.unlock();
|
this->chatListMutex.unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ChatListModel::handleChatLastMessageUpdated(const QString &chatId, const QVariantMap &lastMessage)
|
void ChatListModel::handleChatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage)
|
||||||
{
|
{
|
||||||
this->chatListMutex.lock();
|
this->chatListMutex.lock();
|
||||||
int chatIndex = this->chatIndexMap.value(chatId).toInt();
|
int chatIndex = this->chatIndexMap.value(chatId).toInt();
|
||||||
qDebug() << "[ChatListModel] Updating last message for chat " << chatId << " at index " << chatIndex;
|
qDebug() << "[ChatListModel] Updating last message for chat " << chatId << " at index " << chatIndex;
|
||||||
QVariantMap currentChat = this->chatList.value(chatIndex).toMap();
|
QVariantMap currentChat = this->chatList.value(chatIndex).toMap();
|
||||||
currentChat.insert("last_message", lastMessage);
|
currentChat.insert("last_message", lastMessage);
|
||||||
|
currentChat.insert("order", order);
|
||||||
this->chatList.replace(chatIndex, currentChat);
|
this->chatList.replace(chatIndex, currentChat);
|
||||||
emit dataChanged(this->index(chatIndex), this->index(chatIndex));
|
emit dataChanged(this->index(chatIndex), this->index(chatIndex));
|
||||||
this->chatListMutex.unlock();
|
this->chatListMutex.unlock();
|
||||||
|
|
|
@ -21,7 +21,7 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void handleChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
void handleChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
||||||
void handleChatLastMessageUpdated(const QString &chatId, const QVariantMap &lastMessage);
|
void handleChatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage);
|
||||||
void handleChatOrderUpdated(const QString &chatId, const QString &order);
|
void handleChatOrderUpdated(const QString &chatId, const QString &order);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -141,8 +141,8 @@ void TDLibReceiver::processUpdateUnreadChatCount(const QVariantMap &receivedInfo
|
||||||
void TDLibReceiver::processUpdateChatLastMessage(const QVariantMap &receivedInformation)
|
void TDLibReceiver::processUpdateChatLastMessage(const QVariantMap &receivedInformation)
|
||||||
{
|
{
|
||||||
QVariantMap lastMessage = receivedInformation.value("last_message").toMap();
|
QVariantMap lastMessage = receivedInformation.value("last_message").toMap();
|
||||||
qDebug() << "[TDLibReceiver] Last message of chat " << receivedInformation.value("chat_id").toString() << " updated, content: " << lastMessage.value("content").toString();
|
qDebug() << "[TDLibReceiver] Last message of chat " << receivedInformation.value("chat_id").toString() << " updated, order " << receivedInformation.value("order").toString() << " content: " << lastMessage.value("content").toString();
|
||||||
emit chatLastMessageUpdated(receivedInformation.value("chat_id").toString(), lastMessage);
|
emit chatLastMessageUpdated(receivedInformation.value("chat_id").toString(), receivedInformation.value("order").toString(), lastMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDLibReceiver::processUpdateChatOrder(const QVariantMap &receivedInformation)
|
void TDLibReceiver::processUpdateChatOrder(const QVariantMap &receivedInformation)
|
||||||
|
|
|
@ -45,7 +45,7 @@ signals:
|
||||||
void newChatDiscovered(const QVariantMap &chatInformation);
|
void newChatDiscovered(const QVariantMap &chatInformation);
|
||||||
void unreadMessageCountUpdated(const QVariantMap &messageCountInformation);
|
void unreadMessageCountUpdated(const QVariantMap &messageCountInformation);
|
||||||
void unreadChatCountUpdated(const QVariantMap &chatCountInformation);
|
void unreadChatCountUpdated(const QVariantMap &chatCountInformation);
|
||||||
void chatLastMessageUpdated(const QString &chatId, const QVariantMap &lastMessage);
|
void chatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage);
|
||||||
void chatOrderUpdated(const QString &chatId, const QString &order);
|
void chatOrderUpdated(const QString &chatId, const QString &order);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -45,7 +45,7 @@ TDLibWrapper::TDLibWrapper(QObject *parent) : QObject(parent)
|
||||||
connect(this->tdLibReceiver, SIGNAL(newChatDiscovered(QVariantMap)), this, SLOT(handleNewChatDiscovered(QVariantMap)));
|
connect(this->tdLibReceiver, SIGNAL(newChatDiscovered(QVariantMap)), this, SLOT(handleNewChatDiscovered(QVariantMap)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(unreadMessageCountUpdated(QVariantMap)), this, SLOT(handleUnreadMessageCountUpdated(QVariantMap)));
|
connect(this->tdLibReceiver, SIGNAL(unreadMessageCountUpdated(QVariantMap)), this, SLOT(handleUnreadMessageCountUpdated(QVariantMap)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(unreadChatCountUpdated(QVariantMap)), this, SLOT(handleUnreadChatCountUpdated(QVariantMap)));
|
connect(this->tdLibReceiver, SIGNAL(unreadChatCountUpdated(QVariantMap)), this, SLOT(handleUnreadChatCountUpdated(QVariantMap)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(chatLastMessageUpdated(QString, QVariantMap)), this, SLOT(handleChatLastMessageUpdated(QString, QVariantMap)));
|
connect(this->tdLibReceiver, SIGNAL(chatLastMessageUpdated(QString, QString, QVariantMap)), this, SLOT(handleChatLastMessageUpdated(QString, QString, QVariantMap)));
|
||||||
connect(this->tdLibReceiver, SIGNAL(chatOrderUpdated(QString, QString)), this, SLOT(handleChatOrderUpdated(QString, QString)));
|
connect(this->tdLibReceiver, SIGNAL(chatOrderUpdated(QString, QString)), this, SLOT(handleChatOrderUpdated(QString, QString)));
|
||||||
|
|
||||||
this->tdLibReceiver->start();
|
this->tdLibReceiver->start();
|
||||||
|
@ -277,9 +277,9 @@ void TDLibWrapper::handleUnreadChatCountUpdated(const QVariantMap &chatCountInfo
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDLibWrapper::handleChatLastMessageUpdated(const QString &chatId, const QVariantMap &lastMessage)
|
void TDLibWrapper::handleChatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage)
|
||||||
{
|
{
|
||||||
emit chatLastMessageUpdated(chatId, lastMessage);
|
emit chatLastMessageUpdated(chatId, order, lastMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TDLibWrapper::handleChatOrderUpdated(const QString &chatId, const QString &order)
|
void TDLibWrapper::handleChatOrderUpdated(const QString &chatId, const QString &order)
|
||||||
|
|
|
@ -83,7 +83,7 @@ signals:
|
||||||
void newChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
void newChatDiscovered(const QString &chatId, const QVariantMap &chatInformation);
|
||||||
void unreadMessageCountUpdated(const QVariantMap &messageCountInformation);
|
void unreadMessageCountUpdated(const QVariantMap &messageCountInformation);
|
||||||
void unreadChatCountUpdated(const QVariantMap &chatCountInformation);
|
void unreadChatCountUpdated(const QVariantMap &chatCountInformation);
|
||||||
void chatLastMessageUpdated(const QString &chatId, const QVariantMap &lastMessage);
|
void chatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage);
|
||||||
void chatOrderUpdated(const QString &chatId, const QString &order);
|
void chatOrderUpdated(const QString &chatId, const QString &order);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
@ -96,7 +96,7 @@ public slots:
|
||||||
void handleNewChatDiscovered(const QVariantMap &chatInformation);
|
void handleNewChatDiscovered(const QVariantMap &chatInformation);
|
||||||
void handleUnreadMessageCountUpdated(const QVariantMap &messageCountInformation);
|
void handleUnreadMessageCountUpdated(const QVariantMap &messageCountInformation);
|
||||||
void handleUnreadChatCountUpdated(const QVariantMap &chatCountInformation);
|
void handleUnreadChatCountUpdated(const QVariantMap &chatCountInformation);
|
||||||
void handleChatLastMessageUpdated(const QString &chatId, const QVariantMap &lastMessage);
|
void handleChatLastMessageUpdated(const QString &chatId, const QString &order, const QVariantMap &lastMessage);
|
||||||
void handleChatOrderUpdated(const QString &chatId, const QString &order);
|
void handleChatOrderUpdated(const QString &chatId, const QString &order);
|
||||||
private:
|
private:
|
||||||
void *tdLibClient;
|
void *tdLibClient;
|
||||||
|
|
Loading…
Reference in a new issue