TizenRefApp-7685 Check whether storage is full while copying message to sim-card 37/98737/2 submit/tizen_3.0/20161118.143808
authorDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 18 Nov 2016 11:13:59 +0000 (13:13 +0200)
committerDenis Dolzhenko <d.dolzhenko@samsung.com>
Fri, 18 Nov 2016 11:20:30 +0000 (13:20 +0200)
Change-Id: Ie2796cc4bae62c2781a48b02de4b677b740420c1
Signed-off-by: Denis Dolzhenko <d.dolzhenko@samsung.com>
src/Common/MsgEngine/inc/MsgStorage.h
src/Common/MsgEngine/src/private/MsgStoragePrivate.cpp
src/Common/MsgEngine/src/private/MsgStoragePrivate.h
src/Common/MsgEngine/src/private/MsgUtilsPrivate.cpp
src/Common/MsgEngine/src/private/MsgUtilsPrivate.h
src/Conversation/ConvList/Controller/inc/ConvListItem.h
src/Conversation/ConvList/Controller/src/ConvListItem.cpp
src/Settings/Controller/inc/MsgOnSimCard.h
src/Settings/Controller/src/MsgOnSimCard.cpp

index 8b661118e597e0e781640fe4d09275e5012c3542..4556f905d1dda0b33fa2104fa7c8981951781695 100644 (file)
@@ -38,6 +38,17 @@ namespace Msg
      */
     class MsgStorage
     {
+        public:
+            /**
+             * @brief Possible results message storage could cause to.
+             */
+            enum StorageResult
+            {
+                StorageSuccess            =  0,     /**< Storage successful.*/
+                StorageFail               = -1,     /**< Storage failure.*/
+                StorageSimFull            = -2,     /**< SIM storage is full.*/
+            };
+
         public:
             MsgStorage();
             virtual ~MsgStorage();
@@ -147,11 +158,12 @@ namespace Msg
              * @brief Commits edited message into message-storage in two optional way:
              * -# save existing message
              * -# create a copy of source message
-             * @param[out] msg message to be saved.
+             * @param[in] msg message to be saved.
              * @param[in] a updateExisting flag that defines a saving strategy. If true the existing message is saved, otherwise a new message-copy is created.
+             * @param[out] result of storage operation.
              * @return id of saved message.
              */
-            virtual MsgId saveMessage(Message &msg, bool updateExisting) = 0;
+            virtual MsgId saveMessage(Message &msg, bool updateExisting, StorageResult *result = nullptr) = 0;
 
             /**
              * @brief Deletes single message with specified id.
index ccac32ec9af590bf1598a7983104c5d118abe132..a9a09af5a04051871de18c448d93ca95709bb99a 100644 (file)
@@ -23,6 +23,7 @@
 #include "Logger.h"
 #include "MsgUtilsPrivate.h"
 #include "MsgReportPrivate.h"
+#include "MsgEngine.h"
 
 #include <msg_storage.h>
 #include <algorithm>
@@ -317,8 +318,11 @@ MessageRef MsgStoragePrivate::getMessage(MsgId id)
     return msgRef;
 }
 
-MsgId MsgStoragePrivate::saveMessage(Message &msg, bool updateExisting)
+MsgId MsgStoragePrivate::saveMessage(Message &msg, bool updateExisting, StorageResult *result)
 {
+    if(result)
+        *result = StorageFail;
+
     MsgId newMsgId;
     MessagePrivate &msgPriv = dynamic_cast<MessagePrivate&>(msg);
 
@@ -328,22 +332,29 @@ MsgId MsgStoragePrivate::saveMessage(Message &msg, bool updateExisting)
     msgPriv.commit();
     if(msgPriv.getId().isValid() && updateExisting)
     {
-        if(msg_update_message(m_ServiceHandle, msgPriv, sendOpt) == 0)
-        {
+        int err = msg_update_message(m_ServiceHandle, msgPriv, sendOpt);
+        if(result)
+            *result = MsgUtilsPrivate::nativeToStorageResult(err);
+        if(err == MSG_SUCCESS)
             newMsgId = msg.getId();
-        }
     }
     else
     {
-        int tmpMsgId = msg_add_message(m_ServiceHandle, msgPriv, sendOpt);
-        if(tmpMsgId > 0)
+        newMsgId = msg_add_message(m_ServiceHandle, msgPriv, sendOpt);
+        if(newMsgId > 0)
         {
-            newMsgId = tmpMsgId;
-            msg_move_msg_to_storage(m_ServiceHandle, newMsgId, msg.getMessageStorageType());
+            int err = msg_move_msg_to_storage(m_ServiceHandle, newMsgId, msg.getMessageStorageType());
+            if(result)
+                *result = MsgUtilsPrivate::nativeToStorageResult(err);
+            if(err != MSG_SUCCESS)
+            {
+                MSG_LOG_WARN("Can't move msg to storage, error = ", MsgEngine::whatError(err));
+                deleteMessage(newMsgId);
+                newMsgId.reset();
+            }
         }
     }
     msg_release_struct(&sendOpt);
-
     return newMsgId;
 }
 
index c102bc316cd97e01dfda2e7fc19ec1dd67d9a040..e7abfcee366fa2b88ad6200a37a626d8019b6395 100644 (file)
@@ -52,12 +52,13 @@ namespace Msg
 
             /**
              *@brief        Return id of new message or of updated message
-             *@param[out]    msg - message that we need to save
+             *@param[in]    msg - message that we need to save
              *@param[in]    updateExisting - true if we need to update our message id DB,
              *                               false if we need to save message with new id
+             *@param[out]   result of storage operation.
              *@return       MessageId
              */
-            virtual MsgId saveMessage(Message &msg, bool updateExisting);
+            virtual MsgId saveMessage(Message &msg, bool updateExisting, StorageResult *result);
             virtual bool deleteMessage(MsgId id);
             virtual bool deleteMessages(const MsgIdList &idList);
             virtual MessageListRef searchMessage(const std::string &word);
index 688790588ee012d363a6f62221dadf6933b0df06..592197586b83898f1bb86ec089e9ef217a62e935 100644 (file)
@@ -392,3 +392,18 @@ int MsgUtilsPrivate::ringtoneTypeToNative(MsgSettings::RingtoneType type)
     }
     return MSG_RINGTONE_TYPE_DEFAULT;
 }
+
+MsgStorage::StorageResult MsgUtilsPrivate::nativeToStorageResult(int resultCode)
+{
+    MsgStorage::StorageResult res = MsgStorage::StorageFail;
+    switch(resultCode)
+    {
+        case MSG_SUCCESS:
+            res = MsgStorage::StorageSuccess;
+            break;
+        case  MSG_ERR_SIM_STORAGE_FULL:
+            res = MsgStorage::StorageSimFull;
+            break;
+    }
+    return res;
+}
index f8e40f1a6337fa67ff8b711d0ffe2c3cbd76ea89..04eae910463b75ff9b263a2f7647ce8456fabdb9 100644 (file)
@@ -23,6 +23,7 @@
 #include "MsgUtils.h"
 #include "MsgSettings.h"
 #include "MsgTransport.h"
+#include "MsgStorage.h"
 
 #include <msg_storage.h>
 #include <msg_types.h>
@@ -54,6 +55,7 @@ namespace Msg
             static MsgTransport::SendResult nativeToSendResult(int sendRes);
             static MsgSettings::RingtoneType nativeToRingtoneType(int type);
             static int ringtoneTypeToNative(MsgSettings::RingtoneType type);
+            static MsgStorage::StorageResult nativeToStorageResult(int resultCode);
 
             static std::string getStr(msg_struct_t msgStruct, int field, int maxStrLen);
             static int setStr(msg_struct_t msgStruct, int field, const std::string &text);
index 727948a61fad61b1fac6ba26044ccffdb23c142c..13b408680ea3966d808ce036f5621de21c4c5063 100644 (file)
@@ -97,6 +97,7 @@ namespace Msg
             void updateDownloadButton();
             BubbleDownloadButtonEntity *findDownloadButton() const;
             void shareContent();
+            void copyMsgToSimCard();
 
             // Create Popup when message is clicked
             void showMainListPopup();
index d9d5d0663320cb658a6e3f8917805fe7cbc6f4e2..7e1c29e75e45f50039eff97d5885cf1cfa94f08c 100644 (file)
@@ -272,6 +272,22 @@ void ConvListItem::shareContent()
     }
 }
 
+void ConvListItem::copyMsgToSimCard()
+{
+    MsgStorage::StorageResult result = MsgStorage::StorageFail;
+    MessageRef msg = m_App.getMsgEngine().getStorage().getMessage(m_MsgId);
+    if(msg)
+    {
+        msg->setMessageStorageType(Message::MS_Sim);
+        m_App.getMsgEngine().getStorage().saveMessage(*msg, false, &result);
+
+        if(result == MsgStorage::StorageSimFull)
+            notification_status_message_post(msg("IDS_MSGF_BODY_SIM_MEMORY_FULL_DELETE_SOME_ITEMS").cStr());
+    }
+    if(result == MsgStorage::StorageSuccess)
+        notification_status_message_post(msg("IDS_MSGC_POP_COPIED_TO_SIM_CARD").cStr());
+}
+
 Evas_Object *ConvListItem::getBubbleContent()
 {
     auto *bubble = new BubbleItemContainer(*getOwner());
@@ -519,14 +535,7 @@ void ConvListItem::onCopyToSimCardItemPressed(PopupListItem &item)
 {
     MSG_LOG("");
     item.getParent().destroy();
-    MessageRef msg = m_App.getMsgEngine().getStorage().getMessage(m_MsgId);
-    if(msg)
-    {
-        msg->setMessageStorageType(Message::MS_Sim);
-        m_App.getMsgEngine().getStorage().saveMessage(*msg, false);
-    }
-
-    notification_status_message_post(msg("IDS_MSGC_POP_COPIED_TO_SIM_CARD").cStr());
+    copyMsgToSimCard();
 }
 
 void ConvListItem::onViewDetailsItemPressed(PopupListItem &item)
index d5c29f2ba795cec5f2c7c146e012f99c416df11a..d7663f5a5a73651cca70baae13f3f928b9fb77e0 100644 (file)
@@ -69,7 +69,6 @@ namespace Msg
 
             // IListViewListener:
             virtual void onListItemChecked(ListItem &listItem);
-            void checkHandler(SelectAllListItem &item);
 
             // IHwButtonListener:
             virtual void onHwMoreButtonClicked();
index 4c8b37aadcb4576af3eea1bc9fcfeaed50c80384..eeb4932f33c2e7a4a281fe1ada79015f8bf5b278 100644 (file)
@@ -117,13 +117,10 @@ void MsgOnSimCard::onButtonClicked(NaviFrameItem &item, NaviButtonId buttonId)
 
 void MsgOnSimCard::onListItemChecked(ListItem &listItem)
 {
-    if(SelectAllListItem *it = dynamic_cast<SelectAllListItem*>(&listItem))
+    if(dynamic_cast<SelectAllListItem*>(&listItem))
     {
-        checkHandler(*it);
-    }
-    else
-    {
-        MSG_LOG_ERROR("dynamic_cast was FAILED!");
+        bool checked = listItem.getCheckedState();
+        m_pList->checkAllItems(checked);
     }
 
     int check = 0;
@@ -137,13 +134,6 @@ void MsgOnSimCard::onListItemChecked(ListItem &listItem)
     setTitleTranslatable();
 }
 
-void MsgOnSimCard::checkHandler(SelectAllListItem &item)
-{
-    bool checked = item.getCheckedState();
-    m_pList->checkAllItems(checked);
-    getNaviBar().disabledButton(NaviOkButtonId, !checked);
-}
-
 void MsgOnSimCard::onHwMoreButtonClicked()
 {
     showCopyDeletePopup();