Implement stt default engine setting and Fix directories in stt engine parser
[platform/core/uifw/stt.git] / server / sttd_server.c
old mode 100644 (file)
new mode 100755 (executable)
index ea462df..5b4e046
@@ -87,23 +87,23 @@ static void __cancel_recognition_internal()
                g_recording_timer = NULL;
        }
 
+       int ret = 0;
        int uid = 0;
        uid = stt_client_get_current_recognition();
 
-       if (0 != uid) {
-               /* cancel engine recognition */
-               int ret = sttd_engine_agent_recognize_cancel();
-               if (0 != ret) {
-                       SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel : result(%d)", ret);
-               }
+       app_state_e state = 0;
+       ret = sttd_client_get_state(uid, &state);
 
-               /* change uid state */
-               sttd_client_set_state(uid, APP_STATE_READY);
-               stt_client_unset_current_recognition();
+       if (0 != ret) {
+               SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] uid is NOT valid ");
+               return;
+       }
 
-               ret = sttdc_send_set_state(uid, (int)APP_STATE_READY);
+       if (0 != uid && (APP_STATE_PROCESSING == state || APP_STATE_RECORDING == state)) {
+               /* cancel engine recognition */
+               ret = sttd_server_cancel(uid);
                if (0 != ret) {
-                       SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to send state change : result(%d)", ret);
+                       SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel : result(%d)", ret);
                }
        } else {
                SLOG(LOG_WARN, TAG_STTD, "[Server WARNING] uid is NOT valid");
@@ -269,6 +269,14 @@ int __server_recognition_result_callback(stte_result_event_e event, const char*
                }
                sttd_config_time_reset();
 
+               int ret = 0;
+               if (APP_STATE_RECORDING == state) {
+                       ret = sttd_engine_agent_recognize_cancel();
+                       if (0 != ret) {
+                               SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to cancel: result(%d)", ret);
+                       }
+               }
+
                sttd_client_set_state(uid, APP_STATE_READY);
                stt_client_unset_current_recognition();
 
@@ -335,6 +343,7 @@ int __server_speech_status_callback(stte_speech_status_e status, void *user_para
 
                if (STTE_SPEECH_STATUS_BEGINNING_POINT_DETECTED == status) {
                        SLOG(LOG_DEBUG, TAG_STTD, "Begin Speech detected");
+                       sttdc_send_speech_status(uid, status);
                } else if (STTE_SPEECH_STATUS_END_POINT_DETECTED == status) {
                        SLOG(LOG_DEBUG, TAG_STTD, "End Speech detected");
                        ecore_main_loop_thread_safe_call_async(__stop_by_silence, NULL);
@@ -352,6 +361,8 @@ int __server_speech_status_callback(stte_speech_status_e status, void *user_para
 int __server_error_callback(stte_error_e error, const char* msg)
 {
        SLOG(LOG_DEBUG, TAG_STTD, "[Server] Error Callback is called");
+       ecore_main_loop_thread_safe_call_async(__cancel_by_error, NULL);
+
        return STTD_ERROR_NONE;
 }
 
@@ -364,6 +375,7 @@ void __sttd_server_engine_changed_cb(const char* engine_id, const char* language
                SLOG(LOG_DEBUG, TAG_STTD, "[Server] New default engine : %s", engine_id);
        }
 
+#if 0
        /* need to change state of app to ready */
        int uid;
        uid = stt_client_get_current_recognition();
@@ -391,6 +403,7 @@ void __sttd_server_engine_changed_cb(const char* engine_id, const char* language
        ret = sttd_engine_agent_set_silence_detection(support_silence);
        if (0 != ret)
                SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to Result(%d)", ret);
+#endif
 
        return;
 }
@@ -426,51 +439,10 @@ void __sttd_server_silence_changed_cb(bool value, void* user_data)
 /*
 * Daemon function
 */
-
-static void __sig_handler(int signo)
-{
-       /* restore signal handler */
-       signal(signo, SIG_DFL);
-
-       /* Send error signal to clients */
-       int* client_list = NULL;
-       int client_count = 0;
-       int i = 0;
-       if (0 != sttd_client_get_list(&client_list, &client_count)) {
-               if (NULL != client_list) {
-                       free(client_list);
-                       client_list = NULL;
-               }
-       }
-
-       if (NULL != client_list) {
-               for (i = 0; i < client_count; i++) {
-                       sttdc_send_error_signal(client_list[i], STTD_ERROR_SERVICE_RESET, "Service Reset");
-               }
-
-               free(client_list);
-               client_list = NULL;
-       }
-
-       /* invoke signal again */
-       raise(signo);
-}
-
-static void __register_sig_handler()
-{
-       signal(SIGSEGV, __sig_handler);
-       signal(SIGABRT, __sig_handler);
-       signal(SIGTERM, __sig_handler);
-       signal(SIGINT, __sig_handler);
-       signal(SIGQUIT, __sig_handler);
-}
-
 int sttd_initialize(stte_request_callback_s *callback)
 {
        int ret = 0;
 
-       __register_sig_handler();
-
        if (0 != pthread_mutex_init(&stte_result_mutex, NULL)) {
                SLOG(LOG_ERROR, TAG_STTD, "[Server ERROR] Fail to initialize stte result mutex.");
        }
@@ -541,9 +513,7 @@ int sttd_finalize()
 static void __read_proc()
 {
        DIR *dp = NULL;
-       struct dirent entry;
        struct dirent *dirp = NULL;
-       int ret = -1;
        int tmp;
 
        GList *iter = NULL;
@@ -560,11 +530,7 @@ static void __read_proc()
                SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Fail to open proc");
        } else {
                do {
-                       ret = readdir_r(dp, &entry, &dirp);
-                       if (0 != ret) {
-                               SLOG(LOG_ERROR, TAG_STTD, "[ERROR] Fail to readdir");
-                               break;
-                       }
+                       dirp = readdir(dp);
 
                        if (NULL != dirp) {
                                tmp = atoi(dirp->d_name);
@@ -685,6 +651,7 @@ static Eina_Bool __quit_ecore_loop(void *data)
 
        stt_network_finalize();
        sttd_finalize();
+       sttd_dbus_close_connection();
        ecore_main_loop_quit();
 
        SLOG(LOG_DEBUG, TAG_STTD, "");