diff --git a/ComunicMessages.pro b/ComunicMessages.pro index c973a36..9175599 100644 --- a/ComunicMessages.pro +++ b/ComunicMessages.pro @@ -30,7 +30,8 @@ SOURCES += \ data/newconversationmessage.cpp \ helpers/conversationhelper.cpp \ data/conversationmessage.cpp \ - widgets/conversationmessagewidget.cpp + widgets/conversationmessagewidget.cpp \ + data/conversationmessageslist.cpp HEADERS += \ helpers/accounthelper.h \ @@ -62,7 +63,8 @@ HEADERS += \ data/newconversationmessage.h \ helpers/conversationhelper.h \ data/conversationmessage.h \ - widgets/conversationmessagewidget.h + widgets/conversationmessagewidget.h \ + data/conversationmessageslist.h FORMS += \ widgets/loginwidget.ui \ diff --git a/config.h b/config.h index 20565aa..411ab13 100644 --- a/config.h +++ b/config.h @@ -33,5 +33,6 @@ * Conversations information */ #define CONVERSATION_MESSAGE_MIN_LENGTH 3 +#define CONVERSATION_MESSAGES_REFRESH_INTERVAL 1000 #endif // CONFIG_H diff --git a/data/conversationmessageslist.cpp b/data/conversationmessageslist.cpp new file mode 100644 index 0000000..08a64ef --- /dev/null +++ b/data/conversationmessageslist.cpp @@ -0,0 +1,16 @@ +#include "conversationmessageslist.h" + +ConversationMessagesList::ConversationMessagesList() +{ + +} + +int ConversationMessagesList::getLastMessageID() +{ + + //Return -1 by default if there is not any message in the conversation + if(count() == 0) + return -1; + + return at(count() -1).iD(); +} diff --git a/data/conversationmessageslist.h b/data/conversationmessageslist.h new file mode 100644 index 0000000..b9aa8b6 --- /dev/null +++ b/data/conversationmessageslist.h @@ -0,0 +1,28 @@ +/** + * Conversations messages list container + * + * @author Pierre HUBERT + */ + +#ifndef CONVERSATIONMESSAGESLIST_H +#define CONVERSATIONMESSAGESLIST_H + +#include + +#include "conversationmessage.h" + +class ConversationMessagesList : public QList +{ +public: + ConversationMessagesList(); + + /** + * Get the ID of the oldest message of + * the conversation + * + * @return The ID of the message / -1 in case of failure + */ + int getLastMessageID(); +}; + +#endif // CONVERSATIONMESSAGESLIST_H diff --git a/widgets/conversationwidget.cpp b/widgets/conversationwidget.cpp index 130601d..1f35f0b 100644 --- a/widgets/conversationwidget.cpp +++ b/widgets/conversationwidget.cpp @@ -1,5 +1,6 @@ #include #include +#include #include "conversationwidget.h" #include "ui_conversationwidget.h" @@ -27,13 +28,16 @@ ConversationWidget::ConversationWidget(const Conversation &conversation, const U connect(mConversationHelper, &ConversationHelper::sendMessageCallback, this, &ConversationWidget::sendMessageCallback); connect(mConversationHelper, &ConversationHelper::getMessagesCallback, this, &ConversationWidget::getMessagesCallback); - //Get the latest message of the conversation - mConversationHelper->getMessages(conversation.iD()); + //Initialize refresh timeout + mTimer = new QTimer(this); + connect(mTimer, &QTimer::timeout, this, &ConversationWidget::refreshTimeout); + emit refreshTimeout(); } ConversationWidget::~ConversationWidget() { delete ui; + delete mTimer; } void ConversationWidget::sendMessage() @@ -63,8 +67,19 @@ void ConversationWidget::sendMessage() mConversationHelper->sendMessage(newMessage); } +void ConversationWidget::refreshTimeout() +{ + mTimer->stop(); + + //Get the latest message of the conversation + mConversationHelper->getMessages(mConversation.iD(), mMessages.getLastMessageID()); +} + void ConversationWidget::getMessagesCallback(bool success, QList list) { + //Restart counter + mTimer->start(CONVERSATION_MESSAGES_REFRESH_INTERVAL); + if(!success){ QMessageBox::warning(this, tr("Error while getting messages list"), tr("Could not refresh messages list!")); return; diff --git a/widgets/conversationwidget.h b/widgets/conversationwidget.h index c0d6ddc..68477ea 100644 --- a/widgets/conversationwidget.h +++ b/widgets/conversationwidget.h @@ -14,6 +14,7 @@ #include "../data/conversation.h" #include "../data/userslist.h" #include "../data/conversationmessage.h" +#include "../data/conversationmessageslist.h" namespace Ui { class ConversationWidget; @@ -40,6 +41,12 @@ public slots: private slots: + /** + * This slot is called at regular interval in order to + * update regulary the list of messages + */ + void refreshTimeout(); + /** * Method called once we have got the list of messages * @@ -72,10 +79,11 @@ private: //Private fields Ui::ConversationWidget *ui; + QTimer *mTimer; ConversationHelper *mConversationHelper; Conversation mConversation; UsersList mUsersList; - QList mMessages; + ConversationMessagesList mMessages; }; #endif // CONVERSATIONWIDGET_H