From: Ji-hoon Lee Date: Tue, 12 Mar 2019 08:06:16 +0000 (+0900) Subject: Update metadata parser to support updated manifest spec X-Git-Tag: submit/tizen/20190418.072452~8 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F02%2F201302%2F2;p=platform%2Fcore%2Fuifw%2Fmulti-assistant.git Update metadata parser to support updated manifest spec * Add appid of engine expected to send wakeup event * Add shared object filename of custom wakeup engine * Support language-specific wake phrases Change-Id: I5f3741358fd90328196a7c7d7765e583e184fb01 --- diff --git a/assistant-parser/src/ma_assistant_parser.c b/assistant-parser/src/ma_assistant_parser.c index 36aaa47..3fb27f0 100644 --- a/assistant-parser/src/ma_assistant_parser.c +++ b/assistant-parser/src/ma_assistant_parser.c @@ -53,6 +53,8 @@ #define MA_METADATA_ASSISTANT_ICON_PATH "http://tizen.org/metadata/multi-assistant/icon_path" #define MA_METADATA_ASSISTANT_WAKEUP_WORD "http://tizen.org/metadata/multi-assistant/wakeup_word" #define MA_METADATA_LANGUAGE "http://tizen.org/metadata/multi-assistant/language" +#define MA_METADATA_ASSISTANT_WAKEUP_ENGINE_APPID "http://tizen.org/metadata/multi-assistant/wakeup_engine_appid" +#define MA_METADATA_ASSISTANT_WAKEUP_ENGINE_LIB "http://tizen.org/metadata/multi-assistant/wakeup_engine_lib" /* Define Macro */ @@ -343,29 +345,41 @@ static void __insert_wakeup_word_from_metadata(xmlNodePtr root, const char *wake { LOGD("==== Insert wakeup words"); - char* wakeup = NULL; - if (NULL == root || NULL == wakeup_word) { - LOGE("Invalid parameter, root(%p), language(%s)", root, wakeup_word); + LOGE("Invalid parameter, root(%p), wakeup_word(%s)", root, wakeup_word); return; } - char *tmp_wakeup, *tmp_free; - tmp_free = tmp_wakeup = strdup(wakeup_word); xmlNodePtr wakeups_node = NULL; xmlNodePtr wakeup_node = NULL; - wakeups_node = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_WAKEUP_WORD_SET); + xmlNodePtr child_node = root->xmlChildrenNode; + while(NULL != child_node) { + if (0 == xmlStrcmp(child_node->name, (const xmlChar*)MA_TAG_ASSISTANT_WAKEUP_WORD_SET)) { + wakeups_node = child_node; + } + child_node = child_node->next; + } + if (NULL == wakeups_node) { + wakeups_node = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_WAKEUP_WORD_SET); + xmlAddChild(root, wakeups_node); + } + + char *tmp_lang, *tmp_wakeup, *tmp_free; + tmp_free = tmp_wakeup = strdup(wakeup_word); + tmp_lang = strsep(&tmp_wakeup, ":"); + if (NULL == tmp_wakeup) { + tmp_wakeup = tmp_lang; + tmp_lang = NULL; + } - wakeup = strsep(&tmp_wakeup, ","); - while (NULL != wakeup) { - LOGD("wakeup word (%s)", wakeup); - wakeup_node = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_WAKEUP_WORD); - xmlNodeSetContent(wakeup_node, (const xmlChar*)wakeup); - xmlAddChild(wakeups_node, wakeup_node); - wakeup = strsep(&tmp_wakeup, ","); + LOGD("wakeup word (%s)", tmp_wakeup); + wakeup_node = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_WAKEUP_WORD); + xmlNodeSetContent(wakeup_node, (const xmlChar*)tmp_wakeup); + if (tmp_lang) { + xmlNodeSetLang(wakeup_node, (const xmlChar*)tmp_lang); } - xmlAddChild(root, wakeups_node); + xmlAddChild(wakeups_node, wakeup_node); FREE(tmp_free) } @@ -405,6 +419,12 @@ static int __write_metadata_inxml(const char *pkgid, const char *appid, GList *l cur = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_NAME); xmlNodeSetContent(cur, (const xmlChar*)md->value); xmlAddChild(root, cur); + } else if (!strncmp(md->key, MA_METADATA_ASSISTANT_WAKEUP_ENGINE_APPID, strlen(MA_METADATA_ASSISTANT_WAKEUP_ENGINE_APPID))) { + cur = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_WAKEUP_ENGINE_APPID); + xmlNodeSetContent(cur, (const xmlChar*)md->value); + xmlAddChild(root, cur); + } else if (!strncmp(md->key, MA_METADATA_ASSISTANT_WAKEUP_ENGINE_LIB, strlen(MA_METADATA_ASSISTANT_WAKEUP_ENGINE_LIB))) { + LOGW("Engine Lib information found : %s", md->value); } else { LOGW("[WARNING] Unknown metadata type"); } @@ -412,7 +432,7 @@ static int __write_metadata_inxml(const char *pkgid, const char *appid, GList *l iter = g_list_next(iter); } - cur = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_ID); + cur = xmlNewNode(NULL, (const xmlChar*)MA_TAG_ASSISTANT_APPID); xmlNodeSetContent(cur, (const xmlChar*)appid); xmlAddChild(root, cur); diff --git a/common/ma_config_mgr.c b/common/ma_config_mgr.c index cfbee5d..b826e21 100644 --- a/common/ma_config_mgr.c +++ b/common/ma_config_mgr.c @@ -142,7 +142,7 @@ int ma_config_mgr_parse_assistant_info(ma_ui_assistant_info_cb callback, void* u SLOG(LOG_DEBUG, TAG_MACONFIG, "Name : %s", key); xmlFree(key); } - } else if (cur->name && 0 == xmlStrcmp(cur->name, (const xmlChar*)MA_TAG_ASSISTANT_ID)) { + } else if (cur->name && 0 == xmlStrcmp(cur->name, (const xmlChar*)MA_TAG_ASSISTANT_APPID)) { key = xmlNodeGetContent(cur); if (key) { temp->app_id = strdup((const char*)key); diff --git a/common/ma_defs.h b/common/ma_defs.h index 0eadd5b..bb70424 100644 --- a/common/ma_defs.h +++ b/common/ma_defs.h @@ -97,14 +97,16 @@ extern "C" /************************************************************************************** *** Definitions for xml file *************************************************************************************/ -#define MA_TAG_ASSISTANT_BASE "multi-assistant" -#define MA_TAG_ASSISTANT_NAME "name" -#define MA_TAG_ASSISTANT_ID "id" -#define MA_TAG_ASSISTANT_ICON_PATH "icon-path" -#define MA_TAG_ASSISTANT_LANGUAGE_SET "languages" -#define MA_TAG_ASSISTANT_LANGUAGE "lang" -#define MA_TAG_ASSISTANT_WAKEUP_WORD_SET "wakeup-words" -#define MA_TAG_ASSISTANT_WAKEUP_WORD "wakeup-word" +#define MA_TAG_ASSISTANT_BASE "multi-assistant" +#define MA_TAG_ASSISTANT_NAME "name" +#define MA_TAG_ASSISTANT_APPID "appid" +#define MA_TAG_ASSISTANT_ICON_PATH "icon-path" +#define MA_TAG_ASSISTANT_LANGUAGE_SET "languages" +#define MA_TAG_ASSISTANT_LANGUAGE "language" +#define MA_TAG_ASSISTANT_WAKEUP_WORD_SET "wakeup-words" +#define MA_TAG_ASSISTANT_WAKEUP_WORD "wakeup-word" +#define MA_ATTRIBUTE_ASSISTANT_LANGUAGE "language" +#define MA_TAG_ASSISTANT_WAKEUP_ENGINE_APPID "wakeup-engine-appid" /************************************************************************************** *** Definitions for ETC