From: Denis Dolzhenko Date: Wed, 7 Jun 2017 08:16:17 +0000 (+0300) Subject: TizenRefApp-8406 [Messages] Impossible to download incoming MMS X-Git-Tag: submit/tizen/20170608.100456~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F15%2F132715%2F1;p=profile%2Fmobile%2Fapps%2Fnative%2Fmessage.git TizenRefApp-8406 [Messages] Impossible to download incoming MMS Change-Id: Ic0a3a335f94880ab9f31857fdebd7521d2469b4f Signed-off-by: Denis Dolzhenko --- diff --git a/src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp b/src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp index aec9f477..74ca55f9 100644 --- a/src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp +++ b/src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp @@ -65,6 +65,8 @@ MsgTransport::SendResult MsgTransportPrivate::sendMessage(Message &msg, ThreadId MsgTransport::SendResult MsgTransportPrivate::retrieveMessage(MsgId msgId) { + MSG_LOG("Msg id = ", msgId); + msg_struct_t req = msg_create_struct(MSG_STRUCT_REQUEST_INFO); msg_struct_t sendOpt = msg_create_struct(MSG_STRUCT_SENDOPT); msg_struct_t retrieveMsg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); @@ -81,7 +83,6 @@ MsgTransport::SendResult MsgTransportPrivate::retrieveMessage(MsgId msgId) msg_release_struct(&req); MsgTransport::SendResult sendRes = MsgUtilsPrivate::nativeToSendResult(err); - MSG_LOG("Send result: ", sendRes); return sendRes; } diff --git a/src/Conversation/ConvList/Controller/inc/ConvListItem.h b/src/Conversation/ConvList/Controller/inc/ConvListItem.h index cdc20493..31a08404 100644 --- a/src/Conversation/ConvList/Controller/inc/ConvListItem.h +++ b/src/Conversation/ConvList/Controller/inc/ConvListItem.h @@ -73,7 +73,7 @@ namespace Msg { void showPopup(); void setListener(IConvListItemListener *l); - void updateStatus(); + void update(); void updateTime(); bool isNeededReadReport() const; @@ -90,7 +90,7 @@ namespace Msg { private: ConvListViewItem::ConvItemType getConvItemType(const MsgConversationItem &item); - void prepareBubble(const MsgConversationItem &item, const std::string &searchWord); + void update(const MsgConversationItem &item); BubbleTextEntity *createTextEntity(BubbleBgViewItem::BgType bgType, const MsgConvMedia &media, std::string searchWord); BubbleTextEntity *createTextEntity(BubbleBgViewItem::BgType bgType, std::string text, bool markup, std::string searchWord); void addEntity(BubbleEntity *entity); @@ -98,9 +98,11 @@ namespace Msg { BubbleBgViewItem::BgType getBubbleBgType(const MsgConversationItem &item); void tryToDownloadMms(bool showToast = true); void updateDownloadButton(); + void convertNotiToMms(); BubbleDownloadButtonEntity *findDownloadButton() const; void shareContent(); void copyMsgToSimCard(); + void clearEntityList(); // Create Popup when message is clicked void showMainListPopup(); @@ -145,6 +147,7 @@ namespace Msg { BubbleEntityFactory &m_BubbleEntityFactory; bool m_IsRestrictedByDpm; bool m_IsNeededReadReport; + const std::string m_SearchWord; }; class IConvListItemListener { diff --git a/src/Conversation/ConvList/Controller/src/ConvList.cpp b/src/Conversation/ConvList/Controller/src/ConvList.cpp index 17ad46cc..c39c44a6 100644 --- a/src/Conversation/ConvList/Controller/src/ConvList.cpp +++ b/src/Conversation/ConvList/Controller/src/ConvList.cpp @@ -385,11 +385,12 @@ void ConvList::onListItemChecked(ListItem &listItem) void ConvList::onMsgStorageUpdate(const MsgIdList &msgIdList) { + MSG_LOG(""); for (auto &itemId: msgIdList) { ConvListItem *updated = getItem(itemId); if (updated) { time_t beforeTime = updated->getRawTime(); - updated->updateStatus(); + updated->update(); if (beforeTime != updated->getRawTime()) demoteItem(updated); } @@ -398,6 +399,7 @@ void ConvList::onMsgStorageUpdate(const MsgIdList &msgIdList) void ConvList::onMsgStorageInsert(const MsgIdList &msgIdList) { + MSG_LOG(""); bool inserted = false; for (MsgId msgId: msgIdList) { if (getItem(msgId)) @@ -418,6 +420,7 @@ void ConvList::onMsgStorageInsert(const MsgIdList &msgIdList) void ConvList::onMsgStorageDelete(const MsgIdList &msgIdList) { + MSG_LOG(""); deleteItems(msgIdList); } diff --git a/src/Conversation/ConvList/Controller/src/ConvListItem.cpp b/src/Conversation/ConvList/Controller/src/ConvListItem.cpp index 53d52fcf..41918be2 100644 --- a/src/Conversation/ConvList/Controller/src/ConvListItem.cpp +++ b/src/Conversation/ConvList/Controller/src/ConvListItem.cpp @@ -57,60 +57,30 @@ ConvListItem::ConvListItem(const MsgConversationItem &item, , m_Share(share) , m_MsgId(item.getMsgId()) , m_IsDraft(item.isDraft()) - , m_Direction(item.getDirection()) - , m_NetworkStatus(item.getNetworkStatus()) - , m_Type(item.getType()) - , m_Time(item.getTime()) + , m_Direction() + , m_NetworkStatus(Message::NS_Unknown) + , m_Type(Message::MT_SMS) + , m_Time() , m_ThumbId(thumbId) , m_BubbleEntityFactory(bubbleEntityFactory) - , m_IsRestrictedByDpm(item.isRestrictedByDpm()) + , m_IsRestrictedByDpm(false) , m_IsNeededReadReport(false) + , m_SearchWord(searchWord) { - m_IsNeededReadReport = m_Direction == Message::MD_Received && - m_Type == Message::MT_MMS && - !item.isRead(); - - prepareBubble(item, searchWord); + update(item); } ConvListItem::~ConvListItem() { m_App.getPopupManager().reset(this); - for (auto *entity : m_BubbleEntityList) - delete entity; - - m_BubbleEntityList.clear(); + clearEntityList(); } -void ConvListItem::updateStatus() +void ConvListItem::clearEntityList() { - MessageRef msg = m_App.getMsgEngine().getStorage().getMessage(m_MsgId); - if (!msg) - return; - - updateTime(); - m_Time = msg->getTime(); - m_NetworkStatus = msg->getNetworkStatus(); - m_IsRestrictedByDpm = msg->isRestrictedByDpm(); - - if (m_NetworkStatus == Message::NS_Send_Fail) { - updateItemType(ConvItemType::Failed); - updateEntityBgType(BubbleBgViewItem::FailedStyle); - } else if (m_NetworkStatus == Message::NS_Send_Success || m_NetworkStatus == Message::NS_Sending) { - updateItemType(ConvItemType::Sent); - updateEntityBgType(BubbleBgViewItem::SentStyle); - } else if (m_NetworkStatus == Message::NS_Not_Send) { - updateItemType(ConvItemType::Draft); - updateEntityBgType(BubbleBgViewItem::DraftStyle); - } else if (m_NetworkStatus == Message::NS_Received) { - updateItemType(ConvItemType::Received); - BubbleBgViewItem::BgType bgType = m_IsRestrictedByDpm ? BubbleBgViewItem::RestrictedStyle : BubbleBgViewItem::ReceivedStyle; - updateEntityBgType(bgType); - } else if (m_NetworkStatus == Message::NS_Retrieving) { - updateDownloadButton(); - } - - update(); + for (auto *entity : m_BubbleEntityList) + delete entity; + m_BubbleEntityList.clear(); } void ConvListItem::updateTime() @@ -190,6 +160,15 @@ void ConvListItem::updateDownloadButton() downloadButton->disabled(m_NetworkStatus == Message::NS_Retrieving); } +void ConvListItem::convertNotiToMms() +{ + if (m_Type == Message::MT_MMS_Noti) { + MsgConversationItemRef item = m_App.getMsgEngine().getStorage().getConversationItem(m_MsgId); + if (item) + update(*item); + } +} + void ConvListItem::addEntity(BubbleEntity *entity) { if (entity) @@ -205,16 +184,63 @@ void ConvListItem::updateEntityBgType(BubbleBgViewItem::BgType bgType) } } -void ConvListItem::prepareBubble(const MsgConversationItem &item, const std::string &searchWord) +void ConvListItem::update() +{ + MessageRef msg = m_App.getMsgEngine().getStorage().getMessage(m_MsgId); + if (!msg) + return; + + updateTime(); + m_Time = msg->getTime(); + m_NetworkStatus = msg->getNetworkStatus(); + m_IsRestrictedByDpm = msg->isRestrictedByDpm(); + + if (m_NetworkStatus == Message::NS_Send_Fail) { + updateItemType(ConvItemType::Failed); + updateEntityBgType(BubbleBgViewItem::FailedStyle); + } else if (m_NetworkStatus == Message::NS_Send_Success || m_NetworkStatus == Message::NS_Sending) { + updateItemType(ConvItemType::Sent); + updateEntityBgType(BubbleBgViewItem::SentStyle); + } else if (m_NetworkStatus == Message::NS_Not_Send) { + updateItemType(ConvItemType::Draft); + updateEntityBgType(BubbleBgViewItem::DraftStyle); + } else if (m_NetworkStatus == Message::NS_Received) { + updateItemType(ConvItemType::Received); + BubbleBgViewItem::BgType bgType = m_IsRestrictedByDpm ? BubbleBgViewItem::RestrictedStyle : BubbleBgViewItem::ReceivedStyle; + updateEntityBgType(bgType); + } else if (m_NetworkStatus == Message::NS_Retrieving) { + updateDownloadButton(); + } else if (m_NetworkStatus == Message::NS_Retrieve_Success) { + convertNotiToMms(); + } + + ConvListViewItem::update(); +} + +void ConvListItem::update(const MsgConversationItem &item) { + updateTime(); + clearEntityList(); + BubbleBgViewItem::BgType bgType = getBubbleBgType(item); + m_MsgId = item.getMsgId(); + m_IsDraft = item.isDraft(); + m_Direction = item.getDirection(); + m_NetworkStatus = item.getNetworkStatus(); + m_Type = item.getType(); + m_Time = item.getTime(); + m_IsRestrictedByDpm = item.isRestrictedByDpm(); + m_IsNeededReadReport = m_Direction == Message::MD_Received && + m_Type == Message::MT_MMS && + !item.isRead(); + if (m_IsRestrictedByDpm) { addEntity(createTextEntity(BubbleBgViewItem::RestrictedStyle, msg("IDS_MSG_BODY_COULDNT_RECEIVE_THIS_MESSAGE_THE_SECURITY_POLICY_PREVENTS_RECEIVING_MESSAGES"), false, "")); } else if (!MsgUtils::isMms(m_Type)) { - addEntity(createTextEntity(bgType, item.getText(), true, searchWord)); + addEntity(createTextEntity(bgType, item.getText(), true, m_SearchWord)); } else if (m_Type == Message::MT_MMS_Noti) { std::string text = MessageDetailContent::getMmsNotiConvListItemContent(m_App, m_MsgId); - addEntity(createTextEntity(bgType, std::move(text), false, searchWord)); + addEntity(createTextEntity(bgType, std::move(text), false, m_SearchWord)); addEntity(m_BubbleEntityFactory.createDownloadButtonEntity()); updateDownloadButton(); } else { @@ -224,7 +250,7 @@ void ConvListItem::prepareBubble(const MsgConversationItem &item, const std::str std::string mime = media.getMime(); std::transform(mime.begin(), mime.end(), mime.begin(), ::tolower); if (mime == "text/plain") - addEntity(createTextEntity(bgType, media, searchWord)); + addEntity(createTextEntity(bgType, media, m_SearchWord)); else if (mime != "application/smil") addEntity(m_BubbleEntityFactory.createEntity(media, bgType, m_Direction)); } @@ -367,11 +393,13 @@ void ConvListItem::showMainListPopup() void ConvListItem::tryToDownloadMms(bool showToast) { if (!m_App.getSysSettingsManager().isMessagingRestrictedByDpm()) { - m_App.getMsgEngine().getTransport().retrieveMessage(m_MsgId); - auto *button = findDownloadButton(); - if (button) { - button->disabled(true); - updateContent(); + MsgTransport::SendResult res = m_App.getMsgEngine().getTransport().retrieveMessage(m_MsgId); + if (res == MsgTransport::SendSuccess) { + auto *button = findDownloadButton(); + if (button) { + button->disabled(true); + updateContent(); + } } } else if (showToast) { notification_status_message_post(msg("IDS_MSG_TPOP_SECURITY_POLICY_RESTRICTS_DOWNLOADING_MULTIMEDIA_MESSAGES").cStr());