void MessageProxy::handleEmailEvent(int account_id, int mail_id, int thread_id, int event)
{
-/*
- * LoggerD("Enter");
- *
- * if(NOTI_MAIL_UPDATE == event) {
- * //getting thread_id from message
- * email_mail_data_t *mail_data = NULL;
- *
- * if(EMAIL_ERROR_NONE != email_get_mail_data(mail_id, &mail_data)) {
- * if (mail_data) email_free_mail_data(&mail_data, 1);
- *
- * LoggerE("Failed to get mail data during setting conversation id in MessageProxy.");
- * return;
- * }
- *
- * thread_id = mail_data->thread_id;
- *
- * if(EMAIL_ERROR_NONE != email_free_mail_data(&mail_data,1)) {
- * LoggerE("Failed to free mail data memory");
- * }
- * }
- *
- * email_mail_data_t* mail_data = EmailManager::getInstance().loadMessage(mail_id);
- * if (mail_data == NULL) {
- * throw common::UnknownException("Failed to load email");
- * }
- * std::shared_ptr<Message> msg = Message::convertPlatformEmailToObject(*mail_data);
- * ConversationPtr conv = MessageConversation::convertEmailConversationToObject(
- * thread_id);
- *
- * EventMessages* eventMsg = new EventMessages();
- * eventMsg->service_type = MessageType::EMAIL;
- * eventMsg->service_id = account_id;
- * eventMsg->items.push_back(msg);
- * EventConversations* eventConv = new EventConversations();
- * eventConv->service_type = MessageType::EMAIL;
- * eventConv->service_id = account_id;
- * eventConv->items.push_back(conv);
- * switch (event) {
- * case NOTI_MAIL_ADD:
- * ChangeListenerContainer::getInstance().callMessageAdded(eventMsg);
- * if (conv->getMessageCount() == 1) {
- * LoggerD("This thread is new, triggering conversationAdded");
- * ChangeListenerContainer::getInstance().callConversationAdded(eventConv);
- * } else {
- * LoggerD("This thread is not new, but it's updated");
- * ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
- * }
- * break;
- * case NOTI_MAIL_UPDATE:
- * ChangeListenerContainer::getInstance().callMessageUpdated(eventMsg);
- * ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
- * break;
- * default:
- * LoggerW("Unknown event type: %d", event);
- * break;
- *
- * }
- * delete eventMsg;
- * delete eventConv;
- *
- * EmailManager::getInstance().freeMessage(mail_data);
- */
+ LoggerD("Enter");
+
+ if(NOTI_MAIL_UPDATE == event) {
+ //getting thread_id from message
+ email_mail_data_t *mail_data = NULL;
+
+ if(EMAIL_ERROR_NONE != email_get_mail_data(mail_id, &mail_data)) {
+ if (mail_data) email_free_mail_data(&mail_data, 1);
+
+ LoggerE("Failed to get mail data during setting conversation id in MessageProxy.");
+ return;
+ }
+
+ thread_id = mail_data->thread_id;
+
+ if(EMAIL_ERROR_NONE != email_free_mail_data(&mail_data,1)) {
+ LoggerE("Failed to free mail data memory");
+ }
+ }
+
+ email_mail_data_t* mail_data = EmailManager::getInstance().loadMessage(mail_id);
+ if (mail_data == NULL) {
+ throw common::UnknownException("Failed to load email");
+ }
+ std::shared_ptr<Message> msg = Message::convertPlatformEmailToObject(*mail_data);
+ // TODO
+ //ConversationPtr conv = MessageConversation::convertEmailConversationToObject(
+ //thread_id);
+
+ EventMessages* eventMsg = new EventMessages();
+ eventMsg->service_type = MessageType::EMAIL;
+ eventMsg->service_id = account_id;
+ eventMsg->items.push_back(msg);
+ // TODO
+ //EventConversations* eventConv = new EventConversations();
+ //eventConv->service_type = MessageType::EMAIL;
+ //eventConv->service_id = account_id;
+ //eventConv->items.push_back(conv);
+ switch (event) {
+ case NOTI_MAIL_ADD:
+ ChangeListenerContainer::getInstance().callMessageAdded(eventMsg);
+ // TODO
+ //if (conv->getMessageCount() == 1) {
+ //LoggerD("This thread is new, triggering conversationAdded");
+ //ChangeListenerContainer::getInstance().callConversationAdded(eventConv);
+ //} else {
+ //LoggerD("This thread is not new, but it's updated");
+ //ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
+ //}
+ break;
+ case NOTI_MAIL_UPDATE:
+ ChangeListenerContainer::getInstance().callMessageUpdated(eventMsg);
+ // TODO
+ //ChangeListenerContainer::getInstance().callConversationUpdated(eventConv);
+ break;
+ default:
+ LoggerW("Unknown event type: %d", event);
+ break;
+
+ }
+ delete eventMsg;
+ // TODO
+ //delete eventConv;
+
+ EmailManager::getInstance().freeMessage(mail_data);
}
std::vector<int> getMailIds(const std::string& idsString)
// --- Callback invoking functions ---
// -- for message --
-/*
- *void ChangeListenerContainer::callMessageAdded(EventMessages* event)
- *{
- * LoggerD("Entered");
- *
- * if(MessageType(SMS) == event->service_type ||
- * MessageType(MMS) == event->service_type) {
- * LoggerD("Calling messageadded for ShortMessage");
- * MCLmap callbacksCopy;
- * {
- * std::lock_guard<std::mutex> shortlock(m_short_lock);
- * callbacksCopy = m_short_message_callbacks;
- * }
- * callAdded<MessagesChangeCallback, EventMessages>(
- * callbacksCopy, event);
- * }
- * else if(MessageType(EMAIL) == event->service_type) {
- * LoggerD("Calling messageadded for Email");
- * MCLmap callbacksCopy;
- * {
- * std::lock_guard<std::mutex> maillock(m_email_lock);
- * callbacksCopy = m_email_message_callbacks;
- * }
- * callAdded<MessagesChangeCallback, EventMessages>(
- * callbacksCopy, event);
- * }
- * else {
- * LoggerW("Invalid event type (%d) - no callback called.", event->service_type);
- * }
- *}
- */
+void ChangeListenerContainer::callMessageAdded(EventMessages* event)
+{
+ LoggerD("Entered");
-/*
- *void ChangeListenerContainer::callMessageUpdated(EventMessages* event)
- *{
- * LoggerD("Entered");
- *
- * if(MessageType(SMS) == event->service_type ||
- * MessageType(MMS) == event->service_type) {
- * LoggerD("Calling messageupdated for ShortMessage");
- * MCLmap callbacksCopy;
- * {
- * std::lock_guard<std::mutex> shortlock(m_short_lock);
- * callbacksCopy = m_short_message_callbacks;
- * }
- * callUpdated<MessagesChangeCallback, EventMessages>(
- * callbacksCopy, event);
- * }
- * else if(MessageType(EMAIL) == event->service_type) {
- * LoggerD("Calling messageupdated for Email");
- * MCLmap callbacksCopy;
- * {
- * std::lock_guard<std::mutex> maillock(m_email_lock);
- * callbacksCopy = m_email_message_callbacks;
- * }
- * callUpdated<MessagesChangeCallback, EventMessages>(
- * callbacksCopy, event);
- * }
- * else {
- * LoggerW("Invalid event type (%d) - no callback called.", event->service_type);
- * }
- *}
- */
+ if(MessageType(SMS) == event->service_type ||
+ MessageType(MMS) == event->service_type) {
+ //LoggerD("Calling messageadded for ShortMessage");
+ //MCLmap callbacksCopy;
+ //{
+ //std::lock_guard<std::mutex> shortlock(m_short_lock);
+ //callbacksCopy = m_short_message_callbacks;
+ //}
+ //callAdded<MessagesChangeCallback, EventMessages>(
+ //callbacksCopy, event);
+ }
+ else if(MessageType(EMAIL) == event->service_type) {
+ LoggerD("Calling messageadded for Email");
+ MCLmap callbacksCopy;
+ {
+ std::lock_guard<std::mutex> maillock(m_email_lock);
+ callbacksCopy = m_email_message_callbacks;
+ }
+ callAdded<MessagesChangeCallback, EventMessages>(
+ callbacksCopy, event);
+ }
+ else {
+ LoggerW("Invalid event type (%d) - no callback called.", event->service_type);
+ }
+}
+
+void ChangeListenerContainer::callMessageUpdated(EventMessages* event)
+{
+ LoggerD("Entered");
+
+ if(MessageType(SMS) == event->service_type ||
+ MessageType(MMS) == event->service_type) {
+ //LoggerD("Calling messageupdated for ShortMessage");
+ //MCLmap callbacksCopy;
+ //{
+ //std::lock_guard<std::mutex> shortlock(m_short_lock);
+ //callbacksCopy = m_short_message_callbacks;
+ //}
+ //callUpdated<MessagesChangeCallback, EventMessages>(
+ //callbacksCopy, event);
+ }
+ else if(MessageType(EMAIL) == event->service_type) {
+ LoggerD("Calling messageupdated for Email");
+ MCLmap callbacksCopy;
+ {
+ std::lock_guard<std::mutex> maillock(m_email_lock);
+ callbacksCopy = m_email_message_callbacks;
+ }
+ callUpdated<MessagesChangeCallback, EventMessages>(
+ callbacksCopy, event);
+ }
+ else {
+ LoggerW("Invalid event type (%d) - no callback called.", event->service_type);
+ }
+}
void ChangeListenerContainer::callMessageRemoved(EventMessages* event)
{
void removeChangeListener(long id);
// Methods used to invoke registered listeners
- //void callMessageAdded(EventMessages* event);
- //void callMessageUpdated(EventMessages* event);
+ void callMessageAdded(EventMessages* event);
+ void callMessageUpdated(EventMessages* event);
void callMessageRemoved(EventMessages* event);
//void callConversationAdded(EventConversations* event);
//void callConversationUpdated(EventConversations* event);
* Template function for calling "added" callback for all listeners
* from given collection with given event.
* */
- /*
- *template<class T, class U> void callAdded(
- * std::map<long,std::shared_ptr<T>>& collection,
- * U* event) {
- * typename std::map<long,std::shared_ptr<T>>::iterator itstart = collection.begin();
- * typename std::map<long,std::shared_ptr<T>>::iterator itend = collection.end();
- * try {
- * for (; itstart != itend; ++itstart) {
- * auto callback = (*itstart).second;
- * if (callback->getServiceType() == event->service_type
- * && callback->getServiceId() == event->service_id) {
- * LoggerD("Found callback for given service id (%d) and type (%d)",
- * event->service_id, event->service_type);
- * //@todo filter msgs
- * callback->added(event->items);
- * }
- * }
- * }catch (const Common::BasePlatformException &err) {
- * LoggerE("callAdded failed, %s: %s", err.getName().c_str(),
- * err.getMessage().c_str());
- * }
- * catch (...) {
- * LoggerE("callAdded failed");
- * }
- *}
- */
+ template<class T, class U> void callAdded(
+ std::map<long,std::shared_ptr<T>>& collection,
+ U* event) {
+ typename std::map<long,std::shared_ptr<T>>::iterator itstart = collection.begin();
+ typename std::map<long,std::shared_ptr<T>>::iterator itend = collection.end();
+ try {
+ for (; itstart != itend; ++itstart) {
+ auto callback = (*itstart).second;
+ if (callback->getServiceType() == event->service_type
+ && callback->getServiceId() == event->service_id) {
+ LoggerD("Found callback for given service id (%d) and type (%d)",
+ event->service_id, event->service_type);
+ //@todo filter msgs
+ callback->added(event->items);
+ }
+ }
+ }catch (const common::PlatformException &err) {
+ LoggerE("callAdded failed, %s: %s", err.name().c_str(),
+ err.message().c_str());
+ }
+ catch (...) {
+ LoggerE("callAdded failed");
+ }
+ }
/**
* Template function for calling "updated" callback for all listeners
* from given collection with given event.
* */
- /*
- *template<class T, class U> void callUpdated(
- * std::map<long,std::shared_ptr<T>>& collection,
- * U* event) {
- * typename std::map<long,std::shared_ptr<T>>::iterator itstart = collection.begin();
- * typename std::map<long,std::shared_ptr<T>>::iterator itend = collection.end();
- * try {
- * for (; itstart != itend; ++itstart) {
- * auto callback = (*itstart).second;
- * if (callback->getServiceType() == event->service_type
- * && callback->getServiceId() == event->service_id) {
- * LoggerD("Found callback for given service id (%d) and type (%d)",
- * event->service_id, event->service_type);
- * //@todo filter msgs
- * callback->updated(event->items);
- * }
- * }
- * }catch (const Common::BasePlatformException &err) {
- * LoggerE("callUpdated failed, %s: %s", err.getName().c_str(),
- * err.getMessage().c_str());
- * }
- * catch (...) {
- * LoggerE("callUpdated failed");
- * }
- *}
- */
+ template<class T, class U> void callUpdated(
+ std::map<long,std::shared_ptr<T>>& collection,
+ U* event) {
+ typename std::map<long,std::shared_ptr<T>>::iterator itstart = collection.begin();
+ typename std::map<long,std::shared_ptr<T>>::iterator itend = collection.end();
+ try {
+ for (; itstart != itend; ++itstart) {
+ auto callback = (*itstart).second;
+ if (callback->getServiceType() == event->service_type
+ && callback->getServiceId() == event->service_id) {
+ LoggerD("Found callback for given service id (%d) and type (%d)",
+ event->service_id, event->service_type);
+ //@todo filter msgs
+ callback->updated(event->items);
+ }
+ }
+ }catch (const common::PlatformException &err) {
+ LoggerE("callUpdated failed, %s: %s", err.name().c_str(),
+ err.message().c_str());
+ }
+ catch (...) {
+ LoggerE("callUpdated failed");
+ }
+ }
/**
* Template function for calling "removed" callback for all listeners
}
}
-/*
- *void MessagesChangeCallback::added(const MessagePtrVector& msgs)
- *{
- * LoggerD("Entered num messages: %d", msgs.size());
- * if (!m_is_act) {
- * return;
- * }
- * JSContextRef ctx = m_callback_data.getContext();
- * CHECK_CURRENT_CONTEXT_ALIVE(ctx)
- * MessagePtrVector filtered_msgs = filterMessages(m_filter, msgs, m_service_id);
- * //cancel callback only if filter did remove all messages
- * //if callback was called with empty msgs list, call it
- * if (msgs.size() > 0 && filtered_msgs.size() == 0) {
- * LoggerD("All messages were filtered out, not calling callback");
- * return;
- * }
- * JSObjectRef js_obj = JSMessage::messageVectorToJSObjectArray(
- * ctx, filtered_msgs);
- *
- * LoggerD("Calling:%s with:%d added messages", MESSAGESADDED,
- * filtered_msgs.size());
- * m_callback_data.invokeCallback(MESSAGESADDED, js_obj);
- *}
- *
- *void MessagesChangeCallback::updated(const MessagePtrVector& msgs)
- *{
- * LoggerD("Entered num messages: %d", msgs.size());
- * if (!m_is_act) {
- * return;
- * }
- * JSContextRef ctx = m_callback_data.getContext();
- * CHECK_CURRENT_CONTEXT_ALIVE(ctx)
- * MessagePtrVector filtered_msgs = filterMessages(m_filter, msgs, m_service_id);
- * //cancel callback only if filter did remove all messages
- * //if callback was called with empty msgs list, call it
- * if (msgs.size() > 0 && filtered_msgs.size() == 0) {
- * LoggerD("All messages were filtered out, not calling callback");
- * return;
- * }
- * JSObjectRef js_obj = JSMessage::messageVectorToJSObjectArray(
- * ctx, filtered_msgs);
- *
- * LoggerD("Calling:%s with:%d updated messages", MESSAGESUPDATED,
- * filtered_msgs.size());
- * m_callback_data.invokeCallback(MESSAGESUPDATED, js_obj);
- *}
- */
+void MessagesChangeCallback::added(const MessagePtrVector& msgs)
+{
+ LoggerD("Entered num messages: %d", msgs.size());
+ if (!m_is_act) {
+ return;
+ }
+ MessagePtrVector filtered_msgs = filterMessages(m_filter, msgs, m_service_id);
+ //cancel callback only if filter did remove all messages
+ //if callback was called with empty msgs list, call it
+ if (msgs.size() > 0 && filtered_msgs.size() == 0) {
+ LoggerD("All messages were filtered out, not calling callback");
+ return;
+ }
+
+ picojson::array array;
+ auto each = [&array] (std::shared_ptr<Message> m)->void {
+ array.push_back(MessagingUtil::messageToJson(m));
+ };
+
+ for_each(filtered_msgs.begin(), filtered_msgs.end(), each);
+
+ LoggerD("Calling:%s with:%d added messages", MESSAGESADDED,
+ filtered_msgs.size());
+
+ auto json = m_callback_data.getJson();
+ picojson::object& obj = json->get<picojson::object>();
+ obj[JSON_ACTION] = picojson::value(MESSAGESADDED);
+ obj[JSON_DATA] = picojson::value(array);
+ MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+}
+
+void MessagesChangeCallback::updated(const MessagePtrVector& msgs)
+{
+ LoggerD("Entered num messages: %d", msgs.size());
+ if (!m_is_act) {
+ return;
+ }
+ MessagePtrVector filtered_msgs = filterMessages(m_filter, msgs, m_service_id);
+ //cancel callback only if filter did remove all messages
+ //if callback was called with empty msgs list, call it
+ if (msgs.size() > 0 && filtered_msgs.size() == 0) {
+ LoggerD("All messages were filtered out, not calling callback");
+ return;
+ }
+
+ picojson::array array;
+ auto each = [&array] (std::shared_ptr<Message> m)->void {
+ array.push_back(MessagingUtil::messageToJson(m));
+ };
+
+ for_each(filtered_msgs.begin(), filtered_msgs.end(), each);
+
+ LoggerD("Calling:%s with:%d updated messages", MESSAGESUPDATED,
+ filtered_msgs.size());
+
+ auto json = m_callback_data.getJson();
+ picojson::object& obj = json->get<picojson::object>();
+ obj[JSON_ACTION] = picojson::value(MESSAGESUPDATED);
+ obj[JSON_DATA] = picojson::value(array);
+ MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+}
void MessagesChangeCallback::removed(const MessagePtrVector& msgs)
{
MessageType service_type);
virtual ~MessagesChangeCallback();
- //void added(const MessagePtrVector& messages);
- //void updated(const MessagePtrVector& messages);
+ void added(const MessagePtrVector& messages);
+ void updated(const MessagePtrVector& messages);
void removed(const MessagePtrVector& messages);
void setFilter(tizen::AbstractFilterPtr filter);