X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=server%2Fttsd_server.c;h=24365e54365f6f648406dff958c069db985bf3a7;hb=c370c07420eccd878f9ea17b3f59e5fe952a696d;hp=cdd6e9b6ffd670e7d9a2164bc0775ed228959f5a;hpb=e8baf19d6c827e264aad1bd0c6dd5f3f715b0e65;p=platform%2Fcore%2Fuifw%2Ftts.git diff --git a/server/ttsd_server.c b/server/ttsd_server.c index cdd6e9b..24365e5 100644 --- a/server/ttsd_server.c +++ b/server/ttsd_server.c @@ -11,6 +11,7 @@ * limitations under the License. */ +#include #include #include @@ -178,7 +179,7 @@ int ttsd_send_error(ttse_error_e error, const char* msg) int uttid = g_utt.uttid; int tmp_pid = ttsd_data_get_pid(uid); - SLOG(LOG_ERROR, tts_tag(), "[SERVER ERROR] Error msg from engine, pid(%d), uid(%d), uttid(%d), error(%d), msg(%s)", tmp_pid, uid, uttid, error, msg); + SLOG(LOG_ERROR, tts_tag(), "[SERVER ERROR] Error msg from engine, pid(%d), uid(%d), uttid(%d), error(%d), msg(%s)", tmp_pid, uid, uttid, error, (NULL == msg ? "NULL" : msg)); __server_set_synth_control(TTSD_SYNTHESIS_CONTROL_EXPIRED); @@ -297,7 +298,7 @@ int ttsd_send_result(ttse_result_event_e event, const void* data, unsigned int d return TTSD_ERROR_NONE; } -bool __get_client_cb(int pid, int uid, app_state_e state, void* user_data) +bool __get_client_cb(int pid, int uid, app_tts_state_e state, void* user_data) { /* clear client data */ ttsd_data_clear_data(uid); @@ -406,7 +407,7 @@ void __config_changed_cb(tts_config_type_e type, const char* str_param, int int_ return; } -bool __terminate_client(int pid, int uid, app_state_e state, void* user_data) +bool __terminate_client(int pid, int uid, app_tts_state_e state, void* user_data) { SLOG(LOG_INFO, tts_tag(), "@@@ Start to terminate client [%d]", uid); ttsd_server_finalize(uid); @@ -523,9 +524,31 @@ int ttsd_server_initialize(int pid, int uid, bool* credential_needed) } if (0 != ttsd_engine_agent_is_credential_needed(uid, credential_needed)) { - SLOG(LOG_ERROR, tts_tag(), "Server ERROR] Fail to get credential necessity"); + SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] Fail to get credential necessity"); return TTSD_ERROR_OPERATION_FAILED; } + + if (true == *credential_needed) { + char* appid = NULL; + if (0 != app_manager_get_app_id(pid, &appid)) { + SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] Fail to get app id, pid(%d)", pid); + } + bool is_agreed = false; + if (0 != ttsd_engine_check_app_agreed(appid, &is_agreed)) { + SLOG(LOG_ERROR, tts_tag(), "Server ERROR] Fail to check app agreed"); + if (!appid) + free(appid); + return TTSD_ERROR_OPERATION_FAILED; + } + if (!appid) + free(appid); + + if (false == is_agreed) { + SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] App is not agreed"); + return TTSD_ERROR_PERMISSION_DENIED; + } + } + if (0 != ttsd_data_new_client(pid, uid)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] Fail to add client info"); return TTSD_ERROR_OPERATION_FAILED; @@ -584,7 +607,7 @@ static void __read_proc() return; } -bool __get_client_for_clean_up(int pid, int uid, app_state_e state, void* user_data) +bool __get_client_for_clean_up(int pid, int uid, app_tts_state_e state, void* user_data) { bool exist = false; int i = 0; @@ -661,7 +684,7 @@ int ttsd_server_finalize(int uid) { SLOG(LOG_INFO, tts_tag(), "[Server] Server finalize"); - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] ttsd_server_finalize : uid is not valid"); } @@ -690,7 +713,7 @@ int ttsd_server_finalize(int uid) int ttsd_server_add_queue(int uid, const char* text, const char* lang, int voice_type, int speed, int utt_id, const char* credential) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] ttsd_server_add_queue : uid is not valid"); return TTSD_ERROR_INVALID_PARAMETER; @@ -809,7 +832,7 @@ Eina_Bool __send_interrupt_client(void *data) int ttsd_server_play(int uid, const char* credential) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid(%d) is NOT valid ", uid); return TTSD_ERROR_INVALID_PARAMETER; @@ -828,6 +851,19 @@ int ttsd_server_play(int uid, const char* credential) } } + /* check the current playback focus */ + if (TTSD_MODE_INTERRUPT != ttsd_get_mode()) { + bool is_current_interrupt = false; + if (0 != ttsd_player_check_current_playback_focus(&is_current_interrupt)) { + SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] Fail to check the current playback focus"); + } else { + if (true == is_current_interrupt) { + SLOG(LOG_WARN, tts_tag(), "[Server WARNING] Current playback focus is set on Interrupt mode. Cannot play default, screen reader, and noti modes."); + return TTSD_ERROR_AUDIO_POLICY_BLOCKED; + } + } + } + int current_uid = ttsd_data_get_current_playing(); SLOG(LOG_INFO, tts_tag(), "[Server] playing uid (%d)", current_uid); @@ -892,7 +928,7 @@ int ttsd_server_play(int uid, const char* credential) int ttsd_server_stop(int uid) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid is not valid"); return TTSD_ERROR_INVALID_PARAMETER; @@ -926,7 +962,7 @@ int ttsd_server_stop(int uid) int ttsd_server_pause(int uid, int* utt_id) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] ttsd_server_pause : uid is not valid"); return TTSD_ERROR_INVALID_PARAMETER; @@ -954,7 +990,7 @@ int ttsd_server_pause(int uid, int* utt_id) int ttsd_server_get_support_voices(int uid, GList** voice_list) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid is not valid"); return TTSD_ERROR_INVALID_PARAMETER; @@ -974,7 +1010,7 @@ int ttsd_server_get_support_voices(int uid, GList** voice_list) int ttsd_server_get_current_voice(int uid, char** language, int* voice_type) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] ttsd_server_get_current_voice : uid is not valid"); return TTSD_ERROR_INVALID_PARAMETER; @@ -994,7 +1030,7 @@ int ttsd_server_get_current_voice(int uid, char** language, int* voice_type) int ttsd_server_set_private_data(int uid, const char* key, const char* data) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid(%d) is NOT valid", uid); return TTSD_ERROR_INVALID_PARAMETER; @@ -1017,7 +1053,7 @@ int ttsd_server_set_private_data(int uid, const char* key, const char* data) int ttsd_server_get_private_data(int uid, const char* key, char** data) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid(%d) is NOT valid", uid); return TTSD_ERROR_INVALID_PARAMETER; @@ -1066,7 +1102,7 @@ int ttsd_set_private_data_requested_cb(ttse_private_data_requested_cb callback) int ttsd_server_play_pcm(int uid) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid(%d) is NOT valid ", uid); return TTSD_ERROR_INVALID_PARAMETER; @@ -1120,12 +1156,32 @@ int ttsd_server_play_pcm(int uid) return TTSD_ERROR_OPERATION_FAILED; } + if (APP_STATE_PAUSED == state) { + SLOG(LOG_DEBUG, tts_tag(), "[Server] uid(%d) is 'Pause' state : resume player", uid); + + /* Resume player */ + if (0 != ttsd_player_resume(uid)) { + SLOG(LOG_WARN, tts_tag(), "[Server WARNING] Fail to ttsd_player_resume()"); + } + } else { + if (0 != ttsd_player_play_pcm(uid)) { + SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] Fail to play pcm sound : uid(%d)", uid); + + // Change ready state + ttsd_server_stop_pcm(uid); + + int tmp_pid; + tmp_pid = ttsd_data_get_pid(uid); + ttsdc_send_set_state_message(tmp_pid, uid, APP_STATE_READY); + } + } + return TTSD_ERROR_NONE; } int ttsd_server_stop_pcm(int uid) { - app_state_e state; + app_tts_state_e state; if (0 > ttsd_data_get_client_state(uid, &state)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] uid is not valid"); return TTSD_ERROR_INVALID_PARAMETER; @@ -1133,16 +1189,16 @@ int ttsd_server_stop_pcm(int uid) SLOG(LOG_INFO, tts_tag(), "[Server] server stop, state(%d)", state); - if (APP_STATE_PLAYING == state || APP_STATE_PAUSED == state) { - if (0 != ttsd_player_clear(uid)) - SLOG(LOG_WARN, tts_tag(), "[Server] Fail to ttsd_player_stop()"); - + if (APP_STATE_PLAYING == state || APP_STATE_PAUSED == state || APP_STATE_READY == state) { ttsd_data_set_client_state(uid, APP_STATE_READY); } /* Reset all data */ ttsd_data_clear_data(uid); + ttsd_player_stop(uid); + + return TTSD_ERROR_NONE; } @@ -1215,16 +1271,17 @@ int ttsd_server_add_pcm(int uid, int event, void* data, int data_size, int audio temp_sound_data = NULL; } - if (0 != ttsd_player_play(uid)) { +/* if (0 != ttsd_player_play(uid)) { SLOG(LOG_ERROR, tts_tag(), "[Server ERROR] Fail to play sound : uid(%d)", uid); - /* Change ready state */ + // Change ready state ttsd_server_stop(uid); int tmp_pid; tmp_pid = ttsd_data_get_pid(uid); ttsdc_send_set_state_message(tmp_pid, uid, APP_STATE_READY); } +*/ } else { SLOG(LOG_DEBUG, tts_tag(), "[SERVER] Event : TTSE_RESULT_EVENT_ERROR"); }