merge vui
[apps/agl-service-homescreen.git] / src / hs-proxy.cpp
index f0ee5f0..7baca30 100644 (file)
 #include "hs-proxy.h"
 
 const char _afm_main[] = "afm-main";
-
+const char _windowmanager[] = "windowmanager";
+const char _event[] = "event";
+const char _vshl_capabilities[] = "vshl-capabilities";
+const char _actions[] = "actions";
 
 /**
  * the callback function
@@ -36,6 +39,9 @@ const char _afm_main[] = "afm-main";
 static void api_callback(void *closure, struct json_object *object, const char *error, const char *info, afb_api_t api)
 {
     AFB_INFO("asynchronous call, error=%s, info=%s, object=%s.", error, info, json_object_get_string(object));
+    if(closure != nullptr) {
+        reinterpret_cast<api_cb_func>(closure)(object, error, info);
+    }
 }
 
 /**
@@ -51,10 +57,10 @@ static void api_callback(void *closure, struct json_object *object, const char *
  *  None
  *
  */
-static void api_call(afb_api_t api, const char *service, const char *verb, struct json_object *args)
+static void api_call(afb_api_t api, const char *service, const char *verb, struct json_object *args, api_cb_func f = nullptr)
 {
     AFB_INFO("service=%s verb=%s, args=%s.", service, verb, json_object_get_string(args));
-    afb_api_call(api, service, verb, args, api_callback, nullptr);
+    afb_api_call(api, service, verb, args, api_callback, (void*)f);
 }
 
 /**
@@ -80,6 +86,8 @@ static int api_call_sync(afb_api_t api, const char *service, const char *verb, s
     return ret;
 }
 
+/* -------------------------------------HS_AfmMainProxy------------------------------------------ */
+
 /**
  * get runnables application list
  *
@@ -120,15 +128,67 @@ int HS_AfmMainProxy::detail(afb_api_t api, const std::string &id, struct json_ob
  * start application
  *
  * #### Parameters
- *  - request : the request
+ *  - api : the api
  *  - id : the application id liked "dashboard@0.1"
  *
  * #### Return
  *  None
  *
  */
-void HS_AfmMainProxy::start(afb_req_t request, const std::string &id)
+void HS_AfmMainProxy::start(afb_api_t api, const std::string &id)
 {
     struct json_object *args = json_object_new_string(id.c_str());
-    api_call(request->api, _afm_main, __FUNCTION__, args);
+    api_call(api, _afm_main, __FUNCTION__, args);
+}
+
+/* -------------------------------------HS_WmProxy------------------------------------------ */
+
+/**
+ * subscribe windowmanager event
+ *
+ * #### Parameters
+ *  - api : the api serving the request
+ *  - event : windowmanager event
+ *  - f : callback function
+ *
+ * #### Return
+ *  None
+ *
+ */
+void HS_WmProxy::subscribe(afb_api_t api, EventType event, api_cb_func f)
+{
+    struct json_object* push_obj = json_object_new_object();
+    json_object_object_add(push_obj, _event, json_object_new_int(event));
+    api_call(api, _windowmanager, "wm_subscribe", push_obj, f);
+}
+
+/* -------------------------------------HS_VshlCapabilitiesProxy------------------------------------------ */
+
+/**
+ * subscribe event
+ *
+ * #### Parameters
+ *  - api : the api
+ *  - module : module name
+ *  - ev_list : event list
+ *
+ * #### Return
+ *  None
+ *
+ */
+void HS_VshlCapabilitiesProxy::subscribe(afb_api_t api, const std::string &module, const std::list<std::string> &ev_list)
+{
+    if(ev_list.empty()) {
+        return;
+    }
+
+    struct json_object *arr_obj = json_object_new_array();
+    for(auto &it : ev_list) {
+        json_object_array_add(arr_obj, json_object_new_string(it.c_str()));
+    }
+    struct json_object *args = json_object_new_object();
+    json_object_object_add(args, _actions, arr_obj);
+
+    std::string verb = module + '/' + __FUNCTION__;
+    api_call(api, _vshl_capabilities, verb.c_str(), args);
 }
\ No newline at end of file