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 LogDebug("creation messaging instance");
115 void JSMessagingStorage::finalize(JSObjectRef object)
119 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(object));
122 LogDebug("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 LogDebug("FOLDER_INBOX" << ":" << "1");
147 retVal = convert.toJSValueRef(INBOX);
149 else if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_OUTBOX"))
151 LogDebug("FOLDER_OUTBOX" << ":" << "2");
152 retVal = convert.toJSValueRef(OUTBOX);
154 else if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_DRAFTS"))
156 LogDebug("FOLDER_DRAFTS" << ":" << "3");
157 retVal = convert.toJSValueRef(DRAFTBOX);
159 else if (JSStringIsEqualToUTF8CString(propertyName, "FOLDER_SENTBOX"))
161 LogDebug("FOLDER_SENTBOX" << ":" << "4");
162 retVal = convert.toJSValueRef(SENTBOX);
166 retVal = JSValueMakeUndefined(context);
169 Catch (WrtDeviceApis::Commons::Exception)
171 LogError("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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
252 return JSWebAPIError::throwException(context, exception, err);
254 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
255 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
372 return JSWebAPIError::throwException(context, exception, err);
374 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
375 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
476 return JSWebAPIError::throwException(context, exception, err);
478 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
479 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
582 return JSWebAPIError::throwException(context, exception, err);
584 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
585 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
701 return JSWebAPIError::throwException(context, exception, err);
703 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
704 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
806 return JSWebAPIError::throwException(context, exception, err);
808 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
809 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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 LogError("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 LogError(err.getMessage().c_str());
907 return JSWebAPIError::throwException(context, exception, err);
909 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
910 LogError(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 LogError(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 LogError(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 LogError(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 LogError("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 LogError("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));
979 funtionIndex = functionResult.functionIndex;
982 throw DeviceAPI::Common::TypeMismatchException("funtionIndex is not valid.");
985 onSuccessForCbm = functionResult.messagesAdded;
986 messagesUpdatedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesUpdated, NULL);
987 messagesRemovedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesRemoved, NULL);
989 EventOnMessagingStorageChangesPrivateDataPtr privData(
990 new EventOnMessagingStorageChangesPrivateData(callbackManager, messagesUpdatedCbm, messagesRemovedCbm, funtionIndex));
992 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
993 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
996 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
997 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
1000 // argu 2. filter ( optional )
1001 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1003 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1004 privData->setFilter(filter);
1009 callbackManager->setOnSuccess(onSuccessForCbm);
1012 privData->setIndex(objectPriv->getIndex());
1013 privData->setType(objectPriv->getType());
1015 MessagingListener::getInstance().registerMessageReceivedEmitter(privData);
1017 // add to map and return index
1018 long id = MessagingListener::getInstance().addIncomingMsgCallback(callbackManager, funtionIndex);
1019 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, id));
1020 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1021 MessageListenerManagerSingleton::Instance().registerListener(listenerItem, priv->getContext());
1023 return JSValueMakeNumber(context, id);
1025 catch(const BasePlatformException& err) {
1026 LogError(err.getMessage().c_str());
1027 return JSWebAPIError::throwException(context, exception, err);
1029 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1030 LogError(exc.GetMessage().c_str());
1031 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1032 return JSWebAPIError::throwException(context, exception, err);
1034 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1035 LogError(exc.GetMessage().c_str());
1036 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1037 return JSWebAPIError::throwException(context, exception, err);
1039 catch (const WrtDeviceApis::Commons::UnsupportedException& exc) {
1040 LogError(exc.GetMessage().c_str());
1041 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1042 return JSWebAPIError::throwException(context, exception, err);
1044 catch (const WrtDeviceApis::Commons::AlreadyInUseException& exc) {
1045 LogError(exc.GetMessage().c_str());
1046 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1047 return JSWebAPIError::throwException(context, exception, err);
1049 catch (const WrtDeviceApis::Commons::Exception& exc) {
1050 LogError(exc.GetMessage().c_str());
1051 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1052 return JSWebAPIError::throwException(context, exception, err);
1056 JSValueRef JSMessagingStorage::addConversationsChangeListener(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
1057 const JSValueRef arguments[], JSValueRef* exception)
1059 LogDebug("Entered");
1062 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
1063 MessagingExportedNames[MESSAGING_FUNCTION_API_ADD_CONVERSATIONS_CHANGE_LISTNER]);
1064 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
1066 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
1068 LogError("Private object is NULL.");
1069 DeviceAPI::Common::UnknownException err("Private object is NULL.");
1070 return JSWebAPIError::throwException(context, exception, err);
1073 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
1075 LogError("objectPriv is NULL.");
1076 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
1077 return JSWebAPIError::throwException(context, exception, err);
1080 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
1081 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesUpdatedCbm(NULL);
1082 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesRemovedCbm(NULL);
1084 callbackManager = JSCallbackManager::createObject(priv->getContext());
1086 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
1089 MessageConversationsFilterConverterFactory::ConverterType filterConverter =
1090 MessageConversationsFilterConverterFactory::getConverter(context);
1092 JSValueRef onSuccessForCbm = NULL;
1094 OnMessagesChanged functionResult;
1095 int funtionIndex = -1;
1097 ArgumentValidator validator(context, argumentCount, arguments);
1099 // argu 1. Messages Change Callback ( mandatory )
1100 functionResult = converter->toMessageMultifunctions(validator.toJSValueRef(0));
1101 funtionIndex = functionResult.functionIndex;
1102 if(funtionIndex < 0)
1104 throw DeviceAPI::Common::TypeMismatchException("funtionIndex is not valid.");
1107 onSuccessForCbm = functionResult.messagesAdded;
1108 messagesUpdatedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesUpdated, NULL);
1109 messagesRemovedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesRemoved, NULL);
1111 EventOnMessagingStorageChangesPrivateDataPtr privData(
1112 new EventOnMessagingStorageChangesPrivateData(callbackManager, messagesUpdatedCbm, messagesRemovedCbm, funtionIndex));
1114 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
1115 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
1118 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
1119 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
1122 // argu 2. filter ( optional )
1123 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1125 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1126 privData->setFilter(filter);
1131 callbackManager->setOnSuccess(onSuccessForCbm);
1134 privData->setIndex(objectPriv->getIndex());
1135 privData->setType(objectPriv->getType());
1137 MessagingListener::getInstance().registerMessageReceivedEmitter(privData);
1139 long id = MessagingListener::getInstance().addIncomingMsgCallback(callbackManager, funtionIndex);
1140 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, id));
1141 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1142 MessageListenerManagerSingleton::Instance().registerListener(listenerItem, priv->getContext());
1144 // add to map and return index
1145 return JSValueMakeNumber(context, id);
1148 catch(const BasePlatformException& err) {
1149 LogError(err.getMessage().c_str());
1150 return JSWebAPIError::throwException(context, exception, err);
1152 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1153 LogError(exc.GetMessage().c_str());
1154 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1155 return JSWebAPIError::throwException(context, exception, err);
1157 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1158 LogError(exc.GetMessage().c_str());
1159 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1160 return JSWebAPIError::throwException(context, exception, err);
1162 catch (const WrtDeviceApis::Commons::UnsupportedException& exc) {
1163 LogError(exc.GetMessage().c_str());
1164 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1165 return JSWebAPIError::throwException(context, exception, err);
1167 catch (const WrtDeviceApis::Commons::AlreadyInUseException& exc) {
1168 LogError(exc.GetMessage().c_str());
1169 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1170 return JSWebAPIError::throwException(context, exception, err);
1172 catch (const WrtDeviceApis::Commons::Exception& exc) {
1173 LogError(exc.GetMessage().c_str());
1174 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1175 return JSWebAPIError::throwException(context, exception, err);
1180 JSValueRef JSMessagingStorage::addFoldersChangeListener(JSContextRef context, JSObjectRef object, JSObjectRef thisObject, size_t argumentCount,
1181 const JSValueRef arguments[], JSValueRef* exception)
1183 LogDebug("Entered");
1186 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
1187 MessagingExportedNames[MESSAGING_FUNCTION_API_ADD_FOLDERS_CHANGE_LISTNER]);
1188 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
1190 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
1192 LogError("Private object is NULL.");
1193 DeviceAPI::Common::UnknownException err("Private object is NULL.");
1194 return JSWebAPIError::throwException(context, exception, err);
1197 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
1199 LogError("objectPriv is NULL.");
1200 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
1201 return JSWebAPIError::throwException(context, exception, err);
1204 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
1205 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesUpdatedCbm(NULL);
1206 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr messagesRemovedCbm(NULL);
1208 callbackManager = JSCallbackManager::createObject(priv->getContext());
1210 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
1213 MessageFoldersChangeFilterConverterFactory::ConverterType filterConverter =
1214 MessageFoldersChangeFilterConverterFactory::getConverter(context);
1215 JSValueRef onSuccessForCbm = NULL;
1217 OnMessagesChanged functionResult;
1218 int funtionIndex = -1;
1220 ArgumentValidator validator(context, argumentCount, arguments);
1222 // argu 1. Messages Change Callback ( mandatory )
1223 functionResult = converter->toMessageMultifunctions(validator.toJSValueRef(0));
1224 funtionIndex = functionResult.functionIndex;
1225 if(funtionIndex < 0)
1227 throw DeviceAPI::Common::TypeMismatchException("funtionIndex is not valid.");
1230 onSuccessForCbm = functionResult.messagesAdded;
1231 messagesUpdatedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesUpdated, NULL);
1232 messagesRemovedCbm = JSCallbackManager::createObject(priv->getContext(), functionResult.messagesRemoved, NULL);
1234 EventOnMessagingStorageChangesPrivateDataPtr privData(
1235 new EventOnMessagingStorageChangesPrivateData(callbackManager, messagesUpdatedCbm, messagesRemovedCbm, funtionIndex));
1237 if ((objectPriv->getType() < SMS) || (objectPriv->getType() > EMAIL)) {
1238 throw DeviceAPI::Common::TypeMismatchException("Message type is not SMS or MMS or EMAIL.");
1241 if ((objectPriv->getType() == EMAIL) && (objectPriv->getIndex() < 1)) {
1242 throw DeviceAPI::Common::TypeMismatchException("serviceId is not defined.");
1245 // argu 2. filter ( optional )
1246 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1248 DeviceAPI::Tizen::FilterPtr filter = filterConverter->toFilter(validator.toJSValueRef(1));
1249 privData->setFilter(filter);
1254 callbackManager->setOnSuccess(onSuccessForCbm);
1257 privData->setIndex(objectPriv->getIndex());
1258 privData->setType(objectPriv->getType());
1260 MessagingListener::getInstance().registerMessageReceivedEmitter(privData);
1262 long id = MessagingListener::getInstance().addIncomingMsgCallback(callbackManager, funtionIndex);
1263 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, id));
1264 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1265 MessageListenerManagerSingleton::Instance().registerListener(listenerItem, priv->getContext());
1267 // add to map and return index
1268 return JSValueMakeNumber(context, id);
1270 catch(const BasePlatformException& err) {
1271 LogError(err.getMessage().c_str());
1272 return JSWebAPIError::throwException(context, exception, err);
1274 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1275 LogError(exc.GetMessage().c_str());
1276 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1277 return JSWebAPIError::throwException(context, exception, err);
1279 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1280 LogError(exc.GetMessage().c_str());
1281 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1282 return JSWebAPIError::throwException(context, exception, err);
1284 catch (const WrtDeviceApis::Commons::UnsupportedException& exc) {
1285 LogError(exc.GetMessage().c_str());
1286 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1287 return JSWebAPIError::throwException(context, exception, err);
1289 catch (const WrtDeviceApis::Commons::AlreadyInUseException& exc) {
1290 LogError(exc.GetMessage().c_str());
1291 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1292 return JSWebAPIError::throwException(context, exception, err);
1294 catch (const WrtDeviceApis::Commons::Exception& exc) {
1295 LogError(exc.GetMessage().c_str());
1296 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1297 return JSWebAPIError::throwException(context, exception, err);
1301 JSValueRef JSMessagingStorage::removeChangeListener(JSContextRef context, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount,
1302 const JSValueRef arguments[], JSValueRef* exception)
1304 LogDebug("Entered");
1307 AceSecurityStatus status = MESSAGING_CHECK_ACCESS(
1308 MessagingExportedNames[MESSAGING_FUNCTION_API_REMOVE_CHANGE_LISTENER]);
1309 TIZEN_SYNC_ACCESS_HANDLER(status, context, exception);
1311 MessagingStoragePriv* priv = static_cast<MessagingStoragePriv*>(JSObjectGetPrivate(thisObject));
1313 LogError("Private object is NULL.");
1314 DeviceAPI::Common::UnknownException err("Private object is NULL.");
1315 return JSWebAPIError::throwException(context, exception, err);
1318 MessagingStoragePrivObjPtr objectPriv = priv->getObject();
1320 LogError("objectPriv is NULL.");
1321 DeviceAPI::Common::UnknownException err("objectPriv is NULL.");
1322 return JSWebAPIError::throwException(context, exception, err);
1325 WrtDeviceApis::CommonsJavaScript::JSCallbackManagerPtr callbackManager(NULL);
1326 callbackManager = JSCallbackManager::createObject(priv->getContext());
1328 ConverterMessageFactory::ConverterType converter = ConverterMessageFactory::getConverter(context);
1331 ArgumentValidator validator(context, argumentCount, arguments);
1333 // argu 1. watchId ( mandatory )
1334 long handler = validator.toLong(0);
1336 MessagingListener::getInstance().removeIncomingMsgCallback(handler, objectPriv->getType(), objectPriv->getIndex());
1338 MessageListenerCancellerPtr canceller = MessageListenerCancellerPtr(new MessageListenerCanceller(priv->getContext(), thisObject, objectPriv->getIndex()));
1339 IListenerItemPtr listenerItem = DPL::StaticPointerCast<IListenerItem>(canceller);
1340 MessageListenerManagerSingleton::Instance().unregisterListener(listenerItem);
1342 catch(const BasePlatformException& err) {
1343 LogError(err.getMessage().c_str());
1344 return JSWebAPIError::throwException(context, exception, err);
1346 catch (const WrtDeviceApis::Commons::ConversionException& exc) {
1347 LogError(exc.GetMessage().c_str());
1348 DeviceAPI::Common::TypeMismatchException err(exc.GetMessage().c_str());
1349 return JSWebAPIError::throwException(context, exception, err);
1351 catch (const WrtDeviceApis::Commons::InvalidArgumentException& exc) {
1352 LogError(exc.GetMessage().c_str());
1353 DeviceAPI::Common::InvalidValuesException err(exc.GetMessage().c_str());
1354 return JSWebAPIError::throwException(context, exception, err);
1356 catch (const WrtDeviceApis::Commons::Exception& exc) {
1357 LogError(exc.GetMessage().c_str());
1358 DeviceAPI::Common::UnknownException err(exc.GetMessage().c_str());
1359 return JSWebAPIError::throwException(context, exception, err);
1362 return JSValueMakeUndefined(context);