#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);
#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;
} 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) {
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)
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)
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;
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) {
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);
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);
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;
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;
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);
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_ */
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__ */
#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)
{
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);
}
}
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;
}
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);
+}
+
#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;
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) {
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;
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;
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;
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;
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;
}
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;
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;
#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
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];
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,
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 {