2 // Tizen Web Device API
3 // Copyright (c) 2012 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 #include "JSMessagingStorage.h"
19 #include "JSMessagingService.h"
20 #include "MessagingListener.h"
21 #include "ConverterMessage.h"
22 #include "MessagingStorageMultiCallback.h"
23 #include "MessageListenerManager.h"
24 #include "ReqReceiverMessage.h"
27 #include <FilterConverter.h>
29 #include <CommonsJavaScript/Converter.h>
30 #include <CommonsJavaScript/Validator.h>
31 #include <CommonsJavaScript/JSUtils.h>
32 #include <CommonsJavaScript/JSCallbackManager.h>
33 #include <CommonsJavaScript/Utils.h>
34 #include <CommonsJavaScript/JSDOMExceptionFactory.h>
35 #include <CommonsJavaScript/SecurityExceptions.h>
37 #include <JSTizenExceptionFactory.h>
38 #include <JSTizenException.h>
39 #include <SecurityExceptions.h>
41 #include <JSWebAPIError.h>
42 #include <ArgumentValidator.h>
45 #include "MessagingErrorMsg.h"
46 #include "MessageAsyncCallbackManager.h"
47 #include "MessageFilterConverter.h"
48 #include "plugin_config.h"
53 using namespace WrtDeviceApis::Commons;
54 using namespace WrtDeviceApis::CommonsJavaScript;
55 using namespace DeviceAPI::Tizen;
56 using namespace DeviceAPI::Common;
62 JSClassRef JSMessagingStorage::m_jsClassRef = NULL;
64 JSClassDefinition JSMessagingStorage::m_classInfo =
67 kJSClassAttributeNone,
77 NULL, //deleteProperty,
78 NULL, //getPropertyNames,
85 JSStaticFunction JSMessagingStorage::m_function[] =
87 { "addDraftMessage", JSMessagingStorage::addDraftMessage, kJSPropertyAttributeNone },
88 { "findMessages", JSMessagingStorage::findMessages, kJSPropertyAttributeNone },
89 { "removeMessages", JSMessagingStorage::removeMessages, kJSPropertyAttributeNone },
90 { "updateMessages", JSMessagingStorage::updateMessages, kJSPropertyAttributeNone },
91 { "findConversations", JSMessagingStorage::findConversations, kJSPropertyAttributeNone },
92 { "removeConversations", JSMessagingStorage::removeConversations, kJSPropertyAttributeNone },
93 { "findFolders", JSMessagingStorage::findFolders, kJSPropertyAttributeNone },
94 { "addMessagesChangeListener", JSMessagingStorage::addMessagesChangeListener, kJSPropertyAttributeNone },
95 { "addConversationsChangeListener", JSMessagingStorage::addConversationsChangeListener, kJSPropertyAttributeNone },
96 { "addFoldersChangeListener", JSMessagingStorage::addFoldersChangeListener, kJSPropertyAttributeNone },
97 { "removeChangeListener", JSMessagingStorage::removeChangeListener, kJSPropertyAttributeNone },
101 const JSClassRef JSMessagingStorage::getClassRef()
105 m_jsClassRef = JSClassCreate(&m_classInfo);
110 void JSMessagingStorage::initialize(JSContextRef context, JSObjectRef object)
112 LoggerD("creation messaging instance");
115 void JSMessagingStorage::finalize(JSObjectRef object)
119 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(object));
122 LoggerD("deleting private object (messaging)");
123 // for messaging object, private object is shared pointer, so will be deleted automatically
125 // object will be deleted, but used to show that private object is deleted
126 JSObjectSetPrivate(object, NULL);
130 bool JSMessagingStorage::hasInstance(JSContextRef context, JSObjectRef constructor, JSValueRef possibleInstance, JSValueRef* exception)
132 return JSValueIsObjectOfClass(context, possibleInstance, getClassRef());
136 JSValueRef JSMessagingStorage::getProperty(JSContextRef context, JSObjectRef object, JSStringRef propertyName, JSValueRef* exception)
139 JSValueRef retVal = NULL;
143 Converter convert(context);
144 if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_INBOX"))
146 LoggerD("FOLDER_INBOX" << ":" << "1");
147 retVal = convert.toJSValueRef(INBOX);
149 else if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_OUTBOX"))
151 LoggerD("FOLDER_OUTBOX" << ":" << "2");
152 retVal = convert.toJSValueRef(OUTBOX);
154 else if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_DRAFTS"))
156 LoggerD("FOLDER_DRAFTS" << ":" << "3");
157 retVal = convert.toJSValueRef(DRAFTBOX);
159 else if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_SENTBOX"))
161 LoggerD("FOLDER_SENTBOX" << ":" << "4");
162 retVal = convert.toJSValueRef(SENTBOX);
166 retVal = JSValueMakeUndefined(context);
169 Catch (WrtDeviceApis::Commons::Exception)
171 LoggerE("Exception: " << _rethrown_exception.GetMessage());
172 return JSTizenExceptionFactory::postException(context, exception,
173 JSTizenException::UNKNOWN_ERROR, JSMESSAGING_EXCEPTION_MSG_UNKNOWN);
181 JSValueRef JSMessagingStorage::addDraftMessage(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
182 const JSValueRef arguments[], JSValueRef* exception)
187 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
188 MessagingExportedNames[MESSAGING_FUNCTION_API_ADD_DRAFT_MESSAGE]);
189 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
191 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
193 LoggerE("Private object is NULL.");
194 DeviceAPI::Common::UnknownException err("Private object is NULL.");
195 return JSWebAPIError::throwException(context, exception, err);
198 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
200 LoggerE("objectPriv is NULL.");
201 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
202 return JSWebAPIError::throwException(context, exception, err);
205 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
206 callbackManager = JSCallbackManager::createObject(priv->getContext());
207 if (!callbackManager) {
208 LoggerE("callbackManager is NULL.");
209 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
210 return JSWebAPIError::throwException(context, exception, err);
213 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
216 ArgumentValidator validator(context, argumentCount, arguments);
218 // argu 1. Message ( mandatory )
219 IMessagePtr msg = converter->toIMessage(validator.toObject(0));
221 // argu 2. Success callback (optional & nullable)
222 callbackManager->setOnSuccess(validator.toFunction(1, true));
224 // argu 3. error callback (optional & nullable)
225 callbackManager->setOnError(validator.toFunction(2, true));
227 callbackManager->setObject(thisObject);
229 EventAddDraftMessagePtr event(new EventAddDraftMessage());
231 FilterConverterFactory::ConverterType filterConverter = FilterConverterFactory::getConverter(context);
233 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
234 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
237 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
238 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
242 event->setIndex(objectPriv->getIndex());
243 event->setType(objectPriv->getType());
244 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
245 event->setForAsynchronousCall(&MessagingListener::getInstance());
247 ReqReceiverMessageSingleton::Instance().addDraftMessage(event);
248 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
250 catch(const BasePlatformException& err) {
251 LoggerE(err.getMessage().c_str());
252 return JSWebAPIError::throwException(context, exception, err);
254 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
255 LoggerE(exc.GetMessage().c_str());
256 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
257 return JSWebAPIError::throwException(context, exception, err);
259 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
260 LoggerE(exc.GetMessage().c_str());
261 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
262 return JSWebAPIError::throwException(context, exception, err);
264 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
265 LoggerE(exc.GetMessage().c_str());
266 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
267 return JSWebAPIError::throwException(context, exception, err);
269 catch (const WrtDeviceApis::Commons::Exception& exc) {
270 LoggerE(exc.GetMessage().c_str());
271 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
272 return JSWebAPIError::throwException(context, exception, err);
275 return JSValueMakeUndefined(context);
278 JSValueRef JSMessagingStorage::findMessages(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
279 const JSValueRef arguments[], JSValueRef* exception)
285 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
286 MessagingExportedNames[MESSAGING_FUNCTION_API_FIND_MESSAGES]);
287 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
289 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
291 LoggerE("Private object is NULL.");
292 DeviceAPI::Common::UnknownException err("Private object is NULL.");
293 return JSWebAPIError::throwException(context, exception, err);
296 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
298 LoggerE("objectPriv is NULL.");
299 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
300 return JSWebAPIError::throwException(context, exception, err);
303 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
304 callbackManager = JSCallbackManager::createObject(priv->getContext());
305 if (!callbackManager) {
306 LoggerE("callbackManager is NULL.");
307 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
308 return JSWebAPIError::throwException(context, exception, err);
311 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
314 EventQueryMessagesPtr event(new EventQueryMessages());
316 MessageMessagesFilterConverterFactory::ConverterType filterConverter =
317 MessageMessagesFilterConverterFactory::getConverter(context);
319 ArgumentValidator validator(context, argumentCount, arguments);
321 // argu 1. filter ( mandatory )
322 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(0));
324 throw DeviceAPI::Common::TypeMismatchException("Invalid filter.");
327 // argu 2. Success callback ( mandatory )
328 callbackManager->setOnSuccess(validator.toFunction(1));
330 // argu 3. error callback (optional & nullable)
331 callbackManager->setOnError(validator.toFunction(2, true));
333 callbackManager->setObject(thisObject);
335 // argu 4. Sorting mode (optional & nullable)
336 JSValueRef param4 = validator.toJSValueRef(3, true);
337 if ((argumentCount >= 4)
338 && (!JSValueIsNull(context, param4))
339 && (!JSValueIsUndefined(context, param4)))
341 DeviceAPI::Tizen::SortModePtr sortMode = filterConverter->toSortMode(param4);
342 event->setSortMode(sortMode);
345 // argu 5. limit (optional & nullable)
346 long limit = validator.toULong(4, true, 0);
348 // argu 6. offset (optional & nullable)
349 long offset = validator.toULong(5, true, 0);
351 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
352 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
355 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
356 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
359 event->setFilter(filter);
360 event->setLimit(limit);
361 event->setOffset(offset);
362 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
363 event->setForAsynchronousCall(&MessagingListener::getInstance());
364 event->setIndex(objectPriv->getIndex());
365 event->setType(objectPriv->getType());
367 ReqReceiverMessageSingleton::Instance().queryMessages(event);
368 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
370 catch(const BasePlatformException& err) {
371 LoggerE(err.getMessage().c_str());
372 return JSWebAPIError::throwException(context, exception, err);
374 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
375 LoggerE(exc.GetMessage().c_str());
376 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
377 return JSWebAPIError::throwException(context, exception, err);
379 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
380 LoggerE(exc.GetMessage().c_str());
381 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
382 return JSWebAPIError::throwException(context, exception, err);
384 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
385 LoggerE(exc.GetMessage().c_str());
386 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
387 return JSWebAPIError::throwException(context, exception, err);
389 catch (const WrtDeviceApis::Commons::Exception& exc) {
390 LoggerE(exc.GetMessage().c_str());
391 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
392 return JSWebAPIError::throwException(context, exception, err);
395 return JSValueMakeUndefined(context);
398 JSValueRef JSMessagingStorage::removeMessages(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
399 const JSValueRef arguments[], JSValueRef* exception)
404 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
405 MessagingExportedNames[MESSAGING_FUNCTION_API_REMOVE_MESSAGES]);
406 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
408 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
410 LoggerE("Private object is NULL.");
411 DeviceAPI::Common::UnknownException err("Private object is NULL.");
412 return JSWebAPIError::throwException(context, exception, err);
415 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
417 LoggerE("objectPriv is NULL.");
418 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
419 return JSWebAPIError::throwException(context, exception, err);
422 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
423 callbackManager = JSCallbackManager::createObject(priv->getContext());
424 if (!callbackManager) {
425 LoggerE("callbackManager is NULL.");
426 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
427 return JSWebAPIError::throwException(context, exception, err);
430 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
433 EventDeleteMessagesPtr event(new EventDeleteMessages());
435 FilterConverterFactory::ConverterType filterConverter = FilterConverterFactory::getConverter(context);
437 ArgumentValidator validator(context, argumentCount, arguments);
439 // argu 1. Messages ( mandatory )
440 std::vector<JSValueRef> jsMsgsArray = validator.toJSValueRefVector(0);
441 std::vector<IMessagePtr> msgs;
442 for (std::vector<JSValueRef>::iterator it = jsMsgsArray.begin() ; it != jsMsgsArray.end(); ++it)
444 IMessagePtr msg = converter->toIMessage(*it);
448 // argu 2. Success callback (optional & nullable)
449 callbackManager->setOnSuccess(validator.toFunction(1,true));
451 // argu 3. error callback (optional & nullable)
452 callbackManager->setOnError(validator.toFunction(2, true));
454 callbackManager->setObject(thisObject);
456 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
457 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
460 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
461 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
464 event->msgArray = msgs;
466 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
467 event->setForAsynchronousCall(&MessagingListener::getInstance());
468 event->setIndex(objectPriv->getIndex());
469 event->setType(objectPriv->getType());
471 ReqReceiverMessageSingleton::Instance().deleteMessages(event);
472 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
474 catch(const BasePlatformException& err) {
475 LoggerE(err.getMessage().c_str());
476 return JSWebAPIError::throwException(context, exception, err);
478 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
479 LoggerE(exc.GetMessage().c_str());
480 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
481 return JSWebAPIError::throwException(context, exception, err);
483 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
484 LoggerE(exc.GetMessage().c_str());
485 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
486 return JSWebAPIError::throwException(context, exception, err);
488 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
489 LoggerE(exc.GetMessage().c_str());
490 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
491 return JSWebAPIError::throwException(context, exception, err);
493 catch (const WrtDeviceApis::Commons::Exception& exc) {
494 LoggerE(exc.GetMessage().c_str());
495 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
496 return JSWebAPIError::throwException(context, exception, err);
499 return JSValueMakeUndefined(context);
502 JSValueRef JSMessagingStorage::updateMessages(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
503 const JSValueRef arguments[], JSValueRef* exception)
509 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
510 MessagingExportedNames[MESSAGING_FUNCTION_API_UPDATE_MESSAGES]);
511 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
513 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
515 LoggerE("Private object is NULL.");
516 DeviceAPI::Common::UnknownException err("Private object is NULL.");
517 return JSWebAPIError::throwException(context, exception, err);
520 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
522 LoggerE("objectPriv is NULL.");
523 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
524 return JSWebAPIError::throwException(context, exception, err);
527 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
528 callbackManager = JSCallbackManager::createObject(priv->getContext());
529 if (!callbackManager) {
530 LoggerE("callbackManager is NULL.");
531 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
532 return JSWebAPIError::throwException(context, exception, err);
535 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
538 EventUpdateMessagesPtr event(new EventUpdateMessages());
540 FilterConverterFactory::ConverterType filterConverter = FilterConverterFactory::getConverter(context);
542 ArgumentValidator validator(context, argumentCount, arguments);
544 // argu 1. Messages ( mandatory )
545 std::vector<JSValueRef> jsMsgsArray = validator.toJSValueRefVector(0);
546 std::vector<IMessagePtr> msgs;
547 for (std::vector<JSValueRef>::iterator it = jsMsgsArray.begin() ; it != jsMsgsArray.end(); ++it)
549 IMessagePtr msg = converter->toIMessage(*it);
553 // argu 2. Success callback (optional & nullable)
554 callbackManager->setOnSuccess(validator.toFunction(1,true));
556 // argu 3. error callback (optional & nullable)
557 callbackManager->setOnError(validator.toFunction(2, true));
559 callbackManager->setObject(thisObject);
561 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
562 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
565 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
566 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
569 event->msgArray = msgs;
570 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
571 event->setForAsynchronousCall(&MessagingListener::getInstance());
573 event->setIndex(objectPriv->getIndex());
574 event->setType(objectPriv->getType());
576 ReqReceiverMessageSingleton::Instance().updateMessages(event);
577 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
580 catch(const BasePlatformException& err) {
581 LoggerE(err.getMessage().c_str());
582 return JSWebAPIError::throwException(context, exception, err);
584 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
585 LoggerE(exc.GetMessage().c_str());
586 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
587 return JSWebAPIError::throwException(context, exception, err);
589 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
590 LoggerE(exc.GetMessage().c_str());
591 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
592 return JSWebAPIError::throwException(context, exception, err);
594 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
595 LoggerE(exc.GetMessage().c_str());
596 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
597 return JSWebAPIError::throwException(context, exception, err);
599 catch (const WrtDeviceApis::Commons::Exception& exc) {
600 LoggerE(exc.GetMessage().c_str());
601 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
602 return JSWebAPIError::throwException(context, exception, err);
605 return JSValueMakeUndefined(context);
608 JSValueRef JSMessagingStorage::findConversations(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
609 const JSValueRef arguments[], JSValueRef* exception)
614 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
615 MessagingExportedNames[MESSAGING_FUNCTION_API_FIND_CONVERSATIONS]);
616 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
618 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
620 LoggerE("Private object is NULL.");
621 DeviceAPI::Common::UnknownException err("Private object is NULL.");
622 return JSWebAPIError::throwException(context, exception, err);
625 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
627 LoggerE("objectPriv is NULL.");
628 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
629 return JSWebAPIError::throwException(context, exception, err);
632 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
633 callbackManager = JSCallbackManager::createObject(priv->getContext());
634 if (!callbackManager) {
635 LoggerE("callbackManager is NULL.");
636 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
637 return JSWebAPIError::throwException(context, exception, err);
640 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
643 EventQueryConversationsPtr event(new EventQueryConversations());
645 MessageConversationsFilterConverterFactory::ConverterType filterConverter =
646 MessageConversationsFilterConverterFactory::getConverter(context);
648 ArgumentValidator validator(context, argumentCount, arguments);
650 // argu 1. filter ( mandatory )
651 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(0));
653 throw DeviceAPI::Common::TypeMismatchException("Invalid filter.");
656 // argu 2. Success callback ( mandatory )
657 callbackManager->setOnSuccess(validator.toFunction(1));
659 // argu 3. error callback (optional & nullable)
660 callbackManager->setOnError(validator.toFunction(2, true));
662 callbackManager->setObject(thisObject);
664 // argu 4. Sorting mode (optional & nullable)
665 JSValueRef param4 = validator.toJSValueRef(3, true);
666 if ((argumentCount >= 4)
667 && (!JSValueIsNull(context, param4))
668 && (!JSValueIsUndefined(context, param4)))
670 DeviceAPI::Tizen::SortModePtr sortMode = filterConverter->toSortMode(param4);
671 event->setSortMode(sortMode);
674 // argu 5. limit (optional & nullable)
675 long limit = validator.toULong(4, true, 0);
677 // argu 6. offset (optional & nullable)
678 long offset = validator.toULong(5, true, 0);
680 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
681 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
684 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
685 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
688 event->setFilter(filter);
689 event->setLimit(limit);
690 event->setOffset(offset);
691 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
692 event->setForAsynchronousCall(&MessagingListener::getInstance());
693 event->setIndex(objectPriv->getIndex());
694 event->setType(objectPriv->getType());
696 ReqReceiverMessageSingleton::Instance().queryConversations(event);
697 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
699 catch(const BasePlatformException& err) {
700 LoggerE(err.getMessage().c_str());
701 return JSWebAPIError::throwException(context, exception, err);
703 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
704 LoggerE(exc.GetMessage().c_str());
705 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
706 return JSWebAPIError::throwException(context, exception, err);
708 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
709 LoggerE(exc.GetMessage().c_str());
710 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
711 return JSWebAPIError::throwException(context, exception, err);
713 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
714 LoggerE(exc.GetMessage().c_str());
715 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
716 return JSWebAPIError::throwException(context, exception, err);
718 catch (const WrtDeviceApis::Commons::Exception& exc) {
719 LoggerE(exc.GetMessage().c_str());
720 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
721 return JSWebAPIError::throwException(context, exception, err);
724 return JSValueMakeUndefined(context);
727 JSValueRef JSMessagingStorage::removeConversations(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
728 const JSValueRef arguments[], JSValueRef* exception)
733 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
734 MessagingExportedNames[MESSAGING_FUNCTION_API_REMOVE_CONVERSATIONS]);
735 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
737 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
739 LoggerE("Private object is NULL.");
740 DeviceAPI::Common::UnknownException err("Private object is NULL.");
741 return JSWebAPIError::throwException(context, exception, err);
744 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
746 LoggerE("objectPriv is NULL.");
747 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
748 return JSWebAPIError::throwException(context, exception, err);
751 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
752 callbackManager = JSCallbackManager::createObject(priv->getContext());
753 if (!callbackManager) {
754 LoggerE("callbackManager is NULL.");
755 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
756 return JSWebAPIError::throwException(context, exception, err);
759 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
762 EventDeleteConversationsPtr event(new EventDeleteConversations());
764 FilterConverterFactory::ConverterType filterConverter = FilterConverterFactory::getConverter(context);
766 ArgumentValidator validator(context, argumentCount, arguments);
768 // argu 1. Messages ( mandatory )
769 std::vector<JSValueRef> jsConvsArray = validator.toJSValueRefVector(0);
770 std::vector<IConversationPtr> deleteConversationArray;
771 for (std::vector<JSValueRef>::iterator it = jsConvsArray.begin() ; it != jsConvsArray.end(); ++it)
773 IConversationPtr conv = converter->toConversation(*it);
774 deleteConversationArray.push_back(conv);
777 // argu 2. Success callback (optional & nullable)
778 callbackManager->setOnSuccess(validator.toFunction(1,true));
780 // argu 3. error callback (optional & nullable)
781 callbackManager->setOnError(validator.toFunction(2, true));
783 callbackManager->setObject(thisObject);
785 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
786 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
789 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
790 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
793 event->setConversations(deleteConversationArray);
794 event->setFilterUsing(false);
796 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
797 event->setForAsynchronousCall(&MessagingListener::getInstance());
798 event->setIndex(objectPriv->getIndex());
799 event->setType(objectPriv->getType());
801 ReqReceiverMessageSingleton::Instance().deleteConversations(event);
802 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
804 catch(const BasePlatformException& err) {
805 LoggerE(err.getMessage().c_str());
806 return JSWebAPIError::throwException(context, exception, err);
808 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
809 LoggerE(exc.GetMessage().c_str());
810 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
811 return JSWebAPIError::throwException(context, exception, err);
813 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
814 LoggerE(exc.GetMessage().c_str());
815 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
816 return JSWebAPIError::throwException(context, exception, err);
818 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
819 LoggerE(exc.GetMessage().c_str());
820 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
821 return JSWebAPIError::throwException(context, exception, err);
823 catch (const WrtDeviceApis::Commons::Exception& exc) {
824 LoggerE(exc.GetMessage().c_str());
825 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
826 return JSWebAPIError::throwException(context, exception, err);
829 return JSValueMakeUndefined(context);
832 JSValueRef JSMessagingStorage::findFolders(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
833 const JSValueRef arguments[], JSValueRef* exception)
838 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
839 MessagingExportedNames[MESSAGING_FUNCTION_API_FIND_FOLDERS]);
840 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
842 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
844 LoggerE("Private object is NULL.");
845 DeviceAPI::Common::UnknownException err("Private object is NULL.");
846 return JSWebAPIError::throwException(context, exception, err);
849 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
851 LoggerE("objectPriv is NULL.");
852 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
853 return JSWebAPIError::throwException(context, exception, err);
856 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
857 callbackManager = JSCallbackManager::createObject(priv->getContext());
858 if (!callbackManager) {
859 LoggerE("callbackManager is NULL.");
860 DeviceAPI::Common::UnknownException err("callbackManager is NULL.");
861 return JSWebAPIError::throwException(context, exception, err);
864 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
867 EventQueryFoldersPtr event(new EventQueryFolders());
869 MessageFoldersFilterConverterFactory::ConverterType filterConverter =
870 MessageFoldersFilterConverterFactory::getConverter(context);
872 ArgumentValidator validator(context, argumentCount, arguments);
874 // argu 1. filter ( mandatory )
875 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(0));
877 throw DeviceAPI::Common::TypeMismatchException("Invalid filter.");
880 // argu 2. Success callback ( mandatory )
881 callbackManager->setOnSuccess(validator.toFunction(1));
883 // argu 3. error callback (optional & nullable)
884 callbackManager->setOnError(validator.toFunction(2, true));
886 callbackManager->setObject(thisObject);
888 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
889 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
892 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
893 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
896 event->setFilter(filter);
897 event->setPrivateData(DPL::StaticPointerCast<WrtDeviceApis::Commons::IEventPrivateData >(callbackManager));
898 event->setForAsynchronousCall(&MessagingListener::getInstance());
899 event->setIndex(objectPriv->getIndex());
900 event->setType(objectPriv->getType());
902 ReqReceiverMessageSingleton::Instance().queryFolders(event);
903 MessageAsyncCallbackManagerSingleton::Instance().registerCallbackManager(callbackManager, priv->getContext());
905 catch(const BasePlatformException& err) {
906 LoggerE(err.getMessage().c_str());
907 return JSWebAPIError::throwException(context, exception, err);
909 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
910 LoggerE(exc.GetMessage().c_str());
911 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
912 return JSWebAPIError::throwException(context, exception, err);
914 catch (const WrtDeviceApis::Commons::NullPointerException& exc) {
915 LoggerE(exc.GetMessage().c_str());
916 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
917 return JSWebAPIError::throwException(context, exception, err);
919 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
920 LoggerE(exc.GetMessage().c_str());
921 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
922 return JSWebAPIError::throwException(context, exception, err);
924 catch (const WrtDeviceApis::Commons::Exception& exc) {
925 LoggerE(exc.GetMessage().c_str());
926 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
927 return JSWebAPIError::throwException(context, exception, err);
930 return JSValueMakeUndefined(context);
933 JSValueRef JSMessagingStorage::addMessagesChangeListener(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
934 const JSValueRef arguments[], JSValueRef* exception)
940 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
941 MessagingExportedNames[MESSAGING_FUNCTION_API_ADD_MESSAGES_CHANGE_LISTNER]);
942 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
944 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
946 LoggerE("Private object is NULL.");
947 DeviceAPI::Common::UnknownException err("Private object is NULL.");
948 return JSWebAPIError::throwException(context, exception, err);
951 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
953 LoggerE("objectPriv is NULL.");
954 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
955 return JSWebAPIError::throwException(context, exception, err);
958 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
959 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesUpdatedCbm(NULL);
960 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesRemovedCbm(NULL);
962 callbackManager = JSCallbackManager::createObject(priv->getContext());
964 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
967 MessageMessagesChangeFilterConverterFactory::ConverterType filterConverter =
968 MessageMessagesChangeFilterConverterFactory::getConverter(context);
970 JSValueRef onSuccessForCbm = NULL;
972 OnMessagesChanged functionResult;
973 int funtionIndex = -1;
975 ArgumentValidator validator(context, argumentCount, arguments);
977 // argu 1. Messages Change Callback ( mandatory )
978 functionResult = converter->toMessageMultifunctions(validator.toJSValueRef(0), MESSAGES_MULTI_FUNCTION);
979 funtionIndex = functionResult.functionIndex;
982 throw DeviceAPI::Common::TypeMismatchException("funtionIndex is not valid.");
985 onSuccessForCbm = functionResult.messagesAdded;
986 if(functionResult.messagesUpdated)
987 messagesUpdatedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesUpdated, NULL);
988 if(functionResult.messagesRemoved)
989 messagesRemovedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesRemoved, NULL);
991 EventOnMessagingStorageChangesPrivateDataPtr privData(
992 new EventOnMessagingStorageChangesPrivateData(callbackManager, messagesUpdatedCbm, messagesRemovedCbm, funtionIndex));
994 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
995 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
998 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
999 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
1002 // argu 2. filter ( optional )
1003 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1005 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1006 privData->setFilter(filter);
1011 callbackManager->setOnSuccess(onSuccessForCbm);
1014 privData->setIndex(objectPriv->getIndex());
1015 privData->setType(objectPriv->getType());
1017 MessagingListener::getInstance().registerMessageReceivedEmitter(privData);
1019 // add to map and return index
1020 long id = MessagingListener::getInstance().addIncomingMsgCallback(callbackManager, funtionIndex);
1021 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, id));
1022 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1023 MessageListenerManagerSingleton::Instance().registerListener(listenerItem, priv->getContext());
1025 return JSValueMakeNumber(context, id);
1027 catch(const BasePlatformException& err) {
1028 LoggerE(err.getMessage().c_str());
1029 return JSWebAPIError::throwException(context, exception, err);
1031 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1032 LoggerE(exc.GetMessage().c_str());
1033 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1034 return JSWebAPIError::throwException(context, exception, err);
1036 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1037 LoggerE(exc.GetMessage().c_str());
1038 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1039 return JSWebAPIError::throwException(context, exception, err);
1041 catch (const WrtDeviceApis::Commons::UnsupportedException& exc) {
1042 LoggerE(exc.GetMessage().c_str());
1043 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1044 return JSWebAPIError::throwException(context, exception, err);
1046 catch (const WrtDeviceApis::Commons::AlreadyInUseException& exc) {
1047 LoggerE(exc.GetMessage().c_str());
1048 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1049 return JSWebAPIError::throwException(context, exception, err);
1051 catch (const WrtDeviceApis::Commons::Exception& exc) {
1052 LoggerE(exc.GetMessage().c_str());
1053 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1054 return JSWebAPIError::throwException(context, exception, err);
1058 JSValueRef JSMessagingStorage::addConversationsChangeListener(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
1059 const JSValueRef arguments[], JSValueRef* exception)
1064 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
1065 MessagingExportedNames[MESSAGING_FUNCTION_API_ADD_CONVERSATIONS_CHANGE_LISTNER]);
1066 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
1068 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
1070 LoggerE("Private object is NULL.");
1071 DeviceAPI::Common::UnknownException err("Private object is NULL.");
1072 return JSWebAPIError::throwException(context, exception, err);
1075 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
1077 LoggerE("objectPriv is NULL.");
1078 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
1079 return JSWebAPIError::throwException(context, exception, err);
1082 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
1083 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesUpdatedCbm(NULL);
1084 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesRemovedCbm(NULL);
1086 callbackManager = JSCallbackManager::createObject(priv->getContext());
1088 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
1091 MessageConversationsFilterConverterFactory::ConverterType filterConverter =
1092 MessageConversationsFilterConverterFactory::getConverter(context);
1094 JSValueRef onSuccessForCbm = NULL;
1096 OnMessagesChanged functionResult;
1097 int funtionIndex = -1;
1099 ArgumentValidator validator(context, argumentCount, arguments);
1101 // argu 1. Messages Change Callback ( mandatory )
1102 functionResult = converter->toMessageMultifunctions(validator.toJSValueRef(0), CONVERSATIONS_MULTI_FUNCTION);
1103 funtionIndex = functionResult.functionIndex;
1104 if(funtionIndex < 0)
1106 throw DeviceAPI::Common::TypeMismatchException("funtionIndex is not valid.");
1109 onSuccessForCbm = functionResult.messagesAdded;
1110 if(functionResult.messagesUpdated)
1111 messagesUpdatedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesUpdated, NULL);
1112 if(functionResult.messagesRemoved)
1113 messagesRemovedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesRemoved, NULL);
1115 EventOnMessagingStorageChangesPrivateDataPtr privData(
1116 new EventOnMessagingStorageChangesPrivateData(callbackManager, messagesUpdatedCbm, messagesRemovedCbm, funtionIndex));
1118 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
1119 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
1122 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
1123 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
1126 // argu 2. filter ( optional )
1127 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1129 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1130 privData->setFilter(filter);
1135 callbackManager->setOnSuccess(onSuccessForCbm);
1138 privData->setIndex(objectPriv->getIndex());
1139 privData->setType(objectPriv->getType());
1141 MessagingListener::getInstance().registerMessageReceivedEmitter(privData);
1143 long id = MessagingListener::getInstance().addIncomingMsgCallback(callbackManager, funtionIndex);
1144 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, id));
1145 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1146 MessageListenerManagerSingleton::Instance().registerListener(listenerItem, priv->getContext());
1148 // add to map and return index
1149 return JSValueMakeNumber(context, id);
1152 catch(const BasePlatformException& err) {
1153 LoggerE(err.getMessage().c_str());
1154 return JSWebAPIError::throwException(context, exception, err);
1156 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1157 LoggerE(exc.GetMessage().c_str());
1158 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1159 return JSWebAPIError::throwException(context, exception, err);
1161 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1162 LoggerE(exc.GetMessage().c_str());
1163 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1164 return JSWebAPIError::throwException(context, exception, err);
1166 catch (const WrtDeviceApis::Commons::UnsupportedException& exc) {
1167 LoggerE(exc.GetMessage().c_str());
1168 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1169 return JSWebAPIError::throwException(context, exception, err);
1171 catch (const WrtDeviceApis::Commons::AlreadyInUseException& exc) {
1172 LoggerE(exc.GetMessage().c_str());
1173 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1174 return JSWebAPIError::throwException(context, exception, err);
1176 catch (const WrtDeviceApis::Commons::Exception& exc) {
1177 LoggerE(exc.GetMessage().c_str());
1178 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1179 return JSWebAPIError::throwException(context, exception, err);
1184 JSValueRef JSMessagingStorage::addFoldersChangeListener(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
1185 const JSValueRef arguments[], JSValueRef* exception)
1190 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
1191 MessagingExportedNames[MESSAGING_FUNCTION_API_ADD_FOLDERS_CHANGE_LISTNER]);
1192 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
1194 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
1196 LoggerE("Private object is NULL.");
1197 DeviceAPI::Common::UnknownException err("Private object is NULL.");
1198 return JSWebAPIError::throwException(context, exception, err);
1201 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
1203 LoggerE("objectPriv is NULL.");
1204 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
1205 return JSWebAPIError::throwException(context, exception, err);
1208 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
1209 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesUpdatedCbm(NULL);
1210 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesRemovedCbm(NULL);
1212 callbackManager = JSCallbackManager::createObject(priv->getContext());
1214 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
1217 MessageFoldersChangeFilterConverterFactory::ConverterType filterConverter =
1218 MessageFoldersChangeFilterConverterFactory::getConverter(context);
1219 JSValueRef onSuccessForCbm = NULL;
1221 OnMessagesChanged functionResult;
1222 int funtionIndex = -1;
1224 ArgumentValidator validator(context, argumentCount, arguments);
1226 // argu 1. Messages Change Callback ( mandatory )
1227 functionResult = converter->toMessageMultifunctions(validator.toJSValueRef(0), FOLDERS_MULTI_FUNCTION);
1228 funtionIndex = functionResult.functionIndex;
1229 if(funtionIndex < 0)
1231 throw DeviceAPI::Common::TypeMismatchException("funtionIndex is not valid.");
1234 onSuccessForCbm = functionResult.messagesAdded;
1235 if(functionResult.messagesUpdated)
1236 messagesUpdatedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesUpdated, NULL);
1237 if(functionResult.messagesRemoved)
1238 messagesRemovedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesRemoved, NULL);
1240 EventOnMessagingStorageChangesPrivateDataPtr privData(
1241 new EventOnMessagingStorageChangesPrivateData(callbackManager, messagesUpdatedCbm, messagesRemovedCbm, funtionIndex));
1243 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
1244 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
1247 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
1248 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
1251 // argu 2. filter ( optional )
1252 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1254 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1255 privData->setFilter(filter);
1260 callbackManager->setOnSuccess(onSuccessForCbm);
1263 privData->setIndex(objectPriv->getIndex());
1264 privData->setType(objectPriv->getType());
1266 MessagingListener::getInstance().registerMessageReceivedEmitter(privData);
1268 long id = MessagingListener::getInstance().addIncomingMsgCallback(callbackManager, funtionIndex);
1269 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, id));
1270 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1271 MessageListenerManagerSingleton::Instance().registerListener(listenerItem, priv->getContext());
1273 // add to map and return index
1274 return JSValueMakeNumber(context, id);
1276 catch(const BasePlatformException& err) {
1277 LoggerE(err.getMessage().c_str());
1278 return JSWebAPIError::throwException(context, exception, err);
1280 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1281 LoggerE(exc.GetMessage().c_str());
1282 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1283 return JSWebAPIError::throwException(context, exception, err);
1285 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1286 LoggerE(exc.GetMessage().c_str());
1287 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1288 return JSWebAPIError::throwException(context, exception, err);
1290 catch (const WrtDeviceApis::Commons::UnsupportedException& exc) {
1291 LoggerE(exc.GetMessage().c_str());
1292 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1293 return JSWebAPIError::throwException(context, exception, err);
1295 catch (const WrtDeviceApis::Commons::AlreadyInUseException& exc) {
1296 LoggerE(exc.GetMessage().c_str());
1297 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1298 return JSWebAPIError::throwException(context, exception, err);
1300 catch (const WrtDeviceApis::Commons::Exception& exc) {
1301 LoggerE(exc.GetMessage().c_str());
1302 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1303 return JSWebAPIError::throwException(context, exception, err);
1307 JSValueRef JSMessagingStorage::removeChangeListener(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount,
1308 const JSValueRef arguments[], JSValueRef* exception)
1313 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
1314 MessagingExportedNames[MESSAGING_FUNCTION_API_REMOVE_CHANGE_LISTENER]);
1315 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
1317 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
1319 LoggerE("Private object is NULL.");
1320 DeviceAPI::Common::UnknownException err("Private object is NULL.");
1321 return JSWebAPIError::throwException(context, exception, err);
1324 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
1326 LoggerE("objectPriv is NULL.");
1327 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
1328 return JSWebAPIError::throwException(context, exception, err);
1331 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
1332 callbackManager = JSCallbackManager::createObject(priv->getContext());
1334 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
1337 ArgumentValidator validator(context, argumentCount, arguments);
1339 // argu 1. watchId ( mandatory )
1340 long handler = validator.toLong(0);
1343 MessagingListener::getInstance().removeIncomingMsgCallback(handler, objectPriv->getType(), objectPriv->getIndex());
1345 catch(const WrtDeviceApis::Commons::NotFoundException& exc)
1347 LogError(exc.GetMessage().c_str());
1348 return JSValueMakeUndefined(context);
1351 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, objectPriv->getIndex()));
1352 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1353 MessageListenerManagerSingleton::Instance().unregisterListener(listenerItem);
1355 catch(const BasePlatformException& err) {
1356 LoggerE(err.getMessage().c_str());
1357 return JSWebAPIError::throwException(context, exception, err);
1359 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1360 LoggerE(exc.GetMessage().c_str());
1361 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1362 return JSWebAPIError::throwException(context, exception, err);
1364 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1365 LoggerE(exc.GetMessage().c_str());
1366 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1367 return JSWebAPIError::throwException(context, exception, err);
1369 catch (const WrtDeviceApis::Commons::Exception& exc) {
1370 LoggerE(exc.GetMessage().c_str());
1371 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1372 return JSWebAPIError::throwException(context, exception, err);
1375 return JSValueMakeUndefined(context);