2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FMsg_EmailManagerImpl.cpp
19 * @brief This is the implementation file for the %_EmailManagerImpl class.
21 * This file contains the implementation of the %_EmailManagerImpl class.
25 #include <msg_transport.h>
26 #include <msg_storage.h>
27 #include <dbus/dbus.h>
28 #include <email-api.h>
29 #include <FMsgEmailMessage.h>
30 #include <FMsgEmailManager.h>
31 #include <FMsgRecipientList.h>
32 #include <FMsgIEmailListener.h>
33 #include <FBaseSysLog.h>
34 #include "FMsg_EmailEvent.h"
35 #include "FMsg_EmailEventArg.h"
36 #include "FMsg_EmailManagerImpl.h"
37 #include "FMsg_Types.h"
38 #include "FMsg_MsgUtil.h"
39 #include "FMsg_RecipientListImpl.h"
42 using namespace Tizen::Base;
43 using namespace Tizen::Base::Collection;
45 namespace Tizen { namespace Messaging
48 ArrayListT<_EmailAsyncData*>* _EmailManagerImpl::__pEmailAsyncData = null;
49 Tizen::Base::Runtime::Mutex * _EmailManagerImpl::__pMutex = null;
51 _EmailManagerImpl::_EmailManagerImpl(void)
53 , __isConstructed(false)
57 _EmailManagerImpl::~_EmailManagerImpl(void)
59 __isConstructed = false;
63 _EmailManagerImpl::Construct(IEmailListener& listener)
65 SysAssertf(__isConstructed == false, "_EmailManagerImpl instance is already constructed.");
70 unique_ptr<_EmailEvent> pEmailEvent(new (std::nothrow) _EmailEvent());
71 SysTryReturn(NID_MSG, pEmailEvent != null, E_OUT_OF_MEMORY, r = E_OUT_OF_MEMORY, "memory allocation failed");
74 r = pEmailEvent->Construct();
75 SysTryReturn(NID_MSG, r == E_SUCCESS, r, r, "Failed to construct an instance");
78 r = pEmailEvent->AddListener(listener, true);
79 SysTryReturn(NID_MSG, r == E_SUCCESS, r, r, "Failed to add a listener");
81 __pEmailEvent = move(pEmailEvent);
82 __isConstructed = true;
88 _EmailManagerImpl::SentEmailStatusCallback(int msgId, email_noti_on_network_event status, int errorCode )
97 _EmailEvent* pEmailEvent = null;
98 _EmailAsyncData *pEmailAsyncData = null;
100 for( int i=0; i < _EmailManagerImpl::__pEmailAsyncData->GetCount() ; i++)
102 _EmailManagerImpl::__pMutex->Acquire();
103 _EmailManagerImpl::__pEmailAsyncData->GetAt(i, pEmailAsyncData);
104 if ( null == pEmailAsyncData)
106 _EmailManagerImpl::__pMutex->Release();
110 if ( msgId == pEmailAsyncData->msgId )
112 _EmailManagerImpl::__pEmailAsyncData->RemoveAt(i);
114 _EmailManagerImpl::__pMutex->Release();
117 if (msgId == pEmailAsyncData->msgId);
119 _EmailEventArg* pEmailEventArg = null;
120 pEmailEvent = pEmailAsyncData->pEventData;
124 pEmailEventArg = new (std::nothrow) _EmailEventArg(r);
127 pEmailEvent->Fire(*pEmailEventArg);
132 delete []pEmailAsyncData;
133 pEmailAsyncData = null;
145 case NOTI_SEND_FINISH:
148 _EmailEvent* pEmailEvent = null;
149 _EmailAsyncData *pEmailAsyncData = null;
151 for( int i=0; i < _EmailManagerImpl::__pEmailAsyncData->GetCount() ; i++)
153 _EmailManagerImpl::__pMutex->Acquire();
154 _EmailManagerImpl::__pEmailAsyncData->GetAt(i, pEmailAsyncData);
155 if ( null == pEmailAsyncData)
157 _EmailManagerImpl::__pMutex->Release();
161 if ( msgId == pEmailAsyncData->msgId )
163 _EmailManagerImpl::__pEmailAsyncData->RemoveAt(i);
165 _EmailManagerImpl::__pMutex->Release();
168 if (msgId == pEmailAsyncData->msgId);
170 _EmailEventArg* pEmailEventArg = null;
171 pEmailEvent = pEmailAsyncData->pEventData;
175 pEmailEventArg = new (std::nothrow) _EmailEventArg(r);
178 pEmailEvent->Fire(*pEmailEventArg);
184 delete []pEmailAsyncData;
185 pEmailAsyncData = null;
205 _EmailManagerImpl::Send(const EmailMessage& message, const RecipientList& recipientList, bool saveToSentBox)
207 result r = E_SUCCESS;
210 _EmailAsyncData *pTemp=null;
212 SysAssertf(__isConstructed == true, "The _EmailManagerImpl instance is not constructed yet.");
213 SysLog(NID_MSG, "sending an email message.");
215 r = _MsgUtil::SendEmail(message, recipientList, msgId, requestId);
216 SysTryCatch(NID_MSG, r == E_SUCCESS, , r, "[%s] Failed to send the email message.", GetErrorMessage(r));
218 pTemp = new (std::nothrow) _EmailAsyncData();
219 SysTryCatch(NID_MSG, pTemp != null, r = E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] Failed to allocate memory.");
221 pTemp->requestId = requestId;
222 pTemp->msgId = msgId;
223 pTemp->pEventData = __pEmailEvent.get();
225 if(null ==__pEmailAsyncData)
228 __pEmailAsyncData = new (std::nothrow) ArrayListT<_EmailAsyncData*> ;
229 SysTryCatch(NID_MSG, __pEmailAsyncData != null, r = E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] Failed to allocate memory.");
230 __pEmailAsyncData->Construct();
234 __pEmailAsyncData->Add(pTemp);
237 if ( null == __pMutex)
239 __pMutex = new (std::nothrow) Tizen::Base::Runtime::Mutex();
240 SysTryCatch(NID_MSG, __pMutex != null, r = E_OUT_OF_MEMORY, r, "[E_OUT_OF_MEMORY] Failed to allocate memory.");
251 if (__pEmailAsyncData->Contains(pTemp))
253 __pEmailAsyncData->Remove(pTemp);
266 _EmailManagerImpl::GetInstance(EmailManager& emailManager)
268 return emailManager.__pImpl;
271 const _EmailManagerImpl*
272 _EmailManagerImpl::GetInstance(const EmailManager& emailManager)
274 return emailManager.__pImpl;
277 } } // Tizen::Messaging