#include "tg_common.h"
void send_request_for_restart_server(service_client* service_client);
+void send_request_for_logout(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);
}
bundle_free(msg);
+}
+
+void send_request_for_logout(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", "logout_telegram") != 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;
#include "tg_settings_view.h"
#include "device_contacts_manager.h"
+static void free_app_data(appdata_s *app_data, Eina_Bool destroy_server);
+static int init_service(appdata_s *app);
static void popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
evas_object_del(obj);
} else if (strcmp(rec_key_val, "server_connection_failed") == 0) {
show_toast(app,"Server connection failed. please check network connection");
hide_loading_popup(app);
+ } else if (strcmp(rec_key_val, "logout_completed") == 0) {
+ elm_naviframe_item_pop(app->nf);
+ elm_naviframe_item_pop(app->nf);
+ free_app_data(app, EINA_TRUE);
+
+ hide_loading_popup(app);
+
+ app->phone_number = NULL;
+ app->buddy_list = NULL;
+ app->unknown_buddy_list = NULL;
+ app->main_list = NULL;
+ app->peer_list = NULL;
+ app->search_peer_list = NULL;
+ app->is_first_time_registration = EINA_FALSE;
+ app->panel = NULL;
+ app->loaded_msg_list = NULL;
+ app->loading_popup = NULL;
+ app->current_user_data = NULL;
+ app->is_tg_initilized = EINA_FALSE;
+ app->chat_background = NULL;
+ app->msg_popup = NULL;
+ app->s_notififcation = NULL;
+ app->panel = NULL;
+ app->is_server_ready = EINA_FALSE;
+ app->contact_list = NULL;
+
+ char *chat_bg = NULL;
+ preference_get_string(TG_CHAT_BG_PREFERENCE, &chat_bg);
+ if (chat_bg) {
+ app->chat_background = strdup(chat_bg);
+ }
+
+ if (!app->chat_background) {
+ app->chat_background = strdup(ui_utils_get_resource(TG_CHAT_DEFAULT_BG));
+ preference_set_string(TG_CHAT_BG_PREFERENCE, app->chat_background);
+ }
+
+ init_service(app);
+ app->current_app_state = TG_REGISTRATION_STATE;
+ launch_init_screen(app);
}
if (strcmp(rec_key_val, "contacts_and_chats_load_done") == 0) {
}
}
-static void
-app_terminate(void *data)
+
+void free_app_data(appdata_s *app_data, Eina_Bool destroy_server)
{
- /* Release all resources. */
- appdata_s *app_data = data;
+ if (!app_data) {
+ return;
+ }
int unread_msg_cnt = get_number_of_unread_messages();
int err = badge_set_count(TELEGRAM_APP_ID, unread_msg_cnt);
app_data->sms_code = NULL;
}
- if(app_data->service_client) {
- service_client_destroy(app_data->service_client);
- app_data->service_client = NULL;
- }
-
if (app_data->current_user_data) {
free_user_data(app_data->current_user_data);
}
app_data->loaded_msg_list = NULL;
}
- if (app_data->service_client) {
+ if (app_data->service_client && destroy_server) {
service_client_destroy(app_data->service_client);
app_data->service_client = NULL;
}
}
static void
+app_terminate(void *data)
+{
+ free_app_data(data, EINA_TRUE);
+}
+
+static void
ui_app_lang_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LANGUAGE_CHANGED*/
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);
- }
+
+ 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;
free(val);
return;
}
+ Ecore_Timer *timer = evas_object_data_get(ad->nf, "code_timer");
+ if (timer) {
+ ecore_timer_del(timer);
+ }
+
send_request_for_validation(ad->service_client, val);
show_loading_popup(ad);
}
ecore_timer_del(timer);
char temp_txt[512] = {0,};
- snprintf(temp_txt, sizeof(temp_txt), i18n_get_text("IDS_TGRAM_BODY_TELEGRAM_WILL_CALL_IN_P1SD_CP2SD"), 0, 0);
+ snprintf(temp_txt, sizeof(temp_txt), i18n_get_text("IDS_TGRAM_BODY_TELEGRAM_WILL_CALL_IN_P1SD_CP2SD"), 0, 0);
// send request to get phone call
send_request_for_registration(ad->service_client, ad->phone_number, EINA_FALSE);
if (popup) {
evas_object_del(popup);
}
- /* FIXME : Please input the logout API here */
+ send_request_for_logout(ad->service_client);
+ show_loading_popup(ad);
}
static void _create_logout_popup(appdata_s *ad)
extern void process_registration_command(tg_engine_data_s *tg_data, char *phone_no, Eina_Bool trough_sms);
extern void process_validation_command(tg_engine_data_s *tg_data, char *code);
+extern void process_logout_command(tg_engine_data_s *tg_data);
extern void process_send_message_command(int buddy_id, int message_id, int msg_type, char* msg_data, int type_of_chat);
extern void process_marked_as_read_command(int buddy_id, int type_of_chat);
extern void process_delete_group_chat_request(tg_engine_data_s* tg_data, int chat_id);
extern void send_group_chat_new_buddy_response(tg_engine_data_s *tg_data, int peer_id, Eina_Bool is_success);
extern void send_group_chat_delete_buddy_response(tg_engine_data_s *tg_data, int peer_id, Eina_Bool is_success);
extern void send_response_for_server_connection_status(tg_engine_data_s *tg_data, Eina_Bool connection_status);
+extern void send_response_for_logout(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);
tg_data->get_string(tgl_engine_get_TLS(), code, tg_data->callback_arg);
}
+void process_logout_command(tg_engine_data_s *tg_data)
+{
+ if (!tg_data) {
+ return;
+ }
+ logout_telegram(tg_data);
+}
+
void process_send_message_command(int buddy_id, int message_id, int msg_type, char* msg_data, int type_of_chat)
{
if (!msg_data || !tgl_engine_get_TLS()) {
bundle_free(msg);
}
+
+void send_response_for_logout(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", "logout_completed") != 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);
+}
+
+
void send_response_for_server_connection_status(tg_engine_data_s *tg_data, Eina_Bool connection_status)
{
bundle *msg;
process_registration_command(tg_data, ph_no_key_val, th_sms);
+ } else if (strcmp(cmd_key_val, "logout_telegram") == 0) {
+
+ //process_logout_command(tg_data);
+
+ // delete all data.
+
+
+ tg_data->is_login_activated = EINA_FALSE;
+ tg_data->is_network_connected = EINA_FALSE;
+ if (tg_data->phone_number) {
+ free(tg_data->phone_number);
+ tg_data->phone_number = NULL;
+ }
+
+ if (tg_data->sms_code) {
+ free(tg_data->sms_code);
+ tg_data->sms_code = NULL;
+ }
+
+ if (tg_data->first_name) {
+ free(tg_data->first_name);
+ tg_data->first_name = NULL;
+ }
+
+ if (tg_data->last_name) {
+ free(tg_data->last_name);
+ tg_data->last_name = NULL;
+ }
+
+ if (tg_data->contact_list_to_add) {
+ free_contact_data(tg_data->contact_list_to_add);
+ tg_data->contact_list_to_add = NULL;
+ }
+
+ if (tg_data->chat_list) {
+ eina_list_free(tg_data->chat_list);
+ tg_data->chat_list = NULL;
+ }
+
+ if (tg_data->buddy_list) {
+ eina_list_free(tg_data->buddy_list);
+ tg_data->buddy_list = NULL;
+ }
+
+ tgl_engine_var_free();
+
+ tg_db_fini();
+
+#if 0
+ char *cmd = (char*)malloc(strlen("rm -r ") + strlen(DEFAULT_TELEGRAM_PATH) + 1);
+ strcpy(cmd, "rm -r ");
+ strcat(cmd, DEFAULT_TELEGRAM_PATH);
+ int ret = system(cmd);
+ free(cmd);
+#else
+ int ret = recursive_dir_delete(DEFAULT_TELEGRAM_PATH);
+#endif
+ send_response_for_logout(tg_data);
+ tgl_engine_var_init();
+ tg_db_init();
+ tg_data->tg_state = TG_ENGINE_STATE_NONE;
+ tg_data->first_name = NULL;
+ tg_data->last_name = NULL;
+ tg_data->phone_number = NULL;
+ tg_data->sms_code = NULL;
+ tg_data->contact_list_to_add = 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;
+
+ //send event to application
+
+
} else if (strcmp(cmd_key_val, "restart_server") == 0) {
on_restart_service_requested(tg_data);
} else if (strcmp(cmd_key_val, "code_validation") == 0) {
}
+void logout_telegram(tg_engine_data_s *tg_data)
+{
+
+}
+
void do_delete_buddy(int buddy_id)
{
tgl_peer_id_t peer_id;
extern void send_do_mark_read_messages(int buddy_id, int type_of_chat);
extern void send_message_to_buddy(int buddy_id, int message_id, int msg_type, char* msg_data, int type_of_chat);
extern void send_media_to_buddy(int buddy_id, int message_id, int media_id, int msg_type, char* file_path, int type_of_chat);
-
+extern void logout_telegram(tg_engine_data_s *tg_data);
extern void media_download_request(tg_engine_data_s *tg_data, int buddy_id, long long media_id);
extern void add_contacts_to_user(tg_engine_data_s *tg_data, int size, Eina_List* contact_list);
extern void create_new_group(tg_engine_data_s *tg_data, Eina_List* buddy_ids, const char* group_name, const char* group_icon);
*/
#include "tg_common.h"
+#include <fts.h>
void tg_notification_create(tg_engine_data_s* tg_data, char * icon_path, const char *title, char *content, char *sound_path, char *app_id)
{
return res_path;
}
+
+int recursive_dir_delete(const char *dir)
+{
+ int ret = 0;
+ FTS *ftsp = NULL;
+ FTSENT *curr;
+
+ // Cast needed (in C) because fts_open() takes a "char * const *", instead
+ // of a "const char * const *", which is only allowed in C++. fts_open()
+ // does not modify the argument.
+ char *files[] = { (char *) dir, NULL };
+
+ // FTS_NOCHDIR - Avoid changing cwd, which could cause unexpected behavior
+ // in multithreaded programs
+ // FTS_PHYSICAL - Don't follow symlinks. Prevents deletion of files outside
+ // of the specified directory
+ // FTS_XDEV - Don't cross filesystem boundaries
+ ftsp = fts_open(files, FTS_NOCHDIR | FTS_PHYSICAL | FTS_XDEV, NULL);
+ if (!ftsp) {
+ fprintf(stderr, "%s: fts_open failed: %s\n", dir, strerror(errno));
+ ret = -1;
+ goto finish;
+ }
+
+ while ((curr = fts_read(ftsp))) {
+ switch (curr->fts_info) {
+ case FTS_NS:
+ case FTS_DNR:
+ case FTS_ERR:
+ fprintf(stderr, "%s: fts_read error: %s\n",
+ curr->fts_accpath, strerror(curr->fts_errno));
+ break;
+
+ case FTS_DC:
+ case FTS_DOT:
+ case FTS_NSOK:
+ // Not reached unless FTS_LOGICAL, FTS_SEEDOT, or FTS_NOSTAT were
+ // passed to fts_open()
+ break;
+
+ case FTS_D:
+ // Do nothing. Need depth-first search, so directories are deleted
+ // in FTS_DP
+ break;
+
+ case FTS_DP:
+ case FTS_F:
+ case FTS_SL:
+ case FTS_SLNONE:
+ case FTS_DEFAULT:
+ if (remove(curr->fts_accpath) < 0) {
+ fprintf(stderr, "%s: Failed to remove: %s\n",
+ curr->fts_path, strerror(errno));
+ ret = -1;
+ }
+ break;
+ }
+ }
+
+finish:
+ if (ftsp) {
+ fts_close(ftsp);
+ }
+
+ return ret;
+}
extern void tg_notification_create(tg_engine_data_s* tg_data, char * icon_path, const char *title, char *content, char *sound_path, char *app_id);
+extern int recursive_dir_delete(const char *dir);
+
#endif /* TG_COMMON_H_ */