Delete meaningless configuration
[platform/core/uifw/tts.git] / server / ttsd_config.c
old mode 100755 (executable)
new mode 100644 (file)
index edc4823..58dc2fa
@@ -1,5 +1,5 @@
 /*
-*  Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd All Rights Reserved 
+*  Copyright (c) 2011-2016 Samsung Electronics Co., Ltd All Rights Reserved 
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *  limitations under the License.
 */
 
-#include <Ecore_File.h>
-#include <runtime_info.h>
-#include "ttsd_main.h"
-#include "ttsd_config.h"
-#include "ttsd_engine_agent.h"
-#include "ttsd_data.h"
 
-#define CONFIG_DEFAULT                 BASE_DIRECTORY_DEFAULT"/ttsd.conf"
+/* For multi-user support */
+#include <tzplatform_config.h>
 
-#define DEFAULT_CONFIG_FILE_NAME       CONFIG_DIRECTORY"/ttsd_default.conf"
-#define DEFAULT_ERROR_FILE_NAME                CONFIG_DIRECTORY"/ttsd_default.err"
+#include "tts_config_mgr.h"
+#include "ttsd_config.h"
+#include "ttsd_main.h"
 
-#define ENGINE_ID      "ENGINE_ID"
-#define VOICE          "VOICE"
-#define SPEED          "SPEED"
 
-static char*   g_engine_id;
-static char*   g_language;
-static int     g_vc_type;
-static int     g_speed;
+static ttsd_config_changed_cb g_callback;
 
-static ttsd_config_lang_changed_cb g_lang_cb;
-static ttsd_config_speed_changed_cb g_speed_cb;
+static ttsd_config_screen_reader_changed_cb g_sr_callback;
 
-int __ttsd_config_save()
+void __ttsd_config_engine_changed_cb(const char* engine_id, const char* setting, const char* language, int voice_type, bool auto_voice, bool need_credential, void* user_data)
 {
-       if (0 != access(DEFAULT_CONFIG_FILE_NAME, R_OK|W_OK)) {
-               if (0 == ecore_file_mkpath(CONFIG_DIRECTORY)) {
-                       SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to create directory (%s)", CONFIG_DIRECTORY);
-               } else {
-                       SLOG(LOG_DEBUG, get_tag(), "[Config] Create directory (%s)", CONFIG_DIRECTORY);
-               }
+       /* Need to check engine is valid */
+       if (false == tts_config_check_default_engine_is_valid(engine_id)) {
+               SLOG(LOG_ERROR, tts_tag(), "Engine id is NOT valid : %s", engine_id);
+               return;
        }
 
-       FILE* config_fp;
-       config_fp = fopen(DEFAULT_CONFIG_FILE_NAME, "w+");
-
-       if (NULL == config_fp) {
-               /* make file and file default */
-               SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to open config (%s)", DEFAULT_CONFIG_FILE_NAME);
-               return -1;
+       if (NULL != g_callback) {
+               SECURE_SLOG(LOG_DEBUG, tts_tag(), "Call the engine reload callback : engine id(%s)", engine_id);
+               g_callback(TTS_CONFIG_TYPE_ENGINE, engine_id, 0);
+               SECURE_SLOG(LOG_DEBUG, tts_tag(), "Call the voice changed callback : lang(%s), type(%d)", language, voice_type);
+               g_callback(TTS_CONFIG_TYPE_VOICE, language, voice_type);
+       } else {
+               SLOG(LOG_ERROR, tts_tag(), "Config changed callback is NULL");
        }
-
-       SLOG(LOG_DEBUG, get_tag(), "[Config] Rewrite config file");
-
-       /* Write engine id */
-       fprintf(config_fp, "%s %s\n", ENGINE_ID, g_engine_id);
-
-       /* Write voice */
-       fprintf(config_fp, "%s %s %d\n", VOICE, g_language, g_vc_type);
-
-       /* Read speed */
-       fprintf(config_fp, "%s %d\n", SPEED, g_speed);
-
-       fclose(config_fp);
-
-       return 0;
 }
 
-int __ttsd_config_load()
+void __ttsd_config_voice_changed_cb(const char* before_language, int before_type, const char* language, int type, bool auto_voice, void* user_data)
 {
-       FILE* config_fp;
-       char buf_id[256] = {0};
-       char buf_param[256] = {0};
-       int int_param = 0;
-       bool is_default_open = false;
-
-       config_fp = fopen(DEFAULT_CONFIG_FILE_NAME, "r");
-
-       if (NULL == config_fp) {
-               SLOG(LOG_WARN, get_tag(), "[Config WARNING] Not open file(%s)", DEFAULT_CONFIG_FILE_NAME);
-               
-               config_fp = fopen(CONFIG_DEFAULT, "r");
-               if (NULL == config_fp) {
-                       SLOG(LOG_ERROR, get_tag(), "[Config WARNING] Not open original config file(%s)", CONFIG_DEFAULT);
-                       return -1;
-               }
-               is_default_open = true;
+       /* Need to check voice is valid */
+       if (false == tts_config_check_default_voice_is_valid(language, type)) {
+               SLOG(LOG_ERROR, tts_tag(), "Lang(%s) type(%d) is NOT valid", language, type);
+               return;
        }
 
-       /* Read engine id */
-       if (EOF == fscanf(config_fp, "%s %s", buf_id, buf_param)) {
-               fclose(config_fp);
-               SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to read config (engine id)");
-               __ttsd_config_save();
-               return -1;
+       if (NULL != g_callback) {
+               g_callback(TTS_CONFIG_TYPE_VOICE, language, type);
        } else {
-               if (0 == strncmp(ENGINE_ID, buf_id, strlen(ENGINE_ID))) {
-                       g_engine_id = strdup(buf_param);
-               } else {
-                       fclose(config_fp);
-                       SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to load config (engine id)");
-                       __ttsd_config_save();
-                       return -1;
-               }
+               SLOG(LOG_ERROR, tts_tag(), "Config changed callback is NULL");
        }
+}
 
-       /* Read voice */
-       if (EOF == fscanf(config_fp, "%s %s %d", buf_id, buf_param, &int_param)) {
-               fclose(config_fp);
-               SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to read config (voice)");
-               __ttsd_config_save();
-               return -1;
+void __ttsd_config_speech_rate_changed_cb(int value, void* user_data)
+{
+       if (NULL != g_callback) {
+               g_callback(TTS_CONFIG_TYPE_SPEED, NULL, value);
        } else {
-               if (0 == strncmp(VOICE, buf_id, strlen(VOICE))) {
-                       g_language = strdup(buf_param);
-                       g_vc_type = int_param;
-               } else {
-                       fclose(config_fp);
-                       SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to load config (voice)");
-                       __ttsd_config_save();
-                       return -1;
-               }
+               SLOG(LOG_ERROR, tts_tag(), "Config changed callback is NULL");
        }
-       
-       /* Read speed */
-       if (EOF == fscanf(config_fp, "%s %d", buf_id, &int_param)) {
-               fclose(config_fp);
-               SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to read config (speed)");
-               __ttsd_config_save();
-               return -1;
+}
+
+void __ttsd_config_pitch_changed_cb(int value, void* user_data)
+{
+       if (NULL != g_callback) {
+               g_callback(TTS_CONFIG_TYPE_PITCH, NULL, value);
        } else {
-               if (0 == strncmp(SPEED, buf_id, strlen(SPEED))) {
-                       g_speed = int_param;
-               } else {
-                       fclose(config_fp);
-                       SLOG(LOG_WARN, get_tag(), "[Config WARNING] Fail to load config (speed)");
-                       __ttsd_config_save();
-                       return -1;
-               }
+               SLOG(LOG_ERROR, tts_tag(), "Config changed callback is NULL");
        }
-       
-       fclose(config_fp);
-
-       SLOG(LOG_DEBUG, get_tag(), "[Config] Load config : engine(%s), voice(%s,%d), speed(%d)",
-               g_engine_id, g_language, g_vc_type, g_speed);
+}
 
-       if (true == is_default_open) {
-               if(0 == __ttsd_config_save()) {
-                       SLOG(LOG_DEBUG, get_tag(), "[Config] Create config(%s)", DEFAULT_CONFIG_FILE_NAME);
-               }
+void __ttsd_config_screen_reader_changed_cb(bool value)
+{
+       if (NULL != g_sr_callback) {
+               g_sr_callback(value);
        }
-
-       return 0;
 }
 
-int ttsd_config_initialize(ttsd_config_lang_changed_cb lang_cb, ttsd_config_speed_changed_cb speed_cb)
+int ttsd_config_initialize(ttsd_config_changed_cb config_cb)
 {
-       g_engine_id = NULL;
-       g_language = NULL;
-       g_vc_type = 1;
-       g_speed = 3;
+       if (NULL == config_cb) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config] Invalid parameter");
+               return -1;
+       }
 
-       g_lang_cb = lang_cb;
-       g_speed_cb = speed_cb;
+       g_callback = config_cb;
+       g_sr_callback = NULL;
 
-       ecore_file_mkpath(CONFIG_DIRECTORY);
+       int ret = -1;
+       ret = tts_config_mgr_initialize(getpid());
+       if (0 != ret) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config] Fail to initialize config manager");
+               return -1;
+       }
 
-       __ttsd_config_load();
+       ret = tts_config_mgr_set_callback(getpid(), __ttsd_config_engine_changed_cb, __ttsd_config_voice_changed_cb, 
+               __ttsd_config_speech_rate_changed_cb, __ttsd_config_pitch_changed_cb, NULL);
+       if (0 != ret) {
+               SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to set config changed : %d", ret);
+               return -1;
+       }
 
        return 0;
 }
 
 int ttsd_config_finalize()
 {
-       __ttsd_config_save();
+       tts_config_unset_screen_reader_callback(getpid());
 
-       if (NULL != g_language) {
-               free(g_language);
-       }
-
-       if (NULL != g_engine_id) {
-               free(g_engine_id);
-       }
+       tts_config_mgr_finalize(getpid());
 
        return 0;
 }
 
-int ttsd_config_update_language()
+int ttsd_config_set_screen_reader_callback(ttsd_config_screen_reader_changed_cb sr_cb)
 {
-       /* no work in default mode */
+       if (NULL == sr_cb) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config] Invalid parameter");
+               return -1;
+       }
+
+       g_sr_callback = sr_cb;
+
+       int ret = tts_config_set_screen_reader_callback(getpid(), __ttsd_config_screen_reader_changed_cb) ;
+       if (0 != ret) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config] Fail to set screen reader callback");
+               return -1;
+       }
        return 0;
 }
 
@@ -200,11 +140,9 @@ int ttsd_config_get_default_engine(char** engine_id)
        if (NULL == engine_id)
                return -1;
 
-       if (NULL != g_engine_id) {
-               *engine_id = strdup(g_engine_id);
-       } else {
-               SLOG(LOG_ERROR, get_tag(), "[Config ERROR] Current engine id is NULL");
-               return -1;
+       if (0 != tts_config_mgr_get_engine(engine_id)) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to get engine id");
+               return TTSD_ERROR_OPERATION_FAILED;
        }
 
        return 0;
@@ -215,12 +153,12 @@ int ttsd_config_set_default_engine(const char* engine_id)
        if (NULL == engine_id)
                return -1;
 
-       if (NULL != g_engine_id)
-               free(g_engine_id);
-
-       g_engine_id = strdup(engine_id);
+       if (true == tts_config_check_default_engine_is_valid(engine_id)) {
+               if (0 != tts_config_mgr_set_engine(engine_id)) {
+                       SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to set engine id");
+               }
+       }
 
-       __ttsd_config_save();
        return 0;
 }
 
@@ -229,29 +167,11 @@ int ttsd_config_get_default_voice(char** language, int* type)
        if (NULL == language || NULL == type)
                return -1;
 
-       if (NULL != g_language) {
-               *language = strdup(g_language);
-               *type = g_vc_type;
-       } else {
-               SLOG(LOG_ERROR, get_tag(), "[Config ERROR] Current language is NULL");
-               return -1;
+       if (0 != tts_config_mgr_get_voice(language, type)) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to get default voice");
+               return TTSD_ERROR_OPERATION_FAILED;
        }
-       
-       return 0;
-}
-
-int ttsd_config_set_default_voice(const char* language, int type)
-{
-       if (NULL == language)
-               return -1;
-
-       if (NULL != g_language)
-               free(g_language);
 
-       g_language = strdup(language);
-       g_vc_type = type;
-
-       __ttsd_config_save();
        return 0;
 }
 
@@ -260,77 +180,41 @@ int ttsd_config_get_default_speed(int* speed)
        if (NULL == speed)
                return -1;
 
-       *speed = g_speed;
+       if (0 != tts_config_mgr_get_speech_rate(speed)) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to get default speech rate");
+               return TTSD_ERROR_OPERATION_FAILED;
+       }
 
        return 0;
 }
 
-int ttsd_config_set_default_speed(int speed)
+int ttsd_config_get_default_pitch(int* pitch)
 {
-       g_speed = speed;
+       if (NULL == pitch)
+               return -1;
+
+       if (0 != tts_config_mgr_get_pitch(pitch)) {
+               SLOG(LOG_ERROR, tts_tag(), "[Config ERROR] Fail to get default pitch");
+               return TTSD_ERROR_OPERATION_FAILED;
+       }
 
-       __ttsd_config_save();
        return 0;
 }
 
 int ttsd_config_save_error(int uid, int uttid, const char* lang, int vctype, const char* text, 
                           const char* func, int line, const char* message)
 {
-       FILE* err_fp;
-       err_fp = fopen(DEFAULT_ERROR_FILE_NAME, "a");
-       if (NULL == err_fp) {
-               SLOG(LOG_WARN, get_tag(), "[WARNING] Fail to open error file (%s)", DEFAULT_ERROR_FILE_NAME);
-               return -1;
-       }
-       SLOG(LOG_DEBUG, get_tag(), "Save Error File (%s)", DEFAULT_ERROR_FILE_NAME);
+       SLOG(LOG_DEBUG, tts_tag(), "@@@@@ TTS ERROR LOG @@@@@");
 
-       /* func */
-       if (NULL != func) {
-               fprintf(err_fp, "function - %s\n", func);
-       }
-       
-       /* line */
-       fprintf(err_fp, "line - %d\n", line);
+       SLOG(LOG_DEBUG, tts_tag(), "uid(%d) uttid(%d)", uid, uttid);
 
-       /* message */
-       if (NULL != message) {
-               fprintf(err_fp, "message - %s\n", message);
-       }
 
-       int ret;
-       /* uid */
-       fprintf(err_fp, "uid - %d\n", uid);
-       
-       /* uttid */
-       fprintf(err_fp, "uttid - %d\n", uttid);
-
-       /* lang */
-       if (NULL != lang) {
-               fprintf(err_fp, "language - %s\n", lang);
-       }
+       SLOG(LOG_DEBUG, tts_tag(), "Function(%s) Line(%d)", (NULL == func) ? "NULL" : func, line);
+       SLOG(LOG_DEBUG, tts_tag(), "Message(%s)", (NULL == message) ? "NULL" : message);
+       SLOG(LOG_DEBUG, tts_tag(), "Lang(%s), type(%d)", (NULL == lang) ? "NULL" : lang, vctype);
+       SLOG(LOG_DEBUG, tts_tag(), "Text(%s)", (NULL == text) ? "NULL" : text);
 
-       /* vctype */
-       fprintf(err_fp, "vctype - %d\n", vctype);
-
-       /* text */
-       if (NULL != text) {
-               fprintf(err_fp, "text - %s\n", text);
-       }
-
-       /* get current engine */
-       char *engine_id = NULL;
-
-       ret = ttsd_engine_setting_get_engine(&engine_id);
-       if (0 != ret) {
-               SLOG(LOG_ERROR, get_tag(), "[ERROR] Fail to get current engine");
-       } else {
-               fprintf(err_fp, "current engine - %s", engine_id);
-       }
-
-       /* get data */
-       ttsd_data_save_error_log(uid, err_fp);
-
-       fclose(err_fp);
+       SLOG(LOG_DEBUG, tts_tag(), "@@@@@");
 
        return 0;
-}
\ No newline at end of file
+}