ad->is_loading_from_msg_view = EINA_TRUE;
on_create_new_contact(ad);
} else if (id == 1) {
-#if 0
- char* tablename = get_table_name_from_number(user_data->peer_id);
- delete_all_records(tablename);
- free(tablename);
-
- // clear all messages
- Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list");
- elm_genlist_clear(genlist);
- // remove main item from main list
- if (ad->main_item_in_cahtting_data) {
- tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
- if (old_item->peer_print_name) {
- free(old_item->peer_print_name);
- old_item->peer_print_name = NULL;
- }
- if (old_item->last_message) {
- free(old_item->last_message);
- old_item->last_message = NULL;
- }
- if (old_item->profile_pic_path) {
- free(old_item->profile_pic_path);
- old_item->profile_pic_path = NULL;
- }
- old_item->date_lbl = NULL;
- old_item->msg_status_lbl = NULL;
- old_item->main_item_layout = NULL;
- old_item->profile_pic = NULL;
- old_item->profile_pic_path = NULL;
- old_item->status_lbl = NULL;
- old_item->user_name_lbl = NULL;
- ad->main_list = eina_list_remove(ad->main_list, ad->main_item_in_cahtting_data);
-
- ad->main_item_in_cahtting_data = NULL;
- }
- ad->is_last_msg_changed = EINA_FALSE;
-#else
// mark all the massages for deletion.
char* tablename = get_table_name_from_number(user_data->peer_id);
mark_all_records_for_deletion(tablename);
old_item->last_message = strdup("");
}
- Evas_Object *nomsg_layout = evas_object_data_del(ad->nf, "chat_list_no_msg_text");
+ Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
if (nomsg_layout) {
elm_object_signal_emit(nomsg_layout, "show", "message");
}
-#endif
+
} else {
char* tablename = get_table_name_from_number(user_data->peer_id);
delete_all_records(tablename);
return;
}
-
- if (id == 1) { // Clear history
- if (user_data->peer_type == TGL_PEER_USER || user_data->peer_type == TGL_PEER_CHAT) {
-
-#if 0
- char* tablename = get_table_name_from_number(user_data->peer_id);
- delete_all_records(tablename);
- free(tablename);
-
- // clear all messages
- Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list");
- elm_genlist_clear(genlist);
-
- // remove main item from main list
- if (ad->main_item_in_cahtting_data) {
- tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
- if (old_item->peer_print_name) {
- free(old_item->peer_print_name);
- old_item->peer_print_name = NULL;
- }
- if (old_item->last_message) {
- free(old_item->last_message);
- old_item->last_message = NULL;
- }
- if (old_item->profile_pic_path) {
- free(old_item->profile_pic_path);
- old_item->profile_pic_path = NULL;
- }
- old_item->date_lbl = NULL;
- old_item->msg_status_lbl = NULL;
- old_item->main_item_layout = NULL;
- old_item->profile_pic = NULL;
- old_item->profile_pic_path = NULL;
- old_item->status_lbl = NULL;
- old_item->user_name_lbl = NULL;
- ad->main_list = eina_list_remove(ad->main_list, ad->main_item_in_cahtting_data);
-
- ad->main_item_in_cahtting_data = NULL;
- }
-
- ad->is_last_msg_changed = EINA_FALSE;
-#else
+ if (user_data->peer_type == TGL_PEER_USER) {
+ if (id == 0) {
+ launch_user_info_screen(ad, user_data->peer_id);
+ } else if (id == 1) {
// mark all the massages for deletion.
char* tablename = get_table_name_from_number(user_data->peer_id);
mark_all_records_for_deletion(tablename);
elm_box_clear(box);
elm_box_recalculate(box);
-
// send request to server
- send_delete_group_chat_request(ad, ad->service_client, user_data->peer_id);
+ send_delete_all_messages_request(ad, ad->service_client, user_data->peer_id, user_data->peer_type);
- if (ad->main_item_in_cahtting_data) {
- tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
- if (old_item->last_message) {
- free(old_item->last_message);
- old_item->last_message = NULL;
- }
- old_item->last_message = strdup("");
- }
-
- Evas_Object *nomsg_layout = evas_object_data_del(ad->nf, "chat_list_no_msg_text");
+ Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
if (nomsg_layout) {
elm_object_signal_emit(nomsg_layout, "show", "message");
}
-#endif
-
- } else {
-
- }
-
- } else if (id == 2) { //Delete
- if (user_data->peer_type == TGL_PEER_USER) {
+ } else if (id == 2) {
show_loading_popup(ad);
char* tablename = get_table_name_from_number(user_data->peer_id);
delete_all_records(tablename);
free(tablename);
-#if 0
- // clear all messages
- Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list");
- elm_genlist_clear(genlist);
-
- // remove main item from main list
- if (ad->main_item_in_cahtting_data) {
- tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
- if (old_item->peer_print_name) {
- free(old_item->peer_print_name);
- old_item->peer_print_name = NULL;
- }
- if (old_item->last_message) {
- free(old_item->last_message);
- old_item->last_message = NULL;
- }
- if (old_item->profile_pic_path) {
- free(old_item->profile_pic_path);
- old_item->profile_pic_path = NULL;
- }
- old_item->date_lbl = NULL;
- old_item->msg_status_lbl = NULL;
- old_item->main_item_layout = NULL;
- old_item->profile_pic = NULL;
- old_item->profile_pic_path = NULL;
- old_item->status_lbl = NULL;
- old_item->user_name_lbl = NULL;
- ad->main_list = eina_list_remove(ad->main_list, ad->main_item_in_cahtting_data);
-
- ad->main_item_in_cahtting_data = NULL;
- }
-
- ad->is_last_msg_changed = EINA_FALSE;
-
-
- app_nf_back_cb(ad, NULL, NULL);
-#else
elm_naviframe_item_pop(ad->nf);
load_registered_user_data(ad);
load_buddy_list_data(ad);
load_peer_data(ad);
load_main_list_data(ad);
ecore_timer_add(1, on_load_main_view_requested, ad);
-#endif
+ }
+ } else if (user_data->peer_type == TGL_PEER_CHAT) {
+ if (id == 0) {
+ // mark all the massages for deletion.
+ char* tablename = get_table_name_from_number(user_data->peer_id);
+ mark_all_records_for_deletion(tablename);
+ // delete date messages
+ delete_date_messages_from_table(tablename);
+ free(tablename);
+ // clear screen
+ // clear all messages
+ Evas_Object *scroller = evas_object_data_get(ad->nf, "chat_list");
+
+
+ Evas_Object *box_layout = NULL;
+ Evas_Object *box = NULL;
+ Eina_List *list = NULL;
+
+ box_layout = elm_object_content_get(scroller);
+ if (!box_layout) {
+ LOGE("Fail to get the box into scroller");
+ return;
+ }
+
+ list = elm_box_children_get(box_layout);
+ if (!list) {
+ LOGE("Fail to get the list into box");
+ return;
+ }
+
+ box = eina_list_nth(list, 0);
+ if (!box) {
+ LOGE("Fail to get the box into box layout");
+ return;
+ }
+
+ eina_list_free(list);
+ elm_box_clear(box);
+ elm_box_recalculate(box);
- } else if (user_data->peer_type == TGL_PEER_CHAT) {
+ send_delete_all_messages_request(ad, ad->service_client, user_data->peer_id, user_data->peer_type);
+ Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
+ if (nomsg_layout) {
+ elm_object_signal_emit(nomsg_layout, "show", "message");
+ }
+
+ } else if (id == 1) {
//send group chat delete request
show_loading_popup(ad);
send_delete_group_chat_request(ad, ad->service_client, user_data->peer_id);
-
- } else {
-
}
- } else if (id == 0) { // View profile
- launch_user_info_screen(ad, user_data->peer_id);
- } else {
}
+
if (ad->msg_popup) {
evas_object_del(ad->msg_popup);
ad->msg_popup = NULL;
}
+ return;
}
Evas_Object *chat_scroller = obj;
appdata_s* ad = evas_object_data_get(chat_scroller, "app_data");
- Evas_Object *nomsg_layout = evas_object_data_del(ad->nf, "chat_list_no_msg_text");
+ Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
if (nomsg_layout) {
elm_object_signal_emit(nomsg_layout, "hide", "message");
}
// show no messages
elm_object_part_text_set(layout, "no_msg_text", i18n_get_text("IDS_TGRAM_BODY_NO_MESSAGES_HERE_YET_ING"));
elm_object_signal_emit(layout, "show", "message");
- evas_object_data_set(ad->nf, "chat_list_no_msg_text", layout);
}
+ evas_object_data_set(ad->nf, "chat_list_no_msg_text", layout);
send_request_for_marked_as_read(ad, ad->service_client, sel_item->use_data->peer_id, sel_item->use_data->peer_type);
eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_MORE, on_messaging_menu_button_clicked, ad);
#include <mime_type.h>
#include "device_contacts_manager.h"
#include "tg-engine-service.h"
+#include "logger.h"
#define DC_SERIALIZED_MAGIC 0x868aa81d
#define STATE_FILE_MAGIC 0x28949a93
if (message->service || message->from_id.id == tg_data->id.id) {
continue;
}
- /*
- Eina_Bool ret = insert_buddy_msg_to_db(message);
- if (ret) {
- tg_msg_receive(s_info.TLS, message);
- }
- */
tg_msg_receive(s_info.TLS, message);
}
+ Eina_Bool is_offline_msg_requested = EINA_FALSE;
+ tg_data->current_offline_buddy_index = tg_data->current_offline_buddy_index + 1;
+ if (tg_data->current_offline_buddy_index < eina_list_count(tg_data->peer_list)) {
+
+ for (int i = tg_data->current_offline_buddy_index; i < eina_list_count(tg_data->peer_list); i++) {
+
+ tg_data->current_offline_buddy_index = i;
+
+ tgl_peer_t* UC = eina_list_nth(tg_data->peer_list, i);
+
+ if (UC->id.id == 333000 || UC->id.id == 777000) {
+ continue;
+ }
+
+ struct tgl_message *last_msg = UC->last;
+ if (last_msg) {
+ // check last message in message table
+ char* msg_table = get_table_name_from_number(UC->id.id);
+ struct tgl_message* org_last_msg = get_message_from_message_tableby_message_id(msg_table, last_msg->id);
+ if (!org_last_msg) {
+ tgl_do_get_history(s_info.TLS, UC->id, 10, 0, on_offline_chat_received, UC);
+ is_offline_msg_requested = EINA_TRUE;
+ break;
+ } else {
+ if (org_last_msg->message) {
+ free(org_last_msg->message);
+ }
+ free(org_last_msg);
+ }
+ free(msg_table);
+ }
+ }
+ }
+ if (!is_offline_msg_requested) {
+ send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+ }
}
+#if 0
+
static Eina_Bool on_load_offline_messages(void *data)
{
struct tgl_state *TLS = data;
return ECORE_CALLBACK_CANCEL;
}
+#else
+
+static Eina_Bool on_load_offline_messages(void *data)
+{
+ struct tgl_state *TLS = data;
+ if (TLS) {
+ tg_engine_data_s *tg_data = TLS->callback_data;
+
+
+ if (tg_data->peer_list && eina_list_count(tg_data->peer_list) > 0) {
+ for (int i = 0; i < eina_list_count(tg_data->peer_list); i++) {
+ tgl_peer_t* UC = eina_list_nth(tg_data->peer_list, i);
+ char* msg_table = get_table_name_from_number(UC->id.id);
+ create_buddy_msg_table(msg_table);
+ delete_all_messages_from_chat(UC->id.id, UC->id.type);
+ free(msg_table);
+ }
+ }
+
+ Eina_Bool is_offline_msg_requested = EINA_FALSE;
+
+ if (tg_data->peer_list && eina_list_count(tg_data->peer_list) > 0) {
+ for (int i = 0; i < eina_list_count(tg_data->peer_list); i++) {
+
+ tg_data->current_offline_buddy_index = i;
+
+ tgl_peer_t* UC = eina_list_nth(tg_data->peer_list, i);
+
+ if (UC->id.id == 333000 || UC->id.id == 777000) {
+ continue;
+ }
+
+ struct tgl_message *last_msg = UC->last;
+ if (last_msg) {
+ // check last message in message table
+ char* msg_table = get_table_name_from_number(UC->id.id);
+ struct tgl_message* org_last_msg = get_message_from_message_tableby_message_id(msg_table, last_msg->id);
+ if (!org_last_msg) {
+ tgl_do_get_history(s_info.TLS, UC->id, 10, 0, on_offline_chat_received, UC);
+ is_offline_msg_requested = EINA_TRUE;
+ break;
+ } else {
+ if (org_last_msg->message) {
+ free(org_last_msg->message);
+ }
+ free(org_last_msg);
+ }
+ free(msg_table);
+ }
+ }
+ }
+
+ if (!is_offline_msg_requested) {
+ send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+ }
+ }
+ return ECORE_CALLBACK_CANCEL;
+}
+
+#endif
extern void on_peer_chat_info_received(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_chat *chat_info);
tgl_do_get_chat_info(TLS, UC->id, 0, &on_peer_chat_info_received, NULL);
}
} else {
- send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+ //send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
ecore_timer_add(5, on_send_unsent_messages_requested, TLS);
}
}
#endif
if ((tg_data->chat_list == NULL) || (eina_list_count(tg_data->chat_list) <= 0)) {
- send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+ //send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
ecore_timer_add(5, on_send_unsent_messages_requested, TLS);
} else {
// load chat info one by one.
void on_new_buddy_added(struct tgl_state *TLS,void *callback_extra, int success, int size, struct tgl_user *users[])
{
tg_engine_data_s *tg_data = TLS->callback_data;
- if (success) {
+ if (success && size > 0) {
struct tgl_user *buddy = users[0];
if (buddy) {
char* msg_table = get_table_name_from_number(buddy->id.id);
}
} else {
- send_new_contact_added_response(tg_data, -1, EINA_TRUE);
+ send_new_contact_added_response(tg_data, -1, EINA_FALSE);
}
}