mirror of
https://gitlab.com/comunic/comunicmessages
synced 2025-06-20 08:55:17 +00:00
Can get older conversation messages
This commit is contained in:
@ -24,6 +24,7 @@ ConversationWidget::ConversationWidget(const Conversation &conversation, const U
|
||||
//Initialize UI
|
||||
QString convTitle = ConversationsListHelper::getConversationDisplayName(conversation, list);
|
||||
ui->convName->setText(convTitle);
|
||||
connect(ui->scrollArea->verticalScrollBar(), &QScrollBar::valueChanged, this, &ConversationWidget::messagesListScrolled);
|
||||
|
||||
//Initalize helpers
|
||||
mConversationHelper = new ConversationHelper(this);
|
||||
@ -100,6 +101,11 @@ void ConversationWidget::sendMessage()
|
||||
|
||||
void ConversationWidget::refreshTimeout()
|
||||
{
|
||||
//Check if messages are already being loaded
|
||||
if(mIsLoadingMessages)
|
||||
return;
|
||||
|
||||
mIsLoadingMessages = true;
|
||||
mTimer->stop();
|
||||
|
||||
//Get the latest message of the conversation
|
||||
@ -110,6 +116,7 @@ void ConversationWidget::getMessagesCallback(bool success, QList<ConversationMes
|
||||
{
|
||||
//Restart counter
|
||||
mTimer->start(CONVERSATION_MESSAGES_REFRESH_INTERVAL);
|
||||
mIsLoadingMessages = false;
|
||||
|
||||
if(!success){
|
||||
QMessageBox::warning(this, tr("Error while getting messages list"), tr("Could not refresh messages list!"));
|
||||
@ -117,8 +124,16 @@ void ConversationWidget::getMessagesCallback(bool success, QList<ConversationMes
|
||||
}
|
||||
|
||||
//Stop now if the list of messages is empty
|
||||
if(list.empty())
|
||||
if(list.empty()){
|
||||
|
||||
//Check if we were loading older messages
|
||||
if(mIsLoadingOlderMessages){
|
||||
mGotOldestConversationMessage = true;
|
||||
mIsLoadingOlderMessages = false;
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
mMessages.append(list);
|
||||
|
||||
@ -141,6 +156,10 @@ void ConversationWidget::getMessagesCallback(bool success, QList<ConversationMes
|
||||
//Scroll to the end of the widget if required
|
||||
if(list.at(list.count()-1).iD() == mMessages.getLastMessageID())
|
||||
QTimer::singleShot(1000, this, &ConversationWidget::scrollToBottom);
|
||||
|
||||
//Else we can check if we reached the top of the conversation
|
||||
else if(list.count() < NUMBER_OF_OLDER_MESSAGES_TO_GET)
|
||||
mGotOldestConversationMessage = true;
|
||||
}
|
||||
|
||||
void ConversationWidget::scrollToBottom()
|
||||
@ -162,6 +181,27 @@ void ConversationWidget::sendMessageCallback(bool success)
|
||||
resetSendMessageForm();
|
||||
}
|
||||
|
||||
void ConversationWidget::messagesListScrolled(int value)
|
||||
{
|
||||
//Check if the user reached the top of the conversation
|
||||
if(value > 0)
|
||||
return; //Nothing to be done
|
||||
|
||||
//Check if the conversation does not contains any message yet
|
||||
// or if we already retrieved the oldest message of the conversation
|
||||
if(mMessages.count() == 0 || mGotOldestConversationMessage)
|
||||
return;
|
||||
|
||||
//Check if messsages are already being loaded
|
||||
if(mIsLoadingMessages)
|
||||
return;
|
||||
mIsLoadingMessages = true;
|
||||
mIsLoadingOlderMessages = true;
|
||||
|
||||
//Get older messages
|
||||
mConversationHelper->getOlderMessages(mConversation.iD(), mMessages.getOldestMessageID());
|
||||
}
|
||||
|
||||
void ConversationWidget::on_sendMessageButton_clicked()
|
||||
{
|
||||
sendMessage();
|
||||
|
@ -72,6 +72,13 @@ private slots:
|
||||
*/
|
||||
void sendMessageCallback(bool success);
|
||||
|
||||
/**
|
||||
* Slot called when the user scroll the conversation
|
||||
*
|
||||
* @param value The new scroll value
|
||||
*/
|
||||
void messagesListScrolled(int value);
|
||||
|
||||
void on_sendMessageButton_clicked();
|
||||
|
||||
void on_messageContentInput_returnPressed();
|
||||
@ -105,6 +112,9 @@ private:
|
||||
Conversation mConversation;
|
||||
UsersList mUsersList;
|
||||
ConversationMessagesList mMessages;
|
||||
bool mIsLoadingMessages = false;
|
||||
bool mGotOldestConversationMessage = false;
|
||||
bool mIsLoadingOlderMessages = false;
|
||||
};
|
||||
|
||||
#endif // CONVERSATIONWIDGET_H
|
||||
|
Reference in New Issue
Block a user