2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 * @author Pawel Misiak (p.misiak@samsung.com)
31 #include <dpl/atomic.h>
32 #include <dpl/thread.h>
34 #include <msg_types.h>
35 #include <msg_storage_types.h>
37 #include <dpl/event/event_listener.h>
38 #include <API/Messaging/IMessaging.h>
39 #include <API/Messaging/IMessage.h>
40 #include <API/Messaging/EmailAccountInfo.h>
41 #include <Commons/Emitters.h>
42 #include <DBus/Connection.h>
43 #include <DBus/MessageEvent.h>
44 #include "MsgServiceHandleMgr.h"
46 #include <API/Filter/IFilter.h>
47 #include <API/Messaging/IConversation.h>
48 #include <API/Messaging/IMessageFolder.h>
49 #include <API/Filter/SortMode.h>
56 class Messaging : public Api::Messaging::IMessaging,
57 private DPL::Event::EventListener<DBus::MessageEvent>
60 static Messaging& getInstance();
66 virtual void getNumberOfMessages(Api::Messaging::MessageType msgType,
67 Api::Messaging::FolderType folder,
71 virtual std::vector<Api::Messaging::IMessagePtr> findMessages(
72 const std::vector<Api::Messaging::MessageType>& msgTypes,
73 Api::Messaging::FolderType folder,
74 const Api::Tizen::FilterPtr& filter);
76 virtual std::vector<Api::Messaging::IMessagePtr> findMessages(
77 const std::vector<Api::Messaging::MessageType>& msgTypes,
78 const std::string &folder,
79 const Api::Tizen::FilterPtr& filter);
81 virtual std::vector<Api::Messaging::IMessagePtr> findMessages(const Api::Tizen::FilterPtr& filter,
82 const Api::Tizen::SortModePtr& sortMode, const long limit, const long offset);
84 virtual std::vector<Api::Messaging::IMessagePtr> findMessages(const Api::Tizen::FilterPtr& filter,
85 const Api::Tizen::SortModePtr& sortMode, const long limit, const long offset, const int type);
86 // virtual std::vector<Api::Messaging::IMessagePtr> findMessages(const Api::Tizen::FilterPtr& filter);
88 // virtual std::vector<std::string> getMessageIds(Api::Messaging::MessageType msgType,
89 // Api::Messaging::FolderType folder);
91 virtual void createFolder(Api::Messaging::MessageType msgType,
92 const std::string& userFolder);
94 virtual void deleteFolder(Api::Messaging::MessageType msgType,
95 const std::string& userFolder);
97 virtual std::vector<std::string> getFolderNames(Api::Messaging::MessageType msgType);
99 virtual std::vector<Api::Messaging::EmailAccountInfo> getEmailAccounts() const;
101 int getEmailAccountId(const std::string& account);
103 void fetchEmailHeaders();
105 static int convertFolderToPlatform(const Api::Messaging::FolderType folder);
108 * Gets folder id by given folder name.
109 * @return Folder id or 0 if not found
110 * @throw PlatformException on platform error.
112 static int convertFolderToPlatform(const std::string &folder);
114 void addOnMessageReceived(const Api::Messaging::EmitterMessageReceivedPtr& emitter, const Api::Tizen::FilterPtr& filter, const int funtionIndex);
116 void addOnMessageReceived(const Api::Messaging::EmitterConversationReceivedPtr& emitter, const Api::Tizen::FilterPtr& filter, const int funtionIndex);
118 void addOnMessageReceived(const Api::Messaging::EmitterFolderReceivedPtr& emitter, const Api::Tizen::FilterPtr& filter, const int funtionIndex);
120 bool validateFilter(const Api::Tizen::FilterPtr& filter, const int funtionIndex);
122 void removeOnMessageMsgReceived(Api::Messaging::EmitterMessageReceived::IdType id);
124 void removeOnMessageConvReceived(Api::Messaging::EmitterConversationReceived::IdType id);
126 void removeOnMessageFolderReceived(Api::Messaging::EmitterFolderReceived::IdType id);
128 // std::vector<Api::Messaging::IConversationPtr> queryConversations(const Api::Tizen::SortModePtr& sortMode, const Api::Tizen::FilterPtr& filter, long limit=0, long offset=0);
130 std::vector<Api::Messaging::IConversationPtr> queryConversations(const Api::Tizen::FilterPtr& filter, const Api::Tizen::SortModePtr& sortMode, int type, long limit=0, long offset=0);
132 // bool deleteConversations(const Api::Tizen::SortModePtr& sortMode, const Api::Tizen::FilterPtr& filter);
134 bool deleteConversations(const std::vector<Api::Messaging::IConversationPtr>& conversations);
136 std::vector<Api::Messaging::IMessageFolderPtr> queryFolders(const Api::Tizen::FilterPtr& filter);
138 int getConversationId(const int& msgId, const Api::Messaging::MessageType& msgType);
141 std::string generateFilterSql(const Api::Tizen::FilterPtr& filter);
143 std::vector<Api::Messaging::IConversationPtr> queryEmailConversation(const std::string& sqlWhereClause);
144 std::vector<Api::Messaging::IConversationPtr> querySmsMmsConversation(const std::string& sqlWhereClause, const std::string& orderLimitString);
146 // std::vector<Api::Messaging::IMessagePtr> querySmsMmsMessages(const Api::Tizen::FilterPtr& filter, const Api::Tizen::SortModePtr& sortMode, const long limit, const long offset);
147 std::vector<Api::Messaging::IMessagePtr> querySmsMmsMessages(const std::string& sqlWhereClause);
148 std::vector<Api::Messaging::IMessagePtr> querySmsMmsMessages(const std::string& sqlWhereClause, const std::string& orderLimitString);
149 std::vector<Api::Messaging::IMessagePtr> queryEmailMessage(const std::string& sqlWhereClause);
151 // std::vector<Api::Messaging::IMessagePtr> createVectorFromeMessageList(const MSG_LIST_S& message_list);
152 // std::vector<Api::Messaging::IConversationPtr> createVectorFromeThreadViewList(const MSG_THREAD_VIEW_LIST_S& message_list);
153 std::vector<Api::Messaging::IMessagePtr> createVectorFromeMessageList(const msg_struct_list_s &message_list);
154 std::vector<Api::Messaging::IConversationPtr> createVectorFromeThreadViewList(const msg_struct_list_s& message_list);
157 static int m_currentEmailAccountId;
159 static DPL::Atomic m_objCounter;
162 void OnEventReceived(const DBus::MessageEvent& event);
165 typedef WrtDeviceApis::Commons::Emitters<Api::Messaging::EmitterMessageReceived> EmittersMessageReceived;
166 typedef WrtDeviceApis::Commons::Emitters<Api::Messaging::EmitterConversationReceived> EmittersConversationReceived;
167 typedef WrtDeviceApis::Commons::Emitters<Api::Messaging::EmitterFolderReceived> EmittersFolderReceived;
172 static void onMessageStorageChanged(msg_handle_t handle,
173 msg_storage_change_type_t storageChangeType,
174 // MSG_MSGID_LIST_S *pMsgIdList,
175 msg_id_list_s *pMsgIdList,
178 static void onSmsReceived(MSG_HANDLE_T handle,
181 static void onMmsReceived(MSG_HANDLE_T handle,
187 void getNumberOfEmails(Api::Messaging::FolderType folder,
191 void getNumberOfSms(Api::Messaging::FolderType folder,
195 void getNumberOfMms(Api::Messaging::FolderType folder,
199 void getNumberOfSmsMms(Api::Messaging::FolderType folder,
202 Api::Messaging::MessageType msgType);
204 virtual std::vector<Api::Messaging::IMessagePtr> findSms(Api::Messaging::FolderType folder,
205 const Api::Tizen::FilterPtr& filter);
207 virtual std::vector<Api::Messaging::IMessagePtr> findMms(Api::Messaging::FolderType folder,
208 const Api::Tizen::FilterPtr& filter);
210 virtual std::vector<Api::Messaging::IMessagePtr> findEmail(Api::Messaging::FolderType folder,
211 const Api::Tizen::FilterPtr& filter);
213 virtual std::vector<Api::Messaging::IMessagePtr> findEmail(const std::string &folder,
214 const Api::Tizen::FilterPtr& filter);
216 std::vector<std::string> getSmsIds(Api::Messaging::FolderType folder);
218 std::vector<std::string> getMmsIds(Api::Messaging::FolderType folder);
220 std::vector<std::string> getEmailIds(Api::Messaging::FolderType folder);
223 void createMsgServiceFolder(const std::string& userFolder);
225 void createEmailFolder(const std::string& userFolder);
227 void deleteMsgServiceFolder(const std::string& userFolder);
229 void deleteEmailFolder(const std::string& userFolder);
231 std::vector<std::string> getFolderNamesMsgService();
233 std::vector<std::string> getFolderNamesEmail();
236 void printErrorMessage(int errorCode);
239 EmittersMessageReceived m_onMessageReceived;
240 EmittersConversationReceived m_onConversationReceived;
241 EmittersFolderReceived m_onFolderReceived;
242 MsgServiceHandleMgrPtr m_onMessageReceivedHandleMgr;
243 DBus::ConnectionPtr m_dbusConnection;
244 DPL::Thread* m_dbusWorkerThread;