From: Suyeon Hwang Date: Wed, 7 Apr 2021 12:17:41 +0000 (+0900) Subject: Add function on tts_ipc to hide tts_dbus completely X-Git-Tag: submit/tizen/20210628.060348~41 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F28%2F256628%2F1;p=platform%2Fcore%2Fuifw%2Ftts.git Add function on tts_ipc to hide tts_dbus completely Change-Id: Icee9794fd4b87ab85cc72e4be20acf97689236b6 Signed-off-by: Suyeon Hwang --- diff --git a/client/tts.c b/client/tts.c index 62667bb5..e65d0cd1 100644 --- a/client/tts.c +++ b/client/tts.c @@ -403,14 +403,10 @@ int tts_destroy(tts_h tts) } while (0 != ret); } else { SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : g_sr(%d) mode(%d)", g_screen_reader, client->mode); - tts_ipc_method_e method; - ret = tts_ipc_get_method(&method); - if (TTS_ERROR_NONE == ret && TTS_IPC_METHOD_DBUS == method) { - ret = tts_dbus_remove_match(client->mode); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret)); - } + ret = tts_ipc_stop_listening(client->uid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret)); } } diff --git a/client/tts_client.c b/client/tts_client.c index 1a3eef58..9c9cdbac 100644 --- a/client/tts_client.c +++ b/client/tts_client.c @@ -120,6 +120,7 @@ static inline void __reset_client_data(tts_client_s* client) { client->err_msg = NULL; client->hello_timer = NULL; + client->start_listening = false; client->credential = NULL; client->credential_needed = false; @@ -290,7 +291,7 @@ tts_client_s* tts_client_get_by_uid(const int uid) } pthread_mutex_unlock(&g_client_list_mutex); - SLOG(LOG_WARN, TAG_TTSC, "uid is not valid"); + SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid(%d) is not valid", uid); return NULL; } @@ -421,6 +422,26 @@ tts_state_e tts_client_get_current_state(tts_client_s* client) return client->current_state; } +void tts_client_set_start_listening(int uid, bool is_listening_started) +{ + tts_client_s* client = tts_client_get_by_uid(uid); + if (NULL == client) { + return; + } + + client->start_listening = is_listening_started; +} + +bool tts_client_is_listening_started(int uid) +{ + tts_client_s* client = tts_client_get_by_uid(uid); + if (NULL == client) { + return false; + } + + return client->start_listening; +} + void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data) { if (NULL == client || false == tts_client_is_valid(client->uid)) { diff --git a/client/tts_client.h b/client/tts_client.h index dca7647a..50740903 100644 --- a/client/tts_client.h +++ b/client/tts_client.h @@ -67,6 +67,7 @@ typedef struct { /* connection */ int prepare_count; Ecore_Timer* hello_timer; + bool start_listening; /* options */ char* credential; @@ -107,6 +108,9 @@ GList* tts_client_get_client_list(); void tts_client_set_current_state(tts_client_s* client, tts_state_e state); tts_state_e tts_client_get_current_state(tts_client_s* client); +void tts_client_set_start_listening(int uid, bool is_listening_started); +bool tts_client_is_listening_started(int uid); + void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data); void tts_client_set_utterance_started_cb(tts_client_s* client, tts_utterance_started_cb callback, void* user_data); void tts_client_set_utterance_completed_cb(tts_client_s* client, tts_utterance_completed_cb callback, void* user_data); diff --git a/client/tts_core.c b/client/tts_core.c index d56f4d04..65727f62 100644 --- a/client/tts_core.c +++ b/client/tts_core.c @@ -969,14 +969,10 @@ int tts_core_unprepare(tts_client_s* client, bool is_screen_reader_on) int count = 0; if (false == is_screen_reader_on && TTS_MODE_SCREEN_READER == client->mode) { SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Do not request finalize : is_screen_reader(%d) mode(%d)", is_screen_reader_on, client->mode); - tts_ipc_method_e method; - ret = tts_ipc_get_method(&method); - if (TTS_ERROR_NONE == ret && TTS_IPC_METHOD_DBUS == method) { - ret = tts_dbus_remove_match(client->mode); - if (0 != ret) { - SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret)); - } + ret = tts_ipc_stop_listening(client->uid); + if (0 != ret) { + SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to remove match : %s", __tts_get_error_code(ret)); } } else { bool is_prepared = false; diff --git a/client/tts_dbus.c b/client/tts_dbus.c index 4100a6e3..b54cded5 100644 --- a/client/tts_dbus.c +++ b/client/tts_dbus.c @@ -213,11 +213,6 @@ static int __tts_dbus_remove_match(int mode) return 0; } -int tts_dbus_remove_match(int mode) -{ - return __tts_dbus_remove_match(mode); -} - static Eina_Bool listener_event_callback(void* data, Ecore_Fd_Handler *fd_handler) { if (NULL == g_conn_listener) return ECORE_CALLBACK_RENEW; @@ -475,6 +470,17 @@ int tts_dbus_close_connection() return 0; } +int tts_dbus_stop_listening(int uid) +{ + tts_client_s* client = tts_client_get_by_uid(uid); + if (NULL == client) { + SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid"); + return TTS_ERROR_INVALID_PARAMETER; + } + + return __tts_dbus_remove_match(client->mode); +} + int tts_dbus_reconnect() { if (!g_conn_sender || !g_conn_listener) { diff --git a/client/tts_dbus.h b/client/tts_dbus.h index f3ed99f1..371a8660 100644 --- a/client/tts_dbus.h +++ b/client/tts_dbus.h @@ -1,5 +1,5 @@ /* -* Copyright (c) 2011-2016 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 @@ -25,6 +25,8 @@ int tts_dbus_open_connection(); int tts_dbus_close_connection(); +int tts_dbus_stop_listening(int uid); + int tts_dbus_request_hello(int uid); int tts_dbus_request_hello_sync(int uid); @@ -35,8 +37,6 @@ int tts_dbus_request_finalize(int uid); int tts_dbus_set_sound_type(int uid, int type); -int tts_dbus_remove_match(int mode); - int tts_dbus_request_add_text(int uid, const char* text, const char* lang, int vctype, int speed, int uttid, const char* credential); int tts_dbus_request_play(int uid, const char* credential); diff --git a/client/tts_ipc.c b/client/tts_ipc.c index eedc2557..1d416bcc 100644 --- a/client/tts_ipc.c +++ b/client/tts_ipc.c @@ -14,15 +14,36 @@ #include "tts_dbus.h" #include "tts_tidl.h" -int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_request_hello, - &tts_dbus_request_hello_sync, &tts_dbus_request_initialize, &tts_dbus_request_finalize, - &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop, + +typedef enum { + OPEN_CONNECTION, + CLOSE_CONNECTION, + STOP_LISTENING, + REQUEST_HELLO, + REQUEST_HELLO_SYNC, + REQUEST_INITIALIZE, + REQUEST_FINALIZE, + REQUEST_ADD_TEXT, + REQUEST_PLAY, + REQUEST_STOP, + REQUEST_PAUSE, + REQUEST_SET_PRIVATE_DATA, + REQUEST_GET_PRIVATE_DATA, + REQUEST_PLAY_PCM, + REQUEST_STOP_PCM, + REQUEST_ADD_PCM +} tts_ipc_vtable_e; + + +int(*ttsc_dbus_vtable[])() = { &tts_dbus_open_connection, &tts_dbus_close_connection, &tts_dbus_stop_listening, + &tts_dbus_request_hello, &tts_dbus_request_hello_sync, &tts_dbus_request_initialize, + &tts_dbus_request_finalize, &tts_dbus_request_add_text, &tts_dbus_request_play, &tts_dbus_request_stop, &tts_dbus_request_pause, &tts_dbus_request_set_private_data, &tts_dbus_request_get_private_data, &tts_dbus_request_play_pcm, &tts_dbus_request_stop_pcm, &tts_dbus_request_add_pcm }; -int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_request_hello, - &tts_tidl_request_hello_sync, &tts_tidl_request_initialize, &tts_tidl_request_finalize, - &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop, +int(*ttsc_tidl_vtable[])() = { &tts_tidl_open_connection, &tts_tidl_close_connection, &tts_tidl_stop_listening, + &tts_tidl_request_hello, &tts_tidl_request_hello_sync, &tts_tidl_request_initialize, + &tts_tidl_request_finalize, &tts_tidl_request_add_text, &tts_tidl_request_play, &tts_tidl_request_stop, &tts_tidl_request_pause, &tts_tidl_request_set_private_data, &tts_tidl_request_get_private_data, &tts_tidl_request_play_pcm, &tts_tidl_request_stop_pcm, &tts_tidl_request_add_pcm }; @@ -104,6 +125,23 @@ int tts_ipc_close_connection(int uid) } } +int tts_ipc_stop_listening(int uid) +{ + SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_stop_listening"); + + if (false == tts_client_is_valid(uid)) { + SLOG(LOG_ERROR, TAG_TTSC, "Fail to get tts_client with uid"); + return TTS_ERROR_INVALID_PARAMETER; + } + + if (NULL == g_vtable) { + SLOG(LOG_ERROR, TAG_TTSC, "g_vtable is NULL"); + return TTS_ERROR_OPERATION_FAILED; + } + + return g_vtable[STOP_LISTENING](uid); +} + int tts_ipc_request_hello(int uid) { SLOG(LOG_INFO, TAG_TTSC, "[IPC] tts_ipc_request_hello"); diff --git a/client/tts_ipc.h b/client/tts_ipc.h index 68b43a36..a8af0b70 100644 --- a/client/tts_ipc.h +++ b/client/tts_ipc.h @@ -20,24 +20,6 @@ extern "C" { #endif -typedef enum { - OPEN_CONNECTION, - CLOSE_CONNECTION, - REQUEST_HELLO, - REQUEST_HELLO_SYNC, - REQUEST_INITIALIZE, - REQUEST_FINALIZE, - REQUEST_ADD_TEXT, - REQUEST_PLAY, - REQUEST_STOP, - REQUEST_PAUSE, - REQUEST_SET_PRIVATE_DATA, - REQUEST_GET_PRIVATE_DATA, - REQUEST_PLAY_PCM, - REQUEST_STOP_PCM, - REQUEST_ADD_PCM -} tts_ipc_vtable_e; - int tts_ipc_set_method(tts_ipc_method_e method); int tts_ipc_get_method(tts_ipc_method_e* method); @@ -48,6 +30,8 @@ int tts_ipc_open_connection(int uid); int tts_ipc_close_connection(int uid); +int tts_ipc_stop_listening(int uid); + int tts_ipc_request_hello(int uid); int tts_ipc_request_hello_sync(int uid); diff --git a/client/tts_tidl.c b/client/tts_tidl.c index 27e9b8c1..a1d8785b 100644 --- a/client/tts_tidl.c +++ b/client/tts_tidl.c @@ -170,6 +170,7 @@ static void __notify_cb(void *user_data, int pid, int uid, bundle *msg) if (0 == strncmp(TTSD_METHOD_HELLO, method, strlen(TTSD_METHOD_HELLO))) { bundle_get_str(msg, TTS_BUNDLE_CREDENTIAL_NEEDED, &val); if (val) { + tts_client_set_start_listening(uid, true); tts_core_receive_hello(uid, 0, atoi(val)); } } else if (0 == strncmp(TTSD_METHOD_UTTERANCE_STARTED, method, strlen(TTSD_METHOD_UTTERANCE_STARTED))) { @@ -246,11 +247,14 @@ static void __on_disconnected(rpc_port_proxy_tts_h h, void *user_data) } tts->connected = FALSE; - __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset"); - SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server"); - ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid); - SLOG(LOG_DEBUG, TAG_TTSC, "Try to reconnect to server"); + if (tts_client_is_listening_started(uid)) { + __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset"); + SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server"); + + ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid); + SLOG(LOG_DEBUG, TAG_TTSC, "Try to reconnect to server"); + } } static void __on_rejected(rpc_port_proxy_tts_h h, void *user_data) @@ -358,6 +362,18 @@ int tts_tidl_close_connection(int uid) return TTS_ERROR_NONE; } +int tts_tidl_stop_listening(int uid) +{ + if (false == tts_client_is_valid(uid)) { + SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] uid is not valid"); + return TTS_ERROR_INVALID_PARAMETER; + } + + tts_client_set_start_listening(uid, false); + + return TTS_ERROR_NONE; +} + int tts_tidl_request_hello(int uid) { SLOG(LOG_DEBUG, TAG_TTSC, "[TIDL] tts_tidl_request_hello"); @@ -458,6 +474,7 @@ int tts_tidl_request_finalize(int uid) return TTS_ERROR_OPERATION_FAILED; } + tts_client_set_start_listening(uid, false); return TTS_ERROR_NONE; } diff --git a/client/tts_tidl.h b/client/tts_tidl.h index 076406b7..e20657e4 100644 --- a/client/tts_tidl.h +++ b/client/tts_tidl.h @@ -24,6 +24,8 @@ int tts_tidl_open_connection(int uid); int tts_tidl_close_connection(int uid); +int tts_tidl_stop_listening(int uid); + int tts_tidl_request_hello(int uid); int tts_tidl_request_hello_sync(int uid);