TizenRefApp-8406 [Messages] Impossible to download incoming MMS 15/132715/1
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Wed, 7 Jun 2017 08:16:17 +0000 (11:16 +0300)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Wed, 7 Jun 2017 08:16:17 +0000 (11:16 +0300)
Change-Id: Ic0a3a335f94880ab9f31857fdebd7521d2469b4f
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/MsgEngine/src/private/MsgTransportPrivate.cpp
src/Conversation/ConvList/Controller/inc/ConvListItem.h
src/Conversation/ConvList/Controller/src/ConvList.cpp
src/Conversation/ConvList/Controller/src/ConvListItem.cpp

index aec9f4776ef53549e6bfb4f825e767d3d62f17d2..74ca55f939faea61b7b0516740846b8bb38b4cc2 100644 (file)
@@ -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;
 }
 
index cdc20493fa66098cea10555bdb8d36fbb4c2c71f..31a08404e399bba50a4529684bc0052d14dbad00 100644 (file)
@@ -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 {
index 17ad46cc0d3d6b6c24f47031f5e2eed3dd2422df..c39c44a651d4585d5f9e19f66197e005163cb086 100644 (file)
@@ -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);
 }
 
index 53d52fcf307348eec88af5817f205fb0e8b52c38..41918be277db17ae6638ebf4b2e90fbeba975d3f 100644 (file)
@@ -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());