__tts_cb_err() is used for two different purpose, so this function has high complexity.
This patch divides __tts_cb_error() into two functions __handle_service_reset() and
__handle_service_error().
These two function has lower complexity and clear purpose to use.
Thus, it is expected that new developer can easily understand the purpose and behavior of each
function.
Change-Id: I749f292ac3161d1cca33ab8ca6847f8d55f240a3
Signed-off-by: Suyeon Hwang <stom.hwang@samsung.com>
return TTS_ERROR_INVALID_PARAMETER;
}
- if (NULL != client->err_msg) {
- *err_msg = strdup(client->err_msg);
- SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Error msg (%s)", *err_msg);
+ const char* error_message = tts_client_get_error_message(client);
+ if (NULL != error_message) {
+ *err_msg = strdup(error_message);
+ SLOG(LOG_DEBUG, TAG_TTSC, "Error msg (%s)", error_message);
} else {
*err_msg = NULL;
- SLOG(LOG_DEBUG, TAG_TTSC, "[SUCCESS] Error msg (NULL)");
+ SLOG(LOG_DEBUG, TAG_TTSC, "Error msg (NULL)");
}
SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
-
return TTS_ERROR_NONE;
}
return client->start_listening;
}
+void tts_client_set_error_message(tts_client_s* client, const char* error_message)
+{
+ if (false == tts_client_is_valid_client(client)) {
+ return;
+ }
+
+ if (NULL != client->err_msg) {
+ free(client->err_msg);
+ client->err_msg = NULL;
+ }
+
+ if (NULL != error_message) {
+ client->err_msg = strdup(error_message);
+ }
+}
+
+const char* tts_client_get_error_message(tts_client_s* client)
+{
+ if (false == tts_client_is_valid_client(client)) {
+ return NULL;
+ }
+
+ return client->err_msg;
+}
+
void tts_client_set_state_changed_cb(tts_client_s* client, tts_state_changed_cb callback, void* user_data)
{
if (false == tts_client_is_valid_client(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_error_message(tts_client_s* client, const char* error_message);
+const char* tts_client_get_error_message(tts_client_s* client);
+
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);
static volatile int g_connected_client = 0;
-static int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
+static int __handle_service_reset()
{
- if (-1 == uid) {
- GList* client_list = NULL;
- client_list = tts_client_get_client_list();
+ GList* client_list = NULL;
+ client_list = tts_client_get_client_list();
- if (NULL == client_list) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get client list");
- return TTS_ERROR_OPERATION_FAILED;
- }
-
- GList *iter = NULL;
- tts_client_s *data = NULL;
-
- if (g_list_length(client_list) > 0) {
- /* Get a first item */
- iter = g_list_first(client_list);
-
- while (NULL != iter) {
- data = iter->data;
-
- if (NULL != data->err_msg) {
- free(data->err_msg);
- data->err_msg = NULL;
- }
- if (NULL != err_msg)
- data->err_msg = strdup(err_msg);
-
- /* call callback function */
- tts_core_notify_error_async(data, utt_id, reason);
+ if (NULL == client_list) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get client list");
+ return TTS_ERROR_OPERATION_FAILED;
+ }
- /* Next item */
- iter = g_list_next(iter);
+ if (g_list_length(client_list) > 0) {
+ GList *iter = g_list_first(client_list);
+ while (NULL != iter) {
+ tts_client_s *client = iter->data;
+ if (false == tts_client_is_valid_client(client)) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Client is not valid");
+ } else {
+ tts_client_set_error_message(client, "Daemon Reset");
+ tts_core_notify_error_async(client, -1, TTS_ERROR_SERVICE_RESET);
}
- }
- g_list_free(client_list);
-
- if (TTS_ERROR_SERVICE_RESET == reason) {
- SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Service Reset");
-
- tts_core_reprepare();
+ iter = g_list_next(iter);
}
+ }
- } else {
- tts_client_s* client = tts_client_get_by_uid(uid);
+ g_list_free(client_list);
- if (NULL == client) {
- SLOG(LOG_WARN, TAG_TTSC, "[WARNING] A handle is not valid");
- return TTS_ERROR_INVALID_PARAMETER;
- }
+ SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Service Reset");
+ tts_core_reprepare();
- if (NULL != client->err_msg) {
- free(client->err_msg);
- client->err_msg = NULL;
- }
- if (NULL != err_msg)
- client->err_msg = strdup(err_msg);
+ return TTS_ERROR_NONE;
+}
- tts_core_notify_error_async(client, utt_id, reason);
+static int __handle_service_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
+{
+ tts_client_s* client = tts_client_get_by_uid(uid);
+ if (NULL == client) {
+ SLOG(LOG_WARN, TAG_TTSC, "[WARNING] uid is not valid");
+ return TTS_ERROR_INVALID_PARAMETER;
}
- return 0;
+ tts_client_set_error_message(client, err_msg);
+ tts_core_notify_error_async(client, utt_id, reason);
+
+ return TTS_ERROR_NONE;
}
static int __tts_cb_set_state(int uid, int state)
dbus_error_free(&err);
} else {
SLOG(LOG_ERROR, TAG_TTSC, "<<<< Get Error message : uid(%d), error(%d), uttid(%d), err_msg(%s)", uid, reason, uttid, (NULL == err_msg) ? "NULL" : err_msg);
- __tts_cb_error(uid, reason, uttid, err_msg);
-
+ __handle_service_error(uid, reason, uttid, err_msg);
}
} /* TTSD_SIGNAL_ERROR */
else if (dbus_message_is_signal(msg, "org.freedesktop.DBus", "NameOwnerChanged")) {
SLOG(LOG_DEBUG, TAG_TTSC, "@@@ Owner Changed");
-
- __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ __handle_service_reset();
SLOG(LOG_DEBUG, TAG_TTSC, "@@@");
- SLOG(LOG_DEBUG, TAG_TTSC, " ");
} /* NameOwnerChanged */
else {
#define MAXSLEEP 128
-static int __tts_cb_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
+static int __handle_service_reset()
{
- if (-1 == uid) {
- GList* client_list = NULL;
- client_list = tts_client_get_client_list();
+ GList* client_list = NULL;
+ client_list = tts_client_get_client_list();
- if (NULL == client_list) {
- SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get client list");
- return TTS_ERROR_OPERATION_FAILED;
- }
-
- GList *iter = NULL;
- tts_client_s *data = NULL;
-
- if (g_list_length(client_list) > 0) {
- /* Get a first item */
- iter = g_list_first(client_list);
-
- while (NULL != iter) {
- data = iter->data;
-
- if (NULL != data->err_msg) {
- free(data->err_msg);
- data->err_msg = NULL;
- }
- if (NULL != err_msg)
- data->err_msg = strdup(err_msg);
-
- /* call callback function */
- tts_core_notify_error_async(data, utt_id, reason);
+ if (NULL == client_list) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Fail to get client list");
+ return TTS_ERROR_OPERATION_FAILED;
+ }
- /* Next item */
- iter = g_list_next(iter);
+ if (g_list_length(client_list) > 0) {
+ GList *iter = g_list_first(client_list);
+ while (NULL != iter) {
+ tts_client_s *client = iter->data;
+ if (false == tts_client_is_valid_client(client)) {
+ SLOG(LOG_ERROR, TAG_TTSC, "[ERROR] Client is not valid");
+ } else {
+ tts_client_set_error_message(client, "Daemon Reset");
+ tts_core_notify_error_async(client, -1, TTS_ERROR_SERVICE_RESET);
}
- }
- g_list_free(client_list);
-
- if (TTS_ERROR_SERVICE_RESET == reason) {
- SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Service Reset");
-
- tts_core_reprepare();
+ iter = g_list_next(iter);
}
+ }
- } else {
- tts_client_s* client = tts_client_get_by_uid(uid);
+ g_list_free(client_list);
- if (NULL == client) {
- SLOG(LOG_WARN, TAG_TTSC, "[WARNING] A handle is not valid");
- return TTS_ERROR_INVALID_PARAMETER;
- }
+ SLOG(LOG_WARN, TAG_TTSC, "[WARNING] Service Reset");
+ tts_core_reprepare();
- if (NULL != client->err_msg) {
- free(client->err_msg);
- client->err_msg = NULL;
- }
- if (NULL != err_msg)
- client->err_msg = strdup(err_msg);
+ return TTS_ERROR_NONE;
+}
- tts_core_notify_error_async(client, utt_id, reason);
+static int __handle_service_error(int uid, tts_error_e reason, int utt_id, char* err_msg)
+{
+ tts_client_s* client = tts_client_get_by_uid(uid);
+ if (NULL == client) {
+ SLOG(LOG_WARN, TAG_TTSC, "[WARNING] uid is not valid");
+ return TTS_ERROR_INVALID_PARAMETER;
}
- return 0;
+ tts_client_set_error_message(client, err_msg);
+ tts_core_notify_error_async(client, utt_id, reason);
+
+ return TTS_ERROR_NONE;
}
static int __tts_cb_set_state(int uid, int state)
bundle_get_str(msg, TTS_BUNDLE_UTTID, &uttid);
bundle_get_str(msg, TTS_BUNDLE_ERR_MSG, &err_msg);
if (reason && uttid) {
- __tts_cb_error(uid, atoi(reason), atoi(uttid), err_msg);
+ __handle_service_error(uid, atoi(reason), atoi(uttid), err_msg);
}
}
else {
tts->connected = false;
if (tts_client_is_listening_started(uid)) {
- __tts_cb_error(-1, TTS_ERROR_SERVICE_RESET, -1, "Daemon Reset");
+ __handle_service_reset();
SLOG(LOG_DEBUG, TAG_TTSC, "Disconnected from server");
ecore_main_loop_thread_safe_call_async(__reconnect, (void*)uid);
static void __on_rejected(rpc_port_proxy_tts_h h, void *user_data)
{
int uid = (int)user_data;
-
tts_client_s *client = tts_client_get_by_uid(uid);
if (!client)
return;
- __tts_cb_error(client->uid, TTS_ERROR_PERMISSION_DENIED, client->utt_id, "Rejected");
+ __handle_service_error(uid, TTS_ERROR_PERMISSION_DENIED, client->utt_id, "Rejected");
SLOG(LOG_DEBUG, TAG_TTSC, "Rejected from server");
}