TIVI-2059: mediaserver: add browse and find error callbacks 75/13475/1
authorCorentin Lecouvey <corentin.lecouvey@open.eurogiciel.org>
Fri, 6 Dec 2013 12:06:30 +0000 (13:06 +0100)
committerCorentin Lecouvey <corentin.lecouvey@open.eurogiciel.org>
Fri, 6 Dec 2013 12:06:30 +0000 (13:06 +0100)
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 <corentin.lecouvey@open.eurogiciel.org>
src/MediaServer/JSMediaServer.cpp
src/MediaServer/MediaServer.cpp

index edb5d1d..e7a7b80 100644 (file)
@@ -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());
index 0dfbce8..d6f9068 100644 (file)
@@ -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);
+       }
+}