Removed TODOs from c-chat-message

This commit is contained in:
Sylvain Berfini 2017-09-27 11:36:46 +02:00
parent 1cff67c57a
commit 950def6133
4 changed files with 133 additions and 148 deletions

View file

@ -43,7 +43,6 @@ L_DECLARE_C_OBJECT_IMPL_WITH_XTORS(ChatMessage,
LinphoneChatMessageCbs *cbs;
LinphoneAddress *from; // cache for shared_ptr<Address>
LinphoneAddress *to; // cache for shared_ptr<Address>
LinphoneErrorInfo *ei;
LinphoneChatMessageStateChangedCb message_state_changed_cb;
void* message_state_changed_user_data;
)
@ -245,6 +244,10 @@ const char *linphone_chat_message_get_custom_header(LinphoneChatMessage *msg, co
return L_GET_CPP_PTR_FROM_C_OBJECT(msg)->getSalCustomHeaderValue(header_name).c_str();
}
const LinphoneErrorInfo *linphone_chat_message_get_error_info(LinphoneChatMessage *msg) {
return L_GET_CPP_PTR_FROM_C_OBJECT(msg)->getErrorInfo();
}
// =============================================================================
// Methods
// =============================================================================
@ -273,19 +276,16 @@ void linphone_chat_message_update_state(LinphoneChatMessage *msg, LinphoneChatMe
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->updateState((LinphonePrivate::ChatMessage::State) new_state);
}
void linphone_chat_message_send_imdn(LinphoneChatMessage *msg, ImdnType imdn_type, LinphoneReason reason) {
//TODO
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->sendImdn();
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->sendImdn(imdn_type, reason);
}
void linphone_chat_message_deactivate(LinphoneChatMessage *msg){
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->cancelFileTransfer();
// TODO ?
//msg->chat_room = NULL;
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->setChatRoom(nullptr);
}
void linphone_chat_message_send_delivery_notification(LinphoneChatMessage *msg, LinphoneReason reason) {
//TODO
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->sendDeliveryNotification();
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->sendDeliveryNotification(reason);
}
void linphone_chat_message_send_display_notification(LinphoneChatMessage *msg) {
@ -334,14 +334,11 @@ int linphone_chat_message_set_text(LinphoneChatMessage *msg, const char* text) {
}
LinphoneContent *linphone_chat_message_get_file_transfer_information(LinphoneChatMessage *msg) {
//return L_GET_CPP_PTR_FROM_C_OBJECT(msg)->getFileTransferInformation();
//TODO
return NULL;
return L_GET_CPP_PTR_FROM_C_OBJECT(msg)->getFileTransferInformation();
}
void linphone_chat_message_set_file_transfer_information(LinphoneChatMessage *msg, LinphoneContent *content) {
//TODO
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->setFileTransferInformation(nullptr);
L_GET_CPP_PTR_FROM_C_OBJECT(msg)->setFileTransferInformation(content);
}
// =============================================================================
@ -359,12 +356,6 @@ const LinphoneAddress *linphone_chat_message_get_local_address(LinphoneChatMessa
return linphone_chat_message_get_to_address(msg);
}
const LinphoneErrorInfo *linphone_chat_message_get_error_info(const LinphoneChatMessage *msg) {
if (!msg->ei) ((LinphoneChatMessage*)msg)->ei = linphone_error_info_new(); /*let's do it mutable*/
linphone_error_info_from_sal_op(msg->ei, linphone_chat_message_get_sal_op(msg));
return msg->ei;
}
LinphoneReason linphone_chat_message_get_reason(LinphoneChatMessage *msg) {
return linphone_error_info_get_reason(linphone_chat_message_get_error_info(msg));
}

View file

@ -54,10 +54,14 @@ private:
std::shared_ptr<Content> internalContent;
std::unordered_map<std::string, std::string> customHeaders;
std::shared_ptr<EventsDb> eventsDb;
std::shared_ptr<ErrorInfo> errorInfo;
LinphoneErrorInfo * errorInfo;
belle_http_request_t *httpRequest;
SalOp *salOp;
SalCustomHeader *salCustomHeaders;
// Used for compatibility with previous C API
std::string cContentType;
std::string cText;
LinphoneContent *cFileTransferInformation;
L_DECLARE_PUBLIC(ChatMessage);
};

View file

@ -37,14 +37,18 @@ LINPHONE_BEGIN_NAMESPACE
using namespace std;
// -----------------------------------------------------------------------------
// =============================================================================
// ChatMessagePrivate
// =============================================================================
ChatMessagePrivate::ChatMessagePrivate (const shared_ptr<ChatRoom> &room)
: chatRoom(room) {}
ChatMessagePrivate::~ChatMessagePrivate () {}
// -----------------------------------------------------------------------------
// =============================================================================
// ChatMessage
// =============================================================================
ChatMessage::ChatMessage (const shared_ptr<ChatRoom> &room) : Object(*new ChatMessagePrivate(room)) {}
@ -59,6 +63,11 @@ shared_ptr<ChatRoom> ChatMessage::getChatRoom () const {
return d->chatRoom;
}
void ChatMessage::setChatRoom (shared_ptr<ChatRoom> chatRoom) {
L_D(ChatMessage);
d->chatRoom = chatRoom;
}
// -----------------------------------------------------------------------------
string ChatMessage::getExternalBodyUrl() const {
@ -215,41 +224,32 @@ void ChatMessage::setIsToBeStored(bool store) {
string ChatMessage::getContentType() const {
L_D(const ChatMessage);
if (d->internalContent) {
return d->internalContent->getContentType().asString();
}
if (d->contents.size() > 0) {
return d->contents.front()->getContentType().asString();
}
return "";
return d->cContentType;
}
void ChatMessage::setContentType(string contentType) {
//TODO
L_D(ChatMessage);
d->cContentType = contentType;
}
string ChatMessage::getText() const {
L_D(const ChatMessage);
if (d->internalContent) {
return d->internalContent->getBodyAsString();
}
if (d->contents.size() > 0) {
return d->contents.front()->getBodyAsString();
}
return "";
return d->cText;
}
void ChatMessage::setText(string text) {
//TODO
L_D(ChatMessage);
d->cText = text;
}
shared_ptr<Content> ChatMessage::getFileTransferInformation() const {
//TODO
return nullptr;
LinphoneContent * ChatMessage::getFileTransferInformation() const {
L_D(const ChatMessage);
return d->cFileTransferInformation;
}
void ChatMessage::setFileTransferInformation(shared_ptr<Content> content) {
//TODO
void ChatMessage::setFileTransferInformation(LinphoneContent *content) {
L_D(ChatMessage);
d->cFileTransferInformation = content;
}
unsigned int ChatMessage::getStorageId() const {
@ -307,12 +307,64 @@ string ChatMessage::getSalCustomHeaderValue(string name) {
return sal_custom_header_find(d->salCustomHeaders, name.c_str());
}
shared_ptr<const ErrorInfo> ChatMessage::getErrorInfo () const {
L_D(const ChatMessage);
//TODO
const LinphoneErrorInfo * ChatMessage::getErrorInfo() {
L_D(ChatMessage);
if (!d->errorInfo) d->errorInfo = linphone_error_info_new(); //let's do it mutable
linphone_error_info_from_sal_op(d->errorInfo, d->salOp);
return d->errorInfo;
}
bool ChatMessage::isReadOnly () const {
L_D(const ChatMessage);
return d->isReadOnly;
}
list<shared_ptr<const Content> > ChatMessage::getContents () const {
L_D(const ChatMessage);
list<shared_ptr<const Content> > contents;
for (const auto &content : d->contents)
contents.push_back(content);
return contents;
}
void ChatMessage::addContent (const shared_ptr<Content> &content) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->contents.push_back(content);
}
void ChatMessage::removeContent (const shared_ptr<const Content> &content) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->contents.remove(const_pointer_cast<Content>(content));
}
string ChatMessage::getCustomHeaderValue (const string &headerName) const {
L_D(const ChatMessage);
try {
return d->customHeaders.at(headerName);
} catch (const exception &) {
// Key doesn't exist.
}
return "";
}
void ChatMessage::addCustomHeader (const string &headerName, const string &headerValue) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->customHeaders[headerName] = headerValue;
}
void ChatMessage::removeCustomHeader (const string &headerName) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->customHeaders.erase(headerName);
}
// -----------------------------------------------------------------------------
void ChatMessage::updateState(State state) {
@ -325,6 +377,26 @@ void ChatMessage::updateState(State state) {
}*/
}
void ChatMessage::send () {
L_D(ChatMessage);
if (d->contents.size() > 1) {
MultipartChatMessageModifier mcmm;
mcmm.encode(d);
}
LinphoneCore *lc = getChatRoom()->getCore();
LpConfig *lpc = linphone_core_get_config(lc);
if (lp_config_get_int(lpc, "sip", "use_cpim", 0) == 1) {
CpimChatMessageModifier ccmm;
ccmm.encode(d);
}
// TODO.
d->isReadOnly = true;
}
void ChatMessage::reSend() {
//TODO
/*LinphoneChatMessageState state = linphone_chat_message_get_state(msg);
@ -482,7 +554,7 @@ static void linphone_chat_process_response_from_get_file(void *data, const belle
return content;
}*/
void ChatMessage::sendImdn() {
void ChatMessage::sendImdn(ImdnType imdnType, LinphoneReason reason) {
//TODO
/*char *content = linphone_chat_message_create_imdn_xml(cm, imdn_type, reason);
if (content) {
@ -491,7 +563,7 @@ void ChatMessage::sendImdn() {
}*/
}
void ChatMessage::sendDeliveryNotification() {
void ChatMessage::sendDeliveryNotification(LinphoneReason reason) {
//TODO
/*LinphoneChatRoom *cr = linphone_chat_message_get_chat_room(cm);
LinphoneCore *lc = linphone_chat_room_get_core(cr);
@ -1122,82 +1194,4 @@ int ChatMessage::putCharacter(uint32_t character) {
return -1;
}
// -----------------------------------------------------------------------------
void ChatMessage::send () {
L_D(ChatMessage);
if (d->contents.size() > 1) {
MultipartChatMessageModifier mcmm;
mcmm.encode(d);
}
LinphoneCore *lc = getChatRoom()->getCore();
LpConfig *lpc = linphone_core_get_config(lc);
if (lp_config_get_int(lpc, "sip", "use_cpim", 0) == 1) {
CpimChatMessageModifier ccmm;
ccmm.encode(d);
}
// TODO.
d->isReadOnly = true;
}
bool ChatMessage::containsReadableText () const {
// TODO: Check content type.
return true;
}
bool ChatMessage::isReadOnly () const {
L_D(const ChatMessage);
return d->isReadOnly;
}
list<shared_ptr<const Content> > ChatMessage::getContents () const {
L_D(const ChatMessage);
list<shared_ptr<const Content> > contents;
for (const auto &content : d->contents)
contents.push_back(content);
return contents;
}
void ChatMessage::addContent (const shared_ptr<Content> &content) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->contents.push_back(content);
}
void ChatMessage::removeContent (const shared_ptr<const Content> &content) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->contents.remove(const_pointer_cast<Content>(content));
}
string ChatMessage::getCustomHeaderValue (const string &headerName) const {
L_D(const ChatMessage);
try {
return d->customHeaders.at(headerName);
} catch (const exception &) {
// Key doesn't exist.
}
return "";
}
void ChatMessage::addCustomHeader (const string &headerName, const string &headerValue) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->customHeaders[headerName] = headerValue;
}
void ChatMessage::removeCustomHeader (const string &headerName) {
L_D(ChatMessage);
if (d->isReadOnly) return;
d->customHeaders.erase(headerName);
}
LINPHONE_END_NAMESPACE

View file

@ -64,16 +64,16 @@ public:
LinphoneChatMessage * getBackPtr();
std::shared_ptr<ChatRoom> getChatRoom () const;
void setChatRoom (std::shared_ptr<ChatRoom> cr);
// -----------------------------------------------------------------------------
// Methods
// -----------------------------------------------------------------------------
void updateState(State state);
void send();
void reSend();
void sendImdn();
void sendDeliveryNotification();
void sendImdn(ImdnType imdnType, LinphoneReason reason);
void sendDeliveryNotification(LinphoneReason reason);
void sendDisplayNotification();
int uploadFile();
int downloadFile();
@ -119,10 +119,24 @@ public:
bool isToBeStored() const;
void setIsToBeStored(bool store);
const LinphoneErrorInfo * getErrorInfo ();
bool isReadOnly () const;
std::list<std::shared_ptr<const Content> > getContents () const;
void addContent (const std::shared_ptr<Content> &content);
void removeContent (const std::shared_ptr<const Content> &content);
std::string getCustomHeaderValue (const std::string &headerName) const;
void addCustomHeader (const std::string &headerName, const std::string &headerValue);
void removeCustomHeader (const std::string &headerName);
// -----------------------------------------------------------------------------
// Deprecated methods, only used for C wrapper
// -----------------------------------------------------------------------------
void setChatRoom (std::shared_ptr<ChatRoom> chatRoom);
std::string getContentType() const;
void setContentType(std::string contentType);
@ -130,8 +144,8 @@ public:
std::string getText() const;
void setText(std::string text);
std::shared_ptr<Content> getFileTransferInformation() const;
void setFileTransferInformation(std::shared_ptr<Content> content);
LinphoneContent * getFileTransferInformation() const;
void setFileTransferInformation(LinphoneContent *content);
unsigned int getStorageId() const;
void setStorageId(unsigned int id);
@ -150,24 +164,6 @@ public:
void addSalCustomHeader(std::string name, std::string value);
void removeSalCustomHeader(std::string name);
std::string getSalCustomHeaderValue(std::string name);
// -----------------------------------------------------------------------------
std::shared_ptr<const ErrorInfo> getErrorInfo () const;
void send ();
bool containsReadableText () const;
bool isReadOnly () const;
std::list<std::shared_ptr<const Content> > getContents () const;
void addContent (const std::shared_ptr<Content> &content);
void removeContent (const std::shared_ptr<const Content> &content);
std::string getCustomHeaderValue (const std::string &headerName) const;
void addCustomHeader (const std::string &headerName, const std::string &headerValue);
void removeCustomHeader (const std::string &headerName);
protected:
explicit ChatMessage (ChatMessagePrivate &p);