From a35ce05774b955636b5cae3f8df561b4456b1ea5 Mon Sep 17 00:00:00 2001 From: cskim Date: Thu, 10 Mar 2016 17:54:32 +0900 Subject: [PATCH] add telegram account, fix db insert error. Change-Id: I4fc721317500df7ed7b62be307a5e694f4b65909 --- TelegramTizen/db_manager/tg_db_manager.c | 275 +++----- TelegramTizen/db_manager/tg_db_manager.h | 2 +- TelegramTizen/inc/tg_db_wrapper.h | 2 + TelegramTizen/src/contact_selection_view.c | 116 ++-- TelegramTizen/src/group_chat_entry_view.c | 10 +- TelegramTizen/src/telegramtizen.c | 949 +++++++------------------- TelegramTizen/src/tg_db_wrapper.c | 62 +- TelegramTizen/src/tg_messaging_view.c | 491 ++++++------- TelegramTizen/src/tg_settings_view.c | 10 +- TelegramTizen/src/tg_user_info_view.c | 34 +- TelegramTizen/src/tg_user_main_view.c | 9 +- TelegramTizen/tg_utils/tg_common.c | 125 +++- TelegramTizen/tg_utils/tg_common.h | 26 +- tg-engine-service/db_manager/tg_db_manager.c | 320 +++------ tg-engine-service/inc/assert.h | 6 +- tg-engine-service/mtprotocol/queries.c | 4 +- tg-engine-service/mtprotocol/tgl-inner.h | 2 +- tg-engine-service/mtprotocol/tgl.h | 2 +- tg-engine-service/mtprotocol/tools.c | 42 +- tg-engine-service/mtprotocol/tools.h | 2 + tg-engine-service/src/tg-engine-service.c | 5 +- tg-engine-service/src/tg_db_wrapper.c | 4 + tg-engine-service/tg_engine/tg_engine.c | 266 +++----- tg-engine-service/tg_engine_utils/tg_common.c | 7 + tg-engine-service/tg_engine_utils/tg_common.h | 7 +- 25 files changed, 1068 insertions(+), 1710 deletions(-) mode change 100644 => 100755 TelegramTizen/src/contact_selection_view.c mode change 100644 => 100755 TelegramTizen/src/telegramtizen.c mode change 100644 => 100755 TelegramTizen/src/tg_db_wrapper.c mode change 100644 => 100755 TelegramTizen/src/tg_user_info_view.c mode change 100644 => 100755 TelegramTizen/tg_utils/tg_common.h diff --git a/TelegramTizen/db_manager/tg_db_manager.c b/TelegramTizen/db_manager/tg_db_manager.c index 615a536..a492e03 100644 --- a/TelegramTizen/db_manager/tg_db_manager.c +++ b/TelegramTizen/db_manager/tg_db_manager.c @@ -22,14 +22,6 @@ #include #include "tg_common.h" -int errno; - -static struct _info { - sqlite3 *db; -} s_info = { - .db = NULL, -}; - sqlite3* create_database(void) { @@ -74,34 +66,30 @@ Eina_Bool create_table(const char* table_name, Eina_List *column_names, Eina_Lis char* err_msg = 0; int col_count = eina_list_count(column_names); - int str_len = strlen("CREATE TABLE IF NOT EXISTS ") + strlen(table_name) + strlen("(") + 1; - char* var_query = (char *)malloc(str_len); - strcpy(var_query,"CREATE TABLE IF NOT EXISTS "); - strcat(var_query, table_name); - strcat(var_query, "("); + Eina_Strbuf *var_query = eina_strbuf_new(); + if (!var_query) { + close_database(db); + return EINA_FALSE; + } + + eina_strbuf_append(var_query, "CREATE TABLE IF NOT EXISTS "); + eina_strbuf_append(var_query, table_name); + eina_strbuf_append(var_query, "("); for(int col = 0; col < col_count ; col++) { - char* col_name = eina_list_nth(column_names, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1); - strcat(var_query, col_name); - var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1); - strcat(var_query, " "); - char* col_type = eina_list_nth(column_types, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_type) + 1); - strcat(var_query, col_type); - if(col < col_count - 1){ - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, ","); - } else { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ");"); - } + eina_strbuf_append_printf(var_query, "%s %s", eina_list_nth(column_names, col), eina_list_nth(column_types, col)); + + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, ");"); } - ret = sqlite3_exec(db,var_query, NULL, NULL, &err_msg); - free(var_query); + ret = sqlite3_exec(db,eina_strbuf_string_get(var_query), NULL, NULL, &err_msg); close_database(db); + eina_strbuf_free(var_query); if( ret != SQLITE_OK ){ + LOGE("table cretion failed, %s", err_msg); sqlite3_free(err_msg); return EINA_FALSE; } @@ -110,91 +98,65 @@ Eina_Bool create_table(const char* table_name, Eina_List *column_names, Eina_Lis Eina_Bool insert_table(const char* table_name, Eina_List *column_names, Eina_List *column_types, Eina_List *column_values) { - if( !table_name || ! column_names || !column_types || !column_values) { + if( !table_name || ! column_names || !column_types || !column_values) return EINA_FALSE; - } + sqlite3* db = create_database(); int ret = 0 ; char* err_msg = 0; int col_count = eina_list_count(column_names); + Eina_Strbuf *var_query = eina_strbuf_new(); + if (!var_query) { + close_database(db); + return EINA_FALSE; + } - int str_len = strlen("INSERT INTO ") + strlen(table_name) + strlen("(") + 1; - char* var_query = (char *)malloc(str_len); - strcpy(var_query,"INSERT INTO "); - strcat(var_query, table_name); - strcat(var_query, "("); + eina_strbuf_append(var_query, "INSERT INTO "); + eina_strbuf_append(var_query, table_name); + eina_strbuf_append(var_query, "("); for(int col = 0; col < col_count ; col++) { - char* col_name = eina_list_nth(column_names, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1); - strcat(var_query, col_name); + char *col_name = eina_list_nth(column_names, col); + eina_strbuf_append(var_query, col_name); - if(col < col_count - 1){ - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, ","); - } else { - var_query = realloc(var_query, strlen(var_query) + strlen(") VALUES (") + 1); - strcat(var_query, ") VALUES ("); - } + if (col < col_count - 1) + eina_strbuf_append(var_query, ","); + else + eina_strbuf_append(var_query, ") VALUES ("); } int col_val_count = eina_list_count(column_values); for(int col = 0; col < col_val_count ; col++) { - char* col_type = eina_list_nth(column_types, col); - char* col_value = NULL; - if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) { - int* tmp_value = eina_list_nth(column_values, col); - -#if 0 - long long val = *tmp_value; - col_value = (char *)malloc(50); - //sprintf(col_value, "%lld", *tmp_value); - sprintf(col_value, "%lld", val); -#endif - - int act_val = (*tmp_value); - col_value = (char *)malloc(50); - sprintf(col_value, "%d", act_val); - - var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1); - strcat(var_query, col_value); - - } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) { - char* tmp_value = eina_list_nth(column_values, col); - col_value = (char *)malloc(strlen(tmp_value) + 1); - strcpy(col_value,tmp_value); - - var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1); - strcat(var_query, "'"); + char *col_type = eina_list_nth(column_types, col); + if (!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) { - var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1); - strcat(var_query, col_value); + eina_strbuf_append_printf(var_query, "%d", *((int*)eina_list_nth(column_values, col))); + } else if (!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) { - var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1); - strcat(var_query, "'"); + char* escaped_text = replace(eina_list_nth(column_values, col), '\'', "''"); + if (escaped_text) { + eina_strbuf_append_printf(var_query, "'%s'", escaped_text); + free(escaped_text); + } } - if(col < col_count - 1){ - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ", "); - } else { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ");"); - } - free(col_value); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, ");"); } - ret = sqlite3_exec(db,var_query, NULL, NULL, &err_msg); + ret = sqlite3_exec(db,eina_strbuf_string_get(var_query), NULL, NULL, &err_msg); close_database(db); - if( ret != SQLITE_OK ){ + eina_strbuf_free(var_query); + if ( ret != SQLITE_OK ) { sqlite3_free(err_msg); return EINA_FALSE; } return EINA_TRUE; - } @@ -208,12 +170,15 @@ Eina_Bool update_table(const char* table_name, Eina_List *column_names, Eina_Lis char* err_msg = 0; int col_count = eina_list_count(column_names); - int str_len = strlen("UPDATE ") + strlen(table_name) + strlen(" SET ") + 1; - char* var_query = (char *)malloc(str_len); - strcpy(var_query,"UPDATE "); - strcat(var_query, table_name); - strcat(var_query, " SET "); + Eina_Strbuf *var_query = eina_strbuf_new(); + if (!var_query) { + close_database(db); + return EINA_FALSE; + } + eina_strbuf_append(var_query, "UPDATE "); + eina_strbuf_append(var_query, table_name); + eina_strbuf_append(var_query, " SET "); int col_val_count = eina_list_count(column_values); @@ -221,56 +186,33 @@ Eina_Bool update_table(const char* table_name, Eina_List *column_names, Eina_Lis char* col_name = eina_list_nth(column_names, col); char* col_type = eina_list_nth(column_types, col); - char* col_value = NULL; if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) { - int* tmp_value = eina_list_nth(column_values, col); - int act_val = (*tmp_value); - col_value = (char *)malloc(50); - sprintf(col_value, "%d", act_val); - - var_query = realloc(var_query, strlen(var_query) + strlen(col_name) + strlen(" = ") + strlen(col_value) + 1); - strcat(var_query, col_name); - strcat(var_query, " = "); - strcat(var_query, col_value); + eina_strbuf_append_printf(var_query, "%s = %d", col_name, *((int*)eina_list_nth(column_values, col))); } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) { - char* tmp_value = eina_list_nth(column_values, col); - col_value = (char *)malloc(strlen(tmp_value) + 1); - strcpy(col_value,tmp_value); - - var_query = realloc(var_query, strlen(var_query)+ strlen(col_name) + strlen(" = ")+strlen("'") + 1); - strcat(var_query, col_name); - strcat(var_query, " = "); - strcat(var_query, "'"); - - var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1); - strcat(var_query, col_value); - - var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1); - strcat(var_query, "'"); + char* escaped_text = replace(eina_list_nth(column_values, col), '\'', "''"); + if (escaped_text) { + eina_strbuf_append_printf(var_query, "%s = '%s'", col_name, escaped_text); + free(escaped_text); + } } - if(col < col_count - 1){ - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ", "); - } else { - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, " "); - } - free(col_value); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, " "); } - var_query = realloc(var_query, strlen(var_query) + strlen(" WHERE ") + strlen(where_clause) + 2); - strcat(var_query, " WHERE "); - strcat(var_query, where_clause); - strcat(var_query, ";"); + eina_strbuf_append(var_query, "WHERE "); + eina_strbuf_append(var_query, where_clause); + eina_strbuf_append(var_query, ";"); - ret = sqlite3_exec(db, var_query, NULL, NULL, &err_msg); + ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), NULL, NULL, &err_msg); close_database(db); - + eina_strbuf_free(var_query); if( ret != SQLITE_OK ){ sqlite3_free(err_msg); return EINA_FALSE; @@ -335,74 +277,59 @@ Eina_Bool get_values_from_table(const char* table_name, Eina_List *column_names, return EINA_FALSE; } - /*****No rows identification*****/ if (get_number_of_rows(table_name, NULL) == 0) { DBG("There are no rows on [%s]", table_name); return EINA_FALSE; } - /********************************/ sqlite3* db = create_database(); int ret = 0 ; char* err_msg = 0; - //int col_count = eina_list_count(column_names); - int str_len = strlen("SELECT ") + 1; - char* var_query = (char *)malloc(str_len); - strcpy(var_query,"SELECT "); + Eina_Strbuf *var_query = eina_strbuf_new(); + if (!var_query) { + close_database(db); + return EINA_FALSE; + } + + eina_strbuf_append(var_query, "SELECT "); + if(!column_names) { var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, "* "); + eina_strbuf_append(var_query, "* "); } else { int col_count = eina_list_count(column_names); char* col_name = NULL; for(int col = 0; col < col_count ; col++) { - col_name = eina_list_nth(column_names, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1); - strcat(var_query, col_name); - col_name = NULL; - var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1); - - if(col < col_count - 1){ - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ", "); - } else { - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, " "); - } + eina_strbuf_append(var_query, eina_list_nth(column_names, col)); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, " "); } - } - var_query = realloc(var_query, strlen(var_query) + strlen("FROM ") + 2); - strcat(var_query, "FROM "); - var_query = realloc(var_query, strlen(var_query) + strlen(table_name) + 1); - strcat(var_query, table_name); + eina_strbuf_append(var_query, "FROM "); + eina_strbuf_append(var_query, table_name); if (where_clause) { - var_query = realloc(var_query, strlen(var_query)+strlen(" WHERE ") + 1); - strcat(var_query, " WHERE "); - var_query = realloc(var_query, strlen(var_query)+strlen(where_clause) + 1); - strcat(var_query, where_clause); + eina_strbuf_append(var_query, " WHERE "); + eina_strbuf_append(var_query, where_clause); } - - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, ";"); - - - ret = sqlite3_exec(db,var_query, callback,(void*)data_to_callback, &err_msg); + eina_strbuf_append(var_query, ";"); + + ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), callback,(void*)data_to_callback, &err_msg); close_database(db); + eina_strbuf_free(var_query); if( ret != SQLITE_OK ){ sqlite3_free(err_msg); return EINA_FALSE; } - - free(var_query); return EINA_TRUE; } -int get_number_of_rows(char* table_name, char* where_clause) +int get_number_of_rows(const char* table_name, char* where_clause) { int no_of_rows = 0; if (!table_name) { @@ -440,10 +367,8 @@ Eina_List *get_values_from_table_sync_order_by(const char* table_name, Eina_List { Eina_List *query_vals = NULL; - - if (!table_name) { + if (!table_name) return NULL; - } /*****No rows identification*****/ if (get_number_of_rows(table_name, NULL) == 0) { @@ -540,6 +465,8 @@ Eina_List *get_values_from_table_sync_order_by(const char* table_name, Eina_List ret = sqlite3_prepare_v2(db, var_query, -1, &stmt, 0); + free(var_query); + var_query = NULL; if( ret != SQLITE_OK ){ sqlite3_free(err_msg); return NULL; @@ -569,8 +496,6 @@ Eina_List *get_values_from_table_sync_order_by(const char* table_name, Eina_List query_vals = eina_list_append(query_vals, row_vals); } close_database(db); - free(var_query); - return query_vals; } @@ -984,10 +909,10 @@ Eina_Bool delete_all_records(char *tablename) sqlite3* db = create_database(); ret = sqlite3_exec(db,var_query, NULL, NULL, &err_msg); close_database(db); + free(var_query); if( ret != SQLITE_OK ){ sqlite3_free(err_msg); return EINA_FALSE; } - free(var_query); return EINA_TRUE; } diff --git a/TelegramTizen/db_manager/tg_db_manager.h b/TelegramTizen/db_manager/tg_db_manager.h index 8b9dcf9..67c9936 100644 --- a/TelegramTizen/db_manager/tg_db_manager.h +++ b/TelegramTizen/db_manager/tg_db_manager.h @@ -34,7 +34,7 @@ extern Eina_Bool create_index(const char* table_name, const char* column_name); extern Eina_Bool get_values_from_table(const char* table_name, Eina_List *column_names, int (*callback)(void*,int,char**,char**), const char* where_clause, void* data_to_callback); extern Eina_List *get_values_from_table_sync(const char* table_name, Eina_List *column_names, Eina_List *column_types, const char* where_clause, unsigned int limit, unsigned int offset); extern Eina_List *get_values_from_table_sync_order_by(const char* table_name, Eina_List *column_names, Eina_List *column_types, const char* order_column, Eina_Bool is_asc, const char* where_clause, unsigned int limit, unsigned int offset); -extern int get_number_of_rows(char* table_name, char* where_clause); +extern int get_number_of_rows(const char* table_name, char* where_clause); extern Eina_List *tg_db_get_user_info(tgl_peer_id_t *user_id); extern Eina_List *tg_db_get_chat_info(const char *table_name); extern tg_peer_info_s *tg_db_get_peer_info(const char *table, int peer_id); diff --git a/TelegramTizen/inc/tg_db_wrapper.h b/TelegramTizen/inc/tg_db_wrapper.h index 1c34205..95478db 100644 --- a/TelegramTizen/inc/tg_db_wrapper.h +++ b/TelegramTizen/inc/tg_db_wrapper.h @@ -290,6 +290,8 @@ Eina_Bool mark_group_chat_as_unknown(int chat_id); Eina_Bool insert_unsent_message_to_db(const char *app_name, const char *command, const char *buddy_id, const char *msg_id, const char *msg_type, const char * msg_data, const char *type_of_chat); Eina_Bool insert_unsent_media_message_to_db(const char *app_name, const char *command, const char *buddy_id, const char *msg_id, const char *media_id, const char *msg_type, const char *file_path, const char *type_of_chat); + +Eina_Bool is_telegram_account(int buddy_id); #if 0 void set_chat_bg(char *file_path); char* get_chat_bg(); diff --git a/TelegramTizen/src/contact_selection_view.c b/TelegramTizen/src/contact_selection_view.c old mode 100644 new mode 100755 index ac8c73e..f6fda72 --- a/TelegramTizen/src/contact_selection_view.c +++ b/TelegramTizen/src/contact_selection_view.c @@ -18,6 +18,7 @@ #include "contact_selection_view.h" #include "group_chat_entry_view.h" +#include "tg_db_wrapper.h" #include "ucol.h" static Evas_Object* create_image_object_from_file(const char *icon_name, Evas_Object *parent) @@ -43,10 +44,10 @@ void on_buddy_selected(void *data, Evas_Object *obj, void *event_info) int id = (int)data; appdata_s* ad = evas_object_data_get(obj, "app_data"); - if (ad && ad->buddy_list && eina_list_count(ad->buddy_list) > 0) { + if (ad && ad->known_buddy_list && eina_list_count(ad->known_buddy_list) > 0) { if (id == 0) { - for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) { - user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i); + for (int i = 0 ; i < eina_list_count(ad->known_buddy_list) ; i++) { + user_data_with_pic_s *item = eina_list_nth(ad->known_buddy_list, i); user_data_s* user = item->use_data; user->is_selected = checked; @@ -60,7 +61,7 @@ void on_buddy_selected(void *data, Evas_Object *obj, void *event_info) } } } else { - user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, id - 1); + user_data_with_pic_s *item = eina_list_nth(ad->known_buddy_list, id - 1); user_data_s* user = item->use_data; user->is_selected = checked; @@ -77,7 +78,7 @@ void on_buddy_selected(void *data, Evas_Object *obj, void *event_info) Eina_List *l = NULL; user_data_with_pic_s *item = NULL; - EINA_LIST_FOREACH(ad->buddy_list, l, item) { + EINA_LIST_FOREACH(ad->known_buddy_list, l, item) { if (!item) continue; user_data_s* user = item->use_data; @@ -105,7 +106,7 @@ char* on_buddy_name_get_cb(void *data, Evas_Object *obj, const char *part) Eina_List *list = evas_object_data_get(obj, "result_list"); if (!list) { - list = ad->buddy_list; + list = ad->known_buddy_list; } if (list && eina_list_count(list) > 0) { @@ -141,7 +142,7 @@ void on_item_checkbox_sel_cb(void *data, Evas_Object *obj, void *event_info) Eina_List *list = evas_object_data_get(buddy_gen_list, "result_list"); if (!list) { - list = ad->buddy_list; + list = ad->known_buddy_list; } if (ad && list && eina_list_count(list) > 0) { if (id == 0) { @@ -212,7 +213,7 @@ Evas_Object* on_buddy_selection_part_content_get_cb(void *data, Evas_Object *obj Eina_List *list = evas_object_data_get(obj, "result_list"); if (!list) { - list = ad->buddy_list; + list = ad->known_buddy_list; } if (!strcmp(part, "elm.swallow.icon")) { @@ -293,9 +294,9 @@ void on_done_buton_clicked(void *data, Evas_Object *object, void *event_info) { int selected_item_count = 0; appdata_s* ad = data; - if (ad && ad->buddy_list) { - for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) { - user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i); + if (ad && ad->known_buddy_list) { + for (int i = 0 ; i < eina_list_count(ad->known_buddy_list) ; i++) { + user_data_with_pic_s *item = eina_list_nth(ad->known_buddy_list, i); user_data_s* user = item->use_data; if (user->is_selected) { selected_item_count++; @@ -316,9 +317,9 @@ void on_done_buton_clicked(void *data, Evas_Object *object, void *event_info) void on_cancel_buton_clicked(void *data, Evas_Object *object, void *event_info) { appdata_s* ad = data; - if (ad && ad->buddy_list) { - for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) { - user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i); + if (ad && ad->known_buddy_list) { + for (int i = 0 ; i < eina_list_count(ad->known_buddy_list) ; i++) { + user_data_with_pic_s *item = eina_list_nth(ad->known_buddy_list, i); user_data_s* user = item->use_data; user->is_selected = EINA_FALSE; } @@ -437,7 +438,7 @@ static void _on_search_entry_changed(void *data, Evas_Object *obj, void *event_i if (ucol_is_jamo(entry_text)) { LOGD("entry_text is jamo, %s", entry_text); - EINA_LIST_FOREACH(ad->buddy_list, l, item) { + EINA_LIST_FOREACH(ad->known_buddy_list, l, item) { int result; user = item->use_data; result = ucol_compare_first_letters(user->print_name, entry_text); @@ -447,7 +448,7 @@ static void _on_search_entry_changed(void *data, Evas_Object *obj, void *event_i } } else { LOGD("entry_text is not jamo, %s", entry_text); - EINA_LIST_FOREACH(ad->buddy_list, l, item) { + EINA_LIST_FOREACH(ad->known_buddy_list, l, item) { user = item->use_data; if (ucol_search(user->print_name, entry_text) != -ENOENT) { @@ -457,7 +458,7 @@ static void _on_search_entry_changed(void *data, Evas_Object *obj, void *event_i } if ((entry_text == NULL || strlen(entry_text) == 0) && result_list == NULL) { - result_list = ad->buddy_list; + result_list = ad->known_buddy_list; } LOGD("count of result_list is %d", eina_list_count(result_list)); @@ -543,7 +544,7 @@ static void _index_selected_cb(void *data, Evas_Object *obj, void *event_info) user_data_with_pic_s* gl_item = NULL;//eina_list_nth(ad->search_peer_list, 0); //tg_peer_info_s* user = item->use_data; - Eina_List *list = ad->buddy_list; + Eina_List *list = ad->known_buddy_list; int index = 0; Eina_List *l; @@ -599,11 +600,66 @@ static Evas_Object* create_fastscroll(appdata_s *ad) return index; } +void free_known_buddylist(appdata_s *ad) +{ + user_data_with_pic_s* item = NULL; + EINA_LIST_FREE(ad->known_buddy_list, item) { + + if (!item) + continue; + + user_data_s* user_data = item->use_data; + + if (user_data->print_name) { + free(user_data->print_name); + user_data->print_name = NULL; + } + + if (user_data->photo_path) { + free(user_data->photo_path); + user_data->photo_path = NULL; + } + + if (user_data->first_name) { + free(user_data->first_name); + user_data->first_name = NULL; + } + + if (user_data->last_name) { + free(user_data->last_name); + user_data->last_name = NULL; + } + + if (user_data->phone) { + free(user_data->phone); + user_data->phone = NULL; + } + if (user_data->real_first_name) { + free(user_data->real_first_name); + user_data->real_first_name = NULL; + } + + if (user_data->real_last_name) { + free(user_data->real_last_name); + user_data->real_last_name = NULL; + } + + if (user_data->username) { + free(user_data->username); + user_data->username = NULL; + } + free(user_data); + free(item); + } + ad->known_buddy_list = NULL; +} + void launch_contact_selction_view(void *data) { appdata_s* ad = data; ad->current_app_state = TG_BUDDY_LIST_SELECTION_STATE; - + free_known_buddylist(ad); + ad->known_buddy_list = load_buddy_data_by_name(ad->user_id.id, NULL); if (ad->panel) { evas_object_hide(ad->panel); elm_panel_hidden_set(ad->panel, EINA_TRUE); @@ -641,30 +697,10 @@ void launch_contact_selction_view(void *data) Eina_Bool all_items_selected = EINA_FALSE; evas_object_data_set(buddy_gen_list, "all_selected", (void *)((int)all_items_selected)); -#if 0 - static Elm_Genlist_Item_Class itc; - itc.item_style = "type1"; - itc.func.text_get = on_buddy_name_get_cb; - itc.func.content_get = on_buddy_selection_part_content_get_cb; - itc.func.state_get = NULL; - itc.func.del = NULL; - - int size = 0; - if (ad->buddy_list) { - size = eina_list_count(ad->buddy_list); - size++; - } else { - size = 1; // no items - } - - for (int i = 0; i < size; i++) { - elm_genlist_item_append(buddy_gen_list, &itc, (void*)i, NULL, ELM_GENLIST_ITEM_NONE, on_buddy_selected, (void*)i); - } -#endif evas_object_show(buddy_gen_list); - _append_peer_item(buddy_gen_list, ad, ad->buddy_list); + _append_peer_item(buddy_gen_list, ad, ad->known_buddy_list); /* no contents */ Evas_Object *nocontents = elm_layout_add(ad->nf); diff --git a/TelegramTizen/src/group_chat_entry_view.c b/TelegramTizen/src/group_chat_entry_view.c index 9a88699..00aefb1 100644 --- a/TelegramTizen/src/group_chat_entry_view.c +++ b/TelegramTizen/src/group_chat_entry_view.c @@ -247,9 +247,9 @@ void on_group_chat_done_buton_clicked(void *data, Evas_Object *object, void *eve void on_group_chat_cancel_buton_clicked(void *data, Evas_Object *object, void *event_info) { appdata_s* ad = data; - if (ad->buddy_list) { - for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) { - user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i); + if (ad->known_buddy_list) { + for (int i = 0 ; i < eina_list_count(ad->known_buddy_list) ; i++) { + user_data_with_pic_s *item = eina_list_nth(ad->known_buddy_list, i); user_data_s* user = item->use_data; user->is_selected = EINA_FALSE; } @@ -403,8 +403,8 @@ void launch_group_chat_name_entry_view(void *data) Eina_List *selected_buddies = NULL; - for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) { - user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i); + for (int i = 0 ; i < eina_list_count(ad->known_buddy_list) ; i++) { + user_data_with_pic_s *item = eina_list_nth(ad->known_buddy_list, i); user_data_s* user = item->use_data; if (user->is_selected) { selected_buddies = eina_list_append(selected_buddies, item); diff --git a/TelegramTizen/src/telegramtizen.c b/TelegramTizen/src/telegramtizen.c old mode 100644 new mode 100755 index baba835..aec27c8 --- a/TelegramTizen/src/telegramtizen.c +++ b/TelegramTizen/src/telegramtizen.c @@ -389,34 +389,30 @@ void load_peer_data(appdata_s *ad) } } - - void load_main_list_data(appdata_s *ad) { - if (!ad || !ad->peer_list) { + if (!ad || !ad->peer_list) return; - } + tg_main_list_item_s* main_item = NULL; EINA_LIST_FREE(ad->main_list, main_item) { - if (!main_item) - continue; - if (main_item->peer_print_name) { + if (main_item->peer_print_name) free(main_item->peer_print_name); - main_item->peer_print_name = NULL; - } - if (main_item->last_message) { + main_item->peer_print_name = NULL; + + if (main_item->last_message) free(main_item->last_message); - main_item->last_message = NULL; - } - if (main_item->profile_pic_path) { + main_item->last_message = NULL; + + if (main_item->profile_pic_path) free(main_item->profile_pic_path); - main_item->profile_pic_path = NULL; - } - if (main_item->buddy_display_name) { + main_item->profile_pic_path = NULL; + + if (main_item->buddy_display_name) free(main_item->buddy_display_name); - main_item->buddy_display_name = NULL; - } + main_item->buddy_display_name = NULL; + main_item->date_lbl = NULL; main_item->msg_status_lbl = NULL; main_item->profile_pic = NULL; @@ -431,24 +427,19 @@ void load_main_list_data(appdata_s *ad) peer_with_pic_s *item = NULL; EINA_LIST_FOREACH(ad->peer_list, l, item) { - if (!item) { - continue; - } tg_peer_info_s* peer_info = item->use_data; - if (!peer_info) { + if (!peer_info) continue; - } - if (peer_info->peer_type == TGL_PEER_CHAT && get_buddy_unknown_status(peer_info->peer_id)) { + if (peer_info->peer_type == TGL_PEER_CHAT && + get_buddy_unknown_status(peer_info->peer_id)) continue; - } //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, EINA_FALSE); if (msg) { @@ -463,11 +454,7 @@ void load_main_list_data(appdata_s *ad) 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(" "); - } + item->last_message = strdup(msg->message ? msg->message : " "); } else if (media_type == tgl_message_media_photo) { item->last_message = strdup("Image"); } else if (media_type == tgl_message_media_document) { @@ -507,12 +494,9 @@ void load_main_list_data(appdata_s *ad) 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); - } + + set_peer_names(peer_info, main_list_item); + main_list_item->last_seen_time = msg->date; main_list_item->profile_pic = NULL; main_list_item->last_msg_id = msg->msg_id; @@ -523,70 +507,11 @@ void load_main_list_data(appdata_s *ad) 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 (get_buddy_unknown_status(peer_info->peer_id)) { - main_list_item->buddy_display_name = get_buddy_phone_num_from_id(peer_info->peer_id); - if (main_list_item->buddy_display_name == NULL || (main_list_item->buddy_display_name && strcmp(main_list_item->buddy_display_name, "+") == 0)) { - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } - - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } - - if (!last_name || (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 { - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } - - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } - - if (!last_name || (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) { + if (peer_info->photo_path) main_list_item->profile_pic_path = strdup(peer_info->photo_path); - } else { + 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; @@ -595,15 +520,13 @@ void load_main_list_data(appdata_s *ad) ad->main_list = eina_list_append(ad->main_list, main_list_item); // delete message object - if (msg->message) { + if (msg->message) free(msg->message); - msg->message = NULL; - } + msg->message = NULL; - if (msg->media_id) { + if (msg->media_id) free(msg->media_id); - msg->media_id = NULL; - } + msg->media_id = NULL; free(msg); msg = NULL; @@ -614,12 +537,9 @@ void load_main_list_data(appdata_s *ad) 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); - } + + set_peer_names(peer_info, main_list_item); + 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); @@ -629,34 +549,6 @@ void load_main_list_data(appdata_s *ad) 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } - - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } - - if (!last_name || (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); @@ -678,225 +570,63 @@ void load_main_list_data(appdata_s *ad) } } } -#if 0 -void load_group_chat_data(appdata_s *ad) -{ - if (!ad) { - return; - } - if (ad->group_chat_list) { - for (int i = 0; i < eina_list_count(ad->group_chat_list) ; i++) { - group_chat_with_pic_s* pic_item = eina_list_nth(ad->group_chat_list, i); - tg_chat_info_s* item = pic_item->use_data; - if (item) { - if (item->photo_path) { - free(item->photo_path); - item->photo_path = NULL; - } - if (item->print_title) { - free(item->print_title); - item->print_title = NULL; - } - if (item->title) { - free(item->title); - item->title = NULL; - } - free(item); - } - free(pic_item); - } - eina_list_free(ad->group_chat_list); - } - ad->group_chat_list = NULL; - Eina_List *chat_details = get_group_chat_details(); - - for (int i = 0; i < eina_list_count(chat_details) ; i++) { - Eina_List *ts_msg = eina_list_nth(chat_details, i); - - tg_chat_info_s* chat_info = (tg_chat_info_s*)malloc(sizeof(tg_chat_info_s)); - - - int *temp_chat_id = (int *)eina_list_nth(ts_msg, 0); - if (temp_chat_id) { - chat_info->chat_id = *temp_chat_id; - free(temp_chat_id); - } - - int *temp_flags = (int *)eina_list_nth(ts_msg, 1); - if (temp_flags) { - chat_info->flags = *temp_flags; - free(temp_flags); - } - - char *temp_print_title = (char *)eina_list_nth(ts_msg, 2); - if (temp_print_title) { - chat_info->print_title = strdup(temp_print_title); - free(temp_print_title); - } - - int *temp_struct_ver = (int *)eina_list_nth(ts_msg, 3); - if (temp_struct_ver) { - chat_info->struct_version = *temp_struct_ver; - free(temp_struct_ver); - } - - char *temp_photo_id = (char *)eina_list_nth(ts_msg, 4); - if (temp_photo_id) { - chat_info->photo_id = atoll(temp_photo_id); - free(temp_photo_id); - } - - char *temp_photo_path = (char *)eina_list_nth(ts_msg, 5); - if (temp_photo_path) { - chat_info->photo_path = strdup(temp_photo_path); - free(temp_photo_path); - } - - char *temp_title = (char *)eina_list_nth(ts_msg, 6); - if (temp_title) { - chat_info->title = strdup(temp_title); - free(temp_title); - } - - int *temp_users_num = (int *)eina_list_nth(ts_msg, 7); - if (temp_users_num) { - chat_info->users_num = *temp_users_num; - free(temp_users_num); - } - - int *temp_user_list_size = (int *)eina_list_nth(ts_msg, 8); - if (temp_user_list_size) { - chat_info->user_list_size = *temp_user_list_size; - free(temp_user_list_size); - } - - int *temp_user_list_version = (int *)eina_list_nth(ts_msg, 9); - if (temp_user_list_version) { - chat_info->user_list_version = *temp_user_list_version; - free(temp_user_list_version); - } - - int *temp_inviter_id = (int *)eina_list_nth(ts_msg, 10); - if (temp_inviter_id) { - chat_info->inviter_id = *temp_inviter_id; - free(temp_inviter_id); - } - - char *temp_full_ids = (char *)eina_list_nth(ts_msg, 11); - if (temp_full_ids) { - char* item = strtok(temp_full_ids, ","); - int count = 0; - chat_info->chat_users[count] = atoi(item); - - while (item != NULL) { - count++; - item = strtok(NULL, ","); - if (item != NULL) { - chat_info->chat_users[count] = atoi(item); - } - } - free(temp_full_ids); - } - - int *temp_date = (int *)eina_list_nth(ts_msg, 12); - if (temp_date) { - chat_info->date = *temp_date; - free(temp_date); - } - - int *temp_version = (int *)eina_list_nth(ts_msg, 13); - if (temp_version) { - chat_info->version = *temp_version; - free(temp_version); - } - - int *temp_admin_id = (int *)eina_list_nth(ts_msg, 14); - if (temp_admin_id) { - chat_info->admin_id = *temp_admin_id; - free(temp_admin_id); - } - eina_list_free(ts_msg); - - group_chat_with_pic_s *item = (group_chat_with_pic_s*) malloc(sizeof(group_chat_with_pic_s)); - item->use_data = chat_info; - item->contact_icon = NULL; - ad->group_chat_list = eina_list_append(ad->group_chat_list, item); - } - - eina_list_free(chat_details); -} -#endif void load_unknown_buddy_list_data(appdata_s *ad) { - if (!ad) { + if (!ad) return; - } - user_data_with_pic_s *item = NULL; EINA_LIST_FREE(ad->unknown_buddy_list, item) { - user_data_s* user_data = item->use_data; - if (user_data->print_name) { + if (user_data->print_name) free(user_data->print_name); - user_data->print_name = NULL; - } + user_data->print_name = NULL; - if (user_data->photo_path) { + if (user_data->photo_path) free(user_data->photo_path); - user_data->photo_path = NULL; - } + user_data->photo_path = NULL; - if (user_data->first_name) { + if (user_data->first_name) free(user_data->first_name); - user_data->first_name = NULL; - } + user_data->first_name = NULL; - if (user_data->last_name) { + if (user_data->last_name) free(user_data->last_name); - user_data->last_name = NULL; - } + user_data->last_name = NULL; - if (user_data->phone) { + if (user_data->phone) free(user_data->phone); - user_data->phone = NULL; - } - if (user_data->real_first_name) { + user_data->phone = NULL; + + if (user_data->real_first_name) free(user_data->real_first_name); - user_data->real_first_name = NULL; - } + user_data->real_first_name = NULL; - if (user_data->real_last_name) { + if (user_data->real_last_name) free(user_data->real_last_name); - user_data->real_last_name = NULL; - } + user_data->real_last_name = NULL; - if (user_data->username) { + if (user_data->username) free(user_data->username); - user_data->username = NULL; - } + user_data->username = NULL; + free(user_data); free(item); } ad->unknown_buddy_list = NULL; Eina_List *user_info = get_unknown_buddy_list_info(); - if (!user_info) { //error //show_toast(ad, "User info not loaded"); return; } - int row_count = eina_list_count(user_info); - Eina_List *row_vals = NULL; EINA_LIST_FREE(user_info, row_vals) { - if (!row_vals) - continue; int *temp_user_id = (int *)eina_list_nth(row_vals, 0); if (ad->user_id.id == (*temp_user_id)) { @@ -999,49 +729,40 @@ void load_buddy_list_data(appdata_s *ad) user_data_with_pic_s *item = NULL; EINA_LIST_FREE(ad->buddy_list, item) { - if (!item) - continue; - user_data_s* user_data = item->use_data; - if (user_data->print_name) { + if (user_data->print_name) free(user_data->print_name); user_data->print_name = NULL; - } - if (user_data->photo_path) { + if (user_data->photo_path) free(user_data->photo_path); user_data->photo_path = NULL; - } - if (user_data->first_name) { + if (user_data->first_name) free(user_data->first_name); user_data->first_name = NULL; - } - if (user_data->last_name) { + if (user_data->last_name) free(user_data->last_name); user_data->last_name = NULL; - } - if (user_data->phone) { + if (user_data->phone) free(user_data->phone); user_data->phone = NULL; - } - if (user_data->real_first_name) { + + if (user_data->real_first_name) free(user_data->real_first_name); user_data->real_first_name = NULL; - } - if (user_data->real_last_name) { + if (user_data->real_last_name) free(user_data->real_last_name); user_data->real_last_name = NULL; - } - if (user_data->username) { + if (user_data->username) free(user_data->username); user_data->username = NULL; - } + free(user_data); free(item); } @@ -1055,8 +776,6 @@ void load_buddy_list_data(appdata_s *ad) return; } - int row_count = eina_list_count(user_info); - Eina_List *row_vals = NULL; EINA_LIST_FREE(user_info, row_vals) { if (!row_vals) @@ -1512,6 +1231,12 @@ static int on_message_received_from_buddy(appdata_s *app, bundle *const rec_msg, { int result = SVC_RES_FAIL; + if (!app->peer_in_cahtting_data || !app->peer_in_cahtting_data->use_data) { + LOGE("Wrong status, previous chatting data are freed!!!"); + return result; + } + + char* from_id_str = NULL; result = bundle_get_str(rec_msg, "from_id", &from_id_str); int from_id = atoi(from_id_str); @@ -1544,8 +1269,8 @@ static int on_message_received_from_buddy(appdata_s *app, bundle *const rec_msg, } if (type_of_chat == TGL_PEER_USER) { - if ((app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE || app->current_app_state == TG_SET_USER_INFO_STATE) && app->peer_in_cahtting_data - && app->peer_in_cahtting_data->use_data->peer_id == from_id) { + if ((app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE || app->current_app_state == TG_SET_USER_INFO_STATE) && + app->peer_in_cahtting_data && app->peer_in_cahtting_data->use_data->peer_id == from_id) { if (with_date) { char* date_id_str = NULL; result = bundle_get_str(rec_msg, "date_id", &date_id_str); @@ -1559,8 +1284,8 @@ static int on_message_received_from_buddy(appdata_s *app, bundle *const rec_msg, } } else if (type_of_chat == TGL_PEER_CHAT) { - if ((app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE || app->current_app_state == TG_SET_CHAT_INFO_STATE) && app->peer_in_cahtting_data - && app->peer_in_cahtting_data->use_data->peer_id == to_id) { + if ((app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE || app->current_app_state == TG_SET_CHAT_INFO_STATE) && + app->peer_in_cahtting_data && app->peer_in_cahtting_data->use_data->peer_id == to_id) { char* tablename = get_table_name_from_number(to_id); tg_message_s* msg = get_message_from_message_table(message_id, tablename); if (msg) { @@ -1686,7 +1411,6 @@ static int on_message_received_from_buddy(appdata_s *app, bundle *const rec_msg, org_msg = ""; } elm_object_text_set(sel_item->status_lbl, ""); - int len_org_str = strlen(org_msg); char status_buf[126] = {'\0'}; const char *color; @@ -2678,7 +2402,9 @@ static int _on_service_client_msg_received_cb(void *data, bundle *const rec_msg) result = bundle_get_str(rec_msg, "command", &rec_key_val); - if (strcmp(rec_key_val, "server_not_initialized") == 0 ) { + LOGI("MSG recv = %s", rec_key_val); + + if (strcmp(rec_key_val, "server_not_initialized") == 0) { hide_loading_popup(app); return result; } else if (strcmp(rec_key_val, "server_restart_notification") == 0) { @@ -2724,6 +2450,7 @@ static int _on_service_client_msg_received_cb(void *data, bundle *const rec_msg) app->phone_number = NULL; app->buddy_list = NULL; app->unknown_buddy_list = NULL; + app->known_buddy_list = NULL; app->main_list = NULL; app->peer_list = NULL; app->search_peer_list = NULL; @@ -2932,273 +2659,151 @@ void win_delete_request_cb(void *data, Evas_Object *obj, void *event_info) tg_main_list_item_s* get_latest_item(appdata_s *ad, peer_with_pic_s *item) { tg_main_list_item_s* main_list_item = NULL; - if (item) { - tg_peer_info_s* peer_info = item->use_data; - if (peer_info) { + if (!item) + return NULL; - // get message from message table. + tg_peer_info_s* peer_info = item->use_data; + if (!peer_info) + return NULL; - char* tablename = get_table_name_from_number(peer_info->peer_id); - tg_message_s* msg = get_latest_message_from_message_table(tablename, EINA_FALSE); + // get message from message table. - if (msg) { + char* tablename = get_table_name_from_number(peer_info->peer_id); + tg_message_s* msg = get_latest_message_from_message_table(tablename, EINA_FALSE); - if (msg->service) { - if (msg->message && strlen(msg->message) > 0) { - item->last_message = strdup(msg->message); - } else { - item->last_message = strdup(" "); - } - } else { + if (msg) { - 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"); - } - } + if (msg->service) { + if (msg->message && strlen(msg->message) > 0) { + item->last_message = strdup(msg->message); + } else { + item->last_message = strdup(" "); + } + } else { - } 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(" "); - } + 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"); } - - 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 - char *p_num = get_buddy_phone_num_from_id(peer_info->peer_id); - if (p_num && strlen(p_num) > 0) { - main_list_item->peer_print_name = strdup(p_num); - } else { - main_list_item->peer_print_name = strdup(""); - } + free_media_details(media_msg); + } else { + if (msg->message && strlen(msg->message) > 0) { + item->last_message = strdup(msg->message); } else { - if (peer_info->print_name && strlen(peer_info->print_name) > 0) { - main_list_item->peer_print_name = strdup(peer_info->print_name); - } else { - main_list_item->peer_print_name = strdup(""); - } + item->last_message = strdup("Document"); } - 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); - if (main_list_item->buddy_display_name == NULL || (main_list_item->buddy_display_name && strcmp(main_list_item->buddy_display_name, "+") == 0)) { - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } + } - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } + } 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(" "); + } + } - if (!last_name || (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 { - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } + 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 (!first_name && !last_name && phone_num) { - first_name = phone_num; - } + set_peer_names(peer_info, main_list_item); - if (!first_name) { - first_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 (!last_name || (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; - - // delete message object - if (msg->message) { - free(msg->message); - msg->message = NULL; - } + 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; - if (msg->media_id) { - free(msg->media_id); - msg->media_id = NULL; - } + // delete message object + if (msg->message) { + free(msg->message); + msg->message = NULL; + } - free(msg); - msg = NULL; + if (msg->media_id) { + free(msg->media_id); + msg->media_id = NULL; + } - } else { - item->last_message = strdup(" "); - if (peer_info->peer_type == TGL_PEER_CHAT) { - 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 - char *p_num = get_buddy_phone_num_from_id(peer_info->peer_id); - if (p_num && strlen(p_num) > 0) { - main_list_item->peer_print_name = strdup(p_num); - } else { - main_list_item->peer_print_name = strdup(""); - } - } else { - if (peer_info->print_name && strlen(peer_info->print_name) > 0) { - main_list_item->peer_print_name = strdup(peer_info->print_name); - } else { - main_list_item->peer_print_name = strdup(""); - } - } - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } + free(msg); + msg = NULL; - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } if (!last_name) - if (!first_name) { - first_name = ""; - } - if (!last_name || (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) { - if (peer_info->print_name) { - char *temp_name = replace(peer_info->print_name, '_', " "); - if (temp_name && strlen(temp_name) > 0) { - main_list_item->buddy_display_name = temp_name; - } else { - main_list_item->buddy_display_name = strdup(""); - } - } else { - main_list_item->buddy_display_name = strdup(""); - } - } else { - main_list_item->buddy_display_name = strdup(""); - } + } else { + item->last_message = strdup(" "); + if (peer_info->peer_type == TGL_PEER_CHAT) { + 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->photo_path && strlen(peer_info->photo_path) > 0) { - 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; + set_peer_names(peer_info, main_list_item); - } - } + 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->photo_path && strlen(peer_info->photo_path) > 0) { + 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; - if (tablename) { - free(tablename); - tablename = NULL; - } } } + + if (tablename) { + free(tablename); + tablename = NULL; + } + + return main_list_item; } @@ -3346,12 +2951,9 @@ void app_nf_back_cb(void *data, Evas_Object *obj, void *event_info) 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); - } + + set_peer_names(peer_info, main_list_item); + main_list_item->last_seen_time = msg->date; main_list_item->profile_pic = NULL; main_list_item->last_msg_id = msg->msg_id; @@ -3362,65 +2964,6 @@ void app_nf_back_cb(void *data, Evas_Object *obj, void *event_info) 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); - if (main_list_item->buddy_display_name == NULL || (main_list_item->buddy_display_name && strcmp(main_list_item->buddy_display_name, "+") == 0)) { - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } - - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } - - if (!last_name || (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 { - 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } - - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } - - if (!last_name || (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 { @@ -3453,12 +2996,9 @@ void app_nf_back_cb(void *data, Evas_Object *obj, void *event_info) 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); - } + + set_peer_names(peer_info, main_list_item); + 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); @@ -3468,34 +3008,6 @@ void app_nf_back_cb(void *data, Evas_Object *obj, void *event_info) 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 || (first_name && strstr(first_name, "null") != 0)) { - first_name = NULL; - } - - if (!first_name && !last_name && phone_num) { - first_name = phone_num; - } - - if (!last_name || (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); @@ -3740,13 +3252,13 @@ void launch_tg_server(void *data) int ret = APP_CONTROL_ERROR_NONE; ret = app_control_create(&app_control); - ret_if(APP_CONTROL_ERROR_NONE != ret); + ret_if (APP_CONTROL_ERROR_NONE != ret); ret = app_control_set_app_id(app_control, TELEGRAM_SERVER_APP_NAME); - goto_if(APP_CONTROL_ERROR_NONE != ret, out); + goto_if (APP_CONTROL_ERROR_NONE != ret, out); ret = app_control_send_launch_request(app_control, &on_tg_service_result_cb, ad); - goto_if(APP_CONTROL_ERROR_NONE != ret, out); + goto_if (APP_CONTROL_ERROR_NONE != ret, out); out: app_control_destroy(app_control); @@ -3754,9 +3266,6 @@ out: static void create_base_gui(appdata_s *ad) { - - struct stat st = {0}; - ad->win = elm_win_util_standard_add(PACKAGE, PACKAGE); elm_win_conformant_set(ad->win, EINA_TRUE); elm_win_autodel_set(ad->win, EINA_TRUE); @@ -3898,19 +3407,18 @@ int remove_directory(const char *path) Eina_Bool copy_file_another_dir(const char *source_file, const char *target_file) { - char ch; FILE *source, *target; source = fopen(source_file, "rb+"); - if( source == NULL ) + if (source == NULL) { return EINA_FALSE; } target = fopen(target_file, "wb+"); - if (target == NULL ) + if (target == NULL) { fclose(source); return EINA_FALSE; @@ -4022,7 +3530,7 @@ Eina_Bool dirExists(const char *path) { struct stat info; - if (stat(path, &info ) != 0) + if (stat(path, &info) != 0) return EINA_FALSE; else if (info.st_mode & S_IFDIR) return EINA_TRUE; @@ -4166,6 +3674,7 @@ static bool app_create(void *data) ad->phone_number = NULL; ad->buddy_list = NULL; ad->unknown_buddy_list = NULL; + ad->known_buddy_list = NULL; ad->main_list = NULL; ad->peer_list = NULL; ad->search_peer_list = NULL; @@ -4429,6 +3938,46 @@ void free_app_data(appdata_s *app_data, Eina_Bool destroy_server) } app_data->unknown_buddy_list = NULL; + EINA_LIST_FREE(app_data->known_buddy_list, item) { + user_data_s* user_data = item->use_data; + + if (user_data->print_name) + free(user_data->print_name); + user_data->print_name = NULL; + + if (user_data->photo_path) + free(user_data->photo_path); + user_data->photo_path = NULL; + + if (user_data->first_name) + free(user_data->first_name); + user_data->first_name = NULL; + + if (user_data->last_name) + free(user_data->last_name); + user_data->last_name = NULL; + + if (user_data->phone) + free(user_data->phone); + user_data->phone = NULL; + + if (user_data->real_first_name) + free(user_data->real_first_name); + user_data->real_first_name = NULL; + + if (user_data->real_last_name) + free(user_data->real_last_name); + user_data->real_last_name = NULL; + + if (user_data->username) + free(user_data->username); + user_data->username = NULL; + + free(user_data); + free(item); + } + app_data->known_buddy_list = NULL; + eina_list_free(app_data->loaded_msg_list); app_data->loaded_msg_list = NULL; diff --git a/TelegramTizen/src/tg_db_wrapper.c b/TelegramTizen/src/tg_db_wrapper.c old mode 100644 new mode 100755 index 17214cd..7bd2dae --- a/TelegramTizen/src/tg_db_wrapper.c +++ b/TelegramTizen/src/tg_db_wrapper.c @@ -896,6 +896,13 @@ int get_buddy_delete_status(int buddy_id) return is_unknown; } +Eina_Bool is_telegram_account(int buddy_id) +{ + if(buddy_id == 333000 || buddy_id == 777000) + return EINA_TRUE; + return EINA_FALSE; +} + int get_buddy_unknown_status(int buddy_id) { Eina_List *buddy_details_array = NULL; @@ -1087,7 +1094,7 @@ tg_message_s *get_latest_message_from_message_table(char *table_name, Eina_Bool char where_clause[1024] = { 0, }; char *wh_c = NULL; if (!is_for_date) { - sprintf(where_clause, MESSAGE_INFO_TABLE_SERVICE" != 2 AND "MESSAGE_INFO_TABLE_MARKED_FOR_DELETE" != 1"); + sprintf(where_clause, MESSAGE_INFO_TABLE_SERVICE " != 2 AND " MESSAGE_INFO_TABLE_MARKED_FOR_DELETE " != 1"); wh_c = where_clause; } @@ -1558,7 +1565,7 @@ Eina_List *get_messages_from_message_table_order_by(char *table_name, const char col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER); char where_clause[1024]; - sprintf(where_clause, MESSAGE_INFO_TABLE_MARKED_FOR_DELETE" != 1"); + sprintf(where_clause, MESSAGE_INFO_TABLE_MARKED_FOR_DELETE " != 1"); message_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, order_column, is_asc, where_clause, limit, offset); @@ -2553,8 +2560,9 @@ Eina_List *get_image_details_from_db(long long media_id) Eina_List *get_all_buddy_details(char *start_name) { Eina_List *user_details = NULL; - if (!start_name) { - start_name = g_empty_char; + const char* _name = start_name; + if (!_name) { + _name = g_empty_char; } char *table_name = BUDDY_INFO_TABLE_NAME; @@ -2598,7 +2606,7 @@ Eina_List *get_all_buddy_details(char *start_name) col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER); char where_clause[1024]; - sprintf(where_clause, " ( "USER_INFO_TABLE_IS_UNKNOWN_PEER" = 0 AND "USER_INFO_TABLE_IS_DELETED" = 0 ) AND ("USER_INFO_TABLE_PRINT_NAME" LIKE '%s%s' )", start_name, "%"); + sprintf(where_clause, " ( "USER_INFO_TABLE_LAST_SEEN_TIME " > 0 AND "USER_INFO_TABLE_USER_ID " != 333000 AND "USER_INFO_TABLE_USER_ID " != 777000 AND "USER_INFO_TABLE_IS_UNKNOWN_PEER" = 0 AND "USER_INFO_TABLE_IS_DELETED" = 0 ) AND ("USER_INFO_TABLE_PRINT_NAME" LIKE '%s%s' )", _name, "%"); user_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, USER_INFO_TABLE_FIRST_NAME, EINA_TRUE, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED); @@ -3558,33 +3566,31 @@ void get_buddy_contact_details_from_db(int buddy_id, char **first_name, char **l Eina_List *vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED); file_path = NULL; + eina_list_free(col_names); - if (!vals) { - //("DB error"); - eina_list_free(col_names); + if (!vals) return; - } else { - Eina_List *row_vals = NULL; - int pos = 0; - EINA_LIST_FREE(vals, row_vals) { - if (pos == 0) { - char *temp_fname = (char *)eina_list_nth(row_vals, 0); - *first_name = strdup(temp_fname); - char *temp_lname = (char *)eina_list_nth(row_vals, 1); - *last_name = strdup(temp_lname); - char *temp_pnumber = (char *)eina_list_nth(row_vals, 2); - *phone_number = strdup(temp_pnumber); - } - void *val = NULL; - EINA_LIST_FREE(row_vals, val) { - if (val) - free(val); - } - pos++; + + Eina_List *row_vals = NULL; + int pos = 0; + EINA_LIST_FREE(vals, row_vals) { + if (pos == 0) { + char *temp_fname = (char *)eina_list_nth(row_vals, 0); + *first_name = strdup(temp_fname); + char *temp_lname = (char *)eina_list_nth(row_vals, 1); + *last_name = strdup(temp_lname); + char *temp_pnumber = (char *)eina_list_nth(row_vals, 2); + *phone_number = strdup(temp_pnumber); + } + void *val = NULL; + EINA_LIST_FREE(row_vals, val) { + if (val) + free(val); } - eina_list_free(vals); + pos++; } - eina_list_free(col_names); + eina_list_free(vals); + return; } diff --git a/TelegramTizen/src/tg_messaging_view.c b/TelegramTizen/src/tg_messaging_view.c index c8d472c..4e08a05 100644 --- a/TelegramTizen/src/tg_messaging_view.c +++ b/TelegramTizen/src/tg_messaging_view.c @@ -171,126 +171,93 @@ static void scroller_push_item(Evas_Object *scroller, Evas_Object *item, int pre } /************************ Menu Handler ********************/ - -void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *event_info) +void clear_history_in_gui(appdata_s *ad, tg_peer_info_s *user_data, int peer_type, int peer_id) { - appdata_s *ad = data; - Elm_Object_Item *it = event_info; - elm_genlist_item_selected_set(it, EINA_FALSE); - int id = (int)elm_object_item_data_get(it); - - peer_with_pic_s *sel_item = ad->peer_in_cahtting_data; - tg_peer_info_s *user_data = sel_item->use_data; - - if (!sel_item || !user_data) { - if (ad->msg_popup) { - evas_object_del(ad->msg_popup); - ad->msg_popup = NULL; - } + if(!ad || !user_data) return; - } - if (get_buddy_unknown_status(user_data->peer_id) && user_data->peer_type == TGL_PEER_USER) { - if (id == 0) { - ad->is_loading_from_msg_view = EINA_TRUE; - on_create_new_contact(ad); - } 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); - // 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"); + { + char* tablename = get_table_name_from_number(user_data->peer_id); + mark_all_records_for_deletion(tablename); + delete_date_messages_from_table(tablename); + free(tablename); + } - Evas_Object *box_layout = NULL; - Evas_Object *box = NULL; - Eina_List *list = NULL; + /* what is better?? + * Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list"); + * elm_genlist_clear(genlist); + */ - box_layout = elm_object_content_get(scroller); - if (!box_layout) { - LOGE("Fail to get the box into scroller"); - return; - } + Evas_Object *scroller = evas_object_data_get(ad->nf, "chat_list"); + Evas_Object *box_layout = NULL; + Evas_Object *box = NULL; + Eina_List *list = NULL; - list = elm_box_children_get(box_layout); - if (!list) { - LOGE("Fail to get the list into box"); - return; - } + box_layout = elm_object_content_get(scroller); + if (!box_layout) + return; - box = eina_list_nth(list, 0); - if (!box) { - LOGE("Fail to get the box into box layout"); - return; - } + list = elm_box_children_get(box_layout); + if (!list) + return; - eina_list_free(list); - elm_box_clear(box); - elm_box_recalculate(box); + box = eina_list_nth(list, 0); + if (!box) + return; + eina_list_free(list); + 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(""); - } + 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_get(ad->nf, "chat_list_no_msg_text"); - if (nomsg_layout) { - elm_object_signal_emit(nomsg_layout, "show", "message"); - } + 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 { - 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; - } +/* + * PEER_CHAT + * [1] IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3 + * [2] IDS_TGRAM_OPT_DELETE + * + * PEER_USER + * + * known + * [0] IDS_TGRAM_OPT_VIEW_PROFILE_ABB + * [1] IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3 + * [2] IDS_TGRAM_OPT_DELETE + * + * unknown + * [0] IDS_TGRAM_OPT_ADD_TO_CONTACTS_ABB2 + * [1] IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3 + * [2] IDS_TGRAM_OPT_DELETE + * + * deleted + * [1] IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3 + * [2] IDS_TGRAM_OPT_DELETE + */ - ad->is_last_msg_changed = EINA_FALSE; +void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + appdata_s *ad = data; + Elm_Object_Item *it = event_info; + elm_genlist_item_selected_set(it, EINA_FALSE); + int id = (int)elm_object_item_data_get(it); + peer_with_pic_s *sel_item = ad->peer_in_cahtting_data; + tg_peer_info_s *user_data = sel_item->use_data; - app_nf_back_cb(ad, NULL, NULL); - } + if (!sel_item || !user_data) { if (ad->msg_popup) { evas_object_del(ad->msg_popup); ad->msg_popup = NULL; @@ -298,121 +265,70 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev return; } - 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); - // 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; - } + switch(id) + { + case 0: - eina_list_free(list); - elm_box_clear(box); - elm_box_recalculate(box); + if (user_data->peer_type == TGL_PEER_USER) { + if (get_buddy_delete_status(user_data->peer_id)) { - // send request to server - send_delete_all_messages_request(ad, ad->service_client, user_data->peer_id, user_data->peer_type); + /* do nothing */ + } else if (get_buddy_unknown_status(user_data->peer_id)) { - 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"); + ad->is_loading_from_msg_view = EINA_TRUE; + on_create_new_contact(ad); + }else { + launch_user_info_screen(ad, user_data->peer_id); } - } 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); - - elm_naviframe_item_pop(ad->nf); - load_registered_user_data(ad); - load_buddy_list_data(ad); - load_unknown_buddy_list_data(ad); - load_peer_data(ad); - load_main_list_data(ad); - ecore_timer_add(1, on_load_main_view_requested, ad); } - } 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); - - send_delete_all_messages_request(ad, ad->service_client, user_data->peer_id, user_data->peer_type); + break; + case 1: + clear_history_in_gui(ad, user_data, user_data->peer_type, user_data->peer_id); + break; + case 2: + show_loading_popup(ad); + clear_history_in_gui(ad, user_data, user_data->peer_type, user_data->peer_id); + 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; + } - 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"); - } + if (user_data->peer_type == TGL_PEER_USER) { - } else if (id == 1) { - //send group chat delete request - show_loading_popup(ad); + } else if (user_data->peer_type == TGL_PEER_CHAT) { send_delete_group_chat_request(ad, ad->service_client, user_data->peer_id); } + elm_naviframe_item_pop(ad->nf); + load_registered_user_data(ad); + load_buddy_list_data(ad); + load_unknown_buddy_list_data(ad); + load_peer_data(ad); + load_main_list_data(ad); + ecore_timer_add(1, on_load_main_view_requested, ad); + break; } - if (ad->msg_popup) { evas_object_del(ad->msg_popup); ad->msg_popup = NULL; @@ -424,9 +340,12 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev char* on_messaging_menu_group_text_get_cb(void *data, Evas_Object *obj, const char *part) { int id = (int) data; - if (id == 0) { + switch(id) + { + case 1 : return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3")); - } else { + case 2 : + default : return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); } } @@ -437,22 +356,24 @@ char* on_messaging_menu_text_get_cb(void *data, Evas_Object *obj, const char *pa appdata_s *ad = evas_object_data_get(obj, "app_data"); peer_with_pic_s *sel_item = ad->peer_in_cahtting_data; tg_peer_info_s *user_data = sel_item->use_data; - if ((user_data->peer_type == TGL_PEER_USER) && get_buddy_unknown_status(user_data->peer_id)) { - if (id == 0) { - return strdup(i18n_get_text("IDS_TGRAM_OPT_ADD_TO_CONTACTS_ABB2")); - } else if (id == 1) { - return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3")); - } else { - return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); - } - } else { - if (id == 0) { + + if(user_data->peer_type != TGL_PEER_USER) + return NULL; + + switch(id) + { + case 0 : + if (get_buddy_delete_status(user_data->peer_id)) + return NULL; + else if (get_buddy_unknown_status(user_data->peer_id)) + return strdup(i18n_get_text("IDS_TGRAM_OPT_ADD_TO_CONTACTS_ABB2")); + else return strdup(i18n_get_text("IDS_TGRAM_OPT_VIEW_PROFILE_ABB")); - } else if (id == 1) { - return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3")); - } else { - return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); - } + case 1 : + return strdup(i18n_get_text("IDS_TGRAM_OPT_CLEAR_HISTORY_ABB3")); + case 2 : + default : + return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); } } @@ -504,11 +425,14 @@ void on_messaging_menu_button_clicked(void *data, Evas_Object *obj, void *event_ itc.func.del = NULL; if (sel_item->use_data->peer_type == TGL_PEER_CHAT) { - for (i = 0; i < 2; i++) { + for (i = 1; i < 3; i++) { elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_messaging_menu_option_selected_cb, ad); } } else { - for (i = 0; i < 3; i++) { + int strart_number_of_menus = 0; + if(get_buddy_delete_status(sel_item->use_data->peer_id)) + strart_number_of_menus = 1; + for (i = strart_number_of_menus; i < 3; i++) { elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_messaging_menu_option_selected_cb, ad); } } @@ -1460,10 +1384,8 @@ Evas_Object *on_message_item_content_get_cb(void *data, Evas_Object *obj, const return NULL; } - - if (strcmp(part, "elm.icon.entry")) { + if (strcmp(part, "elm.icon.entry")) return NULL; - } Evas_Object *entry = NULL; Evas_Object *layout = NULL; @@ -1476,9 +1398,8 @@ Evas_Object *on_message_item_content_get_cb(void *data, Evas_Object *obj, const appdata_s* ad = evas_object_data_get(chat_scroller, "app_data"); Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text"); - if (nomsg_layout) { + if (nomsg_layout) elm_object_signal_emit(nomsg_layout, "hide", "message"); - } int user_id = (int)evas_object_data_get(chat_scroller, "user_id"); evas_object_data_set(chat_scroller, "message_id", msg->msg_id); @@ -1760,28 +1681,42 @@ void on_text_message_clicked(void *data, Evas_Object *obj, const char *emission, void on_text_message_received_from_buddy(appdata_s* ad, long long message_id, int type_of_chat) { - if (!ad) { + peer_with_pic_s* pic_peer_item = NULL; + tg_peer_info_s* peer_item = NULL; + char* tablename = NULL; + tg_message_s* msg = NULL; + Evas_Object* chat_scroller = NULL; + Evas_Object *message = NULL; + + if (!ad) return; - } - peer_with_pic_s* pic_peer_item = ad->peer_in_cahtting_data; - tg_peer_info_s* peer_item = pic_peer_item->use_data; - char* tablename = get_table_name_from_number(peer_item->peer_id); - tg_message_s* msg = get_message_from_message_table(message_id, tablename); - Evas_Object* chat_scroller = evas_object_data_get(ad->nf, "chat_list"); - Evas_Object *message = NULL; + pic_peer_item = ad->peer_in_cahtting_data; + if (!pic_peer_item) + return; + + peer_item = pic_peer_item->use_data; + if (!peer_item) + return; + + tablename = get_table_name_from_number(peer_item->peer_id); + if (!tablename) + return; - if (msg == NULL) { - ERR("msg not found"); + msg = get_message_from_message_table(message_id, tablename); + if (!msg) { + LOGE("received msg is not found in DB"); return; } + free(tablename); + + chat_scroller = evas_object_data_get(ad->nf, "chat_list"); + if (!chat_scroller) + return; - // update peer table - if (peer_item) { peer_item->last_msg_id = msg->msg_id; peer_item->last_msg_date = msg->date; insert_or_update_peer_into_database(peer_item); - } Evas_Object *layout = evas_object_data_get(ad->nf, "main_layout"); if (layout) { @@ -1813,7 +1748,6 @@ void on_text_message_received_from_buddy(appdata_s* ad, long long message_id, in } } - free(tablename); message = on_message_item_content_get_cb((void *)msg, chat_scroller, "elm.icon.entry"); elm_object_signal_callback_add(message, "clicked", "item", on_text_message_clicked, (void*)message_id); @@ -3336,9 +3270,9 @@ static void on_media_attach_clicked(void *data, Evas_Object *obj, void *event_in attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_VOICE, NULL); attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_VIDEO, NULL); attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_AUDIO, NULL); - attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_CONTACT, NULL); - attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_MYFILES, NULL); - attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_VIDEO_RECORDER, NULL); + //attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_CONTACT, NULL); + //attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_MYFILES, NULL); + //attach_panel_add_content_category(attach_panel, ATTACH_PANEL_CONTENT_CATEGORY_VIDEO_RECORDER, NULL); attach_panel_set_result_cb(attach_panel, _result_cb, chat_scroller); attach_panel_show(attach_panel); @@ -3834,61 +3768,16 @@ void launch_messaging_view_cb(appdata_s* ad, int user_id) /* Set the name in title area */ - char temp_name[512] = {'\0'}; - - if ((user->peer_type == TGL_PEER_USER) && get_buddy_unknown_status(user->peer_id)) { - //snprintf(temp_name, 512, "%s", get_buddy_phone_num_from_id(sel_item->use_data->peer_id)); + Elm_Object_Item *nf_it = NULL; - char *phone_num = get_buddy_phone_num_from_id(sel_item->use_data->peer_id); + { + char *temp_name = get_peer_name(sel_item->use_data); - if (phone_num == NULL || (phone_num && strcmp(phone_num, "+") == 0)) { -#if 0 - char *user_name = NULL; - char *first_name = NULL; - char *last_name = NULL; - char *phone_num = NULL; - get_buddy_contact_details_from_db(sel_item->use_data->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); - snprintf(temp_name, 512, "%s", user_name); - free(user_name); -#endif - if (sel_item->use_data->print_name) { - snprintf(temp_name, 512, "%s", sel_item->use_data->print_name); - } else { - snprintf(temp_name, 512, "%s", "unknown"); - } - } else { - if (phone_num) { - snprintf(temp_name, 512, "%s", phone_num); - } else { - snprintf(temp_name, 512, "%s", "unknown"); - } - } - free(phone_num); - } else { - char* user_name = replace(sel_item->use_data->print_name, '_', " "); - snprintf(temp_name, 512, "%s", user_name); - free(user_name); + nf_it = elm_naviframe_item_push(ad->nf, temp_name, NULL, NULL, layout, NULL); + evas_object_data_set(ad->nf, "navi_item", nf_it); + free(temp_name); } - Elm_Object_Item *nf_it = elm_naviframe_item_push(ad->nf, temp_name, NULL, NULL, layout, NULL); - evas_object_data_set(ad->nf, "navi_item", nf_it); - on_user_presence_state_changed(ad, sel_item->use_data->peer_id); Evas_Object *back_btn = create_button(ad->nf, "naviframe/back_btn/default", NULL); diff --git a/TelegramTizen/src/tg_settings_view.c b/TelegramTizen/src/tg_settings_view.c index 29c7c2e..457762d 100644 --- a/TelegramTizen/src/tg_settings_view.c +++ b/TelegramTizen/src/tg_settings_view.c @@ -320,7 +320,6 @@ void on_camera_button_clicked(void *data, Evas_Object *obj, void *event_info) static Elm_Genlist_Item_Class itc; Evas_Object *popup; - Evas_Object *box; Evas_Object *genlist; int i; @@ -438,7 +437,7 @@ void on_settings_info_item_clicked(void *data, Evas_Object *obj, void *event_inf Elm_Object_Item *it = event_info; elm_genlist_item_selected_set(it, EINA_FALSE); - Evas_Object* cam_icon = data; + /*Evas_Object* cam_icon = data;*/ appdata_s* ad = evas_object_data_get(obj, "app_data"); static Elm_Genlist_Item_Class itc; Evas_Object *popup; @@ -668,10 +667,8 @@ static void ctxpopup_profile_select_cb(void *data, Evas_Object *obj, void *event _ctxpopup_dismiss_cb(ad, NULL, NULL); on_camera_button_clicked(ad, obj, event_info); - - /* please input here when set profile picture menu is clicked */ } - +/* static void ctxpopup_edit_name_select_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = data; @@ -680,9 +677,8 @@ static void ctxpopup_edit_name_select_cb(void *data, Evas_Object *obj, void *eve _ctxpopup_dismiss_cb(ad, NULL, NULL); launch_editname_screen(ad); - /* please input here when edit name menu is clicked */ } - +*/ static void ctxpopup_logout_select_cb(void *data, Evas_Object *obj, void *event_info) { appdata_s *ad = data; diff --git a/TelegramTizen/src/tg_user_info_view.c b/TelegramTizen/src/tg_user_info_view.c old mode 100644 new mode 100755 index 89a9bbc..ce8fbc9 --- a/TelegramTizen/src/tg_user_info_view.c +++ b/TelegramTizen/src/tg_user_info_view.c @@ -342,21 +342,26 @@ char* on_user_info_menu_text_get_cb(void *data, Evas_Object *obj, const char *pa switch(id) { case 0: - if (get_buddy_delete_status(sel_item->use_data->peer_id) == 1 || get_buddy_unknown_status(sel_item->use_data->peer_id) == 1) { + if (get_buddy_delete_status(sel_item->use_data->peer_id) == 1 || + get_buddy_unknown_status(sel_item->use_data->peer_id) == 1) return strdup(i18n_get_text("IDS_TGRAM_OPT_ADD_TO_TELEGRAM")); - } else { + else return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); - } + case 1: - return strdup(i18n_get_text("IDS_TGRAM_OPT_EDIT")); + if(!is_telegram_account(sel_item->use_data->peer_id)) + return strdup(i18n_get_text("IDS_TGRAM_OPT_EDIT")); + else + return NULL; + case 2: return strdup(i18n_get_text("IDS_TGRAM_OPT_SHARE")); + case 3: - if (get_buddy_block_status(sel_item->use_data->peer_id) == 1) { + if (get_buddy_block_status(sel_item->use_data->peer_id) == 1) return strdup(i18n_get_text("IDS_TGRAM_OPT_UNBLOCK")); - } else { + else return strdup(i18n_get_text("IDS_TGRAM_OPT_BLOCK")); - } } return NULL; } @@ -400,7 +405,17 @@ void on_user_info_menu_button_clicked(void *data, Evas_Object *obj, void *event_ itc.func.state_get = NULL; itc.func.del = NULL; - for (int i = 0; i < 4; i++) { + int number_of_menus = 4; + Eina_Bool is_need_continue = EINA_FALSE; + peer_with_pic_s *sel_item = ad->peer_in_cahtting_data; + if(sel_item && is_telegram_account(sel_item->use_data->peer_id)) { + number_of_menus = 3; + is_need_continue = EINA_TRUE; + } + + for (int i = 0; i < number_of_menus; i++) { + if(is_need_continue && i == 1) + continue; elm_genlist_item_append(genlist, &itc, (void *) i, NULL, ELM_GENLIST_ITEM_NONE, on_user_info_menu_option_selected_cb, ad); } @@ -711,9 +726,6 @@ void launch_user_info_screen(appdata_s* ad, int peer_id) int* temp_last_seen = (int *)eina_list_nth(buddy_details, 13); int last_seen = *temp_last_seen; - char *format = NULL; - Eina_Bool is_today = compare_date_with_current_date(last_seen); - if (is_online > 0) { elm_object_item_part_text_set(navi_item, "subtitle", i18n_get_text("IDS_TGRAM_SBODY_ONLINE")); } else { diff --git a/TelegramTizen/src/tg_user_main_view.c b/TelegramTizen/src/tg_user_main_view.c index 00146ce..6e60d67 100644 --- a/TelegramTizen/src/tg_user_main_view.c +++ b/TelegramTizen/src/tg_user_main_view.c @@ -68,7 +68,7 @@ static Evas_Object* on_menu_item_image_get_cb(void *data, Evas_Object *obj, cons static void launch_contact_picker(appdata_s* ad) { app_control_h app_control; - int ret = app_control_create(&app_control); + /*int ret = app_control_create(&app_control);*/ app_control_set_operation(app_control, APP_CONTROL_OPERATION_COMPOSE); app_control_set_mime(app_control, "text/html"); char *text = "Invite you to telegram! https://telegram.org/dl"; @@ -311,7 +311,7 @@ void on_chat_long_press_option_selected_cb(void *data, Evas_Object *obj, void *e Evas_Object *popup = data; appdata_s *ad = (appdata_s*)evas_object_data_get(popup, "app_data"); tg_main_list_item_s *sel_item = (tg_main_list_item_s*)evas_object_data_get(popup, "selected_chat_item"); - int item_id = (int)evas_object_data_get(popup, "selected_chat_item_index"); + /*int item_id = (int)evas_object_data_get(popup, "selected_chat_item_index");*/ Elm_Object_Item *it = event_info; elm_genlist_item_selected_set(it, EINA_FALSE); @@ -426,7 +426,6 @@ static void on_buddy_list_longpress(void *data, Evas_Object *obj, void *event_in } static Elm_Genlist_Item_Class itc; Evas_Object *popup; - Evas_Object *box; Evas_Object *genlist; int i; Evas_Object *win = ad->win; @@ -848,7 +847,7 @@ void refresh_main_list_view(appdata_s* ad, Eina_Bool is_new_item) elm_object_part_content_set(layout, "main_box", buddy_list); } } - +/* static void on_user_list_search_clicked(void *data, Evas_Object *obj, void *event_info) { appdata_s* ad = data; @@ -865,7 +864,7 @@ static void on_search_icon_unpressed(void *data, Evas_Object *obj, void *event_i { elm_image_file_set(data, ui_utils_get_resource(TG_SEARCH_ICON), NULL); } - +*/ static void _more_popup_rotate(void *data, Evas_Object *obj, void *event_info) { int pos; diff --git a/TelegramTizen/tg_utils/tg_common.c b/TelegramTizen/tg_utils/tg_common.c index 731b00e..40a0eaf 100644 --- a/TelegramTizen/tg_utils/tg_common.c +++ b/TelegramTizen/tg_utils/tg_common.c @@ -14,7 +14,7 @@ You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -*/ + */ #include #include @@ -26,6 +26,20 @@ #include "tg_search_peer_view.h" #include "tg_settings_view.h" #include "tg_add_contact.h" + +uint64_t get_time_stamp_in_macro() +{ + struct timeval tv; + gettimeofday(&tv,NULL); + return tv.tv_sec*(uint64_t)1000000+tv.tv_usec; +} + +void wait_for(unsigned int secs) +{ + int retTime = time(0) + secs; + while (time(0) < retTime); +} + void app_get_resource(const char *edj_file_in, char *edj_path_out, int edj_path_max) { char *res_path = app_get_resource_path(); @@ -390,7 +404,6 @@ void free_user_data(user_data_s *user_data) void tg_notification_create(appdata_s *app_data, char * icon_path, const char *title, char *content, char *sound_path, char *app_id) { - int err = NOTIFICATION_ERROR_NONE; if (app_data && app_data->s_notififcation) { //err = notification_delete(app_data->s_notififcation); notification_delete_all(NOTIFICATION_TYPE_NOTI); @@ -500,10 +513,10 @@ void create_floating_button(appdata_s* ad) if (ad->floating_btn) return; - Evas_Object *icon = elm_image_add(ad->nf); + Evas_Object *icon = elm_image_add(ad->nf); - // elm_image_file_set(icon, ui_utils_get_resource(TG_ICON_FLOATING_PENCIL), NULL); - evas_object_show(icon); + // elm_image_file_set(icon, ui_utils_get_resource(TG_ICON_FLOATING_PENCIL), NULL); + evas_object_show(icon); ad->floating_btn = eext_floatingbutton_add(ad->layout); evas_object_color_set(ad->floating_btn, 255, 255, 255, 255); elm_object_part_content_set(ad->layout, "elm.swallow.floatingbutton", ad->floating_btn); @@ -589,7 +602,7 @@ char *str_replace(char *orig, char *rep, char *with) len_with = strlen(with); ins = orig; - for (count = 0; tmp = strstr(ins, rep); ++count) { + for (count = 0; (tmp = strstr(ins, rep)); ++count) { ins = tmp + len_rep; } @@ -613,3 +626,103 @@ char *str_replace(char *orig, char *rep, char *with) strcpy(tmp, orig); return result; } + + + +char* get_display_name_from_contact(tg_peer_info_s* peer_info) +{ + 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) { + free(first_name); + first_name = NULL; + } + + if (!first_name && !last_name && phone_num) + first_name = phone_num; + + if (last_name && strstr(last_name, "null") != 0) { + free(last_name); + last_name = NULL; + } + + char user_name[128]; + snprintf(user_name, sizeof(user_name), "%s %s", first_name?first_name:"", last_name?last_name:""); + + if (first_name) + free(first_name); + if (last_name) + free(last_name); + if (phone_num) + free(phone_num); + + return strdup(user_name); +} + +char* get_peer_name(tg_peer_info_s* peer_info) +{ + char *tmp_name = NULL; + + switch(peer_info->peer_type) { + case TGL_PEER_USER: + if (get_buddy_delete_status(peer_info->peer_id)) { + + return strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); + } else if (get_buddy_unknown_status(peer_info->peer_id)) { + + char *number = get_buddy_phone_num_from_id(peer_info->peer_id); + return (number && strlen(number)) ? number : strdup(" "); + } else { + tmp_name = get_display_name_from_contact(peer_info); + return tmp_name ? tmp_name : strdup(" "); + } + break; + case TGL_PEER_CHAT: + { + tmp_name = replace(peer_info->print_name, '_', " "); + return tmp_name ? tmp_name : strdup(" "); + } + default: + return strdup(" "); + } +} + +void set_peer_names(tg_peer_info_s* peer_info, + tg_main_list_item_s* main_list_item) +{ + char *tmp_name = NULL; + + switch(peer_info->peer_type) { + case TGL_PEER_USER: + if (get_buddy_delete_status(peer_info->peer_id)) { + main_list_item->buddy_display_name = strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); + main_list_item->peer_print_name = strdup(i18n_get_text("IDS_TGRAM_OPT_DELETE")); + } else if (get_buddy_unknown_status(peer_info->peer_id)) { + + char *number = get_buddy_phone_num_from_id(peer_info->peer_id); + if (number && strlen(number)) + main_list_item->peer_print_name = number; + else + main_list_item->peer_print_name = strdup(" "); + } else { + tmp_name = get_display_name_from_contact(peer_info); + main_list_item->buddy_display_name = tmp_name ? tmp_name : strdup(" "); + main_list_item->peer_print_name = strdup(peer_info->print_name); + } + break; + case TGL_PEER_CHAT: + { + tmp_name = replace(peer_info->print_name, '_', " "); + main_list_item->buddy_display_name = tmp_name ? tmp_name : strdup(" "); + main_list_item->peer_print_name = strdup(peer_info->print_name); + } + break; + default: + main_list_item->buddy_display_name = strdup(" "); + main_list_item->peer_print_name = strdup(peer_info->print_name); + } +} diff --git a/TelegramTizen/tg_utils/tg_common.h b/TelegramTizen/tg_utils/tg_common.h old mode 100644 new mode 100755 index cab9eae..c8ab1d6 --- a/TelegramTizen/tg_utils/tg_common.h +++ b/TelegramTizen/tg_utils/tg_common.h @@ -159,14 +159,6 @@ #define TELEGRAM_DEBUG_LOG(fmt, args...) LOGD(" +++ LOG : "fmt, ##args) -#define retv_if (expr, val) do { \ - if (expr) { \ - TELEGRAM_DEBUG_LOG("(%s) -> %s() return", #expr, __func__); \ - return (val); \ - } \ -} while (0) - -#define _(str) gettext(str) #define SAFE_STRCMP(str1, str2) ((str1 && str2) ? strcmp(str1, str2) : -1) #define SAFE_STRDUP(text) (text == NULL ? NULL : strdup(text)) //what to use for strcpy? #define SAFE_STRLEN(src) \ @@ -546,6 +538,7 @@ typedef struct appdata { char* phone_number; char* sms_code; Eina_List *buddy_list; + Eina_List *known_buddy_list; Eina_List *unknown_buddy_list; //Eina_List *group_chat_list; Eina_List *peer_list; @@ -1064,18 +1057,9 @@ static inline TELEGRAM_APP_FILE_TYPE_E telegram_common_get_file_type(const char return file_type; } -static uint64_t get_time_stamp_in_macro() -{ - struct timeval tv; - gettimeofday(&tv,NULL); - return tv.tv_sec*(uint64_t)1000000+tv.tv_usec; -} +extern uint64_t get_time_stamp_in_macro(); -static void wait_for(unsigned int secs) -{ - int retTime = time(0) + secs; - while (time(0) < retTime); -} +extern void wait_for(unsigned int secs); typedef struct _telegram_Time { @@ -1166,4 +1150,8 @@ extern void launch_tg_server(void *data); extern void recursive_dir_copy(const char *src_dir, const char *tar_dir); +extern char* get_peer_name(tg_peer_info_s* peer_info); + +extern void set_peer_names(tg_peer_info_s* peer_info, tg_main_list_item_s* main_list_item); + #endif /* TG_COMMON_H_ */ diff --git a/tg-engine-service/db_manager/tg_db_manager.c b/tg-engine-service/db_manager/tg_db_manager.c index 3ce17fa..84f2f35 100644 --- a/tg-engine-service/db_manager/tg_db_manager.c +++ b/tg-engine-service/db_manager/tg_db_manager.c @@ -100,44 +100,33 @@ Eina_Bool create_table(const char *table_name, Eina_List *column_names, Eina_Lis char *err_msg = 0; int col_count = eina_list_count(column_names); - int str_len = strlen("CREATE TABLE IF NOT EXISTS ") + strlen(table_name) + strlen("(") + 1; - char *var_query = (char*)malloc(str_len); + Eina_Strbuf *var_query = eina_strbuf_new(); if (!var_query) { close_database(db); return EINA_FALSE; } - strcpy(var_query, "CREATE TABLE IF NOT EXISTS "); - strcat(var_query, table_name); - strcat(var_query, "("); + eina_strbuf_append(var_query, "CREATE TABLE IF NOT EXISTS "); + eina_strbuf_append(var_query, table_name); + eina_strbuf_append(var_query, "("); - for (int col = 0; col < col_count; col++) { - char *col_name = eina_list_nth(column_names, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1); - strcat(var_query, col_name); - var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1); - strcat(var_query, " "); - char *col_type = eina_list_nth(column_types, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_type) + 1); - strcat(var_query, col_type); - if (col < col_count - 1) { - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, ","); - } else { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ");"); - } - } + for(int col = 0; col < col_count ; col++) { + eina_strbuf_append_printf(var_query, "%s %s", eina_list_nth(column_names, col), eina_list_nth(column_types, col)); - ret = sqlite3_exec(db, var_query, NULL, NULL, &err_msg); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, ");"); + } + + ret = sqlite3_exec(db,eina_strbuf_string_get(var_query), NULL, NULL, &err_msg); close_database(db); - free(var_query); - if (ret != SQLITE_OK) { - LOGE("DB Error : %s", err_msg); + eina_strbuf_free(var_query); + if( ret != SQLITE_OK ){ + LOGE("table cretion failed, %s", err_msg); sqlite3_free(err_msg); return EINA_FALSE; } - return EINA_TRUE; } Eina_Bool insert_table(const char *table_name, Eina_List *column_names, Eina_List *column_types, Eina_List *column_values) @@ -153,30 +142,25 @@ Eina_Bool insert_table(const char *table_name, Eina_List *column_names, Eina_Lis char *err_msg = 0; int col_count = eina_list_count(column_names); - int str_len = strlen("INSERT INTO ") + strlen(table_name) + strlen("(") + 1; - char *var_query = (char*)malloc(str_len); + Eina_Strbuf *var_query = eina_strbuf_new(); if (!var_query) { close_database(db); return EINA_FALSE; } - strcpy(var_query, "INSERT INTO "); - strcat(var_query, table_name); - strcat(var_query, "("); + eina_strbuf_append(var_query, "INSERT INTO "); + eina_strbuf_append(var_query, table_name); + eina_strbuf_append(var_query, "("); for (int col = 0; col < col_count; col++) { char *col_name = eina_list_nth(column_names, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1); - strcat(var_query, col_name); + eina_strbuf_append(var_query, col_name); - if (col < col_count - 1) { - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, ","); - } else { - var_query = realloc(var_query, strlen(var_query) + strlen(") VALUES (") + 1); - strcat(var_query, ") VALUES ("); - } + if (col < col_count - 1) + eina_strbuf_append(var_query, ","); + else + eina_strbuf_append(var_query, ") VALUES ("); } int col_val_count = eina_list_count(column_names); @@ -184,45 +168,27 @@ Eina_Bool insert_table(const char *table_name, Eina_List *column_names, Eina_Lis for (int col = 0; col < col_val_count; col++) { char *col_type = eina_list_nth(column_types, col); - char *col_value = NULL; if (!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) { - int *tmp_value = eina_list_nth(column_values, col); - - int act_val = (*tmp_value); - col_value = (char*)malloc(50); - snprintf(col_value, 50, "%d", act_val); - - var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1); - strcat(var_query, col_value); + eina_strbuf_append_printf(var_query, "%d", *((int*)eina_list_nth(column_values, col))); } else if (!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) { - char *tmp_value = eina_list_nth(column_values, col); - col_value = (char*)malloc(strlen(tmp_value) + 1); - strcpy(col_value, tmp_value); - - var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1); - strcat(var_query, "'"); - var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1); - strcat(var_query, col_value); - - var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1); - strcat(var_query, "'"); + char* escaped_text = replace(eina_list_nth(column_values, col), '\'', "''"); + if (escaped_text) { + eina_strbuf_append_printf(var_query, "'%s'", escaped_text); + free(escaped_text); + } } - if (col < col_count - 1) { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ", "); - } else { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ");"); - } - free(col_value); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, ");"); } - ret = sqlite3_exec(db, var_query, NULL, NULL, &err_msg); + ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), NULL, NULL, &err_msg); close_database(db); - free(var_query); + eina_strbuf_free(var_query); if (ret != SQLITE_OK) { sqlite3_free(err_msg); return EINA_FALSE; @@ -245,79 +211,54 @@ Eina_Bool update_table(const char *table_name, Eina_List *column_names, Eina_Lis char *err_msg = 0; int col_count = eina_list_count(column_names); - int str_len = strlen("UPDATE ") + strlen(table_name) + strlen(" SET ") + 1; - char *var_query = (char*)malloc(str_len); + Eina_Strbuf *var_query = eina_strbuf_new(); if (!var_query) { close_database(db); return EINA_FALSE; } - strcpy(var_query, "UPDATE "); - strcat(var_query, table_name); - strcat(var_query, " SET "); + eina_strbuf_append(var_query, "UPDATE "); + eina_strbuf_append(var_query, table_name); + eina_strbuf_append(var_query, " SET "); + int col_val_count = eina_list_count(column_values); - int col_val_count = eina_list_count(column_names); + for(int col = 0; col < col_val_count ; col++) { + char* col_name = eina_list_nth(column_names, col); + char* col_type = eina_list_nth(column_types, col); - for (int col = 0; col < col_val_count; col++) { - char *col_name = eina_list_nth(column_names, col); - char *col_type = eina_list_nth(column_types, col); + if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) { - char *col_value = NULL; - if (!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) { - int *tmp_value = eina_list_nth(column_values, col); + eina_strbuf_append_printf(var_query, "%s = %d", col_name, *((int*)eina_list_nth(column_values, col))); - int act_val = (*tmp_value); - col_value = (char*)malloc(50); - sprintf(col_value, "%d", act_val); + } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) { - var_query = realloc(var_query, strlen(var_query) + strlen(col_name) + strlen(" = ") + strlen(col_value) + 1); - strcat(var_query, col_name); - strcat(var_query, " = "); - strcat(var_query, col_value); - - } else if (!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) { - - char *tmp_value = eina_list_nth(column_values, col); - col_value = (char*)malloc(strlen(tmp_value) + 1); - strcpy(col_value, tmp_value); - - var_query = realloc(var_query, strlen(var_query) + strlen(col_name) + strlen(" = ")+strlen("'") + 1); - strcat(var_query, col_name); - strcat(var_query, " = "); - strcat(var_query, "'"); - - var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1); - strcat(var_query, col_value); - - var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1); - strcat(var_query, "'"); + char* escaped_text = replace(eina_list_nth(column_values, col), '\'', "''"); + if (escaped_text) { + eina_strbuf_append_printf(var_query, "%s = '%s'", col_name, escaped_text); + free(escaped_text); + } } - if (col < col_count - 1) { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ", "); - } else { - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, " "); - } - free(col_value); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, " "); } - var_query = realloc(var_query, strlen(var_query) + strlen(" WHERE ") + strlen(where_clause) + 2); - strcat(var_query, " WHERE "); - strcat(var_query, where_clause); - strcat(var_query, ";"); + eina_strbuf_append(var_query, " WHERE "); + eina_strbuf_append(var_query, where_clause); + eina_strbuf_append(var_query, "; "); + + ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), NULL, NULL, &err_msg); - ret = sqlite3_exec(db, var_query, NULL, NULL, &err_msg); close_database(db); - free(var_query); - if (ret != SQLITE_OK) { + eina_strbuf_free(var_query); + if( ret != SQLITE_OK ){ sqlite3_free(err_msg); return EINA_FALSE; } return EINA_TRUE; - } Eina_Bool get_values_from_table(const char *table_name, Eina_List *column_names, int (*callback)(void*, int, char**, char**), const char *where_clause, void *data_to_callback) @@ -325,107 +266,56 @@ Eina_Bool get_values_from_table(const char *table_name, Eina_List *column_names, if (!table_name) return EINA_FALSE; - sqlite3 *db = create_database(); - if (!db) - return EINA_FALSE; - - /*****No rows identification*****/ - - char *row_cnt_qry = (char*)malloc(strlen("SELECT COUNT(*) FROM ") + strlen(table_name) + strlen(";") +1); - if (!row_cnt_qry) { - close_database(db); - return EINA_FALSE; - } - - strcpy(row_cnt_qry, "SELECT COUNT(*) FROM "); - strcat(row_cnt_qry, table_name); - strcat(row_cnt_qry, ";"); - - int no_of_rows = 0; - sqlite3_stmt *stmt; - if (sqlite3_prepare_v2(db, row_cnt_qry, -1, &stmt, NULL) == SQLITE_OK) { - if (sqlite3_step(stmt) == SQLITE_ERROR) - no_of_rows = 0; - else - no_of_rows = sqlite3_column_int(stmt, 0); - - sqlite3_finalize(stmt); - } - - free(row_cnt_qry); - if (no_of_rows <= 0) { - close_database(db); - return EINA_FALSE; - } - close_database(db); - /********************************/ - - int ret = 0 ; - char *err_msg = 0; + if (get_number_of_rows(table_name, NULL) == 0) { + DBG("There are no rows on [%s]", table_name); + return EINA_FALSE; + } - db = create_database(); - if (!db) - return EINA_FALSE; + sqlite3* db = create_database(); + int ret = 0 ; + char* err_msg = 0; - int str_len = strlen("SELECT ") + 1; - char *var_query = (char*)malloc(str_len); - if (!var_query) { - close_database(db); - return EINA_FALSE; - } + Eina_Strbuf *var_query = eina_strbuf_new(); + if (!var_query) { + close_database(db); + return EINA_FALSE; + } - strcpy(var_query, "SELECT "); - if (!column_names) { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, " *"); - } else { + eina_strbuf_append(var_query, "SELECT "); - int col_count = eina_list_count(column_names); - char *col_name = NULL; - for (int col = 0; col < col_count; col++) { - col_name = eina_list_nth(column_names, col); - var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1); - strcat(var_query, col_name); - col_name = NULL; - var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1); + if(!column_names) { + var_query = realloc(var_query, strlen(var_query) + 3); + eina_strbuf_append(var_query, "* "); + } else { - if (col < col_count - 1) { - var_query = realloc(var_query, strlen(var_query) + 3); - strcat(var_query, ", "); - } else { - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, " "); + int col_count = eina_list_count(column_names); + char* col_name = NULL; + for(int col = 0; col < col_count ; col++) { + eina_strbuf_append(var_query, eina_list_nth(column_names, col)); + if (col < col_count - 1) + eina_strbuf_append(var_query, ", "); + else + eina_strbuf_append(var_query, " "); } } - } - - var_query = realloc(var_query, strlen(var_query) + strlen("FROM ") + 2); - strcat(var_query, "FROM "); - var_query = realloc(var_query, strlen(var_query) + strlen(table_name) + 1); - strcat(var_query, table_name); - - if (where_clause) { - var_query = realloc(var_query, strlen(var_query)+strlen(" WHERE ") + 1); - strcat(var_query, " WHERE "); - var_query = realloc(var_query, strlen(var_query)+strlen(where_clause) + 1); - strcat(var_query, where_clause); - } - - var_query = realloc(var_query, strlen(var_query) + 2); - strcat(var_query, ";"); - - - ret = sqlite3_exec(db, var_query, callback, (void*)data_to_callback, &err_msg); - close_database(db); - free(var_query); + eina_strbuf_append(var_query, "FROM "); + eina_strbuf_append(var_query, table_name); - if (ret != SQLITE_OK) { - sqlite3_free(err_msg); - return EINA_FALSE; - } - - return EINA_TRUE; + if (where_clause) { + eina_strbuf_append(var_query, " WHERE "); + eina_strbuf_append(var_query, where_clause); + } + eina_strbuf_append(var_query, ";"); + + ret = sqlite3_exec(db, eina_strbuf_string_get(var_query), callback,(void*)data_to_callback, &err_msg); + close_database(db); + eina_strbuf_free(var_query); + if( ret != SQLITE_OK ){ + sqlite3_free(err_msg); + return EINA_FALSE; + } + return EINA_TRUE; } Eina_List *get_values_from_table_sync(const char *table_name, Eina_List *column_names, Eina_List *column_types, const char *where_clause) diff --git a/tg-engine-service/inc/assert.h b/tg-engine-service/inc/assert.h index 6afc508..fe5ff6f 100644 --- a/tg-engine-service/inc/assert.h +++ b/tg-engine-service/inc/assert.h @@ -6,10 +6,8 @@ #undef assert #endif #define assert(a) do { \ - int ret; \ - ret = (a); \ - if (!ret) { \ - dlog_print(DLOG_DEBUG, LOG_TAG, "[%s:%d] assert(%s)", __FILE__, __LINE__, #a); \ + if (!(a)) { \ + dlog_print(DLOG_VERBOSE, LOG_TAG, "[%s:%d] assert(%s)", __FILE__, __LINE__, #a); \ } \ } while (0) diff --git a/tg-engine-service/mtprotocol/queries.c b/tg-engine-service/mtprotocol/queries.c index c07aba8..efa6ec3 100644 --- a/tg-engine-service/mtprotocol/queries.c +++ b/tg-engine-service/mtprotocol/queries.c @@ -2147,7 +2147,7 @@ static struct query_methods set_profile_name_methods = { .type = TYPE_TO_PARAM(user) }; -void tgl_do_set_profile_name(struct tgl_state *TLS, char *first_name, char *last_name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_user *U), void *callback_extra) +void tgl_do_set_profile_name(struct tgl_state *TLS, const char *first_name, const char *last_name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_user *U), void *callback_extra) { clear_packet(); out_int(CODE_account_update_profile); @@ -2743,7 +2743,7 @@ void tgl_do_load_photo_size(struct tgl_state *TLS, struct tgl_photo_size *P, voi void tgl_do_load_photo(struct tgl_state *TLS, struct tgl_photo *photo, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, char *filename), void *callback_extra) { if (!photo->sizes_num) { - vlogprintf(E_WARNING, "No sizes\n"); + //vlogprintf(E_WARNING, "No sizes\n"); if (callback) { callback(TLS, callback_extra, 0, 0); } diff --git a/tg-engine-service/mtprotocol/tgl-inner.h b/tg-engine-service/mtprotocol/tgl-inner.h index c98f09a..19df19e 100644 --- a/tg-engine-service/mtprotocol/tgl-inner.h +++ b/tg-engine-service/mtprotocol/tgl-inner.h @@ -24,7 +24,7 @@ #define vlogprintf(verbosity_level,...) \ do { \ if (TLS->verbosity >= verbosity_level) { \ - TLS->callback.logprintf (__VA_ARGS__); \ + logprintf_x(verbosity_level, __VA_ARGS__); \ } \ } while (0) diff --git a/tg-engine-service/mtprotocol/tgl.h b/tg-engine-service/mtprotocol/tgl.h index 01bd99d..4160985 100644 --- a/tg-engine-service/mtprotocol/tgl.h +++ b/tg-engine-service/mtprotocol/tgl.h @@ -332,7 +332,7 @@ extern void tgl_do_send_audio(struct tgl_state *TLS, tgl_peer_id_t to_id, char * extern void tgl_do_send_video(struct tgl_state *TLS, int flags, tgl_peer_id_t to_id, char *video_name, char *thumb_file, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M), void *callback_extra); extern void tgl_do_set_chat_photo(struct tgl_state *TLS, tgl_peer_id_t chat_id, char *file_name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M), void *callback_extra); extern void tgl_do_set_profile_photo(struct tgl_state *TLS, char *file_name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success), void *callback_extra); -extern void tgl_do_set_profile_name(struct tgl_state *TLS, char *first_name, char *last_name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_user *U), void *callback_extra); +extern void tgl_do_set_profile_name(struct tgl_state *TLS, const char *first_name, const char *last_name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_user *U), void *callback_extra); extern void tgl_do_set_username(struct tgl_state *TLS, char *name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_user *U), void *callback_extra); extern void tgl_do_forward_message(struct tgl_state *TLS, tgl_peer_id_t id, int n, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M), void *callback_extra); extern void tgl_do_rename_chat(struct tgl_state *TLS, tgl_peer_id_t id, char *name, void(*callback)(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M), void *callback_extra); diff --git a/tg-engine-service/mtprotocol/tools.c b/tg-engine-service/mtprotocol/tools.c index 59f855c..6bd5823 100644 --- a/tg-engine-service/mtprotocol/tools.c +++ b/tg-engine-service/mtprotocol/tools.c @@ -59,24 +59,52 @@ static long long total_allocated_bytes; void logprintf(const char *format, ...) __attribute__((format(printf, 1, 2), weak)); -void logprintf(const char *format, ...) +void _printf(int level, char* buffer) +{ + switch(level) + { + case E_ERROR : + dlog_print(DLOG_ERROR, LOG_TAG, "%s", buffer); + return; + case E_WARNING : + dlog_print(DLOG_WARN, LOG_TAG, "%s", buffer); + return; + case E_NOTICE : + dlog_print(DLOG_INFO, LOG_TAG, "%s", buffer); + return; + case E_DEBUG : + dlog_print(DLOG_DEBUG, LOG_TAG, "%s", buffer); + return; + case E_SOCKET : + dlog_print(DLOG_VERBOSE, LOG_TAG, "%s", buffer); + return; + default: + dlog_print(DLOG_DEBUG, LOG_TAG, "%s", buffer); + } +} + +void logprintf_x(int level, const char *format, ...) { - /* + char buffer[2048]; va_list ap; + va_start(ap, format); - vfprintf(stdout, format, ap); + vsnprintf(buffer, sizeof(buffer), format, ap); va_end(ap); - */ - char buffer[1024]; + _printf(level, buffer); +} + +void logprintf(const char *format, ...) +{ + char buffer[2048]; va_list ap; va_start(ap, format); vsnprintf(buffer, sizeof(buffer), format, ap); va_end(ap); - dlog_print(DLOG_DEBUG, LOG_TAG, "%s", buffer); - + _printf(E_DEBUG, buffer); } int tgl_snprintf(char *buf, int len, const char *format, ...) diff --git a/tg-engine-service/mtprotocol/tools.h b/tg-engine-service/mtprotocol/tools.h index f3c3feb..ae8ba88 100644 --- a/tg-engine-service/mtprotocol/tools.h +++ b/tg-engine-service/mtprotocol/tools.h @@ -42,6 +42,8 @@ struct tgl_allocator *tgl_allocator; double tglt_get_double_time(void); +void logprintf_x(int level, const char *format, ...); + int tgl_inflate(void *input, int ilen, void *output, int olen); //void ensure(int r); //void ensure_ptr(void *p); diff --git a/tg-engine-service/src/tg-engine-service.c b/tg-engine-service/src/tg-engine-service.c index 6c39e66..7ad24f7 100644 --- a/tg-engine-service/src/tg-engine-service.c +++ b/tg-engine-service/src/tg-engine-service.c @@ -263,6 +263,7 @@ static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg) res = bundle_get_str(rec_msg, "list_size", &count_str); int size = atoi(count_str); Eina_List* chat_id_list = NULL; + int chat_id = 0; for (int count = 0 ; count < size ; count++) { char chat_id_key[20]; @@ -271,8 +272,8 @@ static int _on_tg_server_msg_received_cb(void *data, bundle *const rec_msg) char* chat_id_str = NULL; res = bundle_get_str(rec_msg, chat_id_key, &chat_id_str); - int chat_id = atoi(chat_id_str); - chat_id_list = eina_list_append(chat_id_list, chat_id); + chat_id = atoi(chat_id_str); + chat_id_list = eina_list_append(chat_id_list, &chat_id); } if (chat_id_list && eina_list_count(chat_id_list) > 0) diff --git a/tg-engine-service/src/tg_db_wrapper.c b/tg-engine-service/src/tg_db_wrapper.c index 1ff032e..453c813 100644 --- a/tg-engine-service/src/tg_db_wrapper.c +++ b/tg-engine-service/src/tg_db_wrapper.c @@ -1946,6 +1946,7 @@ void init_insert_buddy_into_db(char* table_name, struct tgl_user* U) col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS); col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_SEEN_TIME); col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_BLOCKED); + col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_DELETED); col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER); Eina_List* col_types = NULL; @@ -1964,6 +1965,7 @@ void init_insert_buddy_into_db(char* table_name, struct tgl_user* U) col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER); col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER); col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER); + col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER); Eina_List* col_values = NULL; col_values = eina_list_append(col_values, &(U->id.id)); @@ -1994,6 +1996,8 @@ void init_insert_buddy_into_db(char* table_name, struct tgl_user* U) col_values = eina_list_append(col_values, &(U->status.online)); col_values = eina_list_append(col_values, &(U->status.when)); col_values = eina_list_append(col_values, &(U->blocked)); + int is_deleted = U->flags & FLAG_DELETED; + col_values = eina_list_append(col_values, &is_deleted); col_values = eina_list_append(col_values, &(U->is_unknown)); Eina_Bool ret = insert_table(table_name, col_names, col_types, col_values); diff --git a/tg-engine-service/tg_engine/tg_engine.c b/tg-engine-service/tg_engine/tg_engine.c index 4b43555..4ca1fb3 100644 --- a/tg-engine-service/tg_engine/tg_engine.c +++ b/tg-engine-service/tg_engine/tg_engine.c @@ -466,9 +466,8 @@ void read_auth_file(void) void tg_new_msg(struct tgl_state *TLS, struct tgl_message *M) { struct tgl_message *temp_msg = tgl_message_get(TLS, M->id); - if (temp_msg) { - - } + if (!temp_msg) + LOGE("memory allocation failed!!! for tgl_message_get"); } void tg_marked_read(struct tgl_state *TLS, int num, struct tgl_message *list[]) @@ -1367,7 +1366,6 @@ void tg_msg_receive(struct tgl_state *TLS, struct tgl_message *M) char* msg_table = get_table_name_from_number(M->to_id.id); create_buddy_msg_table(msg_table); - int msg_id = insert_current_date_to_table(msg_table); free(msg_table); tgl_do_get_chat_info(TLS, M->to_id, 0, &on_new_chat_info_received, M); @@ -1488,25 +1486,17 @@ void tg_msg_receive(struct tgl_state *TLS, struct tgl_message *M) M->message_len = 0; } - int user_id = M->from_id.id; -#if 0 - Eina_Bool is_present_in_db = is_user_present_peer_table(user_id); - char* tb_name = get_table_name_from_number(user_id); - create_buddy_msg_table(tb_name); - if (!is_present_in_db) { - // add to buddy table - tgl_do_get_user_info(TLS, M->from_id, 0, on_new_buddy_info_loaded, NULL); - } -#else - char* tb_name = get_table_name_from_number(user_id); - Eina_Bool is_present_in_db = is_user_present_buddy_table(user_id); + if (M->from_id.id == 333000 || M->from_id.id == 777000) + M->service = 0; + + char* tb_name = get_table_name_from_number(M->from_id.id); + Eina_Bool is_present_in_db = is_user_present_buddy_table(M->from_id.id); create_buddy_msg_table(tb_name); if (!is_present_in_db) { tgl_do_get_user_info(TLS, M->from_id, 0, on_new_buddy_info_loaded, M); free(tb_name); return; } -#endif int msg_id = update_current_date_to_table(tb_name, M->date); free(tb_name); @@ -1534,16 +1524,14 @@ void tg_msg_receive(struct tgl_state *TLS, struct tgl_message *M) } // inform to application - if (msg_id > 0) { + if (msg_id > 0) send_message_with_date_received_response(TLS->callback_data, M->from_id.id, M->to_id.id, M->id, msg_id, tgl_get_peer_type(M->to_id)); - } else { + else send_message_received_response(TLS->callback_data, M->from_id.id, M->to_id.id, M->id, tgl_get_peer_type(M->to_id)); - } - } } else if (tgl_get_peer_type(M->to_id) == TGL_PEER_ENCR_CHAT) { - + /* TODO */ } else { if ((tgl_get_peer_type(M->from_id) == TGL_PEER_USER) && (tgl_get_peer_id(M->from_id) == TLS->our_id)) { @@ -1912,10 +1900,6 @@ void on_offline_chat_received(struct tgl_state *TLS, void *callback_extra, int s 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 @@ -1941,55 +1925,6 @@ void on_offline_chat_received(struct tgl_state *TLS, void *callback_extra, int s } } -#if 0 - -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->is_first_time_registration) { - 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); - - 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); - } else { - if (org_last_msg->message) { - free(org_last_msg->message); - } - free(org_last_msg); - } - free(msg_table); - } - } - } - } - 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); - } - } - } - return ECORE_CALLBACK_CANCEL; -} - -#else - static Eina_Bool on_load_offline_messages(void *data) { struct tgl_state *TLS = data; @@ -2020,10 +1955,6 @@ static Eina_Bool on_load_offline_messages(void *data) 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 @@ -2052,7 +1983,6 @@ static Eina_Bool on_load_offline_messages(void *data) 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); @@ -2193,7 +2123,11 @@ void on_contacts_and_chats_loaded(struct tgl_state *TLS, void *callback_extra, i create_buddy_msg_table(msg_table); free(msg_table); - buddy->is_unknown = 1; + if (buddy->id.id == 333000 || buddy->id.id == 777000) + buddy->is_unknown = 0; + else + buddy->is_unknown = 1; + init_insert_buddy_into_db(BUDDY_INFO_TABLE_NAME, buddy); insert_peer_into_database(UC, last_msg_id[i], unread_count[i], 1); tgl_do_get_user_info(TLS, buddy->id, 0, on_buddy_info_loaded, NULL); @@ -2235,16 +2169,11 @@ void on_contacts_received(struct tgl_state *TLS, void *callback_extra, int succe 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; - } + 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) { + if (UC) insert_peer_into_database(UC, 0, 0, 0); - } } // inform client that contact loading is done. @@ -2415,29 +2344,25 @@ void on_document_download_completed(struct tgl_state *TLS, void *callback_extra, void free_contact_data(Eina_List *contact_data) { - if (contact_data) { - contact_data_s* contact = NULL; - EINA_LIST_FREE(contact_data, contact) { - if (!contact) - continue; - if (contact->display_name) { - free(contact->display_name); - contact->display_name = NULL; - } - if (contact->first_name) { - free(contact->first_name); - contact->first_name = NULL; - } - if (contact->last_name) { - free(contact->last_name); - contact->last_name = NULL; - } - if (contact->phone_number) { - free(contact->phone_number); - contact->phone_number = NULL; - } - free(contact); + contact_data_s* contact = NULL; + EINA_LIST_FREE(contact_data, contact) { + if (contact->display_name) { + free(contact->display_name); + contact->display_name = NULL; + } + if (contact->first_name) { + free(contact->first_name); + contact->first_name = NULL; } + if (contact->last_name) { + free(contact->last_name); + contact->last_name = NULL; + } + if (contact->phone_number) { + free(contact->phone_number); + contact->phone_number = NULL; + } + free(contact); } } @@ -2450,31 +2375,29 @@ void on_contact_added(struct tgl_state *TLS, void *callback_extra, int success, if (data->current_index < eina_list_count(data->contact_list_to_add)) { contact_data_s* contact = eina_list_nth(data->contact_list_to_add, data->current_index); - if (contact) { - char *first_name = contact->first_name; - char *last_name = contact->last_name; - char *phone_number = contact->phone_number; + if (!contact) + return; + + char *first_name = contact->first_name; + char *last_name = contact->last_name; + char *phone_number = contact->phone_number; + if (!first_name) { + first_name = contact->display_name; if (!first_name) { - first_name = contact->display_name; - if (!first_name) { - first_name = ""; - } + first_name = ""; } + } - if (!last_name) { - last_name = ""; - } + if (!last_name) + last_name = ""; - if (first_name && last_name && phone_number) { - tgl_do_add_contact(tgl_engine_get_TLS(), phone_number, first_name, last_name, 0, on_contact_added, data); - } else { - on_contact_added(tgl_engine_get_TLS(), data, 0, 0, NULL); - } - } + if (first_name && last_name && phone_number) + tgl_do_add_contact(tgl_engine_get_TLS(), phone_number, first_name, last_name, 0, on_contact_added, data); + else + on_contact_added(tgl_engine_get_TLS(), data, 0, 0, NULL); } else { - //tgl_do_get_dialog_list(TLS, on_contacts_and_chats_loaded, NULL); tgl_do_update_contact_list(TLS, on_contacts_received, NULL); free_contact_data(data->contact_list_to_add); data->contact_list_to_add = NULL; @@ -2483,60 +2406,57 @@ void on_contact_added(struct tgl_state *TLS, void *callback_extra, int success, void on_new_group_icon_loaded(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M) { - tg_engine_data_s *tg_data = TLS->callback_data; if (!success) { - // send fail notification - } else { - // send success notofication - if (M) { - if (M->action.type == tgl_message_action_chat_create) { - - } else if (M->action.type == tgl_message_action_chat_edit_title) { + /* TODO send fail notification */ + return; + } - } else if (M->action.type == tgl_message_action_chat_edit_photo) { + // send success notofication + if (M) { + if (M->action.type == tgl_message_action_chat_create) { - char* msg_table = get_table_name_from_number(M->to_id.id); - create_buddy_msg_table(msg_table); - int msg_id = insert_current_date_to_table(msg_table); + } else if (M->action.type == tgl_message_action_chat_edit_title) { - tgl_peer_t* UC = tgl_peer_get(TLS, M->from_id); - int msg_len = strlen(UC->user.first_name) + strlen(" changed profile photo") + 1; - char* creator_name = (char*)malloc(msg_len); - strcpy(creator_name, UC->user.first_name); - strcat(creator_name, " changed profile photo"); + } else if (M->action.type == tgl_message_action_chat_edit_photo) { + char* msg_table = get_table_name_from_number(M->to_id.id); + create_buddy_msg_table(msg_table); + int msg_id = insert_current_date_to_table(msg_table); - //send_message_received_response(TLS->callback_data, M->from_id.id, M->to_id.id,msg_id, tgl_get_peer_type(M->to_id)); - int cur_time = time(NULL); - M->id = cur_time; - M->message = creator_name; - M->message_len = msg_len; - M->unread = 1; - M->date = cur_time; - insert_buddy_msg_to_db(M); - free(creator_name); - free(msg_table); - struct tgl_photo *pic = &(M->action.photo); - if (pic) { - tgl_peer_t* UC = tgl_peer_get(TLS, M->to_id); - struct tgl_chat *chat_info = &(UC->chat); - tgl_do_load_photo(TLS, pic, &on_chat_pic_loaded, chat_info); - } + tgl_peer_t* UC = tgl_peer_get(TLS, M->from_id); + int msg_len = strlen(UC->user.first_name) + strlen(" changed profile photo") + 1; + char* creator_name = (char*)malloc(msg_len); + strcpy(creator_name, UC->user.first_name); + strcat(creator_name, " changed profile photo"); - } else if (M->action.type == tgl_message_action_chat_delete_photo) { + //send_message_received_response(TLS->callback_data, M->from_id.id, M->to_id.id,msg_id, tgl_get_peer_type(M->to_id)); + int cur_time = time(NULL); + M->id = cur_time; + M->message = creator_name; + M->message_len = msg_len; + M->unread = 1; + M->date = cur_time; + insert_buddy_msg_to_db(M); + free(creator_name); + free(msg_table); + struct tgl_photo *pic = &(M->action.photo); + if (pic) { + tgl_peer_t* UC = tgl_peer_get(TLS, M->to_id); + struct tgl_chat *chat_info = &(UC->chat); + tgl_do_load_photo(TLS, pic, &on_chat_pic_loaded, chat_info); + } - } else if (M->action.type == tgl_message_action_chat_add_user) { - } else if (M->action.type == tgl_message_action_chat_delete_user) { + } else if (M->action.type == tgl_message_action_chat_delete_photo) { - } - send_message_received_response(TLS->callback_data, M->from_id.id, M->to_id.id, M->id, tgl_get_peer_type(M->to_id)); + } else if (M->action.type == tgl_message_action_chat_add_user) { + } else if (M->action.type == tgl_message_action_chat_delete_user) { } + send_message_received_response(TLS->callback_data, M->from_id.id, M->to_id.id, M->id, tgl_get_peer_type(M->to_id)); } - } void on_new_group_created(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_message *M) @@ -2831,7 +2751,8 @@ void on_profile_name_changed(struct tgl_state *TLS, void *callback_extra, int su void update_user_display_name(tg_engine_data_s *tg_data, int buddy_id, const char *first_name, const char *last_name) { if (first_name && last_name) { - tgl_do_set_profile_name(tgl_engine_get_TLS(), first_name, last_name, on_profile_name_changed, tg_data); + tgl_do_set_profile_name(tgl_engine_get_TLS(), + first_name, last_name, on_profile_name_changed, tg_data); } } @@ -3120,7 +3041,7 @@ void on_mark_read_callback(struct tgl_state *TLS, void *callback_extra, int succ void on_message_deleted_from_message_list(struct tgl_state *TLS, void *callback_extra, int success) { msg_list_container_s *msg_list_container = (msg_list_container_s*)callback_extra; - tg_engine_data_s *tg_data = TLS->callback_data; + /* tg_engine_data_s *tg_data = TLS->callback_data; */ if (success && msg_list_container) { // delete message from message table @@ -3251,11 +3172,6 @@ void on_new_buddy_added(struct tgl_state *TLS, void *callback_extra, int success 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) { @@ -3303,8 +3219,10 @@ void logout_telegram(tg_engine_data_s *tg_data) void on_secret_chat_request_sent(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_secret_chat *E) { + /* int buddy_id = (int)callback_extra; tg_engine_data_s *tg_data = TLS->callback_data; + */ if (success) { } else { diff --git a/tg-engine-service/tg_engine_utils/tg_common.c b/tg-engine-service/tg_engine_utils/tg_common.c index d29601a..2d52ac3 100644 --- a/tg-engine-service/tg_engine_utils/tg_common.c +++ b/tg-engine-service/tg_engine_utils/tg_common.c @@ -19,6 +19,13 @@ #include "tg_common.h" #include +uint64_t get_time_stamp_in_macro() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + return tv.tv_sec*(uint64_t)1000000+tv.tv_usec; +} + void tg_notification_create(tg_engine_data_s* tg_data, char * icon_path, const char *title, char *content, char *sound_path, char *app_id) { int err = NOTIFICATION_ERROR_NONE; diff --git a/tg-engine-service/tg_engine_utils/tg_common.h b/tg-engine-service/tg_engine_utils/tg_common.h index 3a989cb..2a7445d 100644 --- a/tg-engine-service/tg_engine_utils/tg_common.h +++ b/tg-engine-service/tg_engine_utils/tg_common.h @@ -48,12 +48,7 @@ typedef struct msg_list_container { int current_index; } msg_list_container_s; -static uint64_t get_time_stamp_in_macro() -{ - struct timeval tv; - gettimeofday(&tv, NULL); - return tv.tv_sec*(uint64_t)1000000+tv.tv_usec; -} +extern uint64_t get_time_stamp_in_macro(); extern char *ui_utils_get_resource(const char *res_name); -- 2.7.4