merge wrt-plugins-tizen_0.2.0-12
[profile/ivi/wrt-plugins-tizen.git] / src / standards / Tizen / Messaging / JSMessagingService.cpp
index 455a9db..fd855db 100755 (executable)
@@ -484,28 +484,60 @@ JSValueRef JSMessagingService::loadMessageBody(JSContextRef context,
                        MessagingExportedNames[MESSAGING_FUNCTION_API_LOAD_MESSAGE_BODY]);
                        TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);
 
-               if (JSValueIsObject(context, arguments[0]) && Validator(context).isCallback(arguments[0])) //check
+               if ( JSValueIsObject(context, arguments[0]) )
                {
-                       callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[0]));
-                       if (converter->toFunctionOrNull(arguments[1]) && Validator(context).isCallback(arguments[1]) )
-                       {
-                               callbackManager->setOnError(converter->toFunctionOrNull(arguments[1]));
+                       switch(argumentCount){
+                               case 3:
+                               {
+                                       if ( Validator(context).isCallback(arguments[2]))
+                                       {
+                                               callbackManager->setOnError(converter->toFunctionOrNull(arguments[2]));
+                                       }
+                                       else
+                                       {
+                                               return JSTizenExceptionFactory::postException(context, exception, 
+                                                       JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                                       }
+                               }
+                               case 2:
+                               {
+                                       if ( Validator(context).isCallback(arguments[1]))
+                                       {
+                                               callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[1]));
+                                       }
+                                       else
+                                       {
+                                               return JSTizenExceptionFactory::postException(context, exception, 
+                                                        JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                                       }       
+                               }
                        }
 
-                       Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService());     //create event
-                       if ( JSValueIsObject(context, arguments[2]) )
-                       {
-                               event->m_message = converter->toIMessage(arguments[2]) ;
+                       Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService());     //create even
+                       event->m_message = converter->toIMessage(arguments[0]) ;
+                       if ( event->m_message )
+                       {       
+                               int msgType = event->m_message->getMessageType();
                                LogDebug("Message Type =" << event->m_message->getMessageType());
-                               privateData->setMessageJSValueRef(arguments[2]);        //set Message JSValueRef.
-                       }
-                       else
-                       {
-                               return JSTizenExceptionFactory::postException(context, exception, 
-                                       JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                               if (msgType == Api::Messaging::EMAIL)
+                               {
+                                       Api::Messaging::IEmailPtr email = Api::Messaging::MessageFactory::convertToEmail(event->m_message);
+                                       if (email && email->isBodyDownloaded() > 0)
+                                       {
+                                               callbackManager->callOnSuccess(arguments[0]);
+                                               return JSValueMakeNull(context);
+                                       }
+                               }
+                               else 
+                               {
+                                       callbackManager->callOnSuccess(arguments[0]);
+                                       return JSValueMakeNull(context);
+                               }
+
+                               privateData->setMessageJSValueRef(arguments[0]);        //set Message JSValueRef.
                        }
 
-                     IMessagingServicePtr imessagingService = priv->getObject();
+                       IMessagingServicePtr imessagingService = priv->getObject();
                        int opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_DOWNLOAD_BODY);
                        LogDebug("Operation ID is = " << opId);
 
@@ -579,73 +611,95 @@ JSValueRef JSMessagingService::loadMessageAttachment(JSContextRef context,
 
        Try {
 
-               if (JSValueIsObject(context, arguments[0]) && Validator(context).isCallback(arguments[0])) //check
+               //check permission.
+               AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
+                       priv->getContext(),
+                       MessagingExportedNames[MESSAGING_FUNCTION_API_LOAD_MESSAGE_ATTACHMENT]);
+                       TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);       
+
+               if (JSValueIsObject(context, arguments[0]) && !JSValueIsNull(context, arguments[0]))
                {
                        EventMessagingServicePrivateDataPtr privateData( new EventMessagingServicePrivateData(callbackManager) );
+                       if (!privateData)
+                                       return JSTizenExceptionFactory::postException(context, exception, 
+                                               JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
                        
-                       callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[0]));
-                       if (converter->toFunctionOrNull(arguments[1]) && Validator(context).isCallback(arguments[1]) )
-                       {
-                               callbackManager->setOnError(converter->toFunctionOrNull(arguments[1]));
+                       switch(argumentCount){
+                               case 3:
+                               {
+                                       if ( Validator(context).isCallback(arguments[2]))
+                                       {
+                                               callbackManager->setOnError(converter->toFunctionOrNull(arguments[2]));
+                                       }
+                                       else
+                                       {
+                                               return JSTizenExceptionFactory::postException(context, exception, 
+                                                       JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                                       }
+                               }
+                               case 2:
+                               {
+                                       if ( Validator(context).isCallback(arguments[1]))
+                                       {
+                                               callbackManager->setOnSuccess(converter->toFunctionOrNull(arguments[1]));
+                                       }
+                                       else
+                                       {
+                                               return JSTizenExceptionFactory::postException(context, exception, 
+                                                        JSTizenException::INVALID_VALUES_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                                       }       
+                               }
                        }
 
-                       //check permission.
-                       AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
-                               priv->getContext(),
-                               MessagingExportedNames[MESSAGING_FUNCTION_API_LOAD_MESSAGE_ATTACHMENT]);
-                       TIZEN_ASYNC_CBM_ACCESS_HANDLER(status, context, callbackManager);                       
-
-                       IMessagingServicePtr imessagingService = priv->getObject();
                        Api::Messaging::EventMessagingServicePtr event(new Api::Messaging::EventMessagingService());     //create event
-
-                       LogInfo("event");
-                               
                        event->setEventType(EventMessagingService::MESSAGING_SERVICE_EVENT_TYPE_LOAD_MESSAGE_ATTACHMENT);
                        event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData>(privateData));
                        event->setForAsynchronousCall(&MessagingController::getInstance());
-                       LogInfo("agu");
-                       if (argumentCount == 3 && !JSValueIsNull(context, arguments[2]))
-                       {
-                               Api::Messaging::IAttachmentPtr iAttchmentPtr = converter->toIAttachment(arguments[2]);
-                               privateData->setMessageJSValueRef(arguments[2]);        //set Message JSValueRef.
-                               if (iAttchmentPtr)
-                               {       
-                                       event->m_attachment = iAttchmentPtr;
-                                       event->m_message = event->m_attachment->getMessage();
-                                                                               
-                                       if (!event->m_message)
-                                               return JSTizenExceptionFactory::postException(context, exception, 
-                                                       JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
-                               }
-                               else
-                               {
+                       
+                       Api::Messaging::IAttachmentPtr iAttchmentPtr = converter->toIAttachment(arguments[0]);
+                       if (iAttchmentPtr)
+                       {       
+                               event->m_attachment = iAttchmentPtr;
+                               event->m_message = event->m_attachment->getMessage();
+                                                                       
+                               if (!event->m_message)
                                        return JSTizenExceptionFactory::postException(context, exception, 
-                                               JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
-                               }
+                                               JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
+
+                               privateData->setMessageJSValueRef(arguments[0]); //set attachment JSValueRef.
                        }
                        else
                        {
-                                       return JSTizenExceptionFactory::postException(context, exception, 
-                                               JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                               return JSTizenExceptionFactory::postException(context, exception, 
+                                       JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
                        }
-
-                       int opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_DOWNLOAD_ATTACHMENT);
-                       LogDebug("Operation ID is = " << opId);
-
-                       event->opId = opId;
-                       imessagingService->setMessageToOpId(opId, event->m_message);
                        
-                       LogInfo("pendingOperation");
-                       //JSValueRef pendingOperation = WrtDeviceApis::CommonsJavaScript::makePendingOperation(globalContext, event);   //create pendingOperation.
-                       Api::Messaging::ReqReceiverMessageSingleton::Instance().loadMessageAttachment(event);   //load message Body
-
-                       return converter->toJSValueRef(event->opId);
+                       IMessagingServicePtr imessagingService = priv->getObject();
+                       if (imessagingService)
+                       {       
+                               int opId = imessagingService->createOpId(MESSAGING_SERVICE_OP_DOWNLOAD_ATTACHMENT);
+                               LogDebug("Operation ID is = " << opId);
 
+                               event->opId = opId;
+                               imessagingService->setMessageToOpId(opId, event->m_message);
+                               
+                               //JSValueRef pendingOperation = WrtDeviceApis::CommonsJavaScript::makePendingOperation(globalContext, event);   //create pendingOperation.
+                               Api::Messaging::ReqReceiverMessageSingleton::Instance().loadMessageAttachment(event);   //load message Body
+                               
+                               return converter->toJSValueRef(event->opId);
+                       }
+                       else
+                       {
+                               return JSTizenExceptionFactory::postException(context, exception, 
+                                       JSTizenException::NOT_FOUND_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_FOUND);
+                       }
+                       
+                       
                }
                else
                {
                        return JSTizenExceptionFactory::postException(context, exception, 
-                                       JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
+                               JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_INVALID_ARGUMENT);
                }
 
        }
@@ -803,7 +857,6 @@ JSValueRef JSMessagingService::syncFolder(JSContextRef context, JSObjectRef func
 
                IMessagingServicePtr imessagingService = priv->getObject();                     //get MessagingService.
 
-
                Api::Messaging::MessageType msgType = (Api::Messaging::MessageType)imessagingService->getType();
                LogInfo("msgType :" << msgType);
 
@@ -813,7 +866,6 @@ JSValueRef JSMessagingService::syncFolder(JSContextRef context, JSObjectRef func
 
                        if (JSValueIsObject(context, arguments[0]) && !Validator(context).isCallback(arguments[0])) //check
                        {       
-
                                AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
                                        priv->getContext(),
                                        MessagingExportedNames[MESSAGING_FUNCTION_API_SYNC_FOLDER]);
@@ -828,7 +880,8 @@ JSValueRef JSMessagingService::syncFolder(JSContextRef context, JSObjectRef func
                                IMessageFolderPtr folder = converter->toIMessageFolder(arguments[0]);
                                if ( folder )
                                {
-                                       event->m_folder_name = folder->getName();               //it will be changed to the folder ptr
+                                       //event->m_folder_name = folder->getName();             //it will be changed to the folder ptr
+                                       event->m_folder_name = folder->getPath();               //it will be changed to the folder ptr
                                }
 
                                if ( argumentCount > 1 )
@@ -873,6 +926,10 @@ JSValueRef JSMessagingService::syncFolder(JSContextRef context, JSObjectRef func
                                                JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);
                        }
                }
+               Catch(WrtDeviceApis::Commons::UnsupportedException) {
+                       return JSTizenExceptionFactory::postException(context, exception, 
+                                       JSTizenException::NOT_SUPPORTED_ERROR, JSMESSAGING_EXCEPTION_MSG_NOT_SUPPORTED);
+               }
                Catch(WrtDeviceApis::Commons::ConversionException) {
                        return JSTizenExceptionFactory::postException(context, exception, 
                                        JSTizenException::TYPE_MISMATCH_ERROR, JSMESSAGING_EXCEPTION_MSG_TYPE_MISMATCH);