#include <unistd.h>
#include <sys/inotify.h>
#include <vconf.h>
+#include <buxton2.h>
#include "stt_config_mgr.h"
#include "stt_defs.h"
{
if (NULL == engine_id || NULL == language) {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] Input parameter is NULL");
- return false;
+ return STT_CONFIG_ERROR_INVALID_PARAMETER;
}
GSList *iter = NULL;
if (0 >= g_slist_length(g_engine_list)) {
SLOG(LOG_ERROR, stt_tag(), "[ERROR] There is no engine!!");
- return false;
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
}
/* Get a first item */
if (NULL == engine_info) {
SLOG(LOG_ERROR, stt_tag(), "engine info is NULL");
- return false;
+ iter = g_slist_next(iter);
+ continue;
}
if (0 != strcmp(engine_id, engine_info->uuid)) {
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) {
- /* Default language is STT_BASE_LANGUAGE */
- if (0 == strcmp(STT_BASE_LANGUAGE, engine_lang)) {
- *language = strdup(engine_lang);
- SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", (NULL == *language) ? "NULL" : *language);
- return 0;
- }
- }
+ if (NULL == engine_info->default_lang) {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] Default language of the engine info is NULL");
+ return STT_CONFIG_ERROR_INVALID_LANGUAGE;
+ }
- iter_lang = g_slist_next(iter_lang);
- }
+ *language = strdup(engine_info->default_lang);
- /* Not support STT_BASE_LANGUAGE */
- if (NULL != engine_lang) {
- *language = strdup(engine_lang);
- SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", (NULL == *language) ? "NULL" : *language);
- return 0;
- }
+ if (NULL != *language) {
+ SLOG(LOG_DEBUG, stt_tag(), "Selected language : %s", *language);
+ return STT_CONFIG_ERROR_NONE;
}
- break;
}
- return -1;
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
}
Eina_Bool stt_config_mgr_inotify_event_cb(void* data, Ecore_Fd_Handler *fd_handler)
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;
+ } else {
+ SLOG(LOG_DEBUG, stt_tag(), "[Directory DEBUG] Directory: %s", directory);
}
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;
- }
+ dirp = readdir(dp);
if (NULL != dirp) {
if (!strcmp(".", dirp->d_name) || !strcmp("..", dirp->d_name))
char* filepath = NULL;
int filesize;
- filesize = strlen(STT_DEFAULT_ENGINE_INFO) + strlen(dirp->d_name) + 5;
+ filesize = strlen(directory) + strlen(dirp->d_name) + 5;
filepath = (char*)calloc(filesize, sizeof(char));
if (NULL != filepath) {
continue;
}
+ SLOG(LOG_DEBUG, stt_tag(), "[File DEBUG] File path: %s", filepath);
+
if (0 == stt_parser_get_engine_info(filepath, &info)) {
g_engine_list = g_slist_append(g_engine_list, info);
}
return STT_CONFIG_ERROR_NONE;
}
+ /* Make directories */
+ if (0 != access(STT_CONFIG_BASE, F_OK)) {
+ if (0 != mkdir(STT_CONFIG_BASE, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to make directory : %s", STT_CONFIG_BASE);
+ __stt_config_release_client(uid);
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, stt_tag(), "Success to make directory : %s", STT_CONFIG_BASE);
+ }
+ }
+
+ if (0 != access(STT_HOME, F_OK)) {
+ if (0 != mkdir(STT_HOME, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to make directory : %s", STT_HOME);
+ __stt_config_release_client(uid);
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, stt_tag(), "Success to make directory : %s", STT_HOME);
+ }
+ }
+
+ if (0 != access(STT_DOWNLOAD_BASE, F_OK)) {
+ if (0 != mkdir(STT_DOWNLOAD_BASE, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to make directory : %s", STT_DOWNLOAD_BASE);
+ __stt_config_release_client(uid);
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, stt_tag(), "Success to make directory : %s", STT_DOWNLOAD_BASE);
+ }
+ }
+
+ if (0 != access(STT_DOWNLOAD_ENGINE_INFO, F_OK)) {
+ if (0 != mkdir(STT_DOWNLOAD_ENGINE_INFO, S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)) {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] Fail to make directory : %s", STT_DOWNLOAD_ENGINE_INFO);
+ __stt_config_release_client(uid);
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, stt_tag(), "Success to make directory : %s", STT_DOWNLOAD_ENGINE_INFO);
+ }
+ }
+
+
/* Get file name from default engine directory */
g_engine_list = NULL;
return STT_CONFIG_ERROR_NONE;
}
+int __stt_config_set_buxtonkey(const char* engine)
+{
+ /* Set vconfkey */
+ struct buxton_client * bux_cli;
+ struct buxton_layer * bux_layer;
+ struct buxton_value * bux_val;
+
+ int ret = buxton_open(&bux_cli, NULL, NULL);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, stt_tag(), "[DBUS-BUXTON2] Fail to open buxton client, ret(%d)", ret);
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ }
+ bux_layer = buxton_create_layer("system");
+ if (NULL == bux_layer) {
+ SLOG(LOG_ERROR, stt_tag(), "[DBUS-BUXTON2] buxton_create_layer FAIL");
+ buxton_close(bux_cli);
+ bux_cli = NULL;
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ }
+ bux_val = buxton_value_create_string(engine);
+ if (NULL == bux_val) {
+ SLOG(LOG_ERROR, stt_tag(), "[DBUS-BUXTON2] buxton_value_create_string FAIL");
+ buxton_free_layer(bux_layer);
+ buxton_close(bux_cli);
+ bux_layer = NULL;
+ bux_cli = NULL;
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ } else {
+ SLOG(LOG_DEBUG, stt_tag(), "[DBUS-BUXTON2] layer: %s", buxton_layer_get_name(bux_layer));
+ }
+
+ ret = buxton_set_value_sync(bux_cli, bux_layer, STT_ENGINE_DB_DEFAULT, bux_val);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, stt_tag(), "[DBUS-BUXTON2] Fail to set value sync, ret(%d)", ret);
+ buxton_value_free(bux_val);
+ buxton_free_layer(bux_layer);
+ buxton_close(bux_cli);
+
+ bux_cli = NULL;
+ bux_layer = NULL;
+ bux_val = NULL;
+ return STT_CONFIG_ERROR_OPERATION_FAILED;
+ }
+ SLOG(LOG_DEBUG, stt_tag(), "[DBUS-BUXTON2] buxton_set_value_sync: %s", STT_ENGINE_DB_DEFAULT);
+
+ buxton_value_free(bux_val);
+ buxton_free_layer(bux_layer);
+ buxton_close(bux_cli);
+
+ bux_cli = NULL;
+ bux_layer = NULL;
+ bux_val = NULL;
+
+ return STT_CONFIG_ERROR_NONE;
+}
+
int stt_config_mgr_set_engine(const char* engine)
{
if (0 >= g_slist_length(g_config_client_list)) {
SLOG(LOG_DEBUG, stt_tag(), "New engine id : %s", engine);
+ int ret = __stt_config_set_buxtonkey(engine);
+ if (0 != ret) {
+ SLOG(LOG_ERROR, stt_tag(), "[ERROR] set buxtonkey Failed!!!");
+ return ret;
+ }
+
GSList *iter = NULL;
stt_engine_info_s *engine_info = NULL;
bool is_valid_engine = false;
continue;
}
- if (NULL != g_config_info->engine_id)
+ if (NULL != g_config_info->engine_id) {
free(g_config_info->engine_id);
+ g_config_info->engine_id = NULL;
+ }
g_config_info->engine_id = strdup(engine);
if (NULL != g_config_info->setting) {
free(g_config_info->setting);
+ g_config_info->setting = NULL;
}
if (NULL != engine_info->setting) {
info->start_time = start_time;
info->end_time = end_time;
+ SECURE_SLOG(LOG_DEBUG, stt_tag(), "[DEBUG] inside stt_config_mgr_add_time_info: index(%d), text(%s), start time(%ld), end_time(%ld)", info->index, (NULL == info->text) ? "NULL" : info->text, info->start_time, info->end_time);
+
/* Add item to global list */
g_time_list = g_slist_append(g_time_list, info);
+ SLOG(LOG_DEBUG, stt_tag(), "[DEBUG] inside stt_config_mgr_add_time_info: g_time_list length(%d)", g_slist_length(g_time_list));
+
return 0;
}
ret = stt_parser_get_time_info(&temp_time);
if (0 != ret) {
SLOG(LOG_WARN, stt_tag(), "[WARNING] Fail to get time info : %d", ret);
- return STT_CONFIG_ERROR_OPERATION_FAILED;
+ return STT_CONFIG_ERROR_NONE;
}
GSList *iter = NULL;