X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fhs-client.cpp;h=e8f0f7b94491e0b8bb8a9ca842340a0093c801f9;hb=724716d4fba8550efa549ff0ae60c1afedfa7c1d;hp=d6e771c1f87059d67ff2530d5725ef8f1203c884;hpb=bfaca7514c709e818aa9f7eaa7ebb590e5166733;p=apps%2Fagl-service-homescreen.git diff --git a/src/hs-client.cpp b/src/hs-client.cpp index d6e771c..e8f0f7b 100644 --- a/src/hs-client.cpp +++ b/src/hs-client.cpp @@ -26,6 +26,9 @@ static const char _icon[] = "icon"; static const char _parameter[] = "parameter"; static const char _replyto[] = "replyto"; static const char _caller[] = "caller"; +static const char _shortcut[] = "shortcut"; +static const char _shortcut_id[] = "shortcut_id"; +static const char _shortcut_name[] = "shortcut_name"; // homescreen-service event and event handler function list const std::unordered_map HS_Client::func_list { @@ -39,9 +42,12 @@ const std::unordered_map HS_Client::func_l {"unsubscribe", &HS_Client::unsubscribe}, {"showNotification", &HS_Client::showNotification}, {"showInformation", &HS_Client::showInformation}, - {"application-list-changed", nullptr} + {"registerShortcut", &HS_Client::registerShortcut}, + {"updateShortcut", &HS_Client::updateShortcut} }; +std::list> HS_Client::shortcut_list; + /** * HS_Client construction function * @@ -183,6 +189,9 @@ int HS_Client::subscribe(afb_req_t request) subscription = true; } } + if (!strcasecmp("updateShortcut", value)) { + pushUpdateShortcutEvent(); + } } } else { @@ -405,6 +414,88 @@ int HS_Client::showInformation(afb_req_t request) return ret; } +/** + * registerShortcut event + * + * #### Parameters + * - request : the request + * + * #### Return + * 0 : success + * others : fail + * + */ +int HS_Client::registerShortcut(afb_req_t request) +{ + int ret = 0; + struct json_object *param_obj; + if(json_object_object_get_ex(afb_req_json(request), _parameter, ¶m_obj)) { + struct json_object* push_obj = json_object_new_object(); + hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__); + json_object_object_add(push_obj, _parameter, param_obj); + afb_event_push(my_event, push_obj); + } + else { + AFB_WARNING("please input parameter."); + ret = AFB_EVENT_BAD_REQUEST; + } + return ret; +} + +/** + * updateShortcut event + * + * #### Parameters + * - request : the request + * + * #### Return + * 0 : success + * others : fail + * + */ +int HS_Client::updateShortcut(afb_req_t request) +{ + AFB_INFO("%s application_id = %s.", __FUNCTION__, my_id.c_str()); + int ret = 0; + std::list> new_shortcut_list; + struct json_object *req_json = afb_req_json(request); + struct json_object *param_obj, *shortcut_obj; + if(json_object_object_get_ex(afb_req_json(request), _parameter, ¶m_obj) + && json_object_object_get_ex(param_obj, _shortcut, &shortcut_obj)) { + if(json_object_get_type(shortcut_obj) == json_type_array ) { + int array_len = json_object_array_length(shortcut_obj); + for (int i = 0; i < array_len; ++i) { + struct json_object *obj = json_object_array_get_idx(shortcut_obj, i); + struct json_object *appid_obj, *appname_obj; + if(json_object_object_get_ex(obj, _shortcut_id, &appid_obj) + && json_object_object_get_ex(obj, _shortcut_name, &appname_obj)) { + new_shortcut_list.push_back(std::pair(json_object_get_string(appid_obj), + json_object_get_string(appname_obj))); + } + else { + AFB_WARNING("shortcut list json object pattern error."); + ret = AFB_EVENT_BAD_REQUEST; + break; + } + } + } + else { + AFB_WARNING("json object pattern error."); + ret = AFB_EVENT_BAD_REQUEST; + } + } + else { + AFB_WARNING("input json object error."); + ret = AFB_EVENT_BAD_REQUEST; + } + + if(ret == 0) { + HS_Client::shortcut_list.swap(new_shortcut_list); + pushUpdateShortcutEvent(); + } + return ret; +} + /** * check if client subscribe event * @@ -438,11 +529,8 @@ bool HS_Client::checkEvent(const char* event) */ bool HS_Client::isSupportEvent(const char* event) { - auto ip = func_list.find(std::string(event)); - if(ip == func_list.end()) - return false; - else - return true; + int ret = hs_search_event_name_index(event); + return ret == -1 ? false : true; } /** @@ -496,4 +584,31 @@ int HS_Client::pushEvent(const char *event, struct json_object *param) json_object_object_add(push_obj, _parameter, param); afb_event_push(my_event, push_obj); return 0; -} \ No newline at end of file +} + +/** + * push updateShortcut event + * + * #### Parameters + * None + * + * #### Return + * Nothing + * + */ +void HS_Client::pushUpdateShortcutEvent(void) +{ + struct json_object* arr_obj = json_object_new_array(); + for(auto &it : HS_Client::shortcut_list) { + struct json_object* obj = json_object_new_object(); + json_object_object_add(obj, _shortcut_id, json_object_new_string(it.first.c_str())); + json_object_object_add(obj, _shortcut_name, json_object_new_string(it.second.c_str())); + json_object_array_add(arr_obj, obj); + } + struct json_object* shortcut_obj = json_object_new_object(); + json_object_object_add(shortcut_obj, _shortcut, arr_obj); + struct json_object* push_obj = json_object_new_object(); + hs_add_object_to_json_object_str(push_obj, 4, _application_id, my_id.c_str(), _type, "updateShortcut"); + json_object_object_add(push_obj, _parameter, shortcut_obj); + afb_event_push(my_event, push_obj); +} \ No newline at end of file