diff --git a/src/c-wrapper/api/c-chat-message.cpp b/src/c-wrapper/api/c-chat-message.cpp index f4cb92dbc..0695bb0f5 100644 --- a/src/c-wrapper/api/c-chat-message.cpp +++ b/src/c-wrapper/api/c-chat-message.cpp @@ -126,11 +126,11 @@ LinphoneChatMessageDir linphone_chat_message_get_direction(const LinphoneChatMes } void linphone_chat_message_set_incoming(LinphoneChatMessage *msg) { - L_GET_CPP_PTR_FROM_C_OBJECT(msg)->setDirection(LinphonePrivate::ChatMessage::Direction::Incoming); + L_GET_PRIVATE_FROM_C_OBJECT(msg)->setDirection(LinphonePrivate::ChatMessage::Direction::Incoming); } void linphone_chat_message_set_outgoing(LinphoneChatMessage *msg) { - L_GET_CPP_PTR_FROM_C_OBJECT(msg)->setDirection(LinphonePrivate::ChatMessage::Direction::Outgoing); + L_GET_PRIVATE_FROM_C_OBJECT(msg)->setDirection(LinphonePrivate::ChatMessage::Direction::Outgoing); } unsigned int linphone_chat_message_get_storage_id(LinphoneChatMessage *msg) { @@ -142,7 +142,7 @@ LinphoneChatMessageState linphone_chat_message_get_state(const LinphoneChatMessa } void linphone_chat_message_set_state(LinphoneChatMessage *msg, LinphoneChatMessageState state) { - L_GET_CPP_PTR_FROM_C_OBJECT(msg)->setState((LinphonePrivate::ChatMessage::State)state); + L_GET_PRIVATE_FROM_C_OBJECT(msg)->setState((LinphonePrivate::ChatMessage::State)state); } const char* linphone_chat_message_get_message_id(const LinphoneChatMessage *msg) { diff --git a/src/chat/chat-message-p.h b/src/chat/chat-message-p.h index 7479d2938..87892c120 100644 --- a/src/chat/chat-message-p.h +++ b/src/chat/chat-message-p.h @@ -38,6 +38,10 @@ public: void setChatRoom (std::shared_ptr chatRoom); // ----------------------------------------------------------------------------- + + void setDirection (ChatMessage::Direction dir); + + void setState(ChatMessage::State state); void setTime(time_t time); diff --git a/src/chat/chat-message.cpp b/src/chat/chat-message.cpp index 8927fcf51..e20a29f19 100644 --- a/src/chat/chat-message.cpp +++ b/src/chat/chat-message.cpp @@ -52,10 +52,38 @@ void ChatMessagePrivate::setChatRoom (shared_ptr cr) { chatRoom = cr; } +void ChatMessagePrivate::setDirection (ChatMessage::Direction dir) { + direction = dir; +} + void ChatMessagePrivate::setTime(time_t t) { time = t; } +void ChatMessagePrivate::setState(ChatMessage::State s) { + L_Q(); + + if (s != state && chatRoom) { + if (((state == ChatMessage::State::Displayed) || (state == ChatMessage::State::DeliveredToUser)) + && ((s == ChatMessage::State::DeliveredToUser) || (s == ChatMessage::State::Delivered) || (s == ChatMessage::State::NotDelivered))) { + return; + } + /* TODO + ms_message("Chat message %p: moving from state %s to %s", msg, linphone_chat_message_state_to_string(msg->state), linphone_chat_message_state_to_string(state)); + */ + state = s; + + LinphoneChatMessage *msg = L_GET_C_BACK_PTR(q); + if (linphone_chat_message_get_message_state_changed_cb(msg)) { + linphone_chat_message_get_message_state_changed_cb(msg)(msg, (LinphoneChatMessageState)state, linphone_chat_message_get_message_state_changed_cb_user_data(msg)); + } + LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(msg); + if (linphone_chat_message_cbs_get_msg_state_changed(cbs)) { + linphone_chat_message_cbs_get_msg_state_changed(cbs)(msg, linphone_chat_message_get_state(msg)); + } + } +} + unsigned int ChatMessagePrivate::getStorageId() const { return storageId; } @@ -287,11 +315,6 @@ ChatMessage::Direction ChatMessage::getDirection () const { return d->direction; } -void ChatMessage::setDirection (ChatMessage::Direction dir) { - L_D(); - d->direction = dir; -} - bool ChatMessage::isOutgoing () const { L_D(); return d->direction == Outgoing; @@ -307,29 +330,6 @@ ChatMessage::State ChatMessage::getState() const { return d->state; } -void ChatMessage::setState(State state) { - L_D(); - if (state != d->state && d->chatRoom) { - if (((d->state == Displayed) || (d->state == DeliveredToUser)) - && ((state == DeliveredToUser) || (state == Delivered) || (state == NotDelivered))) { - return; - } - /* TODO - ms_message("Chat message %p: moving from state %s to %s", msg, linphone_chat_message_state_to_string(msg->state), linphone_chat_message_state_to_string(state)); - */ - d->state = state; - - LinphoneChatMessage *msg = L_GET_C_BACK_PTR(this); - if (linphone_chat_message_get_message_state_changed_cb(msg)) { - linphone_chat_message_get_message_state_changed_cb(msg)(msg, (LinphoneChatMessageState)state, linphone_chat_message_get_message_state_changed_cb_user_data(msg)); - } - LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(msg); - if (linphone_chat_message_cbs_get_msg_state_changed(cbs)) { - linphone_chat_message_cbs_get_msg_state_changed(cbs)(msg, linphone_chat_message_get_state(msg)); - } - } -} - string ChatMessage::getId () const { L_D(); return d->id; @@ -556,19 +556,15 @@ void ChatMessage::sendDeliveryNotification(LinphoneReason reason) { if (linphone_im_notif_policy_get_send_imdn_delivered(policy)) { d->sendImdn(ImdnTypeDelivery, reason); } - /*LinphoneChatRoom *cr = linphone_chat_message_get_chat_room(cm); - LinphoneCore *lc = linphone_chat_room_get_core(cr); - */ } void ChatMessage::sendDisplayNotification() { - //TODO - /*LinphoneChatRoom *cr = linphone_chat_message_get_chat_room(cm); - LinphoneCore *lc = linphone_chat_room_get_core(cr); + L_D(); + LinphoneCore *lc = d->chatRoom->getCore(); LinphoneImNotifPolicy *policy = linphone_core_get_im_notif_policy(lc); - if (linphone_im_notif_policy_get_send_imdn_displayed(policy) == TRUE) { - linphone_chat_message_send_imdn(cm, ImdnTypeDisplay, LinphoneReasonNone); - }*/ + if (linphone_im_notif_policy_get_send_imdn_displayed(policy)) { + d->sendImdn(ImdnTypeDisplay, LinphoneReasonNone); + } } /* diff --git a/src/chat/chat-message.h b/src/chat/chat-message.h index 5b0485281..bf0ec5a29 100644 --- a/src/chat/chat-message.h +++ b/src/chat/chat-message.h @@ -84,7 +84,6 @@ public: // ----------------------------------------------------------------------------- Direction getDirection () const; - void setDirection (Direction dir); bool isOutgoing () const; bool isIncoming () const; @@ -97,7 +96,6 @@ public: void setIsSecured(bool isSecured); State getState() const; - void setState(State state); std::string getId () const; void setId (std::string);