diff --git a/coreapi/private.h b/coreapi/private.h index dc6ff89b8..b28d7bb86 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -1084,6 +1084,7 @@ void linphone_core_message_storage_set_debug(LinphoneCore *lc, bool_t debug); void linphone_chat_message_set_time(LinphoneChatMessage* msg, time_t time); void linphone_chat_message_set_incoming(LinphoneChatMessage *msg); void linphone_chat_message_set_outgoing(LinphoneChatMessage *msg); +LinphoneChatMessageStateChangedCb linphone_chat_message_get_message_state_changed_cb(LinphoneChatMessage* msg); void linphone_chat_message_set_message_state_changed_cb(LinphoneChatMessage* msg, LinphoneChatMessageStateChangedCb cb); void linphone_chat_message_set_message_state_changed_cb_user_data(LinphoneChatMessage* msg, void *user_data); void * linphone_chat_message_get_message_state_changed_cb_user_data(LinphoneChatMessage* msg); diff --git a/src/c-wrapper/api/c-chat-message.cpp b/src/c-wrapper/api/c-chat-message.cpp index 70a92d8ec..fb0237698 100644 --- a/src/c-wrapper/api/c-chat-message.cpp +++ b/src/c-wrapper/api/c-chat-message.cpp @@ -300,6 +300,10 @@ LinphoneStatus linphone_chat_message_put_char(LinphoneChatMessage *msg, uint32_t // Old listener // ============================================================================= +LinphoneChatMessageStateChangedCb linphone_chat_message_get_message_state_changed_cb(LinphoneChatMessage* msg) { + return msg->message_state_changed_cb; +} + void linphone_chat_message_set_message_state_changed_cb(LinphoneChatMessage* msg, LinphoneChatMessageStateChangedCb cb) { msg->message_state_changed_cb = cb; } diff --git a/src/chat/chat-message.cpp b/src/chat/chat-message.cpp index 2deb16b91..5e9e22645 100644 --- a/src/chat/chat-message.cpp +++ b/src/chat/chat-message.cpp @@ -46,6 +46,8 @@ ChatMessagePrivate::ChatMessagePrivate (const shared_ptr &room) ChatMessagePrivate::~ChatMessagePrivate () {} +// ----------------------------------------------------------------------------- + // ============================================================================= // ChatMessage // ============================================================================= @@ -137,10 +139,9 @@ void ChatMessage::setState(State state) { d->state = state; LinphoneChatMessage *msg = L_GET_C_BACK_PTR(this); - /* TODO - if (msg->message_state_changed_cb) { - msg->message_state_changed_cb(msg, msg->state, msg->message_state_changed_user_data); - }*/ + 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)); @@ -160,12 +161,12 @@ void ChatMessage::setId (string id) { bool ChatMessage::isRead() const { return false; - /* TODO L_D(const ChatMessage); - shared_ptr policy =d->chatRoom->core->getImNotifPolicy(); - if (policy->getRecvImdnDisplayed() && d->state == Displayed) return true; - if (policy->getRecvImdnDelivered() && (d->state == DeliveredToUser || d->state == Displayed)) return true; - return d->state == Delivered || d->state == Displayed || d->state == DeliveredToUser;*/ + LinphoneCore *lc = d->chatRoom->getCore(); + LinphoneImNotifPolicy *policy = linphone_core_get_im_notif_policy(lc); + if (linphone_im_notif_policy_get_recv_imdn_displayed(policy) && d->state == Displayed) return true; + if (linphone_im_notif_policy_get_recv_imdn_delivered(policy) && (d->state == DeliveredToUser || d->state == Displayed)) return true; + return d->state == Delivered || d->state == Displayed || d->state == DeliveredToUser; } string ChatMessage::getAppdata () const {