aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzheng_wenlong <wenlong_zheng@nexty-ele.com>2019-06-14 14:19:37 +0900
committerzheng_wenlong <wenlong_zheng@nexty-ele.com>2019-06-14 14:19:37 +0900
commitb20509dec7cca94ca4e6bd87f6d6f27320983d19 (patch)
tree6c253b8f59dd81f3ff0a783e77def2b78b0f12bc
parentcb5e8d4ba48bf7bb92c9edb7b6530bd4fbd64f7f (diff)
fix first time don't have area
-rw-r--r--src/homescreen.cpp18
-rw-r--r--src/hs-clientmanager.cpp8
-rw-r--r--src/hs-clientmanager.h4
3 files changed, 23 insertions, 7 deletions
diff --git a/src/homescreen.cpp b/src/homescreen.cpp
index cff2810..403fdf2 100644
--- a/src/homescreen.cpp
+++ b/src/homescreen.cpp
@@ -37,6 +37,8 @@ const char _display_message[] = "display_message";
const char _reply_message[] = "reply_message";
const char _keyData[] = "data";
const char _keyId[] = "id";
+const char _parameter[] = "parameter";
+const char _area[] = "area";
struct hs_handshake {
hs_handshake(int times, int sleep) : m_times(times), m_sleep(sleep) {}
@@ -323,12 +325,16 @@ static void tap_shortcut (afb_req_t request)
{
AFB_DEBUG("called.");
int ret = 0;
+ struct json_object *param_obj, *area_obj;
const char* value = afb_req_value(request, _application_id);
- if (value) {
+ if (value
+ && json_object_object_get_ex(afb_req_json(request), _parameter, &param_obj)
+ && json_object_object_get_ex(param_obj, _area, &area_obj)) {
AFB_INFO("request appid = %s.", value);
+ const char* area = json_object_get_string(area_obj);
ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value);
if(ret == AFB_REQ_NOT_STARTED_APPLICATION) {
- g_hs_instance->client_manager->setStartupAppid(std::string(value));
+ g_hs_instance->client_manager->setStartupAppidAndArea(make_pair(std::string(value), std::string(area)));
std::string id = g_hs_instance->app_info->getAppProperty(value, _keyId);
HS_AfmMainProxy afm_proxy;
afm_proxy.start(request->api, id);
@@ -482,11 +488,15 @@ static void showWindow(afb_req_t request)
{
AFB_DEBUG("called.");
int ret = 0;
+ struct json_object *param_obj, *area_obj;
const char* value = afb_req_value(request, _application_id);
- if (value) {
+ if (value
+ && json_object_object_get_ex(afb_req_json(request), _parameter, &param_obj)
+ && json_object_object_get_ex(param_obj, _area, &area_obj)) {
+ const char* area = json_object_get_string(area_obj);
ret = g_hs_instance->client_manager->handleRequest(request, __FUNCTION__, value);
if(ret == AFB_REQ_NOT_STARTED_APPLICATION) {
- g_hs_instance->client_manager->setStartupAppid(std::string(value));
+ g_hs_instance->client_manager->setStartupAppidAndArea(make_pair(std::string(value), std::string(area)));
std::string id = g_hs_instance->app_info->getAppProperty(value, _keyId);
HS_AfmMainProxy afm_proxy;
afm_proxy.start(request->api, id);
diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp
index 3585bea..fe1cc67 100644
--- a/src/hs-clientmanager.cpp
+++ b/src/hs-clientmanager.cpp
@@ -20,6 +20,8 @@
#include "hs-apprecover.h"
static const char _homescreen[] = "homescreen";
+static const char _area[] = "area";
+static const char _parameter[] = "parameter";
HS_ClientManager* HS_ClientManager::me = nullptr;
@@ -261,6 +263,10 @@ void HS_ClientManager::checkRegisterApp(afb_api_t api, const std::string &appid)
if(startup_appid == appid) {
startup_appid.clear();
- pushEvent("showWindow", nullptr, appid);
+// pushEvent("showWindow", nullptr, appid);
+ struct json_object* json_param = json_object_new_object();
+ json_object_object_add(json_param, _area, json_object_new_string(startup_area.c_str()));
+ pushEvent("showWindow", json_param, appid);
+ startup_area.clear();
}
} \ No newline at end of file
diff --git a/src/hs-clientmanager.h b/src/hs-clientmanager.h
index 366f256..d32f9cc 100644
--- a/src/hs-clientmanager.h
+++ b/src/hs-clientmanager.h
@@ -48,7 +48,7 @@ public:
int handleRequest(afb_req_t request, const char *verb, const char *appid = nullptr);
int pushEvent(const char *event, struct json_object *param, std::string appid = "");
void removeClientCtxt(void *data); // don't use, internal only
- void setStartupAppid(const std::string &appid) {startup_appid = appid;}
+ void setStartupAppidAndArea(const std::pair<std::string, std::string> pair) {startup_appid = pair.first;startup_area = pair.second;}
private:
HS_ClientCtxt* createClientCtxt(afb_req_t req, std::string appid);
@@ -61,7 +61,7 @@ private:
std::unordered_map<std::string, HS_Client*> client_list;
std::unordered_map<std::string, HS_ClientCtxt*> appid2ctxt;
std::mutex mtx;
- std::string startup_appid;
+ std::string startup_appid, startup_area;
};
#endif // HOMESCREEN_CLIENTMANAGER_H \ No newline at end of file