From: polu.sandeep Date: Thu, 29 Oct 2015 09:03:33 +0000 (+0900) Subject: Fixed telegram initialization crashes. X-Git-Tag: release/160311~124 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F91%2F50491%2F1;p=apps%2Fnative%2Ftelegram-tizen.git Fixed telegram initialization crashes. Change-Id: I4cbb785708333a061cf40f9e94a5a6dad2ee627b --- diff --git a/TelegramTizen/inc/server_requests.h b/TelegramTizen/inc/server_requests.h index 2ac52d5..36562c5 100644 --- a/TelegramTizen/inc/server_requests.h +++ b/TelegramTizen/inc/server_requests.h @@ -10,6 +10,7 @@ #include "tg_common.h" +void send_request_for_restart_server(service_client* service_client); void send_request_for_registration(service_client* service_client, const char* phone_number, Eina_Bool through_sms); void send_request_for_profile_registration(service_client* service_client, const char* first_name, const char* last_name); void send_request_for_validation(service_client* service_client, const char* sms_code); diff --git a/TelegramTizen/src/server_requests.c b/TelegramTizen/src/server_requests.c index d391dc8..2ea2765 100644 --- a/TelegramTizen/src/server_requests.c +++ b/TelegramTizen/src/server_requests.c @@ -7,6 +7,46 @@ #include "server_requests.h" #include "tg_db_wrapper.h" + + +void send_request_for_restart_server(service_client* service_client) +{ + bundle *msg; + int result; + + if (!service_client) { + // error + return; + } + + msg = bundle_create(); + if (!msg) { + LOGE("Failed to create a bundle"); + return; + } + + if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + if (bundle_add_str(msg, "command", "restart_server") != 0) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + result = service_client_send_message(service_client, msg); + if(result != SVC_RES_OK) { + // error + LOGE("Failed to send a service message"); + } + + bundle_free(msg); + +} + void send_request_for_registration(service_client* service_client, const char* phone_number, Eina_Bool through_sms) { bundle *msg; diff --git a/TelegramTizen/src/telegramtizen.c b/TelegramTizen/src/telegramtizen.c index 05ad432..49bef6c 100644 --- a/TelegramTizen/src/telegramtizen.c +++ b/TelegramTizen/src/telegramtizen.c @@ -2607,6 +2607,12 @@ static int _on_service_client_msg_received_cb(void *data, bundle *const rec_msg) } else if (strcmp(rec_key_val, "request_reg_code_again") == 0) { show_toast(app,"Please enter a valid code."); hide_loading_popup(app); + } else if (strcmp(rec_key_val, "request_phone_num_again") == 0) { + show_toast(app,"Please enter a valid phone number."); + hide_loading_popup(app); + } else if (strcmp(rec_key_val, "server_connection_failed") == 0) { + show_toast(app,"Server connection failed. please check network connection"); + hide_loading_popup(app); } if (strcmp(rec_key_val, "contacts_and_chats_load_done") == 0) { @@ -3072,7 +3078,7 @@ void app_nf_back_cb(void *data, Evas_Object *obj, void *event_info) elm_exit(); break; case TG_LOGIN_STATE: - + send_request_for_restart_server(ad->service_client); if (ad->timer_value > 0) { Ecore_Timer* timer = evas_object_data_get(ad->nf, "code_timer"); if (timer) diff --git a/TelegramTizen/src/tg_login.c b/TelegramTizen/src/tg_login.c index b98c7ee..ae59f4f 100644 --- a/TelegramTizen/src/tg_login.c +++ b/TelegramTizen/src/tg_login.c @@ -26,8 +26,18 @@ static void on_code_change_enable_ok_button(void *data, Evas_Object *obj, void * static void on_naviframe_cancel_clicked(void *data, Evas_Object *obj, void *event_info) { appdata_s* ad = data; - elm_win_lower(ad->win); - elm_exit(); + if (!ad) + return; + + send_request_for_restart_server(ad->service_client); + if (ad->timer_value > 0) { + Ecore_Timer* timer = evas_object_data_get(ad->nf, "code_timer"); + if (timer) + ecore_timer_del(timer); + } + + elm_naviframe_item_pop(ad->nf); + ad->current_app_state = TG_REGISTRATION_STATE; } static void on_code_entry_done_clicked(void *data, Evas_Object *obj, void *event_info) diff --git a/TelegramTizen/src/tg_messaging_view.c b/TelegramTizen/src/tg_messaging_view.c index 3d1add4..4e239a9 100644 --- a/TelegramTizen/src/tg_messaging_view.c +++ b/TelegramTizen/src/tg_messaging_view.c @@ -1945,7 +1945,7 @@ void on_user_presence_state_changed(appdata_s* ad, int buddy_id) if (is_online > 0) { char status_str[256]={0,}; - snprintf(status_str, sizeof(status_str) - 1, "%s", "online"); + snprintf(status_str, sizeof(status_str) - 1, "%s", i18n_get_text("IDS_TGRAM_SBODY_ONLINE")); elm_object_text_set(profile_time,status_str); } else { time_t t = last_seen; @@ -2025,17 +2025,21 @@ void on_user_presence_state_changed(appdata_s* ad, int buddy_id) evas_object_data_set(ad->nf, "names_of_buddies", (void*)names_of_buddies); - +#if 0 if (online_members == 0) { char status_str[256]={0,}; - snprintf(status_str, sizeof(status_str) - 1, "%d members", user_list_size); + snprintf(status_str, sizeof(status_str) - 1, "%d %s", user_list_size, i18n_get_text("IDS_TGRAM_BODY_PD_PARTICIPANTS")); elm_object_text_set(profile_time,status_str); } else { char status_str[256]={0,}; - snprintf(status_str, sizeof(status_str) - 1, "%d members, %d online", user_list_size, online_members); + snprintf(status_str, sizeof(status_str) - 1, "%d %s, %d %s", user_list_size, , online_members, i18n_get_text("IDS_TGRAM_SBODY_ONLINE")); elm_object_text_set(profile_time,status_str); } - +#else + char status_str[256]={0,}; + snprintf(status_str, sizeof(status_str) - 1, i18n_get_text("IDS_TGRAM_BODY_PD_PARTICIPANTS"), user_list_size); + elm_object_text_set(profile_time,status_str); +#endif if (chat_info) { if(chat_info->print_title) { @@ -3465,7 +3469,7 @@ void launch_messaging_view_cb(appdata_s* ad, int user_id) evas_object_size_hint_weight_set(no_msg_lbl, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(no_msg_lbl); char temp_msg[4*256] = {0,}; - snprintf(temp_msg, sizeof(temp_msg), "%s", "No messages here yet..."); + snprintf(temp_msg, sizeof(temp_msg), "%s", i18n_get_text("IDS_TGRAM_BODY_NO_MESSAGES_HERE_YET_ING")); elm_object_text_set(no_msg_lbl, temp_msg); elm_object_part_content_set(layout, "swallow.no_msg_text", no_msg_lbl); evas_object_data_set(ad->nf, "chat_list_no_msg_text", (void*)no_msg_lbl); diff --git a/TelegramTizen/src/tg_settings_view.c b/TelegramTizen/src/tg_settings_view.c index 1a53de4..664f5c4 100644 --- a/TelegramTizen/src/tg_settings_view.c +++ b/TelegramTizen/src/tg_settings_view.c @@ -212,7 +212,7 @@ Evas_Object* on_user_info_requested(void *data, Evas_Object *obj, const char *pa elm_object_part_content_set(user_status_layout, "swallow.name", name_lbl); - char* user_status = "online"; + char* user_status = i18n_get_text("IDS_TGRAM_SBODY_ONLINE"); char status_buf[126] = {'\0'}; sprintf(status_buf, "%s", user_status); diff --git a/TelegramTizen/src/tg_user_info_view.c b/TelegramTizen/src/tg_user_info_view.c index 5f93cf8..100b6c3 100644 --- a/TelegramTizen/src/tg_user_info_view.c +++ b/TelegramTizen/src/tg_user_info_view.c @@ -774,7 +774,7 @@ void launch_user_info_screen(appdata_s* ad, int peer_id) Eina_Bool is_today = compare_date_with_current_date(last_seen); if (is_online > 0) { - elm_object_item_part_text_set(navi_item, "subtitle", "Online"); + elm_object_item_part_text_set(navi_item, "subtitle", i18n_get_text("IDS_TGRAM_SBODY_ONLINE")); } else { time_t t = last_seen; diff --git a/TelegramTizen/tg_utils/tg_common.c b/TelegramTizen/tg_utils/tg_common.c index 68302ae..796c376 100644 --- a/TelegramTizen/tg_utils/tg_common.c +++ b/TelegramTizen/tg_utils/tg_common.c @@ -103,7 +103,7 @@ char* get_budy_state(appdata_s* ad, int buddy_id) Eina_Bool is_today = compare_date_with_current_date(last_seen); if (is_online > 0) { - strcpy(time_str,"online"); + strcpy(time_str, i18n_get_text("IDS_TGRAM_SBODY_ONLINE")); } else { time_t t = last_seen; diff --git a/tg-engine-service/inc/server_response.h b/tg-engine-service/inc/server_response.h index 3964c77..0d10f40 100644 --- a/tg-engine-service/inc/server_response.h +++ b/tg-engine-service/inc/server_response.h @@ -36,6 +36,7 @@ extern void process_update_display_name_command(tg_engine_data_s *tg_data, int b extern void send_add_contacts_request(tg_engine_data_s *tg_data); extern void send_registration_response(tg_engine_data_s *tg_data, Eina_Bool is_success); extern void send_request_code_again(tg_engine_data_s *tg_data); +extern void send_request_phone_num_again(tg_engine_data_s *tg_data); extern void send_name_registration_response(tg_engine_data_s *tg_data); extern void send_contacts_load_done_response(tg_engine_data_s *tg_data, Eina_Bool is_success); extern void send_self_profile_picture_updated_response(tg_engine_data_s *tg_data, char *file_path, Eina_Bool is_success); @@ -70,4 +71,5 @@ extern void send_response_for_server_connection_status(tg_engine_data_s *tg_data extern void send_self_profile_name_updated_response(tg_engine_data_s *tg_data, char *first_name, char *last_name, Eina_Bool is_success); extern void send_response_to_group_chat_updated_response(tg_engine_data_s *tg_data, int chat_id); +extern void send_server_connection_failed_response(tg_engine_data_s *tg_data); #endif /* SERVER_RESPONSE_H_ */ diff --git a/tg-engine-service/inc/tg-engine-service.h b/tg-engine-service/inc/tg-engine-service.h index 2f262fc..d77746c 100644 --- a/tg-engine-service/inc/tg-engine-service.h +++ b/tg-engine-service/inc/tg-engine-service.h @@ -13,5 +13,6 @@ static const char *TELEGRAM_SERVER_PORT_NAME = "TIZEN_SERVER_PORT"; static const char *TELEGRAM_CLIENT_APP_NAME = "org.tizen.telegramtizen"; extern Eina_Bool event_idler_cb(void *data); +extern Eina_Bool on_code_request_timer_expired(void *data); #endif /* __tg-engine-service_H__ */ diff --git a/tg-engine-service/src/server_response.c b/tg-engine-service/src/server_response.c index 1c5d87a..010759a 100644 --- a/tg-engine-service/src/server_response.c +++ b/tg-engine-service/src/server_response.c @@ -11,6 +11,7 @@ #include "tg_db_wrapper.h" #include "tg_common.h" #include +#include "tg-engine-service.h" void process_registration_command(tg_engine_data_s *tg_data, char* phone_no, Eina_Bool trough_sms) { @@ -39,6 +40,7 @@ void process_registration_command(tg_engine_data_s *tg_data, char* phone_no, Ein if (tg_data->get_string) { tg_data->get_string(tgl_engine_get_TLS(), tg_data->phone_number, tg_data->callback_arg); + tg_data->code_response_timer = ecore_timer_add(60, on_code_request_timer_expired, tg_data); } } @@ -187,6 +189,44 @@ void process_set_username_command(tg_engine_data_s *tg_data, int buddy_id, const set_user_name(tg_data, buddy_id, username); } +void send_request_phone_num_again(tg_engine_data_s *tg_data) +{ + bundle *msg; + int result; + + msg = bundle_create(); + if (!msg) { + return; + } + + if (bundle_add_str(msg, "app_name", "Tizen Telegram") != BUNDLE_ERROR_NONE) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + if (bundle_add_str(msg, "command", "request_phone_num_again") != BUNDLE_ERROR_NONE) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + if (bundle_add_str(msg, "phone_number", tg_data->phone_number) != BUNDLE_ERROR_NONE) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + result = SVC_RES_FAIL; + result = tg_server_send_message(tg_data->tg_server, msg); + if(result != SVC_RES_OK) { + // error: cient not ready + } + + bundle_free(msg); +} + + void send_request_code_again(tg_engine_data_s *tg_data) { bundle *msg; @@ -1558,3 +1598,35 @@ void send_response_for_server_connection_status(tg_engine_data_s *tg_data, Eina_ } bundle_free(msg); } + +void send_server_connection_failed_response(tg_engine_data_s *tg_data) +{ + bundle *msg; + + msg = bundle_create(); + if (!msg) { + ERR("Failed to create a bundle"); + return; + } + + if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + if (bundle_add_str(msg, "command", "server_connection_failed") != 0) { + ERR("Failed to add data by key to bundle"); + bundle_free(msg); + return; + } + + int result = SVC_RES_FAIL; + result = tg_server_send_message(tg_data->tg_server, msg); + + if(result != SVC_RES_OK) { + // error: cient not ready + } + bundle_free(msg); +} + diff --git a/tg-engine-service/src/tg-engine-service.c b/tg-engine-service/src/tg-engine-service.c index 29a9ea4..dbc474e 100644 --- a/tg-engine-service/src/tg-engine-service.c +++ b/tg-engine-service/src/tg-engine-service.c @@ -10,6 +10,7 @@ #include static void free_connection(tg_engine_data_s* tg_data); +static Eina_Bool on_restart_service_requested(void *data); static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg) { tg_engine_data_s *tg_data = data; @@ -25,6 +26,10 @@ static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg) res = bundle_get_str(rec_msg, "phone_number", &ph_no_key_val); res = bundle_get_str(rec_msg, "through_sms", &sms_key_val); + if (tg_data->tg_state != TG_ENGINE_STATE_NONE && tg_data->tg_state != TG_ENGINE_STATE_REGISTRATION) { + on_restart_service_requested(tg_data); + } + Eina_Bool th_sms = EINA_TRUE; if (strcmp(sms_key_val, "true") == 0) { @@ -35,6 +40,8 @@ static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg) process_registration_command(tg_data, ph_no_key_val, th_sms); + } else if (strcmp(cmd_key_val, "restart_server") == 0) { + on_restart_service_requested(tg_data); } else if (strcmp(cmd_key_val, "code_validation") == 0) { char* sms_code_val = NULL; @@ -421,6 +428,24 @@ static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg) return result; } +Eina_Bool on_code_request_timer_expired(void *data) +{ + tg_engine_data_s *tg_data = data; + + if (tg_data->code_response_timer == NULL) { + return ECORE_CALLBACK_CANCEL; + } + + if (tg_data->code_response_timer) { + ecore_timer_del(tg_data->code_response_timer); + tg_data->code_response_timer = NULL; + } + send_server_connection_failed_response(tg_data); + on_restart_service_requested(tg_data); + return ECORE_CALLBACK_CANCEL; +} + + Eina_Bool event_idler_cb(void *data) { tg_engine_data_s *tg_data = data; @@ -443,7 +468,7 @@ static Eina_Bool on_start_service_requested(void *data) return ECORE_CALLBACK_CANCEL; } -static Eina_Bool on_restart_service_requested(void *data) +Eina_Bool on_restart_service_requested(void *data) { tg_engine_data_s *tg_data = data; @@ -451,7 +476,7 @@ static Eina_Bool on_restart_service_requested(void *data) free_connection(tg_data); tgl_engine_var_init(); tg_db_init(); - tg_data->tg_state = TG_ENGINE_STATE_REGISTRATION; + tg_data->tg_state = TG_ENGINE_STATE_NONE; tg_data->tg_server = tg_server_create(); tg_data->first_name = NULL; tg_data->last_name = NULL; @@ -461,12 +486,13 @@ static Eina_Bool on_restart_service_requested(void *data) tg_data->new_group_icon = NULL; tg_data->mhash = NULL; tg_data->lazy_init_idler = NULL; - + tg_data->code_response_timer = NULL; init_tl_engine(data); tgl_login(tgl_engine_get_TLS()); tg_data->lazy_init_idler = NULL; + tg_data->code_response_timer = NULL; return ECORE_CALLBACK_CANCEL; } @@ -527,7 +553,7 @@ bool service_app_create(void *data) RETVM_IF(!tg_data, SVC_RES_FAIL, "Application data is NULL"); tgl_engine_var_init(); tg_db_init(); - tg_data->tg_state = TG_ENGINE_STATE_REGISTRATION; + tg_data->tg_state = TG_ENGINE_STATE_NONE; tg_data->tg_server = tg_server_create(); tg_data->first_name = NULL; tg_data->last_name = NULL; @@ -537,6 +563,7 @@ bool service_app_create(void *data) tg_data->new_group_icon = NULL; tg_data->mhash = NULL; tg_data->lazy_init_idler = NULL; + tg_data->code_response_timer = NULL; tg_data->s_notififcation = NULL; tg_data->chat_list = NULL; tg_data->current_chat_index = 0; diff --git a/tg-engine-service/tg_engine/tg_engine.c b/tg-engine-service/tg_engine/tg_engine.c index 8572805..534c83d 100644 --- a/tg-engine-service/tg_engine/tg_engine.c +++ b/tg-engine-service/tg_engine/tg_engine.c @@ -12,6 +12,7 @@ #include "tgl-fetch.h" #include #include "device_contacts_manager.h" +#include "tg-engine-service.h" #define DC_SERIALIZED_MAGIC 0x868aa81d #define STATE_FILE_MAGIC 0x28949a93 @@ -511,12 +512,24 @@ void tg_get_string(struct tgl_state *TLS, const char *prompt, int flags, void(*c tg_data->get_string = callback; tg_data->callback_arg = arg; if (strcmp (prompt, "phone number:") == 0) { - tg_data->is_first_time_registration = EINA_TRUE; - tg_data->tg_state = TG_ENGINE_STATE_REGISTRATION; - if (tg_data && tg_data->phone_number) { - tg_data->get_string(TLS, tg_data->phone_number, tg_data->callback_arg); + + if (tg_data->tg_state == TG_ENGINE_STATE_REGISTRATION) { + send_request_phone_num_again(tg_data); + } else { + tg_data->is_first_time_registration = EINA_TRUE; + tg_data->tg_state = TG_ENGINE_STATE_REGISTRATION; + if (tg_data && tg_data->phone_number) { + tg_data->get_string(TLS, tg_data->phone_number, tg_data->callback_arg); + tg_data->code_response_timer = ecore_timer_add(60, on_code_request_timer_expired, tg_data); + } } } else if (strcmp (prompt, "code('call' for phone call):") == 0) { + + if (tg_data->code_response_timer) { + ecore_timer_del(tg_data->code_response_timer); + tg_data->code_response_timer = NULL; + } + void **T = arg; tg_data->mhash = T[1]; diff --git a/tg-engine-service/tg_engine/tg_engine.h b/tg-engine-service/tg_engine/tg_engine.h index 33438c9..5fcaf2a 100644 --- a/tg-engine-service/tg_engine/tg_engine.h +++ b/tg-engine-service/tg_engine/tg_engine.h @@ -92,6 +92,7 @@ extern void tgl_engine_destroy_TLS(void); extern void on_user_info_loaded(struct tgl_state *TLSR, void *extra, int success, struct tgl_user *U); typedef enum TG_ENGINE_STATE { + TG_ENGINE_STATE_NONE, TG_ENGINE_STATE_INITIALIZING, TG_ENGINE_STATE_REGISTRATION, TG_ENGINE_STATE_PROFILE_REGISTRATION, @@ -149,6 +150,7 @@ typedef struct tg_engine_data { Eina_List *buddy_list; int current_buddy_index; int current_group_chat_index; + Ecore_Timer *code_response_timer; } tg_engine_data_s; typedef struct contact_data {