Update change log and spec for wrt-plugins-tizen_0.2.73
[profile/ivi/wrt-plugins-tizen.git] / src / platform / Tizen / Messaging / MailSender.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  * @author          Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
19  */
20
21 #ifndef MAILSENDER_H_
22 #define MAILSENDER_H_
23
24 #include <map>
25 #include <dpl/event/event_listener.h>
26 #include <dpl/thread.h>
27 #include <dpl/scoped_ptr.h>
28 #include <DBus/Connection.h>
29 #include <DBus/MessageEvent.h>
30 #include <API/Messaging/IEmail.h>
31
32 namespace TizenApis {
33 namespace Platform {
34 namespace Messaging {
35
36 // TODO Not thread-safe, make it.
37 class MailSender : private DPL::Event::EventListener<DBus::MessageEvent>
38 {
39   public:
40     static MailSender& getInstance();
41
42   public:
43     int send(const Api::Messaging::IEmailPtr& mail);
44     void cancel(int handle);
45
46   protected:
47     void OnEventReceived(const DBus::MessageEvent& event);
48
49   private:
50     struct SendRequestData
51     {
52         unsigned int handle;
53         Api::Messaging::IEmailPtr mail;
54
55         explicit SendRequestData(const Api::Messaging::IEmailPtr& mail) :
56             handle(0),
57             mail(mail)
58         {
59         }
60           explicit SendRequestData(const int handle, const Api::Messaging::IEmailPtr& mail) :
61             handle(handle),
62             mail(mail)
63         {
64         }
65     };
66
67     typedef std::map<int, SendRequestData> SendRequests;
68     typedef SendRequests::iterator SendRequestsIterator;
69
70   private:
71     MailSender();
72     ~MailSender();
73
74     int sendInternal(const Api::Messaging::IEmailPtr& data);
75     void cancelInternal(const SendRequestData& data);
76
77   private:
78     DPL::ScopedPtr<DPL::Thread> m_dbusThread;
79     DBus::ConnectionPtr m_dbus;
80     SendRequests m_requests;
81 };
82 }
83 }
84 }
85 #endif // MAILSENDER_H_