Fixed telegram initialization crashes. 91/50491/1
authorpolu.sandeep <polu.sandeep@samsung.com>
Thu, 29 Oct 2015 09:03:33 +0000 (18:03 +0900)
committerpolu.sandeep <polu.sandeep@samsung.com>
Thu, 29 Oct 2015 09:03:33 +0000 (18:03 +0900)
Change-Id: I4cbb785708333a061cf40f9e94a5a6dad2ee627b

14 files changed:
TelegramTizen/inc/server_requests.h
TelegramTizen/src/server_requests.c
TelegramTizen/src/telegramtizen.c
TelegramTizen/src/tg_login.c
TelegramTizen/src/tg_messaging_view.c
TelegramTizen/src/tg_settings_view.c
TelegramTizen/src/tg_user_info_view.c
TelegramTizen/tg_utils/tg_common.c
tg-engine-service/inc/server_response.h
tg-engine-service/inc/tg-engine-service.h
tg-engine-service/src/server_response.c
tg-engine-service/src/tg-engine-service.c
tg-engine-service/tg_engine/tg_engine.c
tg-engine-service/tg_engine/tg_engine.h

index 2ac52d5..36562c5 100644 (file)
@@ -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);
index d391dc8..2ea2765 100644 (file)
@@ -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;
index 05ad432..49bef6c 100644 (file)
@@ -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)
index b98c7ee..ae59f4f 100644 (file)
@@ -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)
index 3d1add4..4e239a9 100644 (file)
@@ -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, "<font=Tizen:style=Bold color=#ffffff align=left><font_size=30>%s</font_size></font>", "online");
+                                       snprintf(status_str, sizeof(status_str) - 1, "<font=Tizen:style=Bold color=#ffffff align=left><font_size=30>%s</font_size></font>", 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, "<font=Tizen:style=Bold color=#ffffff align=left><font_size=30>%d members</font_size></font>", user_list_size);
+                       snprintf(status_str, sizeof(status_str) - 1, "<font=Tizen:style=Bold color=#ffffff align=left><font_size=30>%d %s</font_size></font>", 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, "<font=Tizen:style=Bold color=#ffffff align=left><font_size=30>%d members, %d online</font_size></font>", user_list_size, online_members);
+                       snprintf(status_str, sizeof(status_str) - 1, "<font=Tizen:style=Bold color=#ffffff align=left><font_size=30>%d %s, %d %s</font_size></font>", 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), "<font=Tizen:style=Bold color=#000000 align=center><font_size=30>%s</font_size></font>", "No messages here yet...");
+               snprintf(temp_msg, sizeof(temp_msg), "<font=Tizen:style=Bold color=#000000 align=center><font_size=30>%s</font_size></font>", 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);
index 1a53de4..664f5c4 100644 (file)
@@ -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, "<font=Tizen:style=Italic color=#FFFFFF align=left><font_size=35>%s</font_size></font>", user_status);
 
index 5f93cf8..100b6c3 100644 (file)
@@ -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;
 
index 68302ae..796c376 100644 (file)
@@ -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;
 
index 3964c77..0d10f40 100644 (file)
@@ -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_ */
index 2f262fc..d77746c 100644 (file)
@@ -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__ */
index 1c5d87a..010759a 100644 (file)
@@ -11,6 +11,7 @@
 #include "tg_db_wrapper.h"
 #include "tg_common.h"
 #include <badge.h>
+#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);
+}
+
index 29a9ea4..dbc474e 100644 (file)
@@ -10,6 +10,7 @@
 #include <badge.h>
 
 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;
index 8572805..534c83d 100644 (file)
@@ -12,6 +12,7 @@
 #include "tgl-fetch.h"
 #include <mime_type.h>
 #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];
 
index 33438c9..5fcaf2a 100644 (file)
@@ -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 {