text = (const char *)sqlite3_column_text(stmt, col);
if (!text || text[0] == '\0') {
- val = strdup("_null_");
+ //val = strdup("_null_");
+ val = strdup("");
} else {
val = strdup(text);
}
extern void launch_start_peer_search_view(appdata_s* ad);
extern int on_create_new_contact(appdata_s* ad);
-
+extern void on_new_contact_added_response_received(appdata_s *ad, int buddy_id, Eina_Bool is_success);
#endif /* TG_SEARCH_PEER_VIEW_H_ */
#include <badge.h>
#include "tg_settings_view.h"
#include "device_contacts_manager.h"
+#include "tg_search_peer_view.h"
static void free_app_data(appdata_s *app_data, Eina_Bool destroy_server);
media_msg = get_media_details_from_db(atoll(msg->media_id));
if (media_msg && media_msg->doc_type) {
- item->last_message = strdup(media_msg->doc_type);
+ if (strlen(media_msg->doc_type) > 0) {
+ item->last_message = strdup(media_msg->doc_type);
+ } else {
+ item->last_message = strdup("Document");
+ }
free_media_details(media_msg);
} else {
if (msg->message && strlen(msg->message) > 0) {
return result;
}
+static int on_new_contact_added(appdata_s *app, bundle *const rec_msg)
+{
+ int result = SVC_RES_FAIL;
+ char* buddy_id_str = NULL;
+ result = bundle_get_str(rec_msg, "buddy_id", &buddy_id_str);
+ int buddy_id = atoi(buddy_id_str);
+
+ Eina_Bool is_success = EINA_FALSE;
+ char* is_success_val = NULL;
+ result = bundle_get_str(rec_msg, "is_success", &is_success_val);
+ if (strncmp("true", is_success_val, strlen("true")) == 0) {
+ is_success = EINA_TRUE;
+ } else {
+ is_success = EINA_FALSE;
+ }
+ if (is_success) {
+ load_buddy_list_data(app);
+ load_peer_data(app);
+ }
+ hide_loading_popup(app);
+ if (app->current_app_state == TG_ADD_CONTACT_STATE) {
+ on_new_contact_added_response_received(app, buddy_id, is_success);
+ }
+ return result;
+}
static int on_buddy_re_added_to_chat(appdata_s *app, bundle *const rec_msg)
{
return on_buddy_re_added_to_chat(data, rec_msg);
+ } else if (strcmp(rec_key_val, "new_contact_added") == 0) {
+
+ return on_new_contact_added(data, rec_msg);
+
} else if (strcmp(rec_key_val, "buddy_deleted") == 0) {
return on_buddy_deleted_from_group_chat(data, rec_msg);
ad->main_list = eina_list_prepend(ad->main_list, latest_item);
}
}
+ refresh_main_list_view(ad, EINA_FALSE);
+ } else {
+ if (ad->peer_in_cahtting_data) {
+ peer_with_pic_s *item = ad->peer_in_cahtting_data;
+ if (item) {
+ tg_peer_info_s* peer_info = item->use_data;
+ if(peer_info) {
+ //if (peer_info->last_msg_id > 0) {
+
+ // get message from message table.
+
+ char* tablename = get_table_name_from_number(peer_info->peer_id);
+ //tg_message_s* msg = get_message_from_message_table(peer_info->last_msg_id, tablename);
+ tg_message_s* msg = get_latest_message_from_message_table(tablename);
+
+ if (msg) {
+
+ if (msg->service) {
+ if (msg->message && strlen(msg->message) > 0) {
+ item->last_message = strdup(msg->message);
+ } else {
+ item->last_message = strdup(" ");
+ }
+ } else {
+
+ int media_type = msg->media_type;
+ if(media_type == tgl_message_media_none) {
+ if (msg->message && strlen(msg->message) > 0) {
+ item->last_message = strdup(msg->message);
+ } else {
+ item->last_message = strdup(" ");
+ }
+ } else if(media_type == tgl_message_media_photo) {
+ item->last_message = strdup("Image");
+ } else if(media_type == tgl_message_media_document) {
+ tgl_media_s *media_msg = NULL;
+ media_msg = get_media_details_from_db(atoll(msg->media_id));
+
+ if (media_msg && media_msg->doc_type) {
+ if (strlen(media_msg->doc_type) > 0) {
+ item->last_message = strdup(media_msg->doc_type);
+ } else {
+ item->last_message = strdup("Document");
+ }
+ free_media_details(media_msg);
+ } else {
+ if (msg->message && strlen(msg->message) > 0) {
+ item->last_message = strdup(msg->message);
+ } else {
+ item->last_message = strdup("Document");
+ }
+ }
+
+ } else if(media_type == tgl_message_media_geo) {
+ item->last_message = strdup("Geo location");
+ } else if(media_type == tgl_message_media_contact) {
+ item->last_message = strdup("Contact");
+ } else if(media_type == tgl_message_media_unsupported) {
+ item->last_message = strdup(" ");
+ } else if(media_type == tgl_message_media_photo_encr) {
+ item->last_message = strdup("Image encrypted");
+ } else if(media_type == tgl_message_media_document_encr) {
+ item->last_message = strdup("Document encrypted");
+ } else {
+ item->last_message = strdup(" ");
+ }
+ }
+
+ tg_main_list_item_s* main_list_item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
+ main_list_item->peer_id = peer_info->peer_id;
+ main_list_item->peer_type = peer_info->peer_type;
+ if ((peer_info->peer_type == TGL_PEER_USER) && get_buddy_unknown_status(peer_info->peer_id)) {
+ //set phone number
+ main_list_item->peer_print_name = strdup(get_buddy_phone_num_from_id(peer_info->peer_id));
+ } else {
+ main_list_item->peer_print_name = strdup(peer_info->print_name);
+ }
+ main_list_item->last_seen_time = msg->date;
+ main_list_item->profile_pic = NULL;
+ main_list_item->last_msg_id = msg->msg_id;
+ main_list_item->last_message = strdup(item->last_message);
+ main_list_item->last_msg_type = msg->media_type;
+ main_list_item->is_out_msg = msg->out;
+ main_list_item->last_msg_status = msg->msg_state;
+ main_list_item->last_msg_service = msg->service;
+ main_list_item->number_of_unread_msgs = get_unread_message_count(tablename);
+
+
+ if (peer_info->peer_type == TGL_PEER_USER) {
+ if (peer_info->is_unknown == 1) {
+ main_list_item->buddy_display_name = get_buddy_phone_num_from_id(peer_info->peer_id);
+ } else {
+ char *user_name = NULL;
+ char *first_name = NULL;
+ char *last_name = NULL;
+ char *phone_num = NULL;
+ get_buddy_contact_details_from_db(peer_info->peer_id, &first_name, &last_name, &phone_num);
+
+ if (!first_name || strstr(first_name ,"null") != 0) {
+ first_name = NULL;
+ }
+
+ if (!first_name && !last_name && phone_num) {
+ first_name = phone_num;
+ }
+
+ if (!last_name || strstr(last_name ,"null") != 0) {
+ last_name = "";
+ }
+ user_name = (char*)malloc(strlen(first_name) + strlen(" ") + strlen(last_name) + 1);
+ strcpy(user_name, first_name);
+ strcat(user_name, " ");
+ strcat(user_name, last_name);
+ main_list_item->buddy_display_name = user_name;
+ }
+ } else if (peer_info->peer_type == TGL_PEER_CHAT) {
+ main_list_item->buddy_display_name = replace(peer_info->print_name, '_', " ");
+ } else {
+ main_list_item->buddy_display_name = strdup("");
+ }
+
+
+ if (peer_info->photo_path) {
+ main_list_item->profile_pic_path = strdup(peer_info->photo_path);
+ } else {
+ main_list_item->profile_pic_path = NULL;
+ }
+ main_list_item->user_name_lbl = NULL;
+ main_list_item->status_lbl = NULL;
+ main_list_item->date_lbl = NULL;
+ main_list_item->msg_status_lbl = NULL;
+ main_list_item->main_item_layout = NULL;
+ ad->main_list = eina_list_prepend(ad->main_list, main_list_item);
+
+ // delete message object
+ if(msg->message) {
+ free(msg->message);
+ msg->message = NULL;
+ }
+
+ if(msg->media_id) {
+ free(msg->media_id);
+ msg->media_id = NULL;
+ }
+
+ free(msg);
+ msg = NULL;
+
+ } else {
+ item->last_message = strdup(" ");
+ if (peer_info->peer_type == TGL_PEER_CHAT) {
+ tg_main_list_item_s* main_list_item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
+ main_list_item->peer_id = peer_info->peer_id;
+ main_list_item->peer_type = peer_info->peer_type;
+ if ((peer_info->peer_type == TGL_PEER_USER) && get_buddy_unknown_status(peer_info->peer_id)) {
+ //set phone number
+ main_list_item->peer_print_name = strdup(get_buddy_phone_num_from_id(peer_info->peer_id));
+ } else {
+ main_list_item->peer_print_name = strdup(peer_info->print_name);
+ }
+ main_list_item->last_seen_time = peer_info->last_seen_time;
+ main_list_item->profile_pic = NULL;
+ main_list_item->last_message = strdup(item->last_message);
+ main_list_item->last_msg_type = -1;
+ main_list_item->last_msg_service = 0;
+ main_list_item->is_out_msg = -1;
+ main_list_item->last_msg_id = -1;
+ main_list_item->last_msg_status = -1;
+ main_list_item->number_of_unread_msgs = 0;
+ if (peer_info->peer_type == TGL_PEER_USER) {
+ char *user_name = NULL;
+ char *first_name = NULL;
+ char *last_name = NULL;
+ char *phone_num = NULL;
+ get_buddy_contact_details_from_db(peer_info->peer_id, &first_name, &last_name, &phone_num);
+
+ if (!first_name || strstr(first_name ,"null") != 0) {
+ first_name = NULL;
+ }
+
+ if (!first_name && !last_name && phone_num) {
+ first_name = phone_num;
+ }
+
+ if (!last_name || strstr(last_name ,"null") != 0) {
+ last_name = "";
+ }
+ user_name = (char*)malloc(strlen(first_name) + strlen(" ") + strlen(last_name) + 1);
+ strcpy(user_name, first_name);
+ strcat(user_name, " ");
+ strcat(user_name, last_name);
+ main_list_item->buddy_display_name = user_name;
+ } else if (peer_info->peer_type == TGL_PEER_CHAT) {
+ main_list_item->buddy_display_name = replace(peer_info->print_name, '_', " ");
+ } else {
+ main_list_item->buddy_display_name = strdup("");
+ }
+
+ if (peer_info->photo_path) {
+ main_list_item->profile_pic_path = strdup(peer_info->photo_path);
+ } else {
+ main_list_item->profile_pic_path = NULL;
+ }
+ main_list_item->user_name_lbl = NULL;
+ main_list_item->status_lbl = NULL;
+ main_list_item->date_lbl = NULL;
+ main_list_item->msg_status_lbl = NULL;
+ main_list_item->main_item_layout = NULL;
+ ad->main_list = eina_list_prepend(ad->main_list, main_list_item);
+ }
+ }
+
+ if (tablename) {
+ free(tablename);
+ tablename = NULL;
+ }
+ //}
+ }
+ }
+ refresh_main_list_view(ad, EINA_TRUE);
+ }
}
- refresh_main_list_view(ad, EINA_FALSE);
+
}
elm_naviframe_item_pop(ad->nf);
ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
#include "contact_selection_view.h"
#include "ucol.h"
#include "device_contacts_manager.h"
+#include "tg_search_peer_view.h"
+#include "server_requests.h"
#define COMMAND_MENU_ITEM_COUNT 2
#define MOBILE_BUTTON_SIZE (98*1.4f)
Elm_Object_Item *item;
} _command_item_info;
-
+static void _append_command_item(Evas_Object *genlist, appdata_s *ad);
+static void _append_peer_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list);
+static void _append_contact_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list);
static void on_invite_friends_clicked(void *data, Evas_Object *obj, void *event_info);
static void on_group_chat_clicked(void *data, Evas_Object *obj, void *event_info);
static void on_secret_chat_clicked(void *data, Evas_Object *obj, void *event_info);
evas_object_smart_callback_add(phone_entry, "unfocused", onUnfocus, layout);
evas_object_show(phone_entry);
+ appdata_s *ad = evas_object_data_get(obj, "app_data");
+ if (ad) {
+ evas_object_data_set(ad->nf, "add_contact_phone_number", phone_entry);
+ }
+
return layout;
} else if (0 == strcmp(part, "elm.icon.2")) {
evas_object_smart_callback_add(phone_entry, "unfocused", onUnfocus, layout);
evas_object_show(phone_entry);
+ appdata_s *ad = evas_object_data_get(obj, "app_data");
+ if (ad) {
+ evas_object_data_set(ad->nf, "add_contact_first_name", phone_entry);
+ }
+
return layout;
} else if (0 == strcmp(part, "elm.icon.2")) {
evas_object_smart_callback_add(phone_entry, "unfocused", onUnfocus, layout);
evas_object_show(phone_entry);
+ appdata_s *ad = evas_object_data_get(obj, "app_data");
+ if (ad) {
+ evas_object_data_set(ad->nf, "add_contact_last_name", phone_entry);
+ }
+
return layout;
} else if (0 == strcmp(part, "elm.icon.2")) {
profile_pic = get_image_from_path(ui_utils_get_resource(TG_CALLER_ID_IMAGE), obj);
evas_object_color_set(profile_pic, 45, 165, 224, 225);
+ appdata_s *ad = evas_object_data_get(obj, "app_data");
+ if (ad) {
+ evas_object_data_set(ad->nf, "add_contact_pic", profile_pic);
+ }
elm_object_part_content_set(image_layout, "image", profile_pic);
return image_layout;
return list;
}
+void on_new_contact_added_response_received(appdata_s *ad, int buddy_id, Eina_Bool is_success)
+{
+ if (is_success) {
+ elm_naviframe_item_pop(ad->nf);
+ ad->current_app_state = TG_PEER_SEARCH_VIEW_STATE;
+ show_floating_button(ad);
+
+ // add new buddy to list
+ Evas_Object *peer_list = evas_object_data_get(ad->nf, "search_list");
+ if (peer_list) {
+ elm_genlist_clear(peer_list);
+ clear_search_list(ad);
+ free_contact_list(ad->contact_list);
+
+ ad->search_peer_list = load_buddy_data_by_name(ad->user_id.id, NULL);
+ ad->contact_list = get_contact_list_from_device_db();
+
+ _append_command_item(peer_list, ad);
+ _append_peer_item(peer_list, ad, ad->search_peer_list);
+ if (ad->contact_list && eina_list_count(ad->contact_list) > 0) {
+ _append_contact_item(peer_list, ad, ad->contact_list);
+ }
+ }
+ } else {
+ // show failed message
+ }
+}
+
static void on_new_contact_done_clicked(void *data, Evas_Object *obj, void *event_info)
{
appdata_s* ad = data;
+ char* phone_num = NULL;
+ char* first_name = NULL;
+ char* last_name = NULL;
+ char* profile_pic_path = NULL;
+
+ Evas_Object *phone_num_entry = evas_object_data_get(ad->nf, "add_contact_phone_number");
+ if (phone_num_entry)
+ phone_num = elm_entry_markup_to_utf8(elm_object_text_get(phone_num_entry));
+
+ Evas_Object *first_name_entry = evas_object_data_get(ad->nf, "add_contact_first_name");
+ if (first_name_entry)
+ first_name = elm_entry_markup_to_utf8(elm_object_text_get(first_name_entry));
+
+ Evas_Object *last_name_entry = evas_object_data_get(ad->nf, "add_contact_last_name");
+ if (last_name_entry)
+ last_name = elm_entry_markup_to_utf8(elm_object_text_get(last_name_entry));
+
+ if ((phone_num && strlen(phone_num) > 0) && (first_name && strlen(first_name) > 0) && (last_name && strlen(last_name) > 0)) {
+ show_loading_popup(ad);
+ send_add_buddy_request(ad, ad->service_client, -1, first_name, last_name, phone_num);
+ } else {
+ // show message
+ }
}
static void on_new_contact_cancel_clicked(void *data, Evas_Object *obj, void *event_info)
elm_object_item_part_content_set(navi_item, "title_left_btn", cancel_btn);
evas_object_data_set(ad->nf, "name_done_btn", (void*)done_btn);
- elm_object_disabled_set(done_btn, EINA_TRUE);
+ //elm_object_disabled_set(done_btn, EINA_TRUE);
}
}
#endif
-static void _append_peer_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list)
+void _append_peer_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list)
{
int i;
static Elm_Genlist_Item_Class itc;
}
-static void _append_contact_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list)
+void _append_contact_item(Evas_Object *genlist, appdata_s *ad, Eina_List* item_list)
{
if (!genlist || !ad || !item_list) {
}
}
-static void _append_command_item(Evas_Object *genlist, appdata_s *ad)
+void _append_command_item(Evas_Object *genlist, appdata_s *ad)
{
int i;
static Elm_Genlist_Item_Class itc;
/**************************************************************************/
-
-
-
void on_chat_bg_select_result_cb(app_control_h request, app_control_h reply, app_control_result_e result, void *user_data)
{
if (result == APP_CONTROL_RESULT_SUCCEEDED) {
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_new_contact_added_response(tg_engine_data_s *tg_data, int buddy_id, 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);
bundle_free(msg);
}
+void send_new_contact_added_response(tg_engine_data_s *tg_data, int buddy_id, Eina_Bool is_success)
+{
+ bundle *msg = bundle_create();
+ if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0) {
+ ERR("Failed to add data by key to bundle");
+ bundle_free(msg);
+ }
+
+ if (bundle_add_str(msg, "command", "new_contact_added") != 0) {
+ ERR("Failed to add data by key to bundle");
+ bundle_free(msg);
+ }
+
+ char usr_id_str[50];
+ sprintf(usr_id_str,"%d",buddy_id);
+
+ if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+ ERR("Failed to add data by key to bundle");
+ bundle_free(msg);
+ }
+
+ if (is_success) {
+ if (bundle_add_str(msg, "is_success", "true") != 0) {
+ ERR("Failed to add data by key to bundle");
+ bundle_free(msg);
+ }
+ } else {
+ if (bundle_add_str(msg, "is_success", "false") != 0) {
+ ERR("Failed to add data by key to bundle");
+ bundle_free(msg);
+ }
+ }
+ 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_buddy_readded_response(tg_engine_data_s *tg_data, int buddy_id, Eina_Bool is_success)
{
}
}
+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) {
+ struct tgl_user *buddy = users[0];
+ if (buddy) {
+ char* msg_table = get_table_name_from_number(buddy->id.id);
+ create_buddy_msg_table(msg_table);
+ free(msg_table);
+
+ if (buddy->id.id == 333000 || buddy->id.id == 777000) {
+ buddy->is_unknown = 1;
+ } else {
+ buddy->is_unknown = 0;
+ }
+ init_insert_buddy_into_db(BUDDY_INFO_TABLE_NAME, buddy);
+ tgl_peer_t* UC = tgl_peer_get(TLS, buddy->id);
+ if (UC) {
+ init_insert_peer_into_database(UC, 0, 0, 0);
+ }
+ tgl_do_get_user_info(TLS, buddy->id, 0, on_buddy_info_loaded, NULL);
+
+ // send response to application
+ send_new_contact_added_response(tg_data, buddy->id.id, EINA_TRUE);
+ } else {
+ send_new_contact_added_response(tg_data, -1, EINA_FALSE);
+ }
+
+ } else {
+ send_new_contact_added_response(tg_data, -1, EINA_TRUE);
+ }
+}
+
void do_add_buddy(int buddy_id, char *first_name, char *last_name, char *phone_num)
{
if (!first_name) {
}
if (first_name && last_name && phone_num) {
- tgl_do_add_contact(s_info.TLS, phone_num, first_name, last_name, 0, on_buddy_readded, (void*)(buddy_id));
+ if (buddy_id == -1) {
+ tgl_do_add_contact(s_info.TLS, phone_num, first_name, last_name, 0, on_new_buddy_added, (void*)(buddy_id));
+ } else {
+ tgl_do_add_contact(s_info.TLS, phone_num, first_name, last_name, 0, on_buddy_readded, (void*)(buddy_id));
+ }
}
}