[Messaging] findFolders implementation
authorRobert Karolak <r.karolak@samsung.com>
Mon, 29 Dec 2014 19:32:58 +0000 (20:32 +0100)
committerRobert Karolak <r.karolak@samsung.com>
Tue, 30 Dec 2014 11:04:46 +0000 (20:04 +0900)
[Verification] Code compiles without errors
Tested in node console

Change-Id: I96f6c8f499ea388f3f00e2dbe9bf2f6d23d98a03
Signed-off-by: Robert Karolak <r.karolak@samsung.com>
12 files changed:
src/messaging/email_manager.cc
src/messaging/email_manager.h
src/messaging/folders_callback_data.cc [new file with mode: 0644]
src/messaging/folders_callback_data.h [new file with mode: 0644]
src/messaging/message_storage.h
src/messaging/message_storage_email.cc
src/messaging/message_storage_email.h
src/messaging/messaging.gyp
src/messaging/messaging_api.js
src/messaging/messaging_instance.cc
src/messaging/messaging_util.cc
src/messaging/messaging_util.h

index dfb868fecebd1786965a7347ebad80b1a4aaa413..098f55aced70c37a96e6ed0f99eb03c83a4df9bd 100644 (file)
@@ -1165,7 +1165,7 @@ void EmailManager::findConversations(ConversationCallbackData* callback)
             obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
             MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
         }
-    } catch (const common::PlatformException& err) {
+    } catch (const PlatformException& err) {
         LoggerE("Error while calling findConversations callback: %s (%s)",
                 (err.name()).c_str(), (err.message()).c_str());
     } catch (...) {
@@ -1186,131 +1186,129 @@ long EmailManager::getUniqueOpId()
     return op_id++;
 }
 
-//void EmailManager::findFolders(FoldersCallbackData* callback)
-//{
-//    LoggerD("Entered");
-//
-//    if (!callback){
-//        LoggerE("Callback is null");
-//        return;
-//    }
-//
-//    int ret = EMAIL_ERROR_UNKNOWN;
-//    int account_id = ACCOUNT_ID_NOT_INITIALIZED;
-//    email_mailbox_t* mailboxes = NULL;
-//    email_mailbox_t* nth_mailbox = NULL;
-//    int mailboxes_count;
-//
-//    try {
-//        std::lock_guard<std::mutex> lock(m_mutex);
-//
-//        Tizen::AbstractFilterPtr filter = callback->getFilter();
-//        if (!filter) {
-//            LoggerE("Filter not provided");
-//            throw UnknownException("Filter not provided");
-//        }
-//
-//        for(FilterIterator it(filter); false == it.isEnd(); it++) {
-//
-//            if(FIS_COMPOSITE_START == it.getState()) {
-//                CompositeFilterPtr cf = castToCompositeFilter((*it));
-//                if(cf && INTERSECTION != cf->getType()) {
-//                    LoggerE("[ERROR] >>> invalid Filter type: %d", cf->getType());
-//                    throw TypeMismatchException("Invalid Filter Type");
-//                }
-//            }
-//            else if(FIS_ATTRIBUTE_FILTER == it.getState()) {
-//                AttributeFilterPtr attrf = castToAttributeFilter((*it));
-//                if(attrf) {
-//                    const std::string attr_name = attrf->getAttributeName();
-//                    if (FIND_FOLDERS_ATTRIBUTE_ACCOUNTID_NAME == attr_name) {
-//                        account_id = static_cast<int>(attrf->getMatchValue()->toLong());
-//                    } else {
-//                        LoggerE("The attribute name: %s is invalid", attr_name.c_str());
-//                        throw InvalidValuesException("The attribute name is invalid");
-//                    }
-//                }
-//            }
-//        }
-//
-//        LoggerD("Listing folders for account ID: %d", account_id);
-//        if (account_id > 0) {
-//            ret = email_get_mailbox_list(account_id,
-//                    -1,
-//                    &mailboxes,
-//                    &mailboxes_count);
-//            if (EMAIL_ERROR_NONE != ret || !mailboxes) {
-//                LoggerE("Cannot get folders: %d", ret);
-//                throw Common::UnknownException(
-//                        "Platform error, cannot get folders");
-//            }
-//
-//            if (mailboxes_count <= 0) {
-//                LoggerD("Empty mailboxes");
-//            }
-//            else {
-//                LoggerD("Founded mailboxes: %d", mailboxes_count);
-//
-//                nth_mailbox = mailboxes;
-//                for (int i = 0; i < mailboxes_count; ++i) {
-//                    std::shared_ptr<MessageFolder> fd;
-//                    fd = std::make_shared<MessageFolder>(*nth_mailbox);
-//                    callback->addFolder(fd);
-//                    nth_mailbox++;
-//                }
-//            }
-//        }
-//    } catch (const BasePlatformException& err) {
-//        LoggerE("%s (%s)", (err.getName()).c_str(), (err.getMessage()).c_str());
-//        callback->setError(err.getName(), err.getMessage());
-//    } catch (...) {
-//        LoggerE("Messages update failed");
-//        callback->setError(JSWebAPIErrorFactory::UNKNOWN_ERROR,
-//                "Messages update failed");
-//    }
-//
-//    if (mailboxes != NULL) {
-//        if (EMAIL_ERROR_NONE != email_free_mailbox(&mailboxes,
-//                mailboxes_count)) {
-//            LoggerW("Free mailboxes failed: %d", ret);
-//        }
-//    }
-//
-//    //Complete task
-//    LoggerD("callback: %p error:%d folders.size()=%d", callback, callback->isError(),
-//            callback->getFolders().size());
-//
-//    JSContextRef context = callback->getContext();
-//    if (!GlobalContextManager::getInstance()->isAliveGlobalContext(context)) {
-//        LoggerE("context was closed");
-//        delete callback;
-//        callback = NULL;
-//        return;
-//    }
-//
-//    try {
-//        if (callback->isError()) {
-//            LoggerD("Calling error callback");
-//            JSObjectRef errobj = JSWebAPIErrorFactory::makeErrorObject(context,
-//                    callback->getErrorName(),
-//                    callback->getErrorMessage());
-//            callback->callErrorCallback(errobj);
-//        } else {
-//            LoggerD("Calling success callback");
-//            JSObjectRef js_obj = MessagingUtil::vectorToJSObjectArray<FolderPtr,
-//                    JSMessageFolder>(context, callback->getFolders());
-//            callback->callSuccessCallback(js_obj);
-//        }
-//    } catch (const BasePlatformException& err) {
-//        LoggerE("Error while calling findFolders callback: %s (%s)",
-//                (err.getName()).c_str(), (err.getMessage()).c_str());
-//    } catch (...) {
-//        LoggerE("Unknown error when calling findFolders callback.");
-//    }
-//
-//    delete callback;
-//    callback = NULL;
-//}
+void EmailManager::findFolders(FoldersCallbackData* callback)
+{
+    LoggerD("Entered");
+
+    if (!callback){
+        LoggerE("Callback is null");
+        return;
+    }
+
+    int ret = EMAIL_ERROR_UNKNOWN;
+    int account_id = ACCOUNT_ID_NOT_INITIALIZED;
+    email_mailbox_t* mailboxes = NULL;
+    email_mailbox_t* nth_mailbox = NULL;
+    int mailboxes_count;
+
+    try {
+        std::lock_guard<std::mutex> lock(m_mutex);
+
+        tizen::AbstractFilterPtr filter = callback->getFilter();
+        if (!filter) {
+            LoggerE("Filter not provided");
+            throw UnknownException("Filter not provided");
+        }
+
+        for(FilterIterator it(filter); false == it.isEnd(); it++) {
+
+            if(FIS_COMPOSITE_START == it.getState()) {
+                CompositeFilterPtr cf = castToCompositeFilter((*it));
+                if(cf && INTERSECTION != cf->getType()) {
+                    LoggerE("[ERROR] >>> invalid Filter type: %d", cf->getType());
+                    throw TypeMismatchException("Invalid Filter Type");
+                }
+            }
+            else if(FIS_ATTRIBUTE_FILTER == it.getState()) {
+                AttributeFilterPtr attrf = castToAttributeFilter((*it));
+                if(attrf) {
+                    const std::string attr_name = attrf->getAttributeName();
+                    if (FIND_FOLDERS_ATTRIBUTE_ACCOUNTID_NAME == attr_name) {
+                        account_id = static_cast<int>(attrf->getMatchValue()->toLong());
+                    } else {
+                        LoggerE("The attribute name: %s is invalid", attr_name.c_str());
+                        throw InvalidValuesException("The attribute name is invalid");
+                    }
+                }
+            }
+        }
+
+        LoggerD("Listing folders for account ID: %d", account_id);
+        if (account_id > 0) {
+            ret = email_get_mailbox_list(account_id,
+                    -1,
+                    &mailboxes,
+                    &mailboxes_count);
+            if (EMAIL_ERROR_NONE != ret || !mailboxes) {
+                LoggerE("Cannot get folders: %d", ret);
+                throw UnknownException("Platform error, cannot get folders");
+            }
+
+            if (mailboxes_count <= 0) {
+                LoggerD("Empty mailboxes");
+            }
+            else {
+                LoggerD("Founded mailboxes: %d", mailboxes_count);
+
+                nth_mailbox = mailboxes;
+                for (int i = 0; i < mailboxes_count; ++i) {
+                    std::shared_ptr<MessageFolder> fd;
+                    fd = std::make_shared<MessageFolder>(*nth_mailbox);
+                    callback->addFolder(fd);
+                    nth_mailbox++;
+                }
+            }
+        }
+    } catch (const PlatformException& err) {
+        LoggerE("%s (%s)", (err.name()).c_str(), (err.message()).c_str());
+        callback->setError(err.name(), err.message());
+    } catch (...) {
+        LoggerE("Messages update failed");
+        UnknownException ex("Messages update failed");
+        callback->setError(ex.name(), ex.message());
+    }
+
+    if (mailboxes != NULL) {
+        if (EMAIL_ERROR_NONE != email_free_mailbox(&mailboxes,
+                mailboxes_count)) {
+            LoggerW("Free mailboxes failed: %d", ret);
+        }
+    }
+
+    //Complete task
+    LoggerD("callback: %p error:%d folders.size()=%d", callback, callback->isError(),
+            callback->getFolders().size());
+
+    try {
+        if (callback->isError()) {
+            LoggerD("Calling error callback");
+            MessagingInstance::getInstance().PostMessage(callback->getJson()->serialize().c_str());
+        } else {
+            LoggerD("Calling success callback");
+            auto json = callback->getJson();
+            picojson::object& obj = json->get<picojson::object>();
+
+            std::vector<picojson::value> response;
+            auto folders = callback->getFolders();
+            std::for_each(folders.begin(), folders.end(),
+                    [&response](std::shared_ptr<MessageFolder> &folder) {
+                        response.push_back(MessagingUtil::folderToJson(folder));
+                    }
+            );
+            obj[JSON_DATA] = picojson::value(response);
+            obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_SUCCCESS);
+            MessagingInstance::getInstance().PostMessage(json->serialize().c_str());
+        }
+    } catch (const PlatformException& err) {
+        LoggerE("Error while calling findFolders callback: %s (%s)",
+                (err.name()).c_str(), (err.message()).c_str());
+    } catch (...) {
+        LoggerE("Unknown error when calling findFolders callback.");
+    }
+
+    delete callback;
+    callback = NULL;
+}
 
 void EmailManager::removeConversations(ConversationCallbackData* callback)
 {
index d28a7685b8c8b223a443ddc9232986dff6dc6e05..74b5b87849dc0222c245e449d1dbc38c5dc35cb9 100644 (file)
@@ -64,7 +64,7 @@ public:
     void updateMessages(MessagesCallbackUserData* callback);
     void findMessages(FindMsgCallbackUserData* callback);
     void findConversations(ConversationCallbackData* callback);
-//    void findFolders(FoldersCallbackData* callback);
+    void findFolders(FoldersCallbackData* callback);
     void removeConversations(ConversationCallbackData* callback);
 
     void sendMessage(MessageRecipientsCallbackData* callback);
diff --git a/src/messaging/folders_callback_data.cc b/src/messaging/folders_callback_data.cc
new file mode 100644 (file)
index 0000000..847d9fa
--- /dev/null
@@ -0,0 +1,88 @@
+//
+// Tizen Web Device API
+// Copyright (c) 2013 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#include "folders_callback_data.h"
+#include "messaging_util.h"
+
+namespace extension {
+namespace messaging {
+
+
+FoldersCallbackData::FoldersCallbackData():
+        m_is_error(false)
+{
+}
+
+FoldersCallbackData::~FoldersCallbackData() {
+}
+
+void FoldersCallbackData::addFolder(std::shared_ptr<MessageFolder> folder)
+{
+    m_folders.push_back(folder);
+}
+
+const std::vector<std::shared_ptr<MessageFolder>>& FoldersCallbackData::getFolders() const
+{
+    return m_folders;
+}
+
+void FoldersCallbackData::setFilter(tizen::AbstractFilterPtr filter)
+{
+    m_filter = filter;
+}
+
+tizen::AbstractFilterPtr FoldersCallbackData::getFilter() const
+{
+    return m_filter;
+}
+
+void FoldersCallbackData::setError(const std::string& err_name,
+        const std::string& err_message)
+{
+    // keep only first error in chain
+    if (!m_is_error) {
+        m_is_error = true;
+        m_err_name = err_name;
+        m_err_message = err_message;
+
+        picojson::object& obj = m_json->get<picojson::object>();
+        obj[JSON_ACTION] = picojson::value(JSON_CALLBACK_ERROR);
+
+        auto obj_error = picojson::object();
+        obj_error[JSON_ERROR_NAME] = picojson::value(err_name);
+        obj_error[JSON_ERROR_MESSAGE] = picojson::value(err_message);
+        obj[JSON_DATA] = picojson::value(obj_error);
+    }
+}
+
+bool FoldersCallbackData::isError() const
+{
+    return m_is_error;
+}
+
+std::string FoldersCallbackData::getErrorName() const
+{
+    return m_err_name;
+}
+
+std::string FoldersCallbackData::getErrorMessage() const
+{
+    return m_err_message;
+}
+
+}//messaging
+}//extension
diff --git a/src/messaging/folders_callback_data.h b/src/messaging/folders_callback_data.h
new file mode 100644 (file)
index 0000000..d271ce3
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// Tizen Web Device API
+// Copyright (c) 2013 Samsung Electronics Co., Ltd.
+//
+// Licensed under the Apache License, Version 2.0 (the License);
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+#ifndef __TIZEN_FOLDERS_CALLBACK_DATA_H__
+#define __TIZEN_FOLDERS_CALLBACK_DATA_H__
+
+#include "common/callback_user_data.h"
+
+#include <memory>
+#include <vector>
+#include <string>
+
+#include "MsgCommon/AbstractFilter.h"
+
+#include "message_folder.h"
+
+namespace extension {
+namespace messaging {
+
+class MessageFolder;
+
+class FoldersCallbackData: public common::CallbackUserData {
+public:
+    FoldersCallbackData();
+    virtual ~FoldersCallbackData();
+
+    void addFolder(std::shared_ptr<MessageFolder> folder);
+    const std::vector<std::shared_ptr<MessageFolder>>& getFolders() const;
+
+    void setFilter(tizen::AbstractFilterPtr filter);
+    tizen::AbstractFilterPtr getFilter() const;
+
+    void setError(const std::string& err_name,
+            const std::string& err_message);
+    bool isError() const;
+    std::string getErrorName() const;
+    std::string getErrorMessage() const;
+
+private:
+    std::vector<std::shared_ptr<MessageFolder>> m_folders;
+    tizen::AbstractFilterPtr m_filter;
+    bool m_is_error;
+    std::string m_err_name;
+    std::string m_err_message;
+
+};
+
+}//messaging
+}//extension
+
+#endif /* __TIZEN_FOLDERS_CALLBACK_DATA_H__ */
index 27ce421e737f23e479e7e7039e4ac4572610c10f..6f69a09eab703e6a5babab2c3ae82efd8bc5ad6d 100644 (file)
@@ -14,6 +14,7 @@
 #include "messages_callback_user_data.h"
 #include "conversation_callback_data.h"
 #include "find_msg_callback_user_data.h"
+#include "folders_callback_data.h"
 
 namespace extension {
 namespace messaging {
@@ -37,7 +38,7 @@ public:
     virtual void findMessages(FindMsgCallbackUserData* callback) = 0;
     virtual void findConversations(ConversationCallbackData* callback) = 0;
     virtual void removeConversations(ConversationCallbackData* callback) = 0;
-    virtual void findFolders() = 0;
+    virtual void findFolders(FoldersCallbackData* callback) = 0;
 
     // Listeners registration/removal is common for all types of storage
     // and does not have to be overwritten in derived classes.
index a907e74f99b64acc943a1e59c1d00624479719d4..5a1ad0c43440d65cce5b5faa47ac289def1a8315 100644 (file)
@@ -223,10 +223,31 @@ void MessageStorageEmail::removeConversations(ConversationCallbackData* callback
     }
 }
 
-void MessageStorageEmail::findFolders()
+static gboolean findFoldersTask(void* data)
 {
     LoggerD("Entered");
-    //TODO add implementation
+
+    FoldersCallbackData *callback = static_cast<FoldersCallbackData*>(data);
+    EmailManager::getInstance().findFolders(callback);
+
+    return FALSE;
+}
+
+void MessageStorageEmail::findFolders(FoldersCallbackData* callback)
+{
+    LoggerD("Entered");
+
+    if (!callback) {
+        LoggerE("Callback is null");
+        throw common::UnknownException("Callback is null");
+    }
+
+    guint id = g_idle_add(findFoldersTask, static_cast<void*>(callback));
+    if (!id) {
+        LoggerE("g_idle_add failed");
+        delete callback;
+        callback = NULL;
+    }
 }
 
 } //messaging
index 1f85bbf50842ee1e7ba3dc35c6e1d20965d887e2..8b0225ec1b490819c21872f97448f72d667b69e4 100644 (file)
@@ -21,7 +21,7 @@ public:
     virtual void findMessages(FindMsgCallbackUserData* callback);
     virtual void findConversations(ConversationCallbackData* callback);
     virtual void removeConversations(ConversationCallbackData* callback);
-    virtual void findFolders();
+    virtual void findFolders(FoldersCallbackData* callback);
 };
 
 } //messaging
index 9a7fa3738654d37a576abfa5ef3a46491136135b..fee6d97b3bde0998692c70089f943a09b96b5868 100644 (file)
@@ -97,7 +97,9 @@
         'message_conversation.cc',
         'message_conversation.h',
         'conversation_callback_data.cc',
-        'conversation_callback_data.h'
+        'conversation_callback_data.h',
+        'folders_callback_data.cc',
+        'folders_callback_data.h'
       ],
       'includes': [
         '../common/pkg-config.gypi',
index 955fdcf6e6a400156e064a5ac0a088732f42616c..9d4dbadc0a4d50ee53898d6c45c7e40f388e791e 100644 (file)
@@ -959,21 +959,24 @@ MessageStorage.prototype.findFolders = function () {
         {name: 'errorCallback', type: types_.FUNCTION, optional: true, nullable: true}
     ]);
 
+    var self = this;
+
     bridge.async({
         cmd: 'MessageStorage_findFolders',
         args: {
             filter: args.filter,
             sort: args.sort,
             limit: args.limit,
-            offset: args.offset
+            offset: args.offset,
+            serviceId: self.service.id
         }
     }).then({
         success: function (data) {
-            var conversations = [];
+            var folders = [];
             data.forEach(function (el) {
-                conversations.push(new MessageConversation(el));
+                folders.push(new MessageFolder(el));
             });
-            args.successCallback.call(null, messages);
+            args.successCallback.call(null, folders);
         },
         error: function (e) {
             if (args.errorCallback) {
@@ -1114,7 +1117,7 @@ MessageStorage.prototype.addFoldersChangeListener = function () {
             if (args.foldersChangeCallback.foldersadded) {
                 var folders = [];
                 data.forEach(function (el) {
-                    folders.push(new tizen.MessageFolder(el));
+                    folders.push(new MessageFolder(el));
                 });
                 args.foldersChangeCallback.foldersadded.call(null, folders);
             }
@@ -1123,7 +1126,7 @@ MessageStorage.prototype.addFoldersChangeListener = function () {
             if (args.foldersChangeCallback.foldersupdated) {
                 var folders = [];
                 data.forEach(function (el) {
-                    folders.push(new tizen.MessageFolder(el));
+                    folders.push(new MessageFolder(el));
                 });
                 args.foldersChangeCallback.foldersupdated.call(null, folders);
             }
@@ -1132,7 +1135,7 @@ MessageStorage.prototype.addFoldersChangeListener = function () {
             if (args.foldersChangeCallback.foldersremoved) {
                 var folders = [];
                 data.forEach(function (el) {
-                    folders.push(new tizen.MessageFolder(el));
+                    folders.push(new MessageFolder(el));
                 });
                 args.foldersChangeCallback.foldersremoved.call(null, folders);
             }
index c7df31d07471b50856ac487cf2a0111712a979db..b361981e6f6d5137d7b62d09c2725b6309e918ad 100644 (file)
@@ -13,6 +13,7 @@
 #include "messages_change_callback.h"
 #include "messages_callback_user_data.h"
 #include "find_msg_callback_user_data.h"
+#include "folders_callback_data.h"
 #include "messaging_manager.h"
 #include "messaging_util.h"
 #include "message_storage.h"
@@ -357,6 +358,7 @@ void MessagingInstance::MessageStorageFindMessages(const picojson::value& args,
     picojson::object data = args.get(JSON_DATA).get<picojson::object>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
+    // TODO add support to AttributeRangeFilter
     auto filter = MessagingUtil::jsonToAttributeFilter(data);
     auto sortMode = MessagingUtil::jsonToSortMode(data);
     long limit = static_cast<long>
@@ -445,6 +447,7 @@ void MessagingInstance::MessageStorageFindConversations(const picojson::value& a
     picojson::object data = args.get(JSON_DATA).get<picojson::object>();
     const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
 
+    // TODO add support to AttributeRangeFilter
     auto filter = MessagingUtil::jsonToAttributeFilter(data);
     auto sortMode = MessagingUtil::jsonToSortMode(data);
     long limit = static_cast<long>
@@ -498,6 +501,24 @@ void MessagingInstance::MessageStorageFindFolders(const picojson::value& args,
         picojson::object& out)
 {
     LoggerD("Entered");
+
+    picojson::object data = args.get(JSON_DATA).get<picojson::object>();
+    const double callbackId = args.get(JSON_CALLBACK_ID).get<double>();
+
+    // TODO add support to AttributeRangeFilter
+    auto filter = MessagingUtil::jsonToAttributeFilter(data);
+    int serviceId = static_cast<int>(data.at(FUNCTIONS_HIDDEN_ARGS_SERVICE_ID).get<double>());
+
+    FoldersCallbackData* callback = new FoldersCallbackData();
+    callback->setFilter(filter);
+
+    auto json = std::shared_ptr<picojson::value>(new picojson::value(picojson::object()));
+    picojson::object& obj = json->get<picojson::object>();
+    obj[JSON_CALLBACK_ID] = picojson::value(callbackId);
+    callback->setJson(json);
+
+    auto storage = MessagingManager::getInstance().getMessageServiceEmail(serviceId)->getMsgStorage();
+    storage->findFolders(callback);
 }
 
 void MessagingInstance::MessageStorageAddMessagesChangeListener(const picojson::value& args,
index dccf1e701ceca0aec32ad94f3d5ae8a306482222..af0ca6b9d7f2e2db0c34f76a13ed0490987bb088 100644 (file)
@@ -63,7 +63,14 @@ const char* MESSAGE_ATTACHMENT_ATTRIBUTE_MESSAGE_ID = "messageId";
 const char* MESSAGE_ATTACHMENT_ATTRIBUTE_MIME_TYPE = "mimeType";
 const char* MESSAGE_ATTACHMENT_ATTRIBUTE_FILE_PATH = "filePath";
 
+const char* MESSAGE_FOLDER_ATTRIBUTE_ID = "id";
+const char* MESSAGE_FOLDER_ATTRIBUTE_PARENT_ID = "parentId";
 const char* MESSAGE_FOLDER_ATTRIBUTE_SERVICE_ID = "serviceId";
+const char* MESSAGE_FOLDER_ATTRIBUTE_CONTENT_TYPE = "contentType";
+const char* MESSAGE_FOLDER_ATTRIBUTE_NAME = "name";
+const char* MESSAGE_FOLDER_ATTRIBUTE_PATH = "path";
+const char* MESSAGE_FOLDER_ATTRIBUTE_TYPE = "type";
+const char* MESSAGE_FOLDER_ATTRIBUTE_SYNCHRONIZABLE = "synchronizable";
 
 const char* MESSAGE_CONVERSATION_ATTRIBUTE_ID = "id";
 const char* MESSAGE_CONVERSATION_ATTRIBUTE_TYPE = "type";
@@ -107,8 +114,29 @@ const std::map<MessageType, std::string> typeToStringMap = {
     {MessageType::EMAIL, TYPE_EMAIL}
 };
 
+const std::string FOLDER_TYPE_INBOX = "INBOX";
+const std::string FOLDER_TYPE_OUTBOX = "OUTBOX";
+const std::string FOLDER_TYPE_DRAFTS = "DRAFTS";
+const std::string FOLDER_TYPE_SENTBOX = "SENTBOX";
+
 } // namespace
 
+std::string MessagingUtil::messageFolderTypeToString(MessageFolderType type)
+{
+    switch(type) {
+        case MessageFolderType::MESSAGE_FOLDER_TYPE_INBOX:
+            return FOLDER_TYPE_INBOX;
+        case MessageFolderType::MESSAGE_FOLDER_TYPE_OUTBOX:
+            return FOLDER_TYPE_OUTBOX;
+        case MessageFolderType::MESSAGE_FOLDER_TYPE_DRAFTS:
+            return FOLDER_TYPE_DRAFTS;
+        case MessageFolderType::MESSAGE_FOLDER_TYPE_SENTBOX:
+            return FOLDER_TYPE_SENTBOX;
+        default:
+            return "";
+    }
+}
+
 MessageType MessagingUtil::stringToMessageType(std::string str)
 {
     try {
@@ -382,6 +410,29 @@ picojson::value MessagingUtil::conversationToJson(std::shared_ptr<MessageConvers
     return v;
 }
 
+picojson::value MessagingUtil::folderToJson(std::shared_ptr<MessageFolder> folder)
+{
+    LoggerD("Entered");
+
+    picojson::object o;
+
+    o[MESSAGE_FOLDER_ATTRIBUTE_ID] = picojson::value(folder->getId());
+    o[MESSAGE_FOLDER_ATTRIBUTE_PARENT_ID] =
+            folder->isParentIdSet()
+            ? picojson::value(folder->getParentId())
+            : picojson::value();
+    o[MESSAGE_FOLDER_ATTRIBUTE_SERVICE_ID] =  picojson::value(folder->getServiceId());
+    o[MESSAGE_FOLDER_ATTRIBUTE_CONTENT_TYPE] = picojson::value(folder->getContentType());
+    o[MESSAGE_FOLDER_ATTRIBUTE_NAME] = picojson::value(folder->getName());
+    o[MESSAGE_FOLDER_ATTRIBUTE_PATH] = picojson::value(folder->getPath());
+    o[MESSAGE_FOLDER_ATTRIBUTE_TYPE] =
+            picojson::value(MessagingUtil::messageFolderTypeToString(folder->getType()));
+    o[MESSAGE_FOLDER_ATTRIBUTE_SYNCHRONIZABLE] = picojson::value(folder->getSynchronizable());
+
+    picojson::value v(o);
+    return v;
+}
+
 std::shared_ptr<Message> MessagingUtil::jsonToMessage(const picojson::value& json)
 {
     LoggerD("Entered");
index 312ca29d61d94c1f6312aa80a698608f9d102899..ebd36e44e374f3d3cb1dcae7e97e9448c9535734 100644 (file)
@@ -13,6 +13,9 @@
 
 #include "MsgCommon/SortMode.h";
 #include "MsgCommon/AttributeFilter.h"
+#include "MsgCommon/AbstractFilter.h"
+
+#include "message_folder.h"
 
 namespace extension {
 namespace messaging {
@@ -99,6 +102,7 @@ class MessageBody;
 
 class MessagingUtil {
 public:
+    static std::string messageFolderTypeToString(MessageFolderType);
     static MessageType stringToMessageType(std::string);
     static std::string messageTypeToString(MessageType);
     static std::string ltrim(const std::string& input);
@@ -109,6 +113,7 @@ public:
     static picojson::value messageBodyToJson(std::shared_ptr<MessageBody> body);
     static picojson::value messageToJson(std::shared_ptr<Message> message);
     static picojson::value conversationToJson(std::shared_ptr<MessageConversation> conversation);
+    static picojson::value folderToJson(std::shared_ptr<MessageFolder> folder);
     static std::shared_ptr<Message> jsonToMessage(const picojson::value& json);
     static tizen::SortModePtr jsonToSortMode(const picojson::object& json);
     static tizen::AttributeFilterPtr jsonToAttributeFilter(const picojson::object& json);