Update metadata parser to support updated manifest spec 02/201302/2
authorJi-hoon Lee <dalton.lee@samsung.com>
Tue, 12 Mar 2019 08:06:16 +0000 (17:06 +0900)
committerJi-hoon Lee <dalton.lee@samsung.com>
Wed, 13 Mar 2019 08:09:28 +0000 (17:09 +0900)
* 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

assistant-parser/src/ma_assistant_parser.c
common/ma_config_mgr.c
common/ma_defs.h

index 36aaa471c6f73c76cd593320ddb9186e39729998..3fb27f0d8ef11e53160a587d9ce545f6db427669 100644 (file)
@@ -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);
 
index cfbee5d33a1710607b555aef4d1b0ee2d2337ec2..b826e2148423270c129c881fe84c3e1cd6fd3bfe 100644 (file)
@@ -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);
index 0eadd5b64a98c2d8329f6a7f232cf2bd9f626f8b..bb7042452d6ac1f3bae6a375fec3cfec0117cde7 100644 (file)
@@ -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