wrt-plugins-tizen_0.4.23
[framework/web/wrt-plugins-tizen.git] / src / DataSync / DataSyncResponseDispatcher.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17
18 #include "DataSyncResponseDispatcher.h"
19 #include "DataSyncConverter.h"
20 #include "DataSyncMultiCallback.h"
21
22 #include <CommonsJavaScript/JSCallbackManager.h>
23 #include <JSTizenException.h>
24 #include <JSTizenExceptionFactory.h>
25 #include <Logger.h>
26
27 using namespace WrtDeviceApis::Commons;
28 using namespace WrtDeviceApis::CommonsJavaScript;
29 using namespace DeviceAPI::Common;
30
31 namespace DeviceAPI {
32 namespace DataSync {
33
34 DataSyncResponseDispatcher& DataSyncResponseDispatcher::getInstance()
35 {
36     static DataSyncResponseDispatcher instance;
37     return instance;
38 }
39
40 DataSyncResponseDispatcher::DataSyncResponseDispatcher() :
41     OnDataSyncStateChangedListener(ThreadEnum::NULL_THREAD)
42 {
43 }
44
45 DataSyncResponseDispatcher::~DataSyncResponseDispatcher()
46 {
47 }
48
49 void DataSyncResponseDispatcher::onAnswerReceived(const OnDataSyncStateChangedPtr& event)
50 {
51     DataSyncStateChangeCallbackPrivateDataPtr multiCallbacks =
52         DPL::StaticPointerCast<DataSyncStateChangeCallbackPrivateData>(event->getPrivateData());
53     if (!multiCallbacks) {
54         LoggerE("No listener callback!");
55         return;
56     }
57
58     Try
59     {   
60         JSContextRef context = multiCallbacks->getOnProgress()->getContext();
61         if (event->getResult()) {
62             DataSyncConverter converter(context);
63             JSValueRef profileId = converter.toJSValueRef(event->getProfileId());
64             if( OnDataSyncStateChanged::PROGRESS_STATUS==event->getSessionStatus() ) {
65                 LoggerD("Sync progress: "<<event->getSyncedPerService()<<"/"<<event->getTotalPerService());
66                 JSValueRef serviceType = converter.toJSValueRef(converter.toTizenValue(event->getServiceType()));
67                 JSValueRef isFromServer = converter.toJSValueRef(event->getIsFromServer());
68                 JSValueRef totalPerService = converter.toJSValueRef(event->getTotalPerService());
69                 JSValueRef syncedPerService = converter.toJSValueRef(event->getSyncedPerService());
70                 JSValueRef objParam[5] = {profileId, serviceType, isFromServer, totalPerService, syncedPerService};
71                 multiCallbacks->getOnProgress()->callOnSuccess(objParam, 5);
72             } else if ( OnDataSyncStateChanged::COMPLETE_STATUS==event->getSessionStatus() ) {
73                 LoggerD("Sync completed.");
74                 multiCallbacks->getOnCompleted()->callOnSuccess(profileId);
75                         } else if ( OnDataSyncStateChanged::STOP_STATUS==event->getSessionStatus() ) {
76                                 LoggerD("Sync stopped.");
77                                 multiCallbacks->getOnStopped()->callOnSuccess(profileId);
78             } else if ( OnDataSyncStateChanged::FAIL_STATUS==event->getSessionStatus()) {
79                 LoggerD("Sync failed with: "<<event->getExceptionCode());
80                 JSValueRef errorObject;
81                 if (ExceptionCodes::PlatformException==event->getExceptionCode()) {
82                     //errorObject = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::NETWORK_ERROR, event->getErrorMessage());
83                     errorObject = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::NETWORK_ERROR);
84                 } else {
85                     errorObject = JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR);
86                 }
87                 JSValueRef objParam[2] = {profileId, errorObject};
88                 multiCallbacks->getOnFailed()->callOnSuccess(objParam, 2);
89             } else {
90                 LoggerW("Wrong sync session state.");
91             }
92         } else {
93             LoggerW("Failed result received.");
94         }
95     }
96     Catch(Exception)
97     {
98         LoggerE("Error during processing answer.");
99     }
100 }
101
102 }
103 }