wrt-plugins-tizen_0.4.23
[framework/web/wrt-plugins-tizen.git] / src / Download / DownloadCallback.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 <JSWebAPIError.h>
19 #include <PlatformException.h>
20 #include <JSUtil.h>
21
22 #include "DownloadCallback.h"
23
24 using namespace WrtDeviceApis::Commons;
25 using namespace WrtDeviceApis::CommonsJavaScript;
26
27 using namespace DeviceAPI::Common;
28
29 namespace DeviceAPI {
30 namespace Download {
31
32 DownloadCallback::DownloadCallback(JSContextRef globalCtx, JSObjectRef object)
33 {
34         mCallbackUserData = new MultiCallbackUserData(globalCtx);
35
36         // onprogress
37         JSStringRef onprogress = JSStringCreateWithUTF8CString("onprogress");
38         bool has_onprogress = JSObjectHasProperty(globalCtx, object, onprogress);
39         JSStringRelease(onprogress);
40         if (has_onprogress) {
41                 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "onprogress"));
42                 if( JSObjectIsFunction(globalCtx, cbObj) ){
43                         mCallbackUserData->setCallback("onprogress", cbObj);
44                 } else {
45                         throw TypeMismatchException("onprogress is not a callback function.");
46                 }
47         }
48
49         // onpaused
50         JSStringRef onpaused = JSStringCreateWithUTF8CString("onpaused");
51         bool has_onpaused = JSObjectHasProperty(globalCtx, object, onpaused);
52         JSStringRelease(onpaused);
53         if (has_onpaused) {
54                 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "onpaused"));
55                 if( JSObjectIsFunction(globalCtx, cbObj) ){
56                         mCallbackUserData->setCallback("onpaused", cbObj);
57                 } else {
58                         throw TypeMismatchException("onpaused is not a callback function.");
59                 }
60         }
61
62         // oncanceled
63         JSStringRef oncanceled = JSStringCreateWithUTF8CString("oncanceled");
64         bool has_oncanceled = JSObjectHasProperty(globalCtx, object, oncanceled);
65         JSStringRelease(oncanceled);
66         if (has_oncanceled) {
67                 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "oncanceled"));
68                 if( JSObjectIsFunction(globalCtx, cbObj) ){
69                         mCallbackUserData->setCallback("oncanceled", cbObj);
70                 } else {
71                         throw TypeMismatchException("oncanceled is not a callback function.");
72                 }
73         }
74
75         // oncompleted
76         JSStringRef oncompleted = JSStringCreateWithUTF8CString("oncompleted");
77         bool has_oncompleted = JSObjectHasProperty(globalCtx, object, oncompleted);
78         JSStringRelease(oncompleted);
79         if (has_oncompleted) {
80                 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "oncompleted"));
81                 if( JSObjectIsFunction(globalCtx, cbObj) ){
82                         mCallbackUserData->setCallback("oncompleted", cbObj);
83                 } else {
84                         throw TypeMismatchException("oncompleted is not a callback function.");
85                 }
86         }
87
88         // onfailed
89         JSStringRef onfailed = JSStringCreateWithUTF8CString("onfailed");
90         bool has_onfailed = JSObjectHasProperty(globalCtx, object, onfailed);
91         JSStringRelease(onfailed);
92         if (has_onfailed) {
93                 JSObjectRef cbObj = JSUtil::JSValueToObject(globalCtx, JSUtil::getProperty(globalCtx, object, "onfailed"));
94                 if( JSObjectIsFunction(globalCtx, cbObj) ){
95                         mCallbackUserData->setCallback("onfailed", cbObj);
96                 } else {
97                         throw TypeMismatchException("onfailed is not a callback function.");
98                 }
99         }
100
101 }
102
103 DownloadCallback::~DownloadCallback() {
104         if (mCallbackUserData)
105                 delete mCallbackUserData;
106 }
107
108 void DownloadCallback::onprogress(long downloadId, unsigned long long int receivedSize, unsigned long long int totalSize)
109 {
110         JSContextRef context = mCallbackUserData->getContext();
111
112         JSValueRef objParam[3] = {
113                         JSUtil::toJSValueRef(context, downloadId),
114                         JSUtil::toJSValueRef(context, (long)receivedSize),
115                         JSUtil::toJSValueRef(context, (long)totalSize)
116                 };
117         mCallbackUserData->invokeCallback("onprogress", 3, objParam);
118 }
119
120 void DownloadCallback::onpaused(long downloadId)
121 {
122         JSContextRef context = mCallbackUserData->getContext();
123         mCallbackUserData->invokeCallback("onpaused", JSUtil::toJSValueRef(context, downloadId));
124 }
125
126 void DownloadCallback::oncanceled(long downloadId)
127 {
128         JSContextRef context = mCallbackUserData->getContext();
129         mCallbackUserData->invokeCallback("oncanceled", JSUtil::toJSValueRef(context, downloadId));
130 }
131
132 void DownloadCallback::oncompleted(long downloadId, std::string fullPath)
133 {
134         JSContextRef context = mCallbackUserData->getContext();
135
136         JSValueRef objParam[2] = {
137                         JSUtil::toJSValueRef(context, downloadId),
138                         JSUtil::toJSValueRef(context, fullPath)
139                 };
140         mCallbackUserData->invokeCallback("oncompleted", 2, objParam);
141 }
142
143 void DownloadCallback::onfailed(long downloadId, BasePlatformException &error)
144 {
145         JSContextRef context = mCallbackUserData->getContext();
146
147         JSValueRef objParam[2] = {
148                         JSUtil::toJSValueRef(context, downloadId),
149                         JSWebAPIError::makeJSWebAPIError(context, error)
150                 };
151         mCallbackUserData->invokeCallback("onfailed", 2, objParam);
152 }
153
154 } // Download
155 } // DeviceAPI