Started CPIM chat message modifier

This commit is contained in:
Sylvain Berfini 2017-09-13 12:35:44 +02:00
parent cd10ea5d66
commit 05b91d4b64
7 changed files with 47 additions and 14 deletions

View file

@ -91,8 +91,8 @@ string ChatMessage::getContentType () const {
return d->contentType;
}
void ChatMessage::send () const {
L_D(const ChatMessage);
void ChatMessage::send () {
L_D(ChatMessage);
if (d->contents.size() > 1) {
MultipartChatMessageModifier mcmm;
@ -107,6 +107,8 @@ void ChatMessage::send () const {
}
// TODO.
d->isReadOnly = true;
}
bool ChatMessage::containsReadableText () const {

View file

@ -69,7 +69,7 @@ public:
std::string getContentType () const;
void send () const;
void send ();
bool containsReadableText () const;

View file

@ -27,8 +27,8 @@
class ChatMessageModifier {
public:
virtual void encode(const LinphonePrivate::ChatMessagePrivate* msg) = 0;
virtual void decode(const LinphonePrivate::ChatMessagePrivate* msg) = 0;
virtual void encode(LinphonePrivate::ChatMessagePrivate* msg) = 0;
virtual void decode(LinphonePrivate::ChatMessagePrivate* msg) = 0;
virtual ~ChatMessageModifier () = default;
};

View file

@ -16,23 +16,54 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include <vector>
#include "content/content-type.h"
#include "content/content.h"
#include "chat/chat-message-p.h"
#include "chat/cpim/cpim.h"
#include "cpim-chat-message-modifier.h"
LINPHONE_BEGIN_NAMESPACE
using namespace std;
void CpimChatMessageModifier::encode(const LinphonePrivate::ChatMessagePrivate* msg) {
//TODO
void CpimChatMessageModifier::encode(LinphonePrivate::ChatMessagePrivate* msg) {
Cpim::Message message;
Cpim::GenericHeader contentTypeHeader;
contentTypeHeader.setName("Content-Type");
contentTypeHeader.setValue("Message/CPIM");
message.addCpimHeader(contentTypeHeader);
shared_ptr<Content> content;
if (msg->internalContent) {
// Another ChatMessageModifier was called before this one, we apply our changes on the private content
content = msg->internalContent;
} else {
// We're the first ChatMessageModifier to be called, we'll create the private content from the public one
// We take the first one because if there is more of them, the multipart modifier should have been called first
// So we should not be in this block
content = msg->contents.front();
}
string contentType = content->getContentType().asString();
const vector<char> body = content->getBody();
string contentBody(body.begin(), body.end());
message.setContent("ContentType: " + contentType + "\r\n" + contentBody);
if (!message.isValid()) {
//TODO
} else {
shared_ptr<Content> newContent = make_shared<Content>();
ContentType newContentType("Message/CPIM");
newContent->setContentType(newContentType);
newContent->setBody(message.asString());
msg->internalContent = newContent;
}
}
void CpimChatMessageModifier::decode(const LinphonePrivate::ChatMessagePrivate* msg) {
void CpimChatMessageModifier::decode(LinphonePrivate::ChatMessagePrivate* msg) {
//TODO
}

View file

@ -28,8 +28,8 @@
class CpimChatMessageModifier : ChatMessageModifier {
public:
CpimChatMessageModifier() {};
virtual void encode(const LinphonePrivate::ChatMessagePrivate* msg);
virtual void decode(const LinphonePrivate::ChatMessagePrivate* msg);
virtual void encode(LinphonePrivate::ChatMessagePrivate* msg);
virtual void decode(LinphonePrivate::ChatMessagePrivate* msg);
virtual ~CpimChatMessageModifier () = default;
};

View file

@ -23,13 +23,13 @@
using namespace std;
void MultipartChatMessageModifier::encode(const LinphonePrivate::ChatMessagePrivate* msg) {
void MultipartChatMessageModifier::encode(LinphonePrivate::ChatMessagePrivate* msg) {
if (msg->contents.size() > 1) {
//TODO
}
}
void MultipartChatMessageModifier::decode(const LinphonePrivate::ChatMessagePrivate* msg) {
void MultipartChatMessageModifier::decode(LinphonePrivate::ChatMessagePrivate* msg) {
//TODO
}

View file

@ -28,8 +28,8 @@
class MultipartChatMessageModifier : ChatMessageModifier {
public:
MultipartChatMessageModifier() {};
virtual void encode(const LinphonePrivate::ChatMessagePrivate* msg);
virtual void decode(const LinphonePrivate::ChatMessagePrivate* msg);
virtual void encode(LinphonePrivate::ChatMessagePrivate* msg);
virtual void decode(LinphonePrivate::ChatMessagePrivate* msg);
virtual ~MultipartChatMessageModifier () = default;
};