X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=common%2Ftts_config_parser.c;h=443e2ddec9e7fe6054ea8570ca27b731bddf9e6c;hb=6267255cb587b9f2ef4cda193a68ef77a7542672;hp=135b392b7a2a4bdfa76f26d230f4be7c4ccffcc1;hpb=b958508403848b64941c4614d22a921520e83cd5;p=platform%2Fcore%2Fuifw%2Ftts.git diff --git a/common/tts_config_parser.c b/common/tts_config_parser.c index 135b392..443e2dd 100644 --- a/common/tts_config_parser.c +++ b/common/tts_config_parser.c @@ -43,6 +43,7 @@ #define TTS_TAG_VOICE_TYPE_MALE "male" #define TTS_TAG_VOICE_TYPE_CHILD "child" +#define TTS_MAX_TEXT_SIZE 2000 extern char* tts_tag(); @@ -58,14 +59,21 @@ int tts_parser_get_engine_info(const char* path, tts_engine_info_s** engine_info return -1; } + bool isTextsize = false; xmlDocPtr doc = NULL; xmlNodePtr cur = NULL; xmlChar *key = NULL; xmlChar *attr = NULL; - doc = xmlParseFile(path); - if (doc == NULL) { - SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse xml file"); + if (0 == access(path, F_OK)) { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to access to %s", path); + doc = xmlParseFile(path); + if (doc == NULL) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse xml file"); + return -1; + } + } else { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to access to %s", path); return -1; } @@ -213,6 +221,7 @@ int tts_parser_get_engine_info(const char* path, tts_engine_info_s** engine_info SLOG(LOG_ERROR, tts_tag(), "[ERROR] <%s> has no content", TTS_TAG_ENGINE_PITCH_SUPPORT); } } else if (0 == xmlStrcmp(cur->name, (const xmlChar *)TTS_TAG_ENGINE_TEXT_SIZE)) { + isTextsize = true; key = xmlNodeGetContent(cur); if (NULL != key) { temp->text_size = atoi((char*)key); @@ -225,10 +234,14 @@ int tts_parser_get_engine_info(const char* path, tts_engine_info_s** engine_info cur = cur->next; } + if (false == isTextsize) { + temp->text_size = TTS_MAX_TEXT_SIZE; + } + xmlFreeDoc(doc); doc = NULL; - if (NULL == temp->name || NULL == temp->uuid) { + if (NULL == temp->uuid) { /* Invalid engine */ SECURE_SLOG(LOG_ERROR, tts_tag(), "[ERROR] Invalid engine : %s", path); tts_parser_free_engine_info(temp); @@ -322,7 +335,7 @@ int tts_parser_print_engine_info(tts_engine_info_s* engine_info) SLOG(LOG_ERROR, tts_tag(), " Voice is NONE"); } - SLOG(LOG_DEBUG, tts_tag(), "====================="); + SLOG(LOG_DEBUG, tts_tag(), "@@@"); return 0; } @@ -363,8 +376,14 @@ int tts_parser_load_config(tts_config_s** config_info) if (TTS_RETRY_COUNT == retry_count) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse file error : %s", TTS_CONFIG); - xmlCleanupParser(); - return -1; + doc = xmlParseFile(TTS_DEFAULT_CONFIG); + if (NULL == doc) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse file error : %s", TTS_DEFAULT_CONFIG); + xmlCleanupParser(); + return -1; + } + is_default_open = true; + break; } } } @@ -507,13 +526,23 @@ int tts_parser_load_config(tts_config_s** config_info) g_config_doc = doc; if (true == is_default_open) { - int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); - if (0 > ret) { - SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); - } + int retry_count = 0; + int ret = -1; + do { + ret = xmlSaveFile(TTS_CONFIG, g_config_doc); + if (0 < ret) + break; + retry_count++; + usleep(10000); + + if (TTS_RETRY_COUNT == retry_count) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + return -1; + } + } while (0 != ret); /* Set mode */ - if (0 > chmod(TTS_CONFIG, 0666)) { + if (0 > chmod(TTS_CONFIG, 0600)) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to change file mode : %d", ret); } @@ -552,19 +581,27 @@ int tts_parser_copy_xml(const char* original, const char* destination) } xmlDocPtr doc = NULL; - doc = xmlParseFile(original); - if (doc == NULL) { - SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse file error : %s", original); + if (0 == access(original, F_OK)) { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to access to %s", original); + doc = xmlParseFile(original); + if (doc == NULL) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse file error : %s", original); + return -1; + } + } else { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to access to %s", original); return -1; } int ret = xmlSaveFile(destination, doc); if (0 > ret) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + } else { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to save %s", destination); } /* Set mode */ - if (0 > chmod(destination, 0666)) { + if (0 > chmod(destination, 0600)) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to change file mode : %d", ret); } @@ -628,6 +665,8 @@ int tts_parser_set_engine(const char* engine_id, const char* setting, const char int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); if (0 > ret) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + } else { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to save %s", TTS_CONFIG); } return 0; @@ -661,7 +700,7 @@ int tts_parser_set_voice(const char* language, int type) while (cur != NULL) { if (0 == xmlStrcmp(cur->name, (const xmlChar *)TTS_TAG_CONFIG_LANGUAGE)) { xmlNodeSetContent(cur, (const xmlChar *)language); - } + } if (0 == xmlStrcmp(cur->name, (const xmlChar *)TTS_TAG_CONFIG_VOICE_TYPE)) { switch (type) { @@ -681,6 +720,8 @@ int tts_parser_set_voice(const char* language, int type) int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); if (0 > ret) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + } else { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to save %s", TTS_CONFIG); } return 0; @@ -724,6 +765,8 @@ int tts_parser_set_auto_voice(bool value) int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); if (0 > ret) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + } else { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to save %s", TTS_CONFIG); } return 0; @@ -767,6 +810,8 @@ int tts_parser_set_speech_rate(int value) int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); if (0 > ret) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + } else { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to save %s", TTS_CONFIG); } return 0; @@ -799,7 +844,7 @@ int tts_parser_set_pitch(int value) snprintf(temp, 10, "%d", value); xmlNodeSetContent(cur, (const xmlChar *)temp); break; - } + } cur = cur->next; } @@ -807,6 +852,8 @@ int tts_parser_set_pitch(int value) int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); if (0 > ret) { SLOG(LOG_ERROR, tts_tag(), "[ERROR] Save result : %d", ret); + } else { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to save %s", TTS_CONFIG); } return 0; @@ -829,9 +876,12 @@ int tts_parser_find_config_changed(char** engine, char**setting, bool* auto_voic int retry_count = 0; while (NULL == doc) { - doc = xmlParseFile(TTS_CONFIG); - if (NULL != doc) { - break; + if (0 == access(TTS_CONFIG, F_OK)) { + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Success to access to %s", TTS_CONFIG); + doc = xmlParseFile(TTS_CONFIG); + if (NULL != doc) { + break; + } } retry_count++; usleep(10000); @@ -1049,3 +1099,26 @@ int tts_parser_find_config_changed(char** engine, char**setting, bool* auto_voic return 0; } + +int tts_parser_reset() +{ + SLOG(LOG_DEBUG, tts_tag(), "[DEBUG] Reset g_config_doc as %s", TTS_DEFAULT_CONFIG); + + if (NULL != g_config_doc) { + xmlFreeDoc(g_config_doc); + g_config_doc = NULL; + } + + g_config_doc = xmlParseFile(TTS_DEFAULT_CONFIG); + if (NULL == g_config_doc) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to parse %s", TTS_DEFAULT_CONFIG); + return -1; + } + + int ret = xmlSaveFile(TTS_CONFIG, g_config_doc); + if (0 > ret) { + SLOG(LOG_ERROR, tts_tag(), "[ERROR] Fail to save %s", TTS_CONFIG); + } + + return 0; +}