Add logic to set default language of the engine 54/157354/1
authorSuyeon Hwang <stom.hwang@samsung.com>
Mon, 23 Oct 2017 09:45:21 +0000 (18:45 +0900)
committerSuyeon Hwang <stom.hwang@samsung.com>
Tue, 24 Oct 2017 08:26:19 +0000 (08:26 +0000)
Change-Id: I086ff98a7ce7c1d04f4f03e7a63297bad573a9e3
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
(cherry picked from commit 661dc62bec74e1294096cf94f16feef8d4f38987)

common/vc_config_mgr.c
common/vc_config_parser.c
common/vc_config_parser.h

index a85b57f..c8dc9de 100755 (executable)
@@ -215,7 +215,7 @@ int __vc_config_mgr_select_lang(const char* engine_id, char** language)
 {
        if (NULL == engine_id || NULL == language) {
                SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] Input parameter is NULL");
-               return false;
+               return VC_ERROR_OPERATION_FAILED;
        }
 
        GSList *iter = NULL;
@@ -223,7 +223,7 @@ int __vc_config_mgr_select_lang(const char* engine_id, char** language)
 
        if (0 >= g_slist_length(g_engine_list)) {
                SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] There is no engine!!");
-               return false;
+               return VC_ERROR_OPERATION_FAILED;
        }
 
        /* Get a first item */
@@ -234,7 +234,8 @@ int __vc_config_mgr_select_lang(const char* engine_id, char** language)
 
                if (NULL == engine_info) {
                        SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] engine info is NULL");
-                       return false;
+                       iter = g_slist_next(iter);
+                       continue;
                }
 
                if (0 != strcmp(engine_id, engine_info->uuid)) {
@@ -242,41 +243,20 @@ int __vc_config_mgr_select_lang(const char* engine_id, char** language)
                        continue;
                }
 
-               GSList *iter_lang = NULL;
-               char* engine_lang = NULL;
-               if (g_slist_length(engine_info->languages) > 0) {
-                       /* Get a first item */
-                       iter_lang = g_slist_nth(engine_info->languages, 0);
-
-                       while (NULL != iter_lang) {
-                               engine_lang = iter_lang->data;
-                               if (NULL != engine_lang) {
-                                       /* Check base language */
-                                       if (0 == strcmp(VC_BASE_LANGUAGE, engine_lang)) {
-                                               *language = strdup(engine_lang);
-                                               SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language);
-                                               return 0;
-                                       }
-                               }
+               if (NULL == engine_info->default_lang) {
+                       SLOG(LOG_ERROR, vc_config_tag(), "[ERROR] default language of engine info is NULL");
+                       return VC_ERROR_INVALID_LANGUAGE;
+               }
 
-                               iter_lang = g_slist_next(iter_lang);
-                       }
+               *language = strdup(engine_info->default_lang);
 
-                       /* Not support base language */
-                       iter_lang = g_slist_nth(engine_info->languages, 0);
-                       if (NULL != iter_lang)
-                               engine_lang = iter_lang->data;
-
-                       if (NULL != engine_lang) {
-                               *language = strdup(engine_lang);
-                               SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language);
-                               return 0;
-                       }
+               if (NULL != *language) {
+                       SLOG(LOG_DEBUG, vc_config_tag(), "Selected language : %s", *language);
+                       return VC_ERROR_NONE;
                }
-               break;
        }
 
-       return -1;
+       return VC_ERROR_OPERATION_FAILED;
 }
 
 Eina_Bool vc_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handler)
index 3950472..0048a05 100644 (file)
@@ -29,6 +29,7 @@
 #define VC_TAG_ENGINE_BASE_TAG         "voice-control-engine"
 #define VC_TAG_ENGINE_NAME             "name"
 #define VC_TAG_ENGINE_ID               "id"
+#define VC_TAG_ENGINE_DEFAULT          "default"
 #define VC_TAG_ENGINE_LANGUAGE_SET     "languages"
 #define VC_TAG_ENGINE_LANGUAGE         "lang"
 #define VC_TAG_ENGINE_NON_FIXED_SUPPORT        "non-fixed-support"
@@ -116,9 +117,12 @@ int vc_parser_get_engine_info(const char* path, vc_engine_info_s** engine_info)
 
        temp->name = NULL;
        temp->uuid = NULL;
+       temp->default_lang = NULL;
        temp->languages = NULL;
        temp->non_fixed_support = false;
 
+       bool is_default_lang_set = false;
+
        while (cur != NULL) {
                if (0 == xmlStrcmp(cur->name, (const xmlChar *)VC_TAG_ENGINE_NAME)) {
                        key = xmlNodeGetContent(cur);
@@ -140,6 +144,18 @@ int vc_parser_get_engine_info(const char* path, vc_engine_info_s** engine_info)
                        } else {
                                SLOG(LOG_WARN, vc_config_tag(), "[WARNING] <%s> has no content", VC_TAG_ENGINE_ID);
                        }
+               } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)VC_TAG_ENGINE_DEFAULT)) {
+                       key = xmlNodeGetContent(cur);
+                       if (NULL != key) {
+                               /* SLOG(LOG_DEBUG, vc_config_tag(), "Engine uuid : %s", (char *)key); */
+                               if (NULL != temp->default_lang) free(temp->default_lang);
+                               temp->default_lang = strdup((char*)key);
+
+                               is_default_lang_set = true;
+                               xmlFree(key);
+                       } else {
+                               SLOG(LOG_WARN, vc_config_tag(), "[WARNING] <%s> has no content", VC_TAG_ENGINE_DEFAULT);
+                       }
                } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)VC_TAG_ENGINE_LANGUAGE_SET)) {
                        xmlNodePtr lang_node = NULL;
                        char* temp_lang = NULL;
@@ -153,6 +169,13 @@ int vc_parser_get_engine_info(const char* path, vc_engine_info_s** engine_info)
                                                /* SLOG(LOG_DEBUG, vc_config_tag(), "language : %s", (char *)key); */
                                                temp_lang = strdup((char*)key);
                                                temp->languages = g_slist_append(temp->languages, temp_lang);
+
+                                               if (false == is_default_lang_set) {
+                                                       if (NULL != temp->default_lang) free(temp->default_lang);
+                                                       temp->default_lang = strdup((char*)key);
+
+                                                       is_default_lang_set = true;
+                                               }
                                                xmlFree(key);
                                        } else {
                                                SLOG(LOG_WARN, vc_config_tag(), "[WARNING] <%s> has no content", VC_TAG_ENGINE_LANGUAGE);
index e862865..253aa11 100644 (file)
@@ -28,6 +28,7 @@ extern "C" {
 typedef struct {
        char*   name;
        char*   uuid;
+       char*   default_lang;
        GSList* languages;
        bool    non_fixed_support;
 } vc_engine_info_s;