mirror of
https://gitlab.com/comunic/comunicmessages
synced 2024-12-04 19:24:11 +00:00
Can send messages from conversations
This commit is contained in:
parent
a0eaf69c0e
commit
58b4afe653
@ -26,7 +26,9 @@ SOURCES += \
|
|||||||
utils/uiutils.cpp \
|
utils/uiutils.cpp \
|
||||||
data/userslist.cpp \
|
data/userslist.cpp \
|
||||||
utils/timeutils.cpp \
|
utils/timeutils.cpp \
|
||||||
widgets/conversationwidget.cpp
|
widgets/conversationwidget.cpp \
|
||||||
|
data/newconversationmessage.cpp \
|
||||||
|
helpers/conversationhelper.cpp
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
helpers/accounthelper.h \
|
helpers/accounthelper.h \
|
||||||
@ -54,7 +56,9 @@ HEADERS += \
|
|||||||
utils/uiutils.h \
|
utils/uiutils.h \
|
||||||
data/userslist.h \
|
data/userslist.h \
|
||||||
utils/timeutils.h \
|
utils/timeutils.h \
|
||||||
widgets/conversationwidget.h
|
widgets/conversationwidget.h \
|
||||||
|
data/newconversationmessage.h \
|
||||||
|
helpers/conversationhelper.h
|
||||||
|
|
||||||
FORMS += \
|
FORMS += \
|
||||||
widgets/loginwidget.ui \
|
widgets/loginwidget.ui \
|
||||||
|
5
config.h
5
config.h
@ -29,4 +29,9 @@
|
|||||||
#define SETTINGS_ACCOUNT_LOGIN_TOKEN_1 "account_login_token_1"
|
#define SETTINGS_ACCOUNT_LOGIN_TOKEN_1 "account_login_token_1"
|
||||||
#define SETTINGS_ACCOUNT_LOGIN_TOKEN_2 "account_login_token_2"
|
#define SETTINGS_ACCOUNT_LOGIN_TOKEN_2 "account_login_token_2"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Conversations information
|
||||||
|
*/
|
||||||
|
#define CONVERSATION_MESSAGE_MIN_LENGTH 3
|
||||||
|
|
||||||
#endif // CONFIG_H
|
#endif // CONFIG_H
|
||||||
|
26
data/newconversationmessage.cpp
Normal file
26
data/newconversationmessage.cpp
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
#include "newconversationmessage.h"
|
||||||
|
|
||||||
|
NewConversationMessage::NewConversationMessage()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
int NewConversationMessage::iDConversation() const
|
||||||
|
{
|
||||||
|
return mIDConversation;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NewConversationMessage::setIDConversation(int iDConversation)
|
||||||
|
{
|
||||||
|
mIDConversation = iDConversation;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString NewConversationMessage::message() const
|
||||||
|
{
|
||||||
|
return mMessage;
|
||||||
|
}
|
||||||
|
|
||||||
|
void NewConversationMessage::setMessage(const QString &message)
|
||||||
|
{
|
||||||
|
mMessage = message;
|
||||||
|
}
|
30
data/newconversationmessage.h
Normal file
30
data/newconversationmessage.h
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
/**
|
||||||
|
* New conversation message
|
||||||
|
*
|
||||||
|
* Contains information about a message to send
|
||||||
|
* to the server
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
*/
|
||||||
|
#ifndef NEWCONVERSATIONMESSAGE_H
|
||||||
|
#define NEWCONVERSATIONMESSAGE_H
|
||||||
|
|
||||||
|
#include <QString>
|
||||||
|
|
||||||
|
class NewConversationMessage
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
NewConversationMessage();
|
||||||
|
|
||||||
|
int iDConversation() const;
|
||||||
|
void setIDConversation(int iDConversation);
|
||||||
|
|
||||||
|
QString message() const;
|
||||||
|
void setMessage(const QString &message);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int mIDConversation;
|
||||||
|
QString mMessage;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // NEWCONVERSATIONMESSAGE_H
|
33
helpers/conversationhelper.cpp
Normal file
33
helpers/conversationhelper.cpp
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include "apihelper.h"
|
||||||
|
#include "conversationhelper.h"
|
||||||
|
#include "../data/apirequest.h"
|
||||||
|
|
||||||
|
ConversationHelper::ConversationHelper(QObject *parent) : QObject(parent)
|
||||||
|
{
|
||||||
|
mAPIHelper = new APIHelper(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConversationHelper::sendMessage(const NewConversationMessage &message)
|
||||||
|
{
|
||||||
|
APIRequest *request = new APIRequest;
|
||||||
|
request->setURI("conversations/sendMessage");
|
||||||
|
request->addInt("conversationID", message.iDConversation());
|
||||||
|
request->addString("message", message.message());
|
||||||
|
|
||||||
|
connect(request, &APIRequest::finished, this, &ConversationHelper::sendMessageFinished);
|
||||||
|
mAPIHelper->execute(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConversationHelper::sendMessageFinished(int code)
|
||||||
|
{
|
||||||
|
//Delete sender
|
||||||
|
qobject_cast<APIRequest *>(sender())->deleteLater();
|
||||||
|
|
||||||
|
if(code != 200){
|
||||||
|
emit sendMessageCallback(false);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Success
|
||||||
|
emit sendMessageCallback(true);
|
||||||
|
}
|
61
helpers/conversationhelper.h
Normal file
61
helpers/conversationhelper.h
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
/**
|
||||||
|
* Conversation helper
|
||||||
|
*
|
||||||
|
* This class is an interface between the server
|
||||||
|
* and the conversations widgets
|
||||||
|
*
|
||||||
|
* @author Pierre HUBERT
|
||||||
|
*/
|
||||||
|
#ifndef CONVERSATIONHELPER_H
|
||||||
|
#define CONVERSATIONHELPER_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
#include "../data/newconversationmessage.h"
|
||||||
|
#include "../data/apirequest.h"
|
||||||
|
|
||||||
|
class APIHelper;
|
||||||
|
|
||||||
|
class ConversationHelper : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit ConversationHelper(QObject *parent = nullptr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send a message to the server
|
||||||
|
*
|
||||||
|
* @param message Information about the message to send
|
||||||
|
*/
|
||||||
|
void sendMessage(const NewConversationMessage &message);
|
||||||
|
|
||||||
|
signals:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This signal is emitted when we have got the result of a create message
|
||||||
|
* attempt
|
||||||
|
*
|
||||||
|
* @param success TRUE if the operation is a success / FALSE
|
||||||
|
*/
|
||||||
|
void sendMessageCallback(bool success);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send message callback
|
||||||
|
*
|
||||||
|
* @param code The code of the error
|
||||||
|
* @param & Server response (useless in this case)
|
||||||
|
*/
|
||||||
|
void sendMessageFinished(int code);
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
//Private fields
|
||||||
|
APIHelper *mAPIHelper;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // CONVERSATIONHELPER_H
|
@ -1,6 +1,10 @@
|
|||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
#include "conversationwidget.h"
|
#include "conversationwidget.h"
|
||||||
#include "ui_conversationwidget.h"
|
#include "ui_conversationwidget.h"
|
||||||
#include "../helpers/conversationslisthelper.h"
|
#include "../helpers/conversationslisthelper.h"
|
||||||
|
#include "../helpers/conversationhelper.h"
|
||||||
|
#include "../config.h"
|
||||||
|
|
||||||
ConversationWidget::ConversationWidget(const Conversation &conversation, const UsersList &list, QWidget *parent) :
|
ConversationWidget::ConversationWidget(const Conversation &conversation, const UsersList &list, QWidget *parent) :
|
||||||
QWidget(parent),
|
QWidget(parent),
|
||||||
@ -13,6 +17,10 @@ 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);
|
||||||
|
|
||||||
|
//Initalize helpers
|
||||||
|
mConversationHelper = new ConversationHelper(this);
|
||||||
|
connect(mConversationHelper, &ConversationHelper::sendMessageCallback, this, &ConversationWidget::sendMessageCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
ConversationWidget::~ConversationWidget()
|
ConversationWidget::~ConversationWidget()
|
||||||
@ -22,7 +30,42 @@ ConversationWidget::~ConversationWidget()
|
|||||||
|
|
||||||
void ConversationWidget::sendMessage()
|
void ConversationWidget::sendMessage()
|
||||||
{
|
{
|
||||||
qWarning("Send a new message");
|
if(isSendMessageFormLocked()){
|
||||||
|
qInfo("sendMessage cancelled because another send message request is running...");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QString content = ui->messageContentInput->text();
|
||||||
|
|
||||||
|
//Check message length
|
||||||
|
if(content.length() < CONVERSATION_MESSAGE_MIN_LENGTH){
|
||||||
|
QMessageBox::warning(this, tr("Invalid message!"), tr("Specified message is too short!"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Lock send form
|
||||||
|
setSendMessageFormLocked(true);
|
||||||
|
|
||||||
|
//Send a request to send message
|
||||||
|
NewConversationMessage newMessage;
|
||||||
|
newMessage.setIDConversation(mConversation.iD());
|
||||||
|
newMessage.setMessage(content);
|
||||||
|
|
||||||
|
//Request the message to be sent
|
||||||
|
mConversationHelper->sendMessage(newMessage);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConversationWidget::sendMessageCallback(bool success)
|
||||||
|
{
|
||||||
|
setSendMessageFormLocked(false);
|
||||||
|
|
||||||
|
if(!success){
|
||||||
|
QMessageBox::warning(this, tr("Error"), tr("Could not send your message! Please check it and your Internet connection..."));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Reset message form
|
||||||
|
resetSendMessageForm();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ConversationWidget::on_sendMessageButton_clicked()
|
void ConversationWidget::on_sendMessageButton_clicked()
|
||||||
@ -34,3 +77,19 @@ void ConversationWidget::on_messageContentInput_returnPressed()
|
|||||||
{
|
{
|
||||||
sendMessage();
|
sendMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConversationWidget::setSendMessageFormLocked(bool lock)
|
||||||
|
{
|
||||||
|
ui->sendMessageButton->setEnabled(!lock);
|
||||||
|
ui->messageContentInput->setEnabled(!lock);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ConversationWidget::isSendMessageFormLocked()
|
||||||
|
{
|
||||||
|
return !ui->sendMessageButton->isEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConversationWidget::resetSendMessageForm()
|
||||||
|
{
|
||||||
|
ui->messageContentInput->setText("");
|
||||||
|
}
|
||||||
|
@ -18,6 +18,8 @@ namespace Ui {
|
|||||||
class ConversationWidget;
|
class ConversationWidget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class ConversationHelper;
|
||||||
|
|
||||||
class ConversationWidget : public QWidget
|
class ConversationWidget : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -36,14 +38,32 @@ public slots:
|
|||||||
|
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method called once the server replied to a send conversation
|
||||||
|
* message request
|
||||||
|
*
|
||||||
|
* @param success TRUE in case of success / FALSE else
|
||||||
|
*/
|
||||||
|
void sendMessageCallback(bool success);
|
||||||
|
|
||||||
void on_sendMessageButton_clicked();
|
void on_sendMessageButton_clicked();
|
||||||
|
|
||||||
void on_messageContentInput_returnPressed();
|
void on_messageContentInput_returnPressed();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Methods to get and set send message form
|
||||||
|
* lock state
|
||||||
|
*/
|
||||||
|
void setSendMessageFormLocked(bool lock);
|
||||||
|
bool isSendMessageFormLocked();
|
||||||
|
void resetSendMessageForm();
|
||||||
|
|
||||||
//Private fields
|
//Private fields
|
||||||
Ui::ConversationWidget *ui;
|
Ui::ConversationWidget *ui;
|
||||||
|
ConversationHelper *mConversationHelper;
|
||||||
Conversation mConversation;
|
Conversation mConversation;
|
||||||
UsersList mUsersList;
|
UsersList mUsersList;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user