diff options
author | wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com> | 2019-05-25 09:40:52 +0800 |
---|---|---|
committer | wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com> | 2019-05-25 10:15:25 +0800 |
commit | 724716d4fba8550efa549ff0ae60c1afedfa7c1d (patch) | |
tree | acf89274c4f9060708d50040b52a2b29a79b6bff /src/hs-client.cpp | |
parent | bfaca7514c709e818aa9f7eaa7ebb590e5166733 (diff) |
add register/update shortcut
Change-Id: I0e56c9b696e1b7354c49c9f22536960d69efdcb9
Diffstat (limited to 'src/hs-client.cpp')
-rw-r--r-- | src/hs-client.cpp | 129 |
1 files changed, 122 insertions, 7 deletions
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<std::string, HS_Client::func_handler> HS_Client::func_list { @@ -39,9 +42,12 @@ const std::unordered_map<std::string, HS_Client::func_handler> 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<std::pair<std::string, std::string>> 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 { @@ -406,6 +415,88 @@ int HS_Client::showInformation(afb_req_t request) } /** + * 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<std::pair<std::string, std::string>> 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<std::string, std::string>(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 * * #### Parameters @@ -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 |