From: Corentin Lecouvey Date: Fri, 6 Dec 2013 12:06:30 +0000 (+0100) Subject: TIVI-2059: mediaserver: add browse and find error callbacks X-Git-Tag: 0.12.1~3^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0ed1e7db76534e77654e4d4f04c6c5f7441db3f6;p=profile%2Fivi%2Fwrt-plugins-ivi.git TIVI-2059: mediaserver: add browse and find error callbacks Mediaserver Web APIs for browsing and finding containers have an optionnal error callback parameter. This was not handled in wrt mediaserver plugin. Change-Id: I7745b53eaeacaa8f7e160fe527cd0a159aacd219 Signed-off-by: Corentin Lecouvey --- diff --git a/src/MediaServer/JSMediaServer.cpp b/src/MediaServer/JSMediaServer.cpp index edb5d1d..e7a7b80 100644 --- a/src/MediaServer/JSMediaServer.cpp +++ b/src/MediaServer/JSMediaServer.cpp @@ -193,6 +193,8 @@ JSValueRef JSMediaServer::browse(JSContextRef context, if (argumentCount > 5) { cbP->errorCB = validator.toFunction(5, true); JSValueProtect(cbP->context, cbP->errorCB); + } else { + cbP->errorCB = NULL; } MediaServerPtr server(privateObject->getObject()); @@ -239,6 +241,8 @@ JSValueRef JSMediaServer::find(JSContextRef context, if (argumentCount > 6) { cbP->errorCB = validator.toFunction(6, true); JSValueProtect(cbP->context, cbP->errorCB); + } else { + cbP->errorCB = NULL; } MediaServerPtr server(privateObject->getObject()); diff --git a/src/MediaServer/MediaServer.cpp b/src/MediaServer/MediaServer.cpp index 0dfbce8..d6f9068 100644 --- a/src/MediaServer/MediaServer.cpp +++ b/src/MediaServer/MediaServer.cpp @@ -46,6 +46,7 @@ static const gchar *const arg_Filter[] = { /* forward declaration for browse / find finishing callback */ static void browseFindCallback(GVariant * out_Children, BrowseFindCB * callback); +static void browseFindErrorCallback(GError * error, BrowseFindCB * callback); /* * Callback for find on UPnPContainer2 proxy @@ -65,14 +66,13 @@ static void findCallback(GObject *source_object, GAsyncResult *res, gpointer us &gerror /* error */ )) { LoggerD("findCallback success"); + /* Prepare results for Javascript callback */ + browseFindCallback(out_Children, callback); } else { LoggerE(gerror->message); + browseFindErrorCallback(gerror, callback) ; g_error_free(gerror); - return; } - - /* Prepare results for Javascript callback */ - browseFindCallback(out_Children, callback); } @@ -94,14 +94,13 @@ static void browseCallback(GObject *source_object, GAsyncResult *res, gpointer &gerror /* error */ )) { LoggerD("browseCallback success"); + /* Prepare results for Javascript callback */ + browseFindCallback(out_Children, callback); } else { LoggerE(gerror->message); + browseFindErrorCallback(gerror, callback) ; g_error_free(gerror); - return; } - - /* Prepare results for Javascript callback */ - browseFindCallback(out_Children, callback); } static void browseFindCallback(GVariant * out_Children, BrowseFindCB * callback) { @@ -125,6 +124,28 @@ static void browseFindCallback(GVariant * out_Children, BrowseFindCB * callback) g_object_unref(callback->cntProxy); } +static void browseFindErrorCallback(GError * error, BrowseFindCB * callback) { + /* convert children to Javascript array */ + gsize size; + gchar * gStr = error->message; + LoggerE(gStr); + if(callback->errorCB) { + JSStringRef jsStr = JSStringCreateWithUTF8CString(gStr); + LoggerD("Converting string to JSON"); + JSValueRef jsArray = JSValueMakeFromJSONString(callback->context, jsStr); + const JSValueRef arguments[1] = { jsArray }; + LoggerD("Triggering JS callback"); + /* Trigger callback */ + JSObjectCallAsFunction(callback->context, + callback->errorCB, + NULL, + 1, + arguments, + NULL); + /* free upn_pcontainer2 proxy */ + g_object_unref(callback->cntProxy); + } +}