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.
19 * @file JSPluginTemplete.cpp
20 * @author Jaehyun Park (jaehyun77.park@samsung.com)
22 * @brief Implementation of the JSPluginTemplete class
25 #include "JSMessagingService.h"
26 #include "MessagingController.h"
27 #include <CommonsJavaScript/Converter.h>
28 #include <CommonsJavaScript/Validator.h>
29 #include <CommonsJavaScript/JSUtils.h>
30 #include <CommonsJavaScript/JSCallbackManager.h>
31 #include <CommonsJavaScript/Utils.h>
32 #include <CommonsJavaScript/ScopedJSStringRef.h>
33 #include <Commons/StringUtils.h>
35 #include <API/Messaging/ReqReceiverMessage.h>
36 #include <Tizen/Common/JSTizenExceptionFactory.h>
37 #include <Tizen/Common/JSTizenException.h>
38 #include <Tizen/Common/SecurityExceptions.h>
40 #include "MessagingErrorMsg.h"
41 #include "ConverterMessage.h"
42 #include "JSMessagingListener.h"
43 #include "JSMessage.h"
44 #include "EventSendMessagePrivateData.h" //for send message
45 #include "EventMessagingServicePrivateData.h"
46 #include "plugin_config.h"
50 using namespace WrtDeviceApis::Commons;
51 using namespace WrtDeviceApis::CommonsJavaScript;
52 using namespace TizenApis::Api::Messaging;
53 using namespace TizenApis::Commons;
58 JSClassRef JSMessagingService::m_jsClassRef = NULL;
59 JSClassDefinition JSMessagingService::m_classInfo = {
61 kJSClassAttributeNone,
71 NULL, //deleteProperty,Geolocation
72 NULL, //getPropertyNames,
79 JSStaticValue JSMessagingService::m_property[] =
81 {"id", getProperty, NULL, kJSPropertyAttributeReadOnly},
82 {"type", getProperty, NULL, kJSPropertyAttributeReadOnly},
83 {"name", getProperty, NULL, kJSPropertyAttributeReadOnly},
87 JSStaticFunction JSMessagingService::m_function[] = {
88 { "createMessage", JSMessagingService::createMessage, kJSPropertyAttributeNone },
89 { "sendMessage", JSMessagingService::sendMessage, kJSPropertyAttributeNone },
90 { "loadMessageBody", JSMessagingService::loadMessageBody, kJSPropertyAttributeNone },
91 { "loadMessageAttachment", JSMessagingService::loadMessageAttachment, kJSPropertyAttributeNone },
92 { "sync", JSMessagingService::sync, kJSPropertyAttributeNone },
93 { "syncFolder", JSMessagingService::syncFolder, kJSPropertyAttributeNone },
94 { "cancelOperation", JSMessagingService::cancelOperation, kJSPropertyAttributeNone },
98 const JSClassRef JSMessagingService::getClassRef() {
100 m_jsClassRef = JSClassCreate(&m_classInfo);
105 void JSMessagingService::initialize(JSContextRef context, JSObjectRef object) {
106 LogDebug("creation messaging Service instance");
109 void JSMessagingService::finalize(JSObjectRef object) {
110 LogDebug("finalize messaging instance");
111 //JSMessagingServicePriv *priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(object));
112 JSMessagingServicePriv *priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(object));
116 bool JSMessagingService::hasInstance(JSContextRef context, JSObjectRef constructor, JSValueRef possibleInstance, JSValueRef* exception) {
117 return JSValueIsObjectOfClass(context, possibleInstance, getClassRef());
120 JSObjectRef JSMessagingService::createJSObject(JSContextRef context, const Api::Messaging::IMessagingServicePtr &messagingService)
122 JSMessagingServicePriv* priv = new JSMessagingServicePriv( context, messagingService); //make private class.
123 return JSObjectMake(context, getClassRef(), priv);
126 JSValueRef JSMessagingService::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
129 JSValueRef retVal = NULL;
131 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(object)); //get private object
134 IMessagingServicePtr imessagingService = priv->getObject();
136 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
138 if (JSStringIsEqualToUTF8CString(propertyName, "type")) {
139 LogDebug("type" << ":" << imessagingService->getType());
140 retVal = converter->toJSValueRef(converter->toMessageType(imessagingService->getType()));
141 } else if (JSStringIsEqualToUTF8CString(propertyName, "name")) {
142 LogDebug("name" << ":" << imessagingService->getName());
143 retVal = converter->toJSValueRef(imessagingService->getName());
144 } else if (JSStringIsEqualToUTF8CString(propertyName, "id")) {
145 LogDebug("accountId" << ":" << imessagingService->getAccountID());
147 std::stringstream stream;
148 stream << imessagingService->getAccountID();
150 ThrowMsg(WrtDeviceApis::Commons::UnknownException,"Couldn't convert e-mail account id");
153 retVal = converter->toJSValueRef(stream.str());
155 retVal = JSValueMakeUndefined(context);
158 } Catch (WrtDeviceApis::Commons::Exception){
159 LogError("Exception: " << _rethrown_exception.GetMessage());
160 return JSTizenExceptionFactory::postException(context, exception,
161 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
170 LogDebug(" Private Object is NULL ");
171 return JSTizenExceptionFactory::postException(context, exception,
172 JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
177 JSValueRef JSMessagingService::createMessage(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
178 const JSValueRef arguments[], JSValueRef* exception)
182 LogDebug("arumentConunt:" << argumentCount);
184 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject));
187 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
189 MessagingExportedNames[MESSAGING_FUNCTION_API_CREATE_MESSAGE]);
190 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
193 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
194 JSContextRef l_globalContext = converter->toJSGlobalContext(thisObject);
195 Validator check(context, exception);
197 IMessagingServicePtr imessagingService = priv->getObject(); //get MessagingService.
198 JSValueRef objMsg = NULL;
200 Api::Messaging::MessageType msgType = (Api::Messaging::MessageType)imessagingService->getType();
201 LogInfo("msgType :" << msgType);
203 if (msgType == Api::Messaging::EMAIL)
205 Api::Messaging::EmailAccountInfo account = imessagingService->getCurrentEmailAccount();
206 LogDebug("Account Address:" << &account);
207 objMsg = JSMessage::createJSObject(l_globalContext, account, msgType); //make message JSValueRef.
211 objMsg = JSMessage::createJSObject(l_globalContext, msgType); //make message JSValueRef.
215 if ( argumentCount == 1)
217 IMessagePtr msg = converter->toIMessage(objMsg) ;
220 ThrowMsg(WrtDeviceApis::Commons::PlatformException,"platform exception");
222 LogDebug ("##### msg type is " << msg->getId());
224 const ScopedJSStringRef subjectStr(JSStringCreateWithUTF8CString("subject"));
225 const ScopedJSStringRef toStr(JSStringCreateWithUTF8CString("to"));
226 const ScopedJSStringRef ccStr(JSStringCreateWithUTF8CString("cc"));
227 const ScopedJSStringRef bccStr(JSStringCreateWithUTF8CString("bcc"));
228 const ScopedJSStringRef plainBodyStr(JSStringCreateWithUTF8CString("plainBody"));
229 const ScopedJSStringRef htmlBodyStr(JSStringCreateWithUTF8CString("htmlBody"));
230 const ScopedJSStringRef priorityStr(JSStringCreateWithUTF8CString("priority"));
232 JSObjectRef arg = converter->toJSObjectRef(arguments[0]);
233 JSValueRef subjectData = JSObjectGetProperty(l_globalContext, arg, subjectStr.get(), NULL);
234 JSValueRef toData = JSObjectGetProperty(l_globalContext, arg, toStr.get(), NULL);
235 JSValueRef ccData = JSObjectGetProperty(l_globalContext, arg, ccStr.get(), NULL);
236 JSValueRef bccData = JSObjectGetProperty(l_globalContext, arg, bccStr.get(), NULL);
237 JSValueRef plainBodyData = JSObjectGetProperty(l_globalContext, arg, plainBodyStr.get(), NULL);
238 JSValueRef htmlBodyData = JSObjectGetProperty(l_globalContext, arg, htmlBodyStr.get(), NULL);
239 JSValueRef priorityData = JSObjectGetProperty(l_globalContext, arg, priorityStr.get(), NULL);
242 if (!JSValueIsUndefined(l_globalContext, subjectData) )
244 LogDebug ( " Subject : " << converter->toString(subjectData) );
245 std::string subject = converter->toString(subjectData);
248 case Api::Messaging::MMS:
250 Api::Messaging::IMmsPtr mms = Api::Messaging::MessageFactory::convertToMms(msg);
251 mms->setSubject(subject);
254 case Api::Messaging::EMAIL:
256 Api::Messaging::IEmailPtr email = Api::Messaging::MessageFactory::convertToEmail(msg);
257 email->setSubject(subject);
262 LogError("message not supported");
263 //Throw(WrtDeviceApis::Commons::UnsupportedException);
269 if (!JSValueIsUndefined(l_globalContext, toData) )
271 Api::Messaging::Recipients to = converter->toRecipients(toData);
272 LogDebug("setting to field, size=" << to.getRecipientSize());
273 msg->setToRecipients(to);
276 if (msgType == Api::Messaging::EMAIL )
278 Api::Messaging::IEmailPtr email = Api::Messaging::MessageFactory::convertToEmail(msg);
279 if (!JSValueIsUndefined(l_globalContext, ccData))
281 Api::Messaging::Recipients cc = converter->toRecipients(ccData);
282 email->setCcRecipients(cc);
285 if (!JSValueIsUndefined(l_globalContext, bccData))
287 Api::Messaging::Recipients bcc = converter->toRecipients(bccData);
288 email->setBccRecipients(bcc);
291 if (!JSValueIsUndefined(l_globalContext, htmlBodyData))
293 std::string body = converter->toString(htmlBodyData);
294 LogDebug("html body : " << body);
295 email->setHtmlBody(body);
298 if (!JSValueIsUndefined(l_globalContext, priorityData))
300 email->setPriority(converter->toMessagePriority(priorityData));
305 if (!JSValueIsUndefined(l_globalContext, plainBodyData) )
307 std::string body = converter->toString(plainBodyData);
308 LogDebug("plain body : " << body);
316 Catch(WrtDeviceApis::Commons::InvalidArgumentException) {
317 return JSTizenExceptionFactory::postException(context, exception,
318 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
320 Catch(WrtDeviceApis::Commons::ConversionException) {
321 return JSTizenExceptionFactory::postException(context, exception,
322 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
326 return JSValueMakeUndefined(context);
330 LogDebug(" Private Object is NULL ");
331 return JSTizenExceptionFactory::postException(context, exception,
332 JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
337 JSValueRef JSMessagingService::sendMessage(JSContextRef context,
338 JSObjectRef function,
339 JSObjectRef thisObject,
340 size_t argumentCount,
341 const JSValueRef arguments[],
342 JSValueRef* exception)
346 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject));
349 LogError("Null pointer");
350 return JSTizenExceptionFactory::postException(context, exception,
351 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
354 JSContextRef globalContext = priv->getContext();
356 LogInfo(">>> argument count : " << argumentCount);
358 if (argumentCount < 2) {
359 return JSTizenExceptionFactory::postException(context, exception,
360 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
363 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(globalContext);
364 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr recipientCallbackManager;
366 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
370 if ( argumentCount > 1 && argumentCount < 4)
372 if ( argumentCount > 1)
374 if (JSValueIsObject(context, arguments[1]) && !Validator(context).isCallback(arguments[1])) //check
376 MessageSendCallback callbacks = converter->toMessageSendCallback(arguments[1]);
377 callbackManager->setOnSuccess( converter->toFunctionOrNull(callbacks.onSuccess) );
381 callbackManager->setOnSuccess(converter->toFunction(arguments[1]));
384 if ( argumentCount == 3)
386 callbackManager->setOnError(converter->toFunctionOrNull(arguments[2]));
392 ThrowMsg(WrtDeviceApis::Commons::InvalidArgumentException,"invalid argument exception");
396 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
398 MessagingExportedNames[MESSAGING_FUNCTION_API_SEND_MESSAGE]);
399 TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);
402 EventSendMessagePrivateDataPtr privateData( new EventSendMessagePrivateData(callbackManager, recipientCallbackManager) );
404 Api::Messaging::EventSendMessagePtr event(new Api::Messaging::EventSendMessage());
406 LogDebug("Event size");
408 IMessagingServicePtr imessagingService = priv->getObject();
410 event->opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_SEND_MESSAGE);
411 event->msg = converter->toIMessage(arguments[0]);
412 imessagingService->setMessageToOpId( event->opId, event->msg);
413 event->store = true; //always store message in sendbox after send , email Type.
414 event->m_messagingService = imessagingService;
415 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData>(privateData));
417 //event->setForAsynchronousCall(&JSMessagingListener::getInstance());
418 //event->setForAsynchronousCall(&MessagingControllerSingleton::Instance());
419 event->setForAsynchronousCall(&MessagingController::getInstance());
421 Api::Messaging::ReqReceiverMessageSingleton::Instance().sendMessage(event); //send message
423 return converter->toJSValueRef(event->opId);
425 Catch(WrtDeviceApis::Commons::ConversionException) {
426 return JSTizenExceptionFactory::postException(context, exception,
427 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
429 Catch(WrtDeviceApis::Commons::NullPointerException) {
430 return JSTizenExceptionFactory::postException(context, exception,
431 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
433 Catch(WrtDeviceApis::Commons::InvalidArgumentException) {
434 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
435 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT));
438 return JSValueMakeNull(context);
441 JSValueRef JSMessagingService::loadMessageBody(JSContextRef context,
442 JSObjectRef function,
443 JSObjectRef thisObject,
444 size_t argumentCount,
445 const JSValueRef arguments[],
446 JSValueRef* exception)
450 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject));
453 LogError("Null pointer");
454 return JSTizenExceptionFactory::postException(context, exception,
455 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
458 JSContextRef globalContext = priv->getContext(); //create global Context
459 LogInfo(">>> argument count : " << argumentCount);
461 if (argumentCount < 2) {
462 return JSTizenExceptionFactory::postException(context, exception,
463 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
466 Validator check(context, exception); //create check
468 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(globalContext);
469 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(globalContext); //create converter
473 EventMessagingServicePrivateDataPtr privateData( new EventMessagingServicePrivateData(callbackManager) );
476 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
478 MessagingExportedNames[MESSAGING_FUNCTION_API_LOAD_MESSAGE_BODY]);
479 TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);
481 if (JSValueIsObject(context, arguments[0]) && Validator(context).isCallback(arguments[0])) //check
483 callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[0]));
484 if (converter->toFunctionOrNull(arguments[1]) && Validator(context).isCallback(arguments[1]) )
486 callbackManager->setOnError(converter->toFunctionOrNull(arguments[1]));
489 Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService()); //create event
490 if ( JSValueIsObject(context, arguments[2]) )
492 event->m_message = converter->toIMessage(arguments[2]) ;
493 LogDebug("Message Type =" << event->m_message->getMessageType());
494 privateData->setMessageJSValueRef(arguments[2]); //set Message JSValueRef.
498 return JSTizenExceptionFactory::postException(context, exception,
499 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
502 IMessagingServicePtr imessagingService = priv->getObject();
503 int opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_DOWNLOAD_BODY);
504 LogDebug("Operation ID is = " << opId);
507 imessagingService->setMessageToOpId(opId, event->m_message);
508 event->setEventType(EventMessagingService::MESSAGING_SERVICE_EVENT_TYPE_LOAD_MESSAGE_BODY);
509 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData>(privateData));
510 event->setForAsynchronousCall(&MessagingController::getInstance());
512 Api::Messaging::ReqReceiverMessageSingleton::Instance().loadMessageBody(event); //load message Body
514 return converter->toJSValueRef(event->opId);
518 return JSTizenExceptionFactory::postException(context, exception,
519 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
523 Catch(WrtDeviceApis::Commons::ConversionException) {
524 return JSTizenExceptionFactory::postException(context, exception,
525 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
527 Catch(WrtDeviceApis::Commons::NullPointerException) {
528 return JSTizenExceptionFactory::postException(context, exception,
529 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
531 Catch(WrtDeviceApis::Commons::InvalidArgumentException) {
532 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
533 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT));
535 Catch(WrtDeviceApis::Commons::PlatformException) {
536 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
537 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN));
540 return JSValueMakeNull(context);
544 JSValueRef JSMessagingService::loadMessageAttachment(JSContextRef context,
545 JSObjectRef function,
546 JSObjectRef thisObject,
547 size_t argumentCount,
548 const JSValueRef arguments[],
549 JSValueRef* exception)
553 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject));
556 LogError("Private Object is Null pointer");
557 return JSTizenExceptionFactory::postException(context, exception,
558 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
561 JSContextRef globalContext = priv->getContext(); //create global Context
562 LogInfo(">>> argument count : " << argumentCount);
564 if (argumentCount < 2) {
565 return JSTizenExceptionFactory::postException(context, exception,
566 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
569 Validator check(context, exception); //create check
571 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(globalContext);
572 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(globalContext); //create converter
576 if (JSValueIsObject(context, arguments[0]) && Validator(context).isCallback(arguments[0])) //check
578 EventMessagingServicePrivateDataPtr privateData( new EventMessagingServicePrivateData(callbackManager) );
580 callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[0]));
581 if (converter->toFunctionOrNull(arguments[1]) && Validator(context).isCallback(arguments[1]) )
583 callbackManager->setOnError(converter->toFunctionOrNull(arguments[1]));
587 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
589 MessagingExportedNames[MESSAGING_FUNCTION_API_LOAD_MESSAGE_ATTACHMENT]);
590 TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);
592 IMessagingServicePtr imessagingService = priv->getObject();
593 Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService()); //create event
597 event->setEventType(EventMessagingService::MESSAGING_SERVICE_EVENT_TYPE_LOAD_MESSAGE_ATTACHMENT);
598 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData>(privateData));
599 event->setForAsynchronousCall(&MessagingController::getInstance());
601 if (argumentCount == 3 && !JSValueIsNull(context, arguments[2]))
603 Api::Messaging::IAttachmentPtr iAttchmentPtr = converter->toIAttachment(arguments[2]);
604 privateData->setMessageJSValueRef(arguments[2]); //set Message JSValueRef.
607 event->m_attachment = iAttchmentPtr;
608 event->m_message = event->m_attachment->getMessage();
610 if (!event->m_message)
611 return JSTizenExceptionFactory::postException(context, exception,
612 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
616 return JSTizenExceptionFactory::postException(context, exception,
617 JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
622 return JSTizenExceptionFactory::postException(context, exception,
623 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
626 int opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_DOWNLOAD_ATTACHMENT);
627 LogDebug("Operation ID is = " << opId);
630 imessagingService->setMessageToOpId(opId, event->m_message);
632 LogInfo("pendingOperation");
633 //JSValueRef pendingOperation = WrtDeviceApis::CommonsJavaScript::makePendingOperation(globalContext, event); //create pendingOperation.
634 Api::Messaging::ReqReceiverMessageSingleton::Instance().loadMessageAttachment(event); //load message Body
636 return converter->toJSValueRef(event->opId);
641 return JSTizenExceptionFactory::postException(context, exception,
642 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
646 Catch(WrtDeviceApis::Commons::ConversionException) {
647 return JSTizenExceptionFactory::postException(context, exception,
648 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
650 Catch(WrtDeviceApis::Commons::NullPointerException) {
651 return JSTizenExceptionFactory::postException(context, exception,
652 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
654 Catch(WrtDeviceApis::Commons::InvalidArgumentException) {
655 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
656 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT));
658 Catch(WrtDeviceApis::Commons::PlatformException) {
659 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
660 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN));
663 return JSValueMakeNull(context);
666 JSValueRef JSMessagingService::sync(JSContextRef context, JSObjectRef function, JSObjectRef thisObject,
667 size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
671 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject));
675 JSContextRef globalContext = priv->getContext(); //get global Context
677 LogInfo(">>> argument count : " << argumentCount);
679 if (argumentCount > 4 || argumentCount < 2 ) {
680 return JSTizenExceptionFactory::postException(context, exception,
681 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
684 Validator check(context, exception); //check context
686 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(globalContext);
687 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(globalContext); //create converter
689 IMessagingServicePtr imessagingService = priv->getObject(); //get MessagingService.
691 Api::Messaging::MessageType msgType = (Api::Messaging::MessageType)imessagingService->getType();
692 LogInfo("msgType :" << msgType);
696 int limit = -1; //sync limit
698 if (JSValueIsObject(context, arguments[0]) && Validator(context).isCallback(arguments[0])) //check
700 callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[0]));
701 if (converter->toFunctionOrNull(arguments[1]) && Validator(context).isCallback(arguments[1]) )
703 callbackManager->setOnError(converter->toFunctionOrNull(arguments[1]));
707 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
709 MessagingExportedNames[MESSAGING_FUNCTION_API_SYNC]);
710 TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);
712 EventMessagingServicePrivateDataPtr privateData( new EventMessagingServicePrivateData(callbackManager) );
714 Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService()); //create event
716 if (argumentCount == 3 && !JSValueIsNull(context, arguments[2]))
717 limit = converter->toInt(arguments[2]);
719 LogDebug("limit : " << limit);
721 event->opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_SYNC);
722 event->m_sync_account_id = imessagingService->getAccountID() ;
723 event->m_sync_limit = limit;
724 event->m_messagingService = imessagingService;
726 event->setEventType(EventMessagingService::MESSAGING_SERVICE_EVENT_TYPE_SYNC);
727 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData>(privateData));
728 event->setForAsynchronousCall(&MessagingController::getInstance());
730 Api::Messaging::ReqReceiverMessageSingleton::Instance().sync(event); //load message Body
732 return converter->toJSValueRef(event->opId);
737 return JSTizenExceptionFactory::postException(context, exception,
738 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
741 Catch(WrtDeviceApis::Commons::ConversionException) {
742 return JSTizenExceptionFactory::postException(context, exception,
743 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
745 Catch(WrtDeviceApis::Commons::NullPointerException) {
746 return JSTizenExceptionFactory::postException(context, exception,
747 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
749 Catch(WrtDeviceApis::Commons::InvalidArgumentException) {
750 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
751 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT));
753 Catch(WrtDeviceApis::Commons::PlatformException) {
754 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
755 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN));
761 LogError("Null pointer");
762 return JSTizenExceptionFactory::postException(context, exception,
763 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
766 return JSValueMakeNull(context);
771 JSValueRef JSMessagingService::syncFolder(JSContextRef context, JSObjectRef function, JSObjectRef thisObject,
772 size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
776 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject));
779 JSContextRef globalContext = priv->getContext(); //get global Context
782 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
784 MESSAGING_FUNCTION_API_SYNC);
786 LogInfo(">>> argument count : " << argumentCount);
788 if (argumentCount > 4 || argumentCount < 1) {
789 return JSTizenExceptionFactory::postException(context, exception,
790 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
793 Validator check(context, exception); //check context
795 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager = JSCallbackManager::createObject(globalContext);
796 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(globalContext); //create converter
798 IMessagingServicePtr imessagingService = priv->getObject(); //get MessagingService.
801 Api::Messaging::MessageType msgType = (Api::Messaging::MessageType)imessagingService->getType();
802 LogInfo("msgType :" << msgType);
808 if (JSValueIsObject(context, arguments[0]) && !Validator(context).isCallback(arguments[0])) //check
811 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
813 MessagingExportedNames[MESSAGING_FUNCTION_API_SYNC_FOLDER]);
814 TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);
816 EventMessagingServicePrivateDataPtr privateData( new EventMessagingServicePrivateData(callbackManager) );
817 //private->setSyncAccountID( imessagingService->getAccountID()); //set account ID
819 Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService()); //create event
822 IMessageFolderPtr folder = converter->toIMessageFolder(arguments[0]);
825 event->m_folder_name = folder->getName(); //it will be changed to the folder ptr
828 if ( argumentCount > 1 )
830 if (JSValueIsObject(context, arguments[1]) && Validator(context).isCallback(arguments[1])) //check
832 callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[1]));
835 if ( argumentCount > 2 )
837 if (JSValueIsObject(context, arguments[2]) && Validator(context).isCallback(arguments[2])) //check
839 callbackManager->setOnError(converter->toFunctionOrNull(arguments[2]));
843 if (argumentCount == 4 && !JSValueIsNull(context, arguments[3]))
844 limit = converter->toInt(arguments[3]);
848 LogDebug("limit : " << limit);
849 LogDebug("folderName : " << event->m_folder_name);
850 event->opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_SYNC_FOLDER);
851 event ->m_sync_account_id = imessagingService->getAccountID() ;
852 event ->m_sync_limit = limit;
853 event->m_messagingService = imessagingService;
855 event->setEventType(EventMessagingService::MESSAGING_SERVICE_EVENT_TYPE_SYNC_FOLDER);
856 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData>(privateData));
857 event->setForAsynchronousCall(&MessagingController::getInstance());
859 Api::Messaging::ReqReceiverMessageSingleton::Instance().syncFolder(event); //load message Body
861 return converter->toJSValueRef(event->opId);
866 return JSTizenExceptionFactory::postException(context, exception,
867 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
870 Catch(WrtDeviceApis::Commons::ConversionException) {
871 return JSTizenExceptionFactory::postException(context, exception,
872 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
874 Catch(WrtDeviceApis::Commons::NullPointerException) {
875 return JSTizenExceptionFactory::postException(context, exception,
876 JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
878 Catch(WrtDeviceApis::Commons::InvalidArgumentException) {
879 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
880 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT));
882 Catch(WrtDeviceApis::Commons::PlatformException) {
883 callbackManager->callOnError(JSTizenExceptionFactory::makeErrorObject(context,
884 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN));
890 LogError("Null pointer");
891 return JSTizenExceptionFactory::postException(context, exception,
892 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
895 return JSValueMakeNull(context);
900 JSValueRef JSMessagingService::cancelOperation(JSContextRef context, JSObjectRef function, JSObjectRef thisObject,
901 size_t argumentCount, const JSValueRef arguments[], JSValueRef* exception)
905 JSMessagingServicePriv* priv = static_cast<JSMessagingServicePriv*>(JSObjectGetPrivate(thisObject)); //get private object
909 IMessagingServicePtr imessagingService = priv->getObject();
912 LogInfo(">>> argument count : " << argumentCount);
914 if ( argumentCount == 1 && !Validator(context).isCallback(arguments[0]))
916 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
917 Api::Messaging::MessageType msgType = (Api::Messaging::MessageType)imessagingService->getType();
918 LogInfo("msgType :" << msgType);
920 int opId = converter->toLong( arguments[0] ); //Fetch operation ID
921 int handle = imessagingService->getHandleFromOpId(opId);
924 ThrowMsg(WrtDeviceApis::Commons::NotFoundException,"Operation ID Not found");
927 int opType = imessagingService->getOpTypeFromOpId(opId);
928 LogInfo("operation ID :" << opId << " operation Type : " << opType);
930 if ( opType == Api::Messaging::MESSAGING_SERVICE_OP_SEND_MESSAGE)
932 IMessagePtr msg = imessagingService->getMessageFromOpId(opId);
935 LogDebug("Call Cancel Function");
936 msg->sendCancel(handle);
937 imessagingService->deleteOpId(opId);
942 if (msgType == Api::Messaging::EMAIL)
944 if ( opType == Api::Messaging::MESSAGING_SERVICE_OP_DOWNLOAD_BODY )
946 IMessagePtr msg = imessagingService->getMessageFromOpId(opId);
947 Api::Messaging::IEmailPtr email = Api::Messaging::MessageFactory::convertToEmail(msg);
948 LogDebug("Cancel Download Body , handle = " << handle);
949 email->downloadBodyCancel(handle);
951 else if ( opType == Api::Messaging::MESSAGING_SERVICE_OP_SYNC )
953 LogDebug("Cancel Sync , handle = " << handle);
954 imessagingService->syncCancel(handle);
956 else if ( opType == Api::Messaging::MESSAGING_SERVICE_OP_SYNC_FOLDER )
958 LogDebug("Cancel Sync Folder, handle = " << handle);
959 imessagingService->syncFolderCancel(handle);
961 imessagingService->deleteOpId(opId);
965 ThrowMsg(WrtDeviceApis::Commons::UnsupportedException, "Operation Type is mismatched");
972 ThrowMsg(WrtDeviceApis::Commons::InvalidArgumentException,"invalid argument exception");
976 Catch (WrtDeviceApis::Commons::InvalidArgumentException){
977 LogError("Exception: " << _rethrown_exception.GetMessage());
978 return JSTizenExceptionFactory::postException(context, exception,
979 JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
981 Catch (WrtDeviceApis::Commons::NotFoundException){
982 LogError("Exception: " << _rethrown_exception.GetMessage());
983 return JSTizenExceptionFactory::postException(context, exception,
984 JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
986 Catch (WrtDeviceApis::Commons::UnsupportedException){
987 LogError("Exception: " << _rethrown_exception.GetMessage());
988 return JSTizenExceptionFactory::postException(context, exception,
989 JSTizenException::NOT_SUPPORTED_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_SUPPORTED);
991 Catch (WrtDeviceApis::Commons::Exception){
992 LogError("Exception: " << _rethrown_exception.GetMessage());
993 return JSTizenExceptionFactory::postException(context, exception,
994 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
1000 LogDebug(" Private Object is NULL ");
1001 return JSTizenExceptionFactory::postException(context, exception,
1002 JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
1006 return JSValueMakeNull(context);