Update change log and spec for wrt-plugins-tizen_0.2.73
[profile/ivi/wrt-plugins-tizen.git] / src / platform / Tizen / Messaging / Messaging.h
1 /*
2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
3 *
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
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
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.
15 */
16
17
18 /**
19  *
20  *
21  * @file       Messaging.h
22  * @author     Pawel Misiak (p.misiak@samsung.com)
23  * @version    0.1
24  * @brief
25  */
26 #ifndef MESSAGING_H
27 #define MESSAGING_H
28
29 #include <vector>
30 #include <string>
31 #include <dpl/atomic.h>
32 #include <dpl/thread.h>
33 extern "C" {
34 #include <msg_types.h>
35 #include <msg_storage_types.h>
36 }
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"
45
46 #include <API/Filter/IFilter.h>
47 #include <API/Messaging/IConversation.h>
48 #include <API/Messaging/IMessageFolder.h>
49 #include <API/Filter/SortMode.h>
50
51
52 namespace TizenApis {
53 namespace Platform {
54 namespace Messaging {
55
56 class Messaging : public Api::Messaging::IMessaging,
57     private DPL::Event::EventListener<DBus::MessageEvent>
58 {
59   public:
60     static Messaging& getInstance();
61
62   public:
63     virtual ~Messaging();
64
65 /*
66     virtual void getNumberOfMessages(Api::Messaging::MessageType msgType,
67             Api::Messaging::FolderType folder,
68             int* readed,
69             int* unReaded);
70
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);
75
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);
80
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);
83 */              
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);
87
88 //    virtual std::vector<std::string> getMessageIds(Api::Messaging::MessageType msgType,
89 //            Api::Messaging::FolderType folder);
90
91     virtual void createFolder(Api::Messaging::MessageType msgType,
92             const std::string& userFolder);
93
94     virtual void deleteFolder(Api::Messaging::MessageType msgType,
95             const std::string& userFolder);
96
97     virtual std::vector<std::string> getFolderNames(Api::Messaging::MessageType msgType);
98
99     virtual std::vector<Api::Messaging::EmailAccountInfo> getEmailAccounts() const;
100
101     int getEmailAccountId(const std::string& account);
102
103     void fetchEmailHeaders();
104
105     static int convertFolderToPlatform(const Api::Messaging::FolderType folder);
106
107     /**
108      * Gets folder id by given folder name.
109      * @return Folder id or 0 if not found
110      * @throw PlatformException on platform error.
111      */
112     static int convertFolderToPlatform(const std::string &folder);
113
114     void addOnMessageReceived(const Api::Messaging::EmitterMessageReceivedPtr& emitter, const Api::Tizen::FilterPtr& filter, const int funtionIndex);
115
116     void addOnMessageReceived(const Api::Messaging::EmitterConversationReceivedPtr& emitter, const Api::Tizen::FilterPtr& filter, const int funtionIndex);
117
118     void addOnMessageReceived(const Api::Messaging::EmitterFolderReceivedPtr& emitter, const Api::Tizen::FilterPtr& filter, const int funtionIndex);
119
120     bool validateFilter(const Api::Tizen::FilterPtr& filter, const int funtionIndex);
121
122     void removeOnMessageMsgReceived(Api::Messaging::EmitterMessageReceived::IdType id);
123
124     void removeOnMessageConvReceived(Api::Messaging::EmitterConversationReceived::IdType id);
125
126     void removeOnMessageFolderReceived(Api::Messaging::EmitterFolderReceived::IdType id);
127
128 //    std::vector<Api::Messaging::IConversationPtr> queryConversations(const Api::Tizen::SortModePtr& sortMode, const Api::Tizen::FilterPtr& filter, long limit=0, long offset=0);
129
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);
131
132 //    bool deleteConversations(const Api::Tizen::SortModePtr& sortMode, const Api::Tizen::FilterPtr& filter);
133
134     bool deleteConversations(const std::vector<Api::Messaging::IConversationPtr>& conversations);
135
136     std::vector<Api::Messaging::IMessageFolderPtr> queryFolders(const Api::Tizen::FilterPtr& filter);
137
138     int getConversationId(const int& msgId, const Api::Messaging::MessageType& msgType);
139
140                 private:
141     std::string generateFilterSql(const Api::Tizen::FilterPtr& filter);
142
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);
145
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);
150
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);
155
156   public:
157     static int m_currentEmailAccountId;
158
159     static DPL::Atomic m_objCounter;
160
161   protected:
162     void OnEventReceived(const DBus::MessageEvent& event);
163
164   private:
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;
168
169   private:
170     Messaging();
171
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,
176             void* data);
177 /*
178     static void onSmsReceived(MSG_HANDLE_T handle,
179             msg_message_t msg,
180             void* data);
181     static void onMmsReceived(MSG_HANDLE_T handle,
182             msg_message_t msg,
183             void* data);
184 */
185   private:
186 /*
187     void getNumberOfEmails(Api::Messaging::FolderType folder,
188             int* read,
189             int* unread);
190
191     void getNumberOfSms(Api::Messaging::FolderType folder,
192             int* read,
193             int* unread);
194
195     void getNumberOfMms(Api::Messaging::FolderType folder,
196             int* read,
197             int* unread);
198
199     void getNumberOfSmsMms(Api::Messaging::FolderType folder,
200             int* read,
201             int* unread,
202             Api::Messaging::MessageType msgType);
203
204     virtual std::vector<Api::Messaging::IMessagePtr> findSms(Api::Messaging::FolderType folder,
205                 const Api::Tizen::FilterPtr& filter);
206
207     virtual std::vector<Api::Messaging::IMessagePtr> findMms(Api::Messaging::FolderType folder,
208                 const Api::Tizen::FilterPtr& filter);
209
210     virtual std::vector<Api::Messaging::IMessagePtr> findEmail(Api::Messaging::FolderType folder,
211                 const Api::Tizen::FilterPtr& filter);
212
213     virtual std::vector<Api::Messaging::IMessagePtr> findEmail(const std::string &folder,
214                 const Api::Tizen::FilterPtr& filter);
215
216     std::vector<std::string> getSmsIds(Api::Messaging::FolderType folder);
217
218     std::vector<std::string> getMmsIds(Api::Messaging::FolderType folder);
219
220     std::vector<std::string> getEmailIds(Api::Messaging::FolderType folder);
221 */
222
223     void createMsgServiceFolder(const std::string& userFolder);
224
225     void createEmailFolder(const std::string& userFolder);
226
227     void deleteMsgServiceFolder(const std::string& userFolder);
228
229     void deleteEmailFolder(const std::string& userFolder);
230
231     std::vector<std::string> getFolderNamesMsgService();
232
233     std::vector<std::string> getFolderNamesEmail();
234
235
236     void printErrorMessage(int errorCode);
237
238   private:
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;
245 };
246 }
247 }
248 }
249 #endif