mirror of
https://gitlab.com/comunic/comunicmessages
synced 2024-12-04 19:24:11 +00:00
Can get older conversation messages
This commit is contained in:
parent
22eec97796
commit
bdfbe8ba48
1
config.h
1
config.h
@ -34,6 +34,7 @@
|
|||||||
*/
|
*/
|
||||||
#define CONVERSATION_MESSAGE_MIN_LENGTH 3
|
#define CONVERSATION_MESSAGE_MIN_LENGTH 3
|
||||||
#define CONVERSATION_MESSAGES_REFRESH_INTERVAL 1000
|
#define CONVERSATION_MESSAGES_REFRESH_INTERVAL 1000
|
||||||
|
#define NUMBER_OF_OLDER_MESSAGES_TO_GET 10
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Images load manager information
|
* Images load manager information
|
||||||
|
@ -5,6 +5,14 @@ ConversationMessagesList::ConversationMessagesList()
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int ConversationMessagesList::getOldestMessageID()
|
||||||
|
{
|
||||||
|
if(count() == 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return at(0).iD();
|
||||||
|
}
|
||||||
|
|
||||||
int ConversationMessagesList::getLastMessageID()
|
int ConversationMessagesList::getLastMessageID()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -16,6 +16,13 @@ class ConversationMessagesList : public QList<ConversationMessage>
|
|||||||
public:
|
public:
|
||||||
ConversationMessagesList();
|
ConversationMessagesList();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get and return the oldest message of the conversation
|
||||||
|
*
|
||||||
|
* @return The ID of the oldest message / -1 if none found
|
||||||
|
*/
|
||||||
|
int getOldestMessageID();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the ID of the newest message of
|
* Get the ID of the newest message of
|
||||||
* the conversation
|
* the conversation
|
||||||
|
@ -5,6 +5,7 @@
|
|||||||
#include "conversationhelper.h"
|
#include "conversationhelper.h"
|
||||||
#include "../data/apirequest.h"
|
#include "../data/apirequest.h"
|
||||||
#include "../utils/filesutils.h"
|
#include "../utils/filesutils.h"
|
||||||
|
#include "../config.h"
|
||||||
|
|
||||||
ConversationHelper::ConversationHelper(QObject *parent) : QObject(parent)
|
ConversationHelper::ConversationHelper(QObject *parent) : QObject(parent)
|
||||||
{
|
{
|
||||||
@ -41,6 +42,18 @@ void ConversationHelper::getMessages(int conversationID, int last_message_id)
|
|||||||
mAPIHelper->execute(request);
|
mAPIHelper->execute(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConversationHelper::getOlderMessages(int conversationID, int oldest_message_id)
|
||||||
|
{
|
||||||
|
APIRequest *request = new APIRequest;
|
||||||
|
request->setURI("conversations/get_older_messages");
|
||||||
|
request->addInt("conversationID", conversationID);
|
||||||
|
request->addInt("oldest_message_id", oldest_message_id);
|
||||||
|
request->addInt("limit", NUMBER_OF_OLDER_MESSAGES_TO_GET);
|
||||||
|
|
||||||
|
connect(request, &APIRequest::finished, this, &ConversationHelper::getMessagesFinished);
|
||||||
|
mAPIHelper->execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
void ConversationHelper::sendMessageFinished(int code)
|
void ConversationHelper::sendMessageFinished(int code)
|
||||||
{
|
{
|
||||||
//Delete sender
|
//Delete sender
|
||||||
|
@ -40,6 +40,14 @@ public:
|
|||||||
*/
|
*/
|
||||||
void getMessages(int conversationID, int last_message_id = -1);
|
void getMessages(int conversationID, int last_message_id = -1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get older messages of a conversation
|
||||||
|
*
|
||||||
|
* @param conversationID The ID of the target conversation
|
||||||
|
* @param oldest_message_id The ID of the last known message
|
||||||
|
*/
|
||||||
|
void getOlderMessages(int conversationID, int oldest_message_id);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -24,6 +24,7 @@ ConversationWidget::ConversationWidget(const Conversation &conversation, const U
|
|||||||
//Initialize UI
|
//Initialize UI
|
||||||
QString convTitle = ConversationsListHelper::getConversationDisplayName(conversation, list);
|
QString convTitle = ConversationsListHelper::getConversationDisplayName(conversation, list);
|
||||||
ui->convName->setText(convTitle);
|
ui->convName->setText(convTitle);
|
||||||
|
connect(ui->scrollArea->verticalScrollBar(), &QScrollBar::valueChanged, this, &ConversationWidget::messagesListScrolled);
|
||||||
|
|
||||||
//Initalize helpers
|
//Initalize helpers
|
||||||
mConversationHelper = new ConversationHelper(this);
|
mConversationHelper = new ConversationHelper(this);
|
||||||
@ -100,6 +101,11 @@ void ConversationWidget::sendMessage()
|
|||||||
|
|
||||||
void ConversationWidget::refreshTimeout()
|
void ConversationWidget::refreshTimeout()
|
||||||
{
|
{
|
||||||
|
//Check if messages are already being loaded
|
||||||
|
if(mIsLoadingMessages)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mIsLoadingMessages = true;
|
||||||
mTimer->stop();
|
mTimer->stop();
|
||||||
|
|
||||||
//Get the latest message of the conversation
|
//Get the latest message of the conversation
|
||||||
@ -110,6 +116,7 @@ void ConversationWidget::getMessagesCallback(bool success, QList<ConversationMes
|
|||||||
{
|
{
|
||||||
//Restart counter
|
//Restart counter
|
||||||
mTimer->start(CONVERSATION_MESSAGES_REFRESH_INTERVAL);
|
mTimer->start(CONVERSATION_MESSAGES_REFRESH_INTERVAL);
|
||||||
|
mIsLoadingMessages = false;
|
||||||
|
|
||||||
if(!success){
|
if(!success){
|
||||||
QMessageBox::warning(this, tr("Error while getting messages list"), tr("Could not refresh messages list!"));
|
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
|
//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;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mMessages.append(list);
|
mMessages.append(list);
|
||||||
|
|
||||||
@ -141,6 +156,10 @@ void ConversationWidget::getMessagesCallback(bool success, QList<ConversationMes
|
|||||||
//Scroll to the end of the widget if required
|
//Scroll to the end of the widget if required
|
||||||
if(list.at(list.count()-1).iD() == mMessages.getLastMessageID())
|
if(list.at(list.count()-1).iD() == mMessages.getLastMessageID())
|
||||||
QTimer::singleShot(1000, this, &ConversationWidget::scrollToBottom);
|
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()
|
void ConversationWidget::scrollToBottom()
|
||||||
@ -162,6 +181,27 @@ void ConversationWidget::sendMessageCallback(bool success)
|
|||||||
resetSendMessageForm();
|
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()
|
void ConversationWidget::on_sendMessageButton_clicked()
|
||||||
{
|
{
|
||||||
sendMessage();
|
sendMessage();
|
||||||
|
@ -72,6 +72,13 @@ private slots:
|
|||||||
*/
|
*/
|
||||||
void sendMessageCallback(bool success);
|
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_sendMessageButton_clicked();
|
||||||
|
|
||||||
void on_messageContentInput_returnPressed();
|
void on_messageContentInput_returnPressed();
|
||||||
@ -105,6 +112,9 @@ private:
|
|||||||
Conversation mConversation;
|
Conversation mConversation;
|
||||||
UsersList mUsersList;
|
UsersList mUsersList;
|
||||||
ConversationMessagesList mMessages;
|
ConversationMessagesList mMessages;
|
||||||
|
bool mIsLoadingMessages = false;
|
||||||
|
bool mGotOldestConversationMessage = false;
|
||||||
|
bool mIsLoadingOlderMessages = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // CONVERSATIONWIDGET_H
|
#endif // CONVERSATIONWIDGET_H
|
||||||
|
Loading…
Reference in New Issue
Block a user