Change to STT engine process
[platform/core/uifw/stt.git] / common / stt_config_mgr.c
index a44f27e..eaa6fe0 100644 (file)
@@ -361,7 +361,7 @@ int __stt_config_set_auto_language()
                SLOG(LOG_ERROR, stt_tag(), "Current config info is NULL");
                return STT_CONFIG_ERROR_OPERATION_FAILED;
        }
-       
+
        /* Check current language */
        if (NULL == g_config_info->language) {
                SLOG(LOG_ERROR, stt_tag(), "Current config language is NULL");
@@ -453,6 +453,7 @@ int __stt_config_set_auto_language()
                g_config_info->language = strdup(tmp_language);
 
                free(tmp_language);
+               tmp_language = NULL;
        }
 
        return 0;
@@ -560,6 +561,11 @@ int __stt_config_mgr_check_engine_is_valid(const char* engine_id)
 
        /* Change default engine */
        iter = g_slist_nth(g_engine_list, 0);
+       if (NULL == iter) {
+               SLOG(LOG_ERROR, stt_tag(), "Operation failed - false engine");
+               return STT_CONFIG_ERROR_OPERATION_FAILED;
+       }
+
        engine_info = iter->data;
        if (NULL == engine_info) {
                SLOG(LOG_ERROR, stt_tag(), "[ERROR] Engine info is NULL");
@@ -640,13 +646,71 @@ int __stt_config_mgr_check_engine_is_valid(const char* engine_id)
 
        if (0 != stt_parser_set_engine(g_config_info->engine_id, g_config_info->setting, g_config_info->language,
                g_config_info->silence_detection, g_config_info->credential)) {
-                       SLOG(LOG_ERROR, stt_tag(), " Fail to save config");
+                       SLOG(LOG_ERROR, stt_tag(), "Fail to save config");
                        return STT_CONFIG_ERROR_OPERATION_FAILED;
        }
 
        return STT_CONFIG_ERROR_NONE;
 }
 
+static void __get_engine_list(const char* directory)
+{
+       DIR *dp = NULL;
+       int ret = -1;
+       struct dirent entry;
+       struct dirent *dirp = NULL;
+
+       if (NULL == directory) {
+               SLOG(LOG_ERROR, stt_tag(), "[Directory ERROR] Directory is NULL");
+               return;
+       }
+
+       dp  = opendir(directory);
+       if (NULL != dp) {
+               do {
+                       ret = readdir_r(dp, &entry, &dirp);
+                       if (0 != ret) {
+                               SLOG(LOG_ERROR, stt_tag(), "[File ERROR] Fail to read directory");
+                               break;
+                       }
+
+                       if (NULL != dirp) {
+                               if (!strcmp(".", dirp->d_name) || !strcmp("..", dirp->d_name))
+                                       continue;
+
+                               stt_engine_info_s* info;
+                               char* filepath = NULL;
+                               int filesize;
+
+                               filesize = strlen(STT_DEFAULT_ENGINE_INFO) + strlen(dirp->d_name) + 5;
+                               filepath = (char*)calloc(filesize, sizeof(char));
+
+                               if (NULL != filepath) {
+                                       snprintf(filepath, filesize, "%s/%s", directory, dirp->d_name);
+                               } else {
+                                       SLOG(LOG_ERROR, stt_tag(), "[Config ERROR] Memory not enough!!");
+                                       continue;
+                               }
+
+                               if (0 == stt_parser_get_engine_info(filepath, &info)) {
+                                       g_engine_list = g_slist_append(g_engine_list, info);
+                               }
+
+                               if (NULL != filepath) {
+                                       free(filepath);
+                                       filepath = NULL;
+                               }
+                       }
+               } while (NULL != dirp);
+
+               closedir(dp);
+       } else {
+               SLOG(LOG_WARN, stt_tag(), "[Config WARNING] Fail to open directory"); 
+       }
+
+       return;
+}
+
 int stt_config_mgr_initialize(int uid)
 {
        GSList *iter = NULL;
@@ -687,54 +751,14 @@ int stt_config_mgr_initialize(int uid)
        }
 
        /* Get file name from default engine directory */
-       DIR *dp = NULL;
-       int ret = -1;
-       struct dirent entry;
-       struct dirent *dirp = NULL;
-
        g_engine_list = NULL;
 
        SLOG(LOG_WARN, stt_tag(), "[CONFIG] default engine info(%s)", STT_DEFAULT_ENGINE_INFO);
-       dp  = opendir(STT_DEFAULT_ENGINE_INFO);
-       if (NULL != dp) {
-               do {
-                       ret = readdir_r(dp, &entry, &dirp);
-                       if (0 != ret) {
-                               SLOG(LOG_ERROR, stt_tag(), "[File ERROR] Fail to read directory");
-                               break;
-                       }
-
-                       if (NULL != dirp) {
-                               if (!strcmp(".", dirp->d_name) || !strcmp("..", dirp->d_name))
-                                       continue;
 
-                               stt_engine_info_s* info;
-                               char* filepath;
-                               int filesize;
-
-                               filesize = strlen(STT_DEFAULT_ENGINE_INFO) + strlen(dirp->d_name) + 5;
-                               filepath = (char*)calloc(filesize, sizeof(char));
-
-                               if (NULL != filepath) {
-                                       snprintf(filepath, filesize, "%s/%s", STT_DEFAULT_ENGINE_INFO, dirp->d_name);
-                               } else {
-                                       SLOG(LOG_ERROR, stt_tag(), "[Config ERROR] Memory not enough!!");
-                                       continue;
-                               }
-
-                               if (0 == stt_parser_get_engine_info(filepath, &info)) {
-                                       g_engine_list = g_slist_append(g_engine_list, info);
-                               }
-
-                               if (NULL != filepath)
-                                       free(filepath);
-                       }
-               } while (NULL != dirp);
-
-               closedir(dp);
-       } else {
-               SLOG(LOG_WARN, stt_tag(), "[Config WARNING] Fail to open default directory");
-       }
+       SLOG(LOG_DEBUG, stt_tag(), "[CONFIG] Get default engine list");
+       __get_engine_list(STT_DEFAULT_ENGINE_INFO);
+       SLOG(LOG_DEBUG, stt_tag(), "[CONFIG] Get download engine list");
+       __get_engine_list(STT_DOWNLOAD_ENGINE_INFO);
 
        __stt_config_mgr_print_engine_info();
 
@@ -780,8 +804,8 @@ int stt_config_mgr_initialize(int uid)
                }
        }
 
-       /* print daemon config */
-       SLOG(LOG_DEBUG, stt_tag(), "== Daemon config ==");
+       /* print stt-service config */
+       SLOG(LOG_DEBUG, stt_tag(), "== STT service config ==");
        SLOG(LOG_DEBUG, stt_tag(), " engine : %s", g_config_info->engine_id);
        SLOG(LOG_DEBUG, stt_tag(), " setting : %s", g_config_info->setting);
        SLOG(LOG_DEBUG, stt_tag(), " auto language : %s", g_config_info->auto_lang ? "on" : "off");
@@ -1067,7 +1091,7 @@ int stt_config_mgr_set_engine(const char* engine)
 
                        SLOG(LOG_DEBUG, stt_tag(), " %s", lang);
                        if (NULL != lang && NULL != g_config_info->language) {
-                               if (0 == strcmp(lang, g_config_info->language)) {       
+                               if (0 == strcmp(lang, g_config_info->language)) {
                                        /* language is valid */
                                        is_valid_lang = true;
 
@@ -1085,8 +1109,14 @@ int stt_config_mgr_set_engine(const char* engine)
                if (false == is_valid_lang) {
                        if (NULL != g_config_info->language) {
                                free(g_config_info->language);
+                               g_config_info->language = NULL;
 
                                iter_lang = g_slist_nth(engine_info->languages, 0);
+                               if (NULL == iter_lang) {
+                                       SLOG(LOG_ERROR, stt_tag(), "Fail to get default language");
+                                       break;
+                               }
+
                                lang = iter_lang->data;
 
                                g_config_info->language = strdup(lang);