Can send image to conversations

This commit is contained in:
2018-12-19 08:26:11 +01:00
parent 0148f7aaa5
commit 9100c14dfd
13 changed files with 224 additions and 12 deletions

View File

@ -1,4 +1,5 @@
#include <QNetworkReply>
#include <QFile>
#include "apirequest.h"
@ -38,6 +39,31 @@ void APIRequest::addBool(QString name, bool value)
mArguments.append(APIRequestParameter(name, value ? "true" : "false"));
}
void APIRequest::addFileFromPath(const QString &name, const QString &path, const QString &fileType)
{
//Determine files name for the request
QString partName = name;
partName.replace("\"", "\\\"");
QString fileName = ("/"+path).split("/").last();
fileName.replace("\"", "\\\"");
QHttpPart part;
part.setHeader(QNetworkRequest::ContentTypeHeader, fileType);
part.setHeader(QNetworkRequest::ContentDispositionHeader, QVariant("form-data; name=\""+partName+"\"; filename=\""+fileName+"\""));
QFile *file = new QFile(path);
if(!file->open(QIODevice::ReadOnly)){
qWarning("Could not open file to send: %s !", path.toStdString().c_str());
return;
}
part.setBodyDevice(file);
mParts.append(part);
//Automatically delete file object once request is completed
file->setParent(this);
}
QList<APIRequestParameter> APIRequest::arguments() const
{
return mArguments;
@ -52,3 +78,13 @@ void APIRequest::setNetworkReply(QNetworkReply *networkReply)
{
mNetworkReply = networkReply;
}
QList<QHttpPart> *APIRequest::parts()
{
return &mParts;
}
bool APIRequest::hasParts() const
{
return mParts.size() > 0;
}

View File

@ -10,6 +10,7 @@
#include <QObject>
#include <QJsonDocument>
#include <QHttpPart>
#include "apirequestparameter.h"
@ -50,6 +51,15 @@ public:
*/
void addBool(QString name, bool value);
/**
* Add a file from filesystem path
*
* @param name The name of the file to add
* @param path The path to the file
* @param fileType The type of the file to add
*/
void addFileFromPath(const QString &name, const QString &path, const QString &fileType);
/**
* Get the entire list of arguments of the request
*
@ -57,6 +67,14 @@ public:
*/
QList<APIRequestParameter> arguments() const;
/**
* Get the list of HTTP parts included with this request
*
* @return Pointer on the list containing the list of parts
*/
QList<QHttpPart> *parts();
bool hasParts() const;
//Get and set network reply associated with the request
QNetworkReply *networkReply() const;
void setNetworkReply(QNetworkReply *networkReply);
@ -91,6 +109,7 @@ public slots:
private:
QString mURI;
QList<APIRequestParameter> mArguments;
QList<QHttpPart> mParts;
QNetworkReply *mNetworkReply = nullptr;
};

View File

@ -24,3 +24,18 @@ void NewConversationMessage::setMessage(const QString &message)
{
mMessage = message;
}
QString NewConversationMessage::imagePath() const
{
return mImagePath;
}
bool NewConversationMessage::hasImage() const
{
return !mImagePath.isEmpty();
}
void NewConversationMessage::setImagePath(const QString &imagePath)
{
mImagePath = imagePath;
}

View File

@ -22,9 +22,14 @@ public:
QString message() const;
void setMessage(const QString &message);
QString imagePath() const;
bool hasImage() const;
void setImagePath(const QString &imagePath);
private:
int mIDConversation;
QString mMessage;
QString mImagePath;
};
#endif // NEWCONVERSATIONMESSAGE_H