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.
19 #include "DataSyncResponseDispatcher.h"
20 #include "DataSyncConverter.h"
21 #include "DataSyncMultiCallback.h"
23 #include <CommonsJavaScript/JSCallbackManager.h>
24 #include <JSWebAPIErrorFactory.h>
26 #include <GlobalContextManager.h>
28 using namespace WrtDeviceApis::Commons;
29 using namespace WrtDeviceApis::CommonsJavaScript;
30 using namespace DeviceAPI::Common;
35 DataSyncResponseDispatcher& DataSyncResponseDispatcher::getInstance()
37 static DataSyncResponseDispatcher instance;
41 DataSyncResponseDispatcher::DataSyncResponseDispatcher() :
42 OnDataSyncStateChangedListener(ThreadEnum::NULL_THREAD)
46 DataSyncResponseDispatcher::~DataSyncResponseDispatcher()
50 void DataSyncResponseDispatcher::onAnswerReceived(const OnDataSyncStateChangedPtr& event)
52 DataSyncStateChangeCallbackPrivateDataPtr multiCallbacks =
53 std::static_pointer_cast<DataSyncStateChangeCallbackPrivateData>(event->getPrivateData());
54 if (!multiCallbacks) {
55 LOGE("No listener callback!");
61 JSContextRef context = multiCallbacks->getOnProgress()->getContext();
62 if( !GlobalContextManager::getInstance()->isAliveGlobalContext(context)){
63 LOGW("Global context invalidated.");
67 if (event->getResult()) {
68 DataSyncConverter converter(context);
69 JSValueRef profileId = converter.toJSValueRef(event->getProfileId());
70 if( OnDataSyncStateChanged::PROGRESS_STATUS==event->getSessionStatus() ) {
71 LOGD("Sync progress: %d/%d",event->getSyncedPerService(),event->getTotalPerService());
72 JSValueRef serviceType = converter.toJSValueRef(converter.toTizenValue(event->getServiceType()));
73 JSValueRef isFromServer = converter.toJSValueRef(event->getIsFromServer());
74 JSValueRef totalPerService = converter.toJSValueRef(event->getTotalPerService());
75 JSValueRef syncedPerService = converter.toJSValueRef(event->getSyncedPerService());
76 JSValueRef objParam[5] = {profileId, serviceType, isFromServer, totalPerService, syncedPerService};
77 multiCallbacks->getOnProgress()->callOnSuccess(objParam, 5);
78 } else if ( OnDataSyncStateChanged::COMPLETE_STATUS==event->getSessionStatus() ) {
79 LOGD("Sync completed.");
80 multiCallbacks->getOnCompleted()->callOnSuccess(profileId);
81 } else if ( OnDataSyncStateChanged::STOP_STATUS==event->getSessionStatus() ) {
82 LOGD("Sync stopped.");
83 multiCallbacks->getOnStopped()->callOnSuccess(profileId);
84 } else if ( OnDataSyncStateChanged::FAIL_STATUS==event->getSessionStatus()) {
85 LOGD("Sync failed with: %d",event->getExceptionCode());
86 JSValueRef errorObject;
87 if (ExceptionCodes::PlatformException==event->getExceptionCode()) {
88 //errorObject = JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::NETWORK_ERROR, event->getErrorMessage());
89 errorObject = JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::NETWORK_ERROR);
91 errorObject = JSWebAPIErrorFactory::makeErrorObject(context, JSWebAPIErrorFactory::UNKNOWN_ERROR);
93 JSValueRef objParam[2] = {profileId, errorObject};
94 multiCallbacks->getOnFailed()->callOnSuccess(objParam, 2);
96 LOGI("Undefined sync session state. Skip this.");
99 LOGW("Failed result received.");
104 LOGE("Error during processing answer.");