Add logic to set default language of the engine
[platform/core/uifw/stt.git] / common / stt_config_parser.c
index 3f192e5..6a7925d 100644 (file)
@@ -23,6 +23,7 @@
 #define STT_TAG_ENGINE_ID              "id"
 #define STT_TAG_ENGINE_SETTING         "setting"
 #define STT_TAG_ENGINE_AGREEMENT       "agreement"
+#define STT_TAG_ENGINE_DEFAULT         "default"
 #define STT_TAG_ENGINE_LANGUAGE_SET    "languages"
 #define STT_TAG_ENGINE_LANGUAGE                "lang"
 #define STT_TAG_ENGINE_SILENCE_SUPPORT "silence-detection-support"
@@ -98,10 +99,13 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
        temp->uuid = NULL;
        temp->setting = NULL;
        temp->agreement = NULL;
+       temp->default_lang = NULL;
        temp->languages = NULL;
        temp->support_silence_detection = false;
        temp->need_credential = false;
 
+       bool is_default_lang_set = false;
+
        while (cur != NULL) {
                if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_NAME)) {
                        key = xmlNodeGetContent(cur);
@@ -143,6 +147,18 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
                        } else {
                                SLOG(LOG_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_AGREEMENT);
                        }
+               } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_DEFAULT)) {
+                       key = xmlNodeGetContent(cur);
+                       if (NULL != key) {
+                               SLOG(LOG_DEBUG, stt_tag(), "Engine agreement : %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_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_DEFAULT);
+                       }
                } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)STT_TAG_ENGINE_LANGUAGE_SET)) {
                        xmlNodePtr lang_node = NULL;
                        char* temp_lang = NULL;
@@ -156,6 +172,13 @@ int stt_parser_get_engine_info(const char* path, stt_engine_info_s** engine_info
                                                /* SLOG(LOG_DEBUG, stt_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_ERROR, stt_tag(), "[ERROR] <%s> has no content", STT_TAG_ENGINE_LANGUAGE);