Replace all DB functions with sqlite3 recommended style. 99/48099/1
authorSung-jae Park <nicesj.park@samsung.com>
Mon, 14 Sep 2015 10:28:38 +0000 (19:28 +0900)
committerSung-jae Park <nicesj.park@samsung.com>
Mon, 14 Sep 2015 10:29:11 +0000 (19:29 +0900)
Change-Id: I50cbcc550a31d10672949df511518f6de735b599

19 files changed:
TelegramTizen/db_manager/tg_db_manager.c
TelegramTizen/inc/tg_db_wrapper.h
TelegramTizen/src/telegramtizen.c
TelegramTizen/src/tg_start_messaging_view.c
TelegramTizen/tg_utils/tg_common.c
TelegramTizen/tg_utils/tg_common.h
TelegramTizen/tizen-manifest.xml
tg-engine-service/db_manager/tg_db_manager.c
tg-engine-service/db_manager/tg_db_manager.h
tg-engine-service/inc/server_response.h
tg-engine-service/inc/tg_db_wrapper.h
tg-engine-service/mtprotocol/tgl-layout.h
tg-engine-service/src/server_response.c
tg-engine-service/src/tg_db_wrapper.c
tg-engine-service/src/tg_server.c
tg-engine-service/tg_engine/tg_engine.c
tg-engine-service/tg_engine_utils/tg_common.c [new file with mode: 0644]
tg-engine-service/tg_engine_utils/tg_common.h
tg-engine-service/tizen-manifest.xml

index 2e90951..009d5e5 100644 (file)
@@ -496,15 +496,6 @@ Eina_List* get_values_from_table_sync(const char* table_name, Eina_List* column_
        const char *type;
        int col;
 
-       char* where_clause = NULL;
-
-       if (wc) {
-               where_clause = (char*)malloc(strlen("WHERE ") + strlen(wc) + 1);
-               strcpy(where_clause, "WHERE ");
-               strcat(where_clause, wc);
-       }
-
-
        if (!s_info.db || !table_name || !column_names) {
                return NULL;
        }
@@ -516,7 +507,7 @@ Eina_List* get_values_from_table_sync(const char* table_name, Eina_List* column_
 
        query_len += strlen(" FROM ");
        query_len += strlen(table_name) + 1;
-       query_len += (where_clause ? strlen(where_clause) : 0);
+       query_len += (wc ? strlen(wc) + 7 : 0);
        query_len += 2;
 
        query = malloc(query_len);
@@ -537,7 +528,10 @@ Eina_List* get_values_from_table_sync(const char* table_name, Eina_List* column_
                ptr++;
        }
 
-       ptr += sprintf(ptr, " FROM %s %s;", table_name, where_clause ? where_clause : "");
+       ptr += sprintf(ptr, " FROM %s", table_name);
+       if (wc) {
+               ptr += sprintf(ptr, " WHERE %s", wc);
+       }
 
        LOGD("Query: %s", query);
 
@@ -547,7 +541,6 @@ Eina_List* get_values_from_table_sync(const char* table_name, Eina_List* column_
                return NULL;
        }
 
-
        while(sqlite3_step(stmt) == SQLITE_ROW) {
                col = 0;
                record = NULL;
@@ -600,16 +593,9 @@ Eina_List* get_values_from_table_sync(const char* table_name, Eina_List* column_
        }
 
        sqlite3_finalize(stmt);
-
-       if (where_clause) {
-               free(where_clause);
-               where_clause = NULL;
-       }
-
        return result;
 }
 
-
 int tg_db_init(void)
 {
        int ret;
index 733764a..5c055ea 100644 (file)
@@ -163,7 +163,7 @@ Eina_List* get_registered_user_info();
 
 Eina_List* get_buddy_list_info();
 
-Eina_List* get_buddy_info(int buddy_id);
+struct tgl_user* get_buddy_info(int buddy_id);
 
 char* get_profile_pic_path(int buddy_id);
 
index 0c533ec..16a491b 100644 (file)
@@ -1,3 +1,4 @@
+#include <errno.h>
 #include "telegramtizen.h"
 #include "tg_splash_screen.h"
 #include "tg_registration.h"
@@ -11,6 +12,7 @@
 #include "tg_user_main_view.h"
 #include "tg_messaging_view.h"
 #include "tg_start_messaging_view.h"
+#include "tg_common.h"
 
 static void
 popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
@@ -319,110 +321,136 @@ void load_main_list_data(appdata_s *ad)
                if (item) {
                        tg_peer_info_s* peer_info = item->use_data;
                        if(peer_info) {
-                               //if (peer_info->last_msg_id > 0) {
-
-                                       // get message from message table.
+                               tg_main_list_item_s *list_item;
+                               // get message from message table.
+                               const char *tablename;
+                               //tg_message_s* msg = get_message_from_message_table(peer_info->last_msg_id, tablename);
+                               tg_message_s *msg;
+
+                               tablename = tg_common_to_string("tg_%d_msg", peer_info->peer_id);
+                               if (!tablename) {
+                                       ERR("Unable to convert a string for peer_id");
+                                       return;
+                               }
 
-                                       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);
+                               msg = get_latest_message_from_message_table(tablename);
+                               if (!msg) {
+                                       ERR("Unable to get messages");
+                                       return;
+                               }
 
-                                       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) {
-                                                       item->last_message = strdup("Document");
-                                               } else if(media_type == tgl_message_media_geo) {
-                                                       item->last_message = strdup("Geo location");
-                                               } else if(media_type == tgl_message_media_contact) {
-                                                       item->last_message = strdup("Contact");
-                                               } else if(media_type == tgl_message_media_unsupported) {
-                                                       item->last_message = strdup(" ");
-                                               } else if(media_type == tgl_message_media_photo_encr) {
-                                                       item->last_message = strdup("Image encrypted");
-                                               } else if(media_type == tgl_message_media_document_encr) {
-                                                       item->last_message = strdup("Document encrypted");
-                                               } else  {
-                                                       item->last_message = strdup(" ");
+                               switch (msg->media_type) {
+                               case tgl_message_media_photo:
+                                       item->last_message = strdup("Image");
+                                       break;
+                               case tgl_message_media_document:
+                                       item->last_message = strdup("Document");
+                                       break;
+                               case tgl_message_media_geo:
+                                       item->last_message = strdup("Geo location");
+                                       break;
+                               case tgl_message_media_contact:
+                                       item->last_message = strdup("Contact");
+                                       break;
+                               case tgl_message_media_photo_encr:
+                                       item->last_message = strdup("Image encrypted");
+                                       break;
+                               case tgl_message_media_document_encr:
+                                       item->last_message = strdup("Document encrypted");
+                                       break;
+                               case tgl_message_media_none:
+                                       if (msg->message && strlen(msg->message) > 0) {
+                                               item->last_message = strdup(msg->message);
+                                               if (item->last_message) {
+                                                       break;
                                                }
+                                               ERR("strdup: %d", errno);
+                                       }
+                                       /* Fall through to default in this case */
+                               case tgl_message_media_unsupported:
+                               default:
+                                       item->last_message = strdup(" ");
+                                       break;
+                               }
 
-                                               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;
-                                               main_list_item->peer_print_name = strdup(peer_info->print_name);
-                                               main_list_item->last_seen_time = msg->date;
-                                               main_list_item->profile_pic = NULL;
-                                               main_list_item->last_msg_id = msg->msg_id;
-                                               main_list_item->last_message = strdup(item->last_message);
-                                               main_list_item->last_msg_type = msg->media_type;
-                                               main_list_item->is_out_msg = msg->out;
-                                               main_list_item->last_msg_status = msg->msg_state;
-                                               main_list_item->number_of_unread_msgs = get_unread_message_count(tablename);
-                                               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;
-                                               ad->main_list = eina_list_append(ad->main_list, main_list_item);
-
-                                               // delete message object
-                                               if(msg->message) {
-                                                       free(msg->message);
-                                                       msg->message = NULL;
-                                               }
+                               list_item = (tg_main_list_item_s *)malloc(sizeof(*item));
+                               if (!list_item) {
+                                       ERR("Unable to allocate heap for an item");
+                                       break;
+                               }
+                               list_item->peer_id = peer_info->peer_id;
+                               list_item->peer_type = peer_info->peer_type;
+                               list_item->peer_print_name = strdup(peer_info->print_name);
+                               if (!list_item->peer_print_name) {
+                                       free(list_item);
+                                       ERR("Unable to allocate heap for print_name");
+                                       break;
+                               }
+                               list_item->last_seen_time = msg->date;
+                               list_item->profile_pic = NULL;
+                               list_item->last_msg_id = msg->msg_id;
+                               list_item->last_message = strdup(item->last_message);
+                               if (!list_item->last_message) {
+                                       free(list_item->peer_print_name);
+                                       free(list_item);
+                                       ERR("Unable to allocate heap for peer_print_name");
+                                       break;
+                               }
+                               list_item->last_msg_type = msg->media_type;
+                               list_item->is_out_msg = msg->out;
+                               list_item->last_msg_status = msg->msg_state;
+                               list_item->number_of_unread_msgs = get_unread_message_count(tablename);
+                               if (peer_info->photo_path) {
+                                       list_item->profile_pic_path = strdup(peer_info->photo_path);
+                               } else {
+                                       list_item->profile_pic_path = NULL;
+                               }
+                               list_item->user_name_lbl = NULL;
+                               list_item->status_lbl = NULL;
+                               list_item->date_lbl = NULL;
+                               list_item->msg_status_lbl = NULL;
+                               ad->main_list = eina_list_append(ad->main_list, list_item);
 
-                                               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) {
-                                                       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;
-                                                       main_list_item->peer_print_name = strdup(peer_info->print_name);
-                                                       main_list_item->last_seen_time = peer_info->last_seen_time;
-                                                       main_list_item->profile_pic = NULL;
-                                                       main_list_item->last_message = strdup(item->last_message);
-                                                       main_list_item->last_msg_type = -1;
-                                                       main_list_item->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) {
-                                                               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;
-                                                       ad->main_list = eina_list_append(ad->main_list, main_list_item);
-                                               }
-                                       }
+                               free(msg);
+                               msg = NULL;
 
-                                       if (tablename) {
-                                               free(tablename);
-                                               tablename = NULL;
+                       } else {
+                               item->last_message = strdup(" ");
+                               if (peer_info->peer_type == TGL_PEER_CHAT) {
+                                       tg_main_list_item_s* item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
+                                       item->peer_id = peer_info->peer_id;
+                                       item->peer_type = peer_info->peer_type;
+                                       item->peer_print_name = strdup(peer_info->print_name);
+                                       item->last_seen_time = peer_info->last_seen_time;
+                                       item->profile_pic = NULL;
+                                       item->last_message = strdup(item->last_message);
+                                       item->last_msg_type = -1;
+                                       item->is_out_msg = -1;
+                                       item->last_msg_id = -1;
+                                       item->last_msg_status = -1;
+                                       item->number_of_unread_msgs = 0;
+                                       if (peer_info->photo_path) {
+                                               item->profile_pic_path = strdup(peer_info->photo_path);
+                                       } else {
+                                               item->profile_pic_path = NULL;
                                        }
-                               //}
+                                       item->user_name_lbl = NULL;
+                                       item->status_lbl = NULL;
+                                       item->date_lbl = NULL;
+                                       item->msg_status_lbl = NULL;
+                                       ad->main_list = eina_list_append(ad->main_list, item);
+                               }
                        }
                }
        }
index 72c715e..bc70fff 100644 (file)
@@ -56,6 +56,8 @@ char* get_budy_state(appdata_s* ad, int buddy_id)
 {
        if (!ad)
                return NULL;
+
+
        char time_str[256]={0,};
        Eina_List* buddy_details_array = get_buddy_info(buddy_id);
        if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
index 62222ed..9c4017a 100644 (file)
@@ -84,3 +84,16 @@ int numbers_only(const char *s)
 {
        return 1;
 }
+
+const char *tg_common_to_string(const char *fmt, ...)
+{
+       va_list vp;
+       static char string_buffer[256];
+       int ret;
+
+       va_start(vp, fmt);
+       ret = vsnprintf(string_buffer, sizeof(string_buffer) - 1, fmt, vp);
+       va_end(vp);
+
+       return ret <= 0 ? NULL : string_buffer;
+}
index b922c61..b4e0a15 100644 (file)
@@ -920,4 +920,5 @@ typedef struct Buddy {
 
 extern void app_get_resource(const char *edj_file_in, char *edj_path_out, int edj_path_max);
 
+extern const char *tg_common_to_string(const char *fmt, ...);
 #endif /* TG_COMMON_H_ */
index ad5efdb..03c3509 100644 (file)
@@ -8,26 +8,37 @@
     <privileges>
         <privilege>http://tizen.org/privilege/location</privilege>
         <privilege>http://tizen.org/privilege/network.get</privilege>
-        <privilege>http://tizen.org/privilege/keymanager</privilege>
         <privilege>http://tizen.org/privilege/callhistory.read</privilege>
-        <privilege>http://tizen.org/privilege/camera</privilege>
         <privilege>http://tizen.org/privilege/contact.write</privilege>
-        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
         <privilege>http://tizen.org/privilege/content.write</privilege>
         <privilege>http://tizen.org/privilege/push</privilege>
-        <privilege>http://tizen.org/privilege/network.profile</privilege>
-        <privilege>http://tizen.org/privilege/display</privilege>
         <privilege>http://tizen.org/privilege/account.read</privilege>
         <privilege>http://tizen.org/privilege/externalstorage</privilege>
         <privilege>http://tizen.org/privilege/recorder</privilege>
-        <privilege>http://tizen.org/privilege/account.write</privilege>
-        <privilege>http://tizen.org/privilege/bluetooth</privilege>
         <privilege>http://tizen.org/privilege/mediastorage</privilege>
         <privilege>http://tizen.org/privilege/internet</privilege>
+        <privilege>http://tizen.org/privilege/callhistory.write</privilege>
+        <privilege>http://tizen.org/privilege/contact.read</privilege>
+        <privilege>http://tizen.org/privilege/keymanager</privilege>
+        <privilege>http://tizen.org/privilege/camera</privilege>
+        <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
+        <privilege>http://tizen.org/privilege/display</privilege>
+        <privilege>http://tizen.org/privilege/network.profile</privilege>
+        <privilege>http://tizen.org/privilege/alarm.get</privilege>
+        <privilege>http://tizen.org/privilege/account.write</privilege>
+        <privilege>http://tizen.org/privilege/bluetooth</privilege>
         <privilege>http://tizen.org/privilege/network.set</privilege>
         <privilege>http://tizen.org/privilege/notification</privilege>
         <privilege>http://tizen.org/privilege/externalstorage.appdata</privilege>
-        <privilege>http://tizen.org/privilege/callhistory.write</privilege>
-        <privilege>http://tizen.org/privilege/contact.read</privilege>
+        <privilege>http://tizen.org/privilege/telephony</privilege>
     </privileges>
+    <feature name="http://tizen.org/feature/camera.front.flash">true</feature>
+    <feature name="http://tizen.org/feature/camera.back.flash">true</feature>
+    <feature name="http://tizen.org/feature/network.push">true</feature>
+    <feature name="http://tizen.org/feature/camera">true</feature>
+    <feature name="http://tizen.org/feature/camera.front">true</feature>
+    <feature name="http://tizen.org/feature/network.wifi">true</feature>
+    <feature name="http://tizen.org/feature/screen.size.all">true</feature>
+    <feature name="http://tizen.org/feature/network.telephony">true</feature>
+    <feature name="http://tizen.org/feature/camera.back">true</feature>
 </manifest>
index e60e0c7..e031a7b 100644 (file)
@@ -8,8 +8,12 @@
 #include <malloc.h>
 #include <errno.h>
 #include <string.h>
-#include "tg_db_manager.h"
+#include <sqlite3.h>
+
+#include "tgl.h"
+#include "tgl-layout.h"
 #include "tg_common.h"
+#include "tg_db_manager.h"
 
 int errno;
 
@@ -49,423 +53,1616 @@ int tg_db_fini(void)
        return EINA_TRUE;
 }
 
-Eina_Bool create_table(const char* table_name, Eina_List* column_names, Eina_List* column_types)
+static inline int create_table_query_to_db(const char *ddl, const char *table_name)
 {
-       if(!s_info.db || !table_name || ! column_names || !column_types) {
-               return EINA_FALSE;
+       sqlite3_stmt *stmt;
+       int ret;
+
+       ret = sqlite3_prepare_v2(s_info.db, ddl, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_DONE) {
+               sqlite3_finalize(stmt);
+               return -EIO;
        }
 
-       int ret = 0 ;
-       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, "(");
-
-       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, ");");
+       sqlite3_finalize(stmt);
+       return 0;
+}
+
+int tg_db_create_table_user_info(const char *table_name)
+{
+       const char *ddl;
+
+       ddl = "CREATE TABLE ? (" \
+                       "user_id INTEGER PRIMARY KEY NOT NULL," \
+                       "print_name TEXT," \
+                       "structure_version INTEGER," \
+                       "photo_path TEXT," \
+                       "photo_id INTEGER," \
+                       "first_name TEXT," \
+                       "last_name TEXT," \
+                       "phone TEXT," \
+                       "access_hash INTEGER," \
+                       "real_first_name TEXT," \
+                       "real_last_name TEXT," \
+                       "username TEXT," \
+                       "online INTEGER," \
+                       "last_seen INTEGER)";
+
+       return create_table_query_to_db(ddl, table_name);
+}
+
+int tg_db_create_table_media_info(const char *table_name)
+{
+       const char *ddl;
+       ddl = "CREATE TABLE ? (" \
+                       "media_id TEXT," \
+                       "media_type INTEGER," \
+                       "access_hash TEXT," \
+                       "user_id INTEGER," \
+                       "date INTEGER," \
+                       "caption TEXT," \
+                       "longitude TEXT," \
+                       "latitude TEXT," \
+                       "sizes_num INTEGER," \
+                       "photo_type1 TEXT," \
+                       "photo_loc_dc1 INTEGER," \
+                       "photo_loc_vol1 TEXT," \
+                       "photo_loc_id1 INTEGER," \
+                       "photo_loc_secret1 TEXT," \
+                       "photo_width1 INTEGER," \
+                       "photo_height1 INTEGER," \
+                       "photo_size1 INTEGER," \
+                       "photo_data1 TEXT," \
+                       "photo_type2 TEXT," \
+                       "photo_loc_dc2 INTEGER," \
+                       "photo_loc_vol2 TEXT," \
+                       "photo_loc_id2 INTEGER," \
+                       "photo_loc_secret2 TEXT," \
+                       "photo_width2 INTEGER," \
+                       "photo_height2 INTEGER," \
+                       "photo_size2 INTEGER," \
+                       "photo_data2 TEXT," \
+                       "photo_type3 TEXT," \
+                       "photo_loc_dc3 INTEGER," \
+                       "photo_loc_vol3 TEXT," \
+                       "photo_loc_id3 INTEGER," \
+                       "photo_loc_secret3 TEXT," \
+                       "photo_width3 INTEGER," \
+                       "photo_height3 INTEGER," \
+                       "photo_size3 INTEGER," \
+                       "photo_data3 TEXT," \
+                       "photo_type4 TEXT," \
+                       "photo_loc_dc4 INTEGER," \
+                       "photo_loc_vol4 TEXT," \
+                       "photo_loc_id4 INTEGER," \
+                       "photo_loc_secret4 TEXT," \
+                       "photo_width4 INTEGER," \
+                       "photo_height4 INTEGER," \
+                       "photo_size4 INTEGER," \
+                       "photo_data4 TEXT," \
+                       "phone TEXT," \
+                       "first_name TEXT," \
+                       "last_name TEXT," \
+                       "file_path TEXT)";
+       return create_table_query_to_db(ddl, table_name);
+}
+
+int tg_db_update_media_info_filepath(const char *table_name, long long media_id, const char *filepath)
+{
+       const char *dml;
+       const char *id_str;
+       int ret;
+       sqlite3_stmt *stmt;
+
+       dml = "UPDATE ? SET file_path = ? WHERE media_id = ?";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 2, filepath, -1, SQLITE_TRANSIENT);
+       id_str = tg_common_to_string("%lld", media_id);
+       ret = sqlite3_bind_text(stmt, 3, id_str, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
+       return 0;
+}
+
+int tg_db_update_media_info_by_id(const char *table_name, struct tgl_message *msg, long long id)
+{
+       const char *dml;
+       const char *tmp;
+       int ret;
+       sqlite3_stmt *stmt;
+       int i;
+
+       dml = "UPDATE ? SET media_id = ?, "
+                       "media_type = ?, "
+                       "access_hash = ?, "
+                       "user_id = ?, "
+                       "date = ?, "
+                       "caption = ?, "
+                       "longitude = ?, "
+                       "latitude = ?, "
+                       "sizes_num = ?, "
+                       "photo_type1 = ?," \
+                       "photo_loc_dc1 = ?," \
+                       "photo_loc_vol1 = ?," \
+                       "photo_loc_id1 = ?," \
+                       "photo_loc_secret1 = ?," \
+                       "photo_width1 = ?," \
+                       "photo_height1 = ?," \
+                       "photo_size1 = ?," \
+                       "photo_data1 = ?," \
+                       "photo_type2 = ?," \
+                       "photo_loc_dc2 = ?," \
+                       "photo_loc_vol2 = ?," \
+                       "photo_loc_id2 = ?," \
+                       "photo_loc_secret2 = ?," \
+                       "photo_width2 = ?," \
+                       "photo_height2 = ?," \
+                       "photo_size2 = ?," \
+                       "photo_data2 = ?," \
+                       "photo_type3 = ?," \
+                       "photo_loc_dc3 = ?," \
+                       "photo_loc_vol3 = ?," \
+                       "photo_loc_id3 = ?," \
+                       "photo_loc_secret3 = ?," \
+                       "photo_width3 = ?," \
+                       "photo_height3 = ?," \
+                       "photo_size3 = ?," \
+                       "photo_data3 = ?," \
+                       "photo_type4 = ?," \
+                       "photo_loc_dc4 = ?," \
+                       "photo_loc_vol4 = ?," \
+                       "photo_loc_id4 = ?," \
+                       "photo_loc_secret4 = ?," \
+                       "photo_width4 = ?," \
+                       "photo_height4 = ?," \
+                       "photo_size4 = ?," \
+                       "photo_data4 = ?," \
+                       "phone = ?," \
+                       "first_name = ?," \
+                       "last_name = ? WHERE media_id = ?";
+                       /* Except filename */
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       switch (msg->media.type) {
+       case tgl_message_media_photo:
+               tmp = tg_common_to_string("%lld", msg->media.photo.id);
+               ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+               ret = sqlite3_bind_int64(stmt, 4, msg->media.photo.access_hash);
+               ret = sqlite3_bind_int(stmt, 5, msg->media.photo.user_id);
+               ret = sqlite3_bind_int(stmt, 6, msg->media.photo.date);
+               ret = sqlite3_bind_text(stmt, 7, msg->media.photo.caption, -1, SQLITE_TRANSIENT);
+
+               tmp = tg_common_to_string("%lf", msg->media.photo.geo.longitude);
+               ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+
+               tmp = tg_common_to_string("%lf", msg->media.photo.geo.latitude);
+               ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+
+               ret = sqlite3_bind_int(stmt, 10, msg->media.photo.sizes_num);
+               for (i = 0; i < 4; i++) {
+                       if (i < msg->media.photo.sizes_num) {
+                               ret = sqlite3_bind_text(stmt, 11 + (i * 9), msg->media.photo.sizes[i].type, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 12 + (i * 9), msg->media.photo.sizes[i].loc.dc);
+                               tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.volume);
+                               ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 14 + (i * 9), msg->media.photo.sizes[i].loc.local_id);
+                               tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.secret);
+                               ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 16 + (i * 9), msg->media.photo.sizes[i].w);
+                               ret = sqlite3_bind_int(stmt, 17 + (i * 9), msg->media.photo.sizes[i].h);
+                               ret = sqlite3_bind_int(stmt, 18 + (i * 9), msg->media.photo.sizes[i].size);
+                               ret = sqlite3_bind_text(stmt, 19 + (i * 9), msg->media.photo.sizes[i].data, -1, SQLITE_TRANSIENT);
+                       } else {
+                               ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+                               tmp = tg_common_to_string("%lld", 0);
+                               ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+                               tmp = tg_common_to_string("%lld", 0);
+                               ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+                               ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+                               ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+                               ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                       }
                }
+               break;
+       case tgl_message_media_document:
+               tmp = tg_common_to_string("%lld", msg->media.document.id);
+               ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+               ret = sqlite3_bind_int64(stmt, 4, msg->media.document.access_hash);
+               ret = sqlite3_bind_int(stmt, 5, msg->media.document.user_id);
+               ret = sqlite3_bind_int(stmt, 6, msg->media.document.date);
+               ret = sqlite3_bind_text(stmt, 7, msg->media.document.caption, -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 10, msg->media.document.size);
+               for (i = 0; i < 4; i++) {
+                       ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+                       ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+               }
+               break;
+       default:
+               tmp = tg_common_to_string("%lld", 0);
+               ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+               ret = sqlite3_bind_int64(stmt, 4, 0);
+               ret = sqlite3_bind_int(stmt, 5, 0);
+               ret = sqlite3_bind_int(stmt, 6, 0);
+               ret = sqlite3_bind_text(stmt, 7, " ", -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 10, 0);
+               for (i = 0; i < 4; i++) {
+                       ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+                       ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+               }
+               break;
        }
 
-       ret = sqlite3_exec(s_info.db,var_query, NULL,(void*)s_info.db, &err_msg);
-       if( ret != SQLITE_OK ){
-               sqlite3_free(err_msg);
-               return EINA_FALSE;
+       ret = sqlite3_bind_text(stmt, 46, msg->media.phone, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 47, msg->media.first_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 48, msg->media.last_name, -1, SQLITE_TRANSIENT);
+       tmp = tg_common_to_string("%lld", id);
+       ret = sqlite3_bind_text(stmt, 49, tmp, -1, SQLITE_TRANSIENT);
+
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
+       if (ret != SQLITE_DONE) {
+               return -EIO;
        }
-       return EINA_TRUE;
+
+       return 0;
 }
 
-Eina_Bool insert_table(const char* table_name, Eina_List* column_names, Eina_List* column_types, Eina_List* column_values)
+void *tg_db_get_media_info(const char *table_name, long long id, int *media_type)
 {
-       if(!s_info.db || !table_name || ! column_names || !column_types || !column_values) {
-               return EINA_FALSE;
+       void *info = NULL;
+       const char *dml;
+       sqlite3_stmt *stmt;
+       const char *tmp;
+       int ret;
+       int i;
+
+       if (!media_type || !table_name) {
+               return NULL;
        }
 
-       int ret = 0 ;
-       char* err_msg = 0;
-       int col_count = eina_list_count(column_names);
+       dml = "SELECT * FROM ? WHERE media_id = ?";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
 
-       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, "(");
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       tmp = tg_common_to_string("%lld", id);
+       ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_ROW) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
 
-       for(int col = 0; col < col_count ; col++) {
+       *media_type = sqlite3_column_int(stmt, 1);
+       if (*media_type == tgl_message_media_photo) {
+               struct tgl_photo *photo;
+               const char *tmp;
 
-               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);
+               photo = calloc(1, sizeof(*photo));
+               if (!photo) {
+                       sqlite3_finalize(stmt);
+                       return NULL;
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 0);
+               if (tmp && tmp[0] != '\0') {
+                       if (sscanf(tmp, "%lld", &photo->id) != 1) {
 
-               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 (");
+                       }
                }
+
+               photo->access_hash = sqlite3_column_int(stmt, 2);
+               photo->user_id = sqlite3_column_int(stmt, 3);
+               photo->date = sqlite3_column_int(stmt, 4);
+               tmp = (const char *)sqlite3_column_text(stmt, 5);
+               if (tmp && tmp[0] != '\0') {
+                       photo->caption = strdup(tmp);
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 6);
+               if (tmp && tmp[0] != '\0') {
+                       if (sscanf(tmp, "%lf", &photo->geo.longitude) != 1) {
+
+                       }
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 7);
+               if (tmp && tmp[0] != '\0') {
+                       if (sscanf(tmp, "%lf", &photo->geo.latitude) != 1) {
+
+                       }
+               }
+
+               photo->sizes_num = sqlite3_column_int(stmt, 8);
+               photo->sizes = calloc(4, sizeof(*photo->sizes));
+               for (i = 0; i < photo->sizes_num; i++) {
+                       if (i < photo->sizes_num) {
+                               tmp = (const char *)sqlite3_column_text(stmt, 9 + (i * 9));
+                               if (tmp && tmp[0] != '\0') {
+                                       photo->sizes[i].type = strdup(tmp);
+                               }
+                               photo->sizes[i].loc.dc = sqlite3_column_int(stmt, 10 + (i * 9));
+                               tmp = (const char *)sqlite3_column_text(stmt, 11 + (i * 9));
+                               if (tmp && tmp[0] != '\0') {
+                                       if (sscanf(tmp, "%lld", &photo->sizes[i].loc.volume) != 1) {
+
+                                       }
+                               }
+                               photo->sizes[i].loc.local_id = sqlite3_column_int(stmt, 12);
+                               tmp = (const char *)sqlite3_column_text(stmt, 13 + (i * 9));
+                               if (tmp && tmp[0] != '\0') {
+                                       if (sscanf(tmp, "%lld", &photo->sizes[i].loc.secret) != 1) {
+
+                                       }
+                               }
+                               photo->sizes[i].w = sqlite3_column_int(stmt, 14 + (i * 9));
+                               photo->sizes[i].h = sqlite3_column_int(stmt, 15 + (i * 9));
+                               photo->sizes[i].size = sqlite3_column_int(stmt, 16 + (i * 9));
+
+                               tmp = (const char *)sqlite3_column_text(stmt, 17 + (i * 9));
+                               if (tmp && tmp[0] != '\0') {
+                                       photo->sizes[i].data = strdup(tmp);
+                               }
+                       }
+               }
+
+               // 45: phone
+               // 46: first_name
+               // 47: last_name
+               // 48: file_path
+               info = photo;
+       } else if (*media_type == tgl_message_media_document) {
+               struct tgl_document *document;
+
+               document = calloc(1, sizeof(*document));
+               if (!document) {
+                       sqlite3_finalize(stmt);
+                       return NULL;
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 0);
+               if (tmp && tmp[0] != '\0') {
+                       if (sscanf(tmp, "%lld", &document->id) != 1) {
+
+                       }
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 2);
+               if (tmp && tmp[0] != '\0') {
+                       if (sscanf(tmp, "%lld", &document->access_hash) != 1) {
+
+                       }
+               }
+
+               document->user_id = sqlite3_column_int(stmt, 3);
+               document->date = sqlite3_column_int(stmt, 4);
+
+               tmp = (const char *)sqlite3_column_text(stmt, 5);
+               if (tmp && tmp[0] != '\0') {
+                       document->caption = strdup(tmp);
+               }
+
+               // 6: "longitude TEXT,"
+               // 7: "latitude TEXT,"
+               // 9 ~ 44: Photo informations
+
+               document->size = sqlite3_column_int(stmt, 8);
+
+               // 45 "phone TEXT,"
+               // 46 "first_name TEXT,"
+               // 47 "last_name TEXT,"
+               // 48 "file_path TEXT)"
+
+               info = document;
+       } else {
+               /**
+                * @todo
+                * Handles me
+                */
        }
 
-       int col_val_count = eina_list_count(column_values);
+       sqlite3_finalize(stmt);
+       return info;
+}
+
+int tg_db_insert_media_info(const char *table_name, struct tgl_message *msg, const char *filename)
+{
+       const char *dml;
+       const char *tmp;
+       int ret;
+       sqlite3_stmt *stmt;
+       int i;
+
+       dml = "INSERT INTO ? VALUES (" \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?, ?, " \
+                       "?, ?, ?, ?)";
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+
+       switch (msg->media.type) {
+       case tgl_message_media_photo:
+               tmp = tg_common_to_string("%lld", msg->media.photo.id);
+               ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+               ret = sqlite3_bind_int64(stmt, 4, msg->media.photo.access_hash);
+               ret = sqlite3_bind_int(stmt, 5, msg->media.photo.user_id);
+               ret = sqlite3_bind_int(stmt, 6, msg->media.photo.date);
+               ret = sqlite3_bind_text(stmt, 7, msg->media.photo.caption, -1, SQLITE_TRANSIENT);
+
+               tmp = tg_common_to_string("%lf", msg->media.photo.geo.longitude);
+               ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+
+               tmp = tg_common_to_string("%lf", msg->media.photo.geo.latitude);
+               ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+
+               ret = sqlite3_bind_int(stmt, 10, msg->media.photo.sizes_num);
+               for (i = 0; i < 4; i++) {
+                       if (i < msg->media.photo.sizes_num) {
+                               ret = sqlite3_bind_text(stmt, 11 + (i * 9), msg->media.photo.sizes[i].type, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 12 + (i * 9), msg->media.photo.sizes[i].loc.dc);
+                               tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.volume);
+                               ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 14 + (i * 9), msg->media.photo.sizes[i].loc.local_id);
+                               tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.secret);
+                               ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 16 + (i * 9), msg->media.photo.sizes[i].w);
+                               ret = sqlite3_bind_int(stmt, 17 + (i * 9), msg->media.photo.sizes[i].h);
+                               ret = sqlite3_bind_int(stmt, 18 + (i * 9), msg->media.photo.sizes[i].size);
+                               ret = sqlite3_bind_text(stmt, 19 + (i * 9), msg->media.photo.sizes[i].data, -1, SQLITE_TRANSIENT);
+                       } else {
+                               ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+                               tmp = tg_common_to_string("%lld", 0);
+                               ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+                               tmp = tg_common_to_string("%lld", 0);
+                               ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                               ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+                               ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+                               ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+                               ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                       }
+               }
+               break;
+       case tgl_message_media_document:
+               tmp = tg_common_to_string("%lld", msg->media.document.id);
+               ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+               ret = sqlite3_bind_int64(stmt, 4, msg->media.document.access_hash);
+               ret = sqlite3_bind_int(stmt, 5, msg->media.document.user_id);
+               ret = sqlite3_bind_int(stmt, 6, msg->media.document.date);
+               ret = sqlite3_bind_text(stmt, 7, msg->media.document.caption, -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 10, msg->media.document.size);
+               for (i = 0; i < 4; i++) {
+                       ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+                       ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+               }
+               break;
+       default:
+               tmp = tg_common_to_string("%lld", 0);
+               ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+               ret = sqlite3_bind_int64(stmt, 4, 0);
+               ret = sqlite3_bind_int(stmt, 5, 0);
+               ret = sqlite3_bind_int(stmt, 6, 0);
+               ret = sqlite3_bind_text(stmt, 7, " ", -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+               tmp = tg_common_to_string("%lf", 0.0f);
+               ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int(stmt, 10, 0);
+               for (i = 0; i < 4; i++) {
+                       ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+                       tmp = tg_common_to_string("%lld", 0);
+                       ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+                       ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+                       ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+                       ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+               }
+               break;
+       }
 
-       for(int col = 0; col < col_val_count ; col++) {
+       ret = sqlite3_bind_text(stmt, 46, msg->media.phone, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 47, msg->media.first_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 48, msg->media.last_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 49, filename, -1, SQLITE_TRANSIENT);
 
-               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);
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
 
-#if 0
-                       long long val = *tmp_value;
-                       col_value = (char*)malloc(50);
-                       //sprintf(col_value, "%lld", *tmp_value);
-                       sprintf(col_value, "%lld", val);
-#endif
+       if (ret != SQLITE_DONE) {
+               return -EIO;
+       }
 
-                       int act_val = (*tmp_value);
-                       col_value = (char*)malloc(50);
-                       sprintf(col_value, "%d", act_val);
+       return 0;
+}
 
-                       var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1);
-                       strcat(var_query, col_value);
+int tg_db_create_table_chat_info(const char *table_name)
+{
+       const char *ddl;
+       ddl = "CREATE TABLE ? (" \
+                       "chat_id INTEGER PRIMARY KEY NOT NULL," \
+                       "flags INTEGER," \
+                       "print_title TEXT," \
+                       "struct_version INTEGER," \
+                       "photo_id TEXT," \
+                       "photo_path TEXT," \
+                       "title TEXT," \
+                       "users_num INTEGER," \
+                       "user_list_size INTEGER," \
+                       "user_list_version INTEGER," \
+                       "inviter_id INTEGER," \
+                       "chat_users TEXT," \
+                       "date INTEGER," \
+                       "version INTEGER," \
+                       "admin_id INTEGER)";
+       return create_table_query_to_db(ddl, table_name);
+}
 
-               } 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);
+int tg_db_count_chat_info(const char *table_name, struct tgl_chat *chat)
+{
+       const char *dml;
+       sqlite3_stmt *stmt;
+       int ret;
 
-                       var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1);
-                       strcat(var_query, "'");
+       dml = "SELECT COUNT(*) FROM ? WHERE chat_id = ?";
 
-                       var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1);
-                       strcat(var_query, col_value);
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 2, chat->id.id);
+       ret = sqlite3_step(stmt);
+       ret = sqlite3_column_int(stmt, 0);
+       sqlite3_finalize(stmt);
+       return ret;
+}
 
-                       var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1);
-                       strcat(var_query, "'");
+int tg_db_update_chat_info(const char *table_name, struct tgl_chat *chat, char *photo)
+{
+       const char *dml;
+       int ret;
+       sqlite3_stmt *stmt;
+       const char *tmp;
+       char *str;
+       int i;
+       int str_len;
+       int str_size;
+
+       dml = "UPDATE ? SET " \
+                       "chat_id = ?, " \
+                       "flags = ?, " \
+                       "print_title = ?, " \
+                       "struct_version = ?, " \
+                       "photo_id = ?, " \
+                       "photo_path = ?, " \
+                       "title = ?, " \
+                       "users_num = ?, " \
+                       "user_list_size = ?, " \
+                       "user_list_version = ?, " \
+                       "inviter_id = ?, " \
+                       "chat_users = ?, " \
+                       "date = ?, " \
+                       "version = ?, " \
+                       "admin_id = ? " \
+                       "WHERE chat_id = ?";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 2, chat->id.id);
+       ret = sqlite3_bind_int(stmt, 3, chat->flags);
+       ret = sqlite3_bind_text(stmt, 4, chat->print_title, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 5, chat->structure_version);
+       tmp = tg_common_to_string("%lld", chat->photo.id);
+       ret = sqlite3_bind_text(stmt, 6, tmp, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 7, photo, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 8, chat->title, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 9, chat->users_num);
+       ret = sqlite3_bind_int(stmt, 10, chat->user_list_size);
+       ret = sqlite3_bind_int(stmt, 11, chat->user_list_version);
+       ret = sqlite3_bind_int(stmt, 12, chat->user_list[0].inviter_id);
+
+       str_size = 64;
+       str_len = 0;
+       str = malloc(str_size);
+       for (i = 0; i < chat->user_list_size; i++) {
+               str_len += snprintf(str + str_len, str_size - str_len - 1, "%d, ", chat->user_list[i].user_id);
+               if (str_size - str_len < 32) {
+                       char *ptr;
+                       str_size <<= 1; /* doulbing current size */
+                       ptr = realloc(str, str_size);
+                       if (!ptr) {
+                               break;
+                       }
+                       str = ptr;
                }
+       }
+       /* Cut off the last colon */
+       str[str_len - 2] = '\0';
+       ret = sqlite3_bind_text(stmt, 13, str, str_len - 2, SQLITE_TRANSIENT);
+       free(str);
+       ret = sqlite3_bind_int(stmt, 14, chat->date);
+       ret = sqlite3_bind_int(stmt, 15, chat->version);
+       ret = sqlite3_bind_int(stmt, 16, chat->admin_id);
+       ret = sqlite3_bind_int(stmt, 17, chat->id.id);
+
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
+       return 0;
+}
 
-               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, ");");
+int tg_db_insert_chat_info(const char *table_name, struct tgl_chat *chat, char *photo_path)
+{
+       const char *dml;
+       int ret;
+       sqlite3_stmt *stmt;
+       const char *tmp;
+       char *str;
+       int i;
+       int str_len;
+       int str_size;
+
+       dml = "INSERT INTO ? VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 2, chat->id.id);
+       ret = sqlite3_bind_text(stmt, 3, chat->print_title, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 4, chat->structure_version);
+       tmp = tg_common_to_string("%lld", chat->photo.id);
+       ret = sqlite3_bind_text(stmt, 5, tmp, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 6, photo_path, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_text(stmt, 7, chat->title, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 8, chat->users_num);
+       ret = sqlite3_bind_int(stmt, 9, chat->user_list_size);
+       ret = sqlite3_bind_int(stmt, 10, chat->user_list_version);
+       ret = sqlite3_bind_int(stmt, 11, chat->user_list[0].inviter_id);
+
+       str_size = 64;
+       str_len = 0;
+       str = malloc(str_size);
+       for (i = 0; i < chat->user_list_size; i++) {
+               str_len += snprintf(str + str_len, str_size - str_len - 1, "%d, ", chat->user_list[i].user_id);
+               if (str_size - str_len < 32) {
+                       char *ptr;
+                       str_size <<= 1; /* doulbing current size */
+                       ptr = realloc(str, str_size);
+                       if (!ptr) {
+                               break;
+                       }
+                       str = ptr;
                }
-               free(col_value);
        }
+       /* Cut off the last colon */
+       str[str_len - 2] = '\0';
+       ret = sqlite3_bind_text(stmt, 12, str, str_len - 2, SQLITE_TRANSIENT);
+       free(str);
+       ret = sqlite3_bind_int(stmt, 13, chat->date);
+       ret = sqlite3_bind_int(stmt, 14, chat->version);
+       ret = sqlite3_bind_int(stmt, 15, chat->admin_id);
+
+       ret = sqlite3_step(stmt);
+
+       sqlite3_finalize(stmt);
+       return 0;
+}
 
-       ret = sqlite3_exec(s_info.db,var_query, NULL,(void*)s_info.db, &err_msg);
-       if( ret != SQLITE_OK ){
-               sqlite3_free(err_msg);
-               return EINA_FALSE;
+int tg_db_create_table_message(const char *table_name)
+{
+       const char *ddl;
+
+       ddl = "CREATE TABLE ? (" \
+                       "msg_id INTEGER," \
+                       "flags INTEGER," \
+                       "fwd_from_id INTEGER," \
+                       "fwd_date INTEGER," \
+                       "from_id INTEGER," \
+                       "to_id INTEGER," \
+                       "out INTEGER," \
+                       "unread INTEGER," \
+                       "date INTEGER," \
+                       "service INTEGER," \
+                       "message TEXT," \
+                       "message_state INTEGER," \
+                       "message_len INTEGER," \
+                       "media_type INTEGER," \
+                       "media_id TEXT," \
+                       "unique_id INTEGER)";
+
+       return create_table_query_to_db(ddl, table_name);
+}
+
+struct tgl_message *tg_db_get_message(const char *table_name, long long id)
+{
+       struct tgl_message *msg;
+       int ret;
+       sqlite3_stmt *stmt;
+       const char *dml;
+       const char *tmp;
+
+       dml = "SELECT * FROM ? WHERE msg_id = ?";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return NULL;
+       }
+
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return NULL;
        }
-       return EINA_TRUE;
 
+       ret = sqlite3_bind_int64(stmt, 2, id);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_ROW) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+
+       msg = calloc(1, sizeof(*msg));
+       if (!msg) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+
+       msg->id = id;
+       msg->flags = sqlite3_column_int(stmt, 1);
+       msg->fwd_from_id.id = sqlite3_column_int(stmt, 2);
+       msg->fwd_date = sqlite3_column_int(stmt, 3);
+       msg->from_id.id = sqlite3_column_int(stmt, 4);
+       msg->to_id.id = sqlite3_column_int(stmt, 5);
+       msg->out = sqlite3_column_int(stmt, 6);
+       msg->unread = sqlite3_column_int(stmt, 7);
+       msg->date = sqlite3_column_int(stmt, 8);
+       msg->service = sqlite3_column_int(stmt, 9);
+       tmp = (const char *)sqlite3_column_text(stmt, 10);
+       if (tmp && tmp[0] != '\0') {
+               msg->message = strdup(tmp);
+               if (!msg->message) {
+                       /*
+                        * @todo
+                        */
+               }
+       }
+       msg->msg_state = sqlite3_column_int(stmt, 11);
+       msg->message_len = sqlite3_column_int(stmt, 12);
+       msg->media.type = sqlite3_column_int(stmt, 13);
+       if (msg->media.type == tgl_message_media_photo) {
+               msg->media.photo.id = sqlite3_column_int64(stmt, 14);
+       } else if (msg->media.type == tgl_message_media_document) {
+               msg->media.document.id = sqlite3_column_int64(stmt, 14);
+       } else {
+               // 14
+       }
+       //msg->id = sqlite3_column_int64(stmt, 15);
+       sqlite3_finalize(stmt);
+       return msg;
 }
 
+int tg_db_update_message(const char *table_name, struct tgl_message *M, long long unique_id)
+{
+       int ret;
+       sqlite3_stmt *stmt;
+       const char *dml;
+       dml = "UPDATE ? SET " \
+               "msg_id = ?, " \
+               "flags = ?, " \
+               "fwd_from_id = ?, " \
+               "fwd_date = ?, " \
+               "from_id = ?, " \
+               "to_id = ?, " \
+               "out = ?, " \
+               "unread = ?, " \
+               "date = ?, " \
+               "service = ?, " \
+               "message = ?, " \
+               "message_state = ?, " \
+               "message_len = ?, " \
+               "media_type = ?, " \
+               "media_id = ?, " \
+               "WHERE ? = ?";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int64(stmt, 2, M->id);
+       ret = sqlite3_bind_int(stmt, 3, M->flags);
+       ret = sqlite3_bind_int(stmt, 4, M->fwd_from_id.id);
+       ret = sqlite3_bind_int(stmt, 5, M->fwd_date);
+       ret = sqlite3_bind_int(stmt, 6, M->from_id.id);
+       ret = sqlite3_bind_int(stmt, 7, M->to_id.id);
+       ret = sqlite3_bind_int(stmt, 8, M->out);
+       ret = sqlite3_bind_int(stmt, 9, M->unread);
+       ret = sqlite3_bind_int(stmt, 10, M->date);
+       ret = sqlite3_bind_int(stmt, 11, M->service);
+       ret = sqlite3_bind_text(stmt, 12, M->message, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 13, M->msg_state);
+       ret = sqlite3_bind_int(stmt, 14, M->message_len);
+       ret = sqlite3_bind_int(stmt, 15, M->media.type);
+       if (M->media.type == tgl_message_media_photo) {
+               ret = sqlite3_bind_int64(stmt, 16, M->media.photo.id);
+       } else if (M->media.type == tgl_message_media_document) {
+               ret = sqlite3_bind_int64(stmt, 16, M->media.document.id);
+       } else {
+               ret = sqlite3_bind_int64(stmt, 17, 0);
+       }
+       if (unique_id > 0) {
+               ret = sqlite3_bind_text(stmt, 18, "unique_id", -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int64(stmt, 19, unique_id);
+       } else {
+               ret = sqlite3_bind_text(stmt, 18, "msg_id", -1, SQLITE_TRANSIENT);
+               ret = sqlite3_bind_int64(stmt, 19, M->id);
+       }
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
+       return 0;
+}
 
-Eina_Bool update_table(const char* table_name, Eina_List* column_names, Eina_List* column_types, Eina_List* column_values, const char* where_clause)
+int tg_db_insert_message(const char *table_name, struct tgl_message *M, long long unique_id)
 {
-       if(!s_info.db || !table_name || ! column_names || !column_types || !column_values) {
-               return EINA_FALSE;
+       int ret;
+       sqlite3_stmt *stmt;
+       const char *dml;
+
+       dml = "INSERT INTO ? VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 2, M->id);
+       ret = sqlite3_bind_int(stmt, 3, M->flags);
+       ret = sqlite3_bind_int(stmt, 4, M->fwd_from_id.id);
+       ret = sqlite3_bind_int(stmt, 5, M->fwd_date);
+       ret = sqlite3_bind_int(stmt, 6, M->from_id.id);
+       ret = sqlite3_bind_int(stmt, 7, M->to_id.id);
+       ret = sqlite3_bind_int(stmt, 8, M->out);
+       ret = sqlite3_bind_int(stmt, 9, M->unread);
+       ret = sqlite3_bind_int(stmt, 10, M->date);
+       ret = sqlite3_bind_int(stmt, 11, M->service);
+       ret = sqlite3_bind_text(stmt, 12, M->message, -1, SQLITE_TRANSIENT);
+       ret = sqlite3_bind_int(stmt, 13, M->msg_state);
+       ret = sqlite3_bind_int(stmt, 14, M->message_len);
+       ret = sqlite3_bind_int(stmt, 15, M->media.type);
+       if (M->media.type == tgl_message_media_photo) {
+               ret = sqlite3_bind_int64(stmt, 16, M->media.photo.id);
+       } else if (M->media.type == tgl_message_media_document) {
+               ret = sqlite3_bind_int64(stmt, 16, M->media.document.id);
+       } else {
+               ret = sqlite3_bind_int64(stmt, 16, 0);
        }
+       ret = sqlite3_bind_int64(stmt, 17, unique_id);
 
-       int ret = 0 ;
-       char* err_msg = 0;
-       int col_count = eina_list_count(column_names);
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
+       return ret == SQLITE_DONE ? 0 : -EIO;
+}
 
-       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 ");
+int tg_db_create_table_peer_info(const char *table_name)
+{
+       const char *ddl;
+       ddl = "CREATE TABLE ? (" \
+                       "user_id INTEGER PRIMARY KEY NOT NULL," \
+                       "peer_type INTEGER," \
+                       "flags INTEGER," \
+                       "message_id TEXT," \
+                       "message_date INTEGER," \
+                       "print_name TEXT," \
+                       "struct_version INTEGER," \
+                       "unread_message_count INTEGER," \
+                       "last_seen INTEGER," \
+                       "photo_path TEXT," \
+                       "photo_id INTEGER)";
+       return create_table_query_to_db(ddl, table_name);
+}
 
+int tg_db_update_peer_info(const char *tablename, tgl_peer_t *UC, int last_msg_id, int unread_count)
+{
+       const char *dml;
+       sqlite3_stmt *stmt;
+       const char *str;
+       int ret;
 
-       int col_val_count = eina_list_count(column_values);
+       dml = "UPDATE ? SET " \
+                       "peer_type = ?," \
+                       "flags = ?," \
+                       "message_id = ?," \
+                       "message_data = ?," \
+                       "print_name = ?," \
+                       "struct_version = ?," \
+                       "unread_message_count = ?," \
+                       "last_seen = ?," \
+                       "photo_path = ?," \
+                       "photo_id = ? WHERE user_id = ?";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 1, tablename, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       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);
+       ret = sqlite3_bind_int(stmt, 2, UC->id.type);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-               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);
+       ret = sqlite3_bind_int(stmt, 3, UC->flags);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-                       int act_val = (*tmp_value);
-                       col_value = (char*)malloc(50);
-                       sprintf(col_value, "%d", act_val);
+       str = tg_common_to_string("%d", last_msg_id);
+       ret = sqlite3_bind_text(stmt, 4, str, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-                       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);
+       ret = sqlite3_bind_int(stmt, 5, UC->last ? UC->last->date : 0);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-               } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
+       ret = sqlite3_bind_text(stmt, 6, UC->print_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-                       char* tmp_value = eina_list_nth(column_values, col);
-                       col_value = (char*)malloc(strlen(tmp_value) + 1);
-                       strcpy(col_value,tmp_value);
+       ret = sqlite3_bind_int(stmt, 7, UC->structure_version);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-                       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, "'");
+       ret = sqlite3_bind_int(stmt, 8, unread_count);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-                       var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1);
-                       strcat(var_query, col_value);
+       if (UC->id.type == TGL_PEER_USER ) {
+               ret = sqlite3_bind_int(stmt, 9, UC->user.status.when);
+       } else if (UC->id.type == TGL_PEER_CHAT ) {
+               ret = sqlite3_bind_int(stmt, 9, UC->chat.date);
+       } else {
+               ret = sqlite3_bind_int(stmt, 9, 0);
+       }
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-                       var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1);
-                       strcat(var_query, "'");
-               }
+       ret = sqlite3_bind_text(stmt, 10, "", -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-               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);
+       ret = sqlite3_bind_int(stmt, 11, UC->photo.id);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       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, ";");
+       ret = sqlite3_bind_int(stmt, 12, UC->id.id);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       ret = sqlite3_exec(s_info.db,var_query, NULL,(void*)s_info.db, &err_msg);
-       if( ret != SQLITE_OK ){
-               sqlite3_free(err_msg);
-               return EINA_FALSE;
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_DONE) {
+               sqlite3_finalize(stmt);
+               return -EIO;
        }
-       return EINA_TRUE;
 
+       sqlite3_finalize(stmt);
+       return 0;
 }
 
-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)
+int tg_db_insert_peer_info(const char *tablename, tgl_peer_t *UC, int last_msg_id, int unread_count)
 {
-       if (!s_info.db || !table_name) {
-               return EINA_FALSE;
+       const char *dml;
+       sqlite3_stmt *stmt;
+       const char *str;
+       int ret;
+
+       dml = "INSERT INTO ? ("
+                       "user_id,peer_type,flags,message_id,message_date," \
+                       "print_name,struct_version,unread_message_count,last_seen," \
+                       "photo_path,photo_id) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return -EFAULT;
        }
 
-       /*****No rows identification*****/
+       ret = sqlite3_bind_text(stmt, 1, tablename, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       char* row_cnt_qry = (char*)malloc(strlen("SELECT COUNT(*) FROM ") + strlen(table_name) + strlen(";") +1);
-       strcpy(row_cnt_qry, "SELECT COUNT(*) FROM ");
-       strcat(row_cnt_qry, table_name);
-       strcat(row_cnt_qry, ";");
+       ret = sqlite3_bind_int(stmt, 2, UC->id.id);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       int no_of_rows = 0;
-       //ret = sqlite3_exec(s_info.db,var_query, callback,(void*)s_info.db, &err_msg);
+       ret = sqlite3_bind_int(stmt, 3, UC->id.type);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       sqlite3_stmt *stmt;
-       if (sqlite3_prepare_v2(s_info.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);
-               }
+       ret = sqlite3_bind_int(stmt, 4, UC->flags);
+       if (ret != SQLITE_OK) {
                sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       free(row_cnt_qry);
-       if(no_of_rows <= 0) {
-               return EINA_FALSE;
+       str = tg_common_to_string("%d", last_msg_id);
+       ret = sqlite3_bind_text(stmt, 5, str, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       /********************************/
+       ret = sqlite3_bind_int(stmt, 6, UC->last ? UC->last->date : 0);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       int ret = 0 ;
-       char* err_msg = 0;
-       //int col_count = eina_list_count(column_names);
+       ret = sqlite3_bind_text(stmt, 7, UC->print_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 8, UC->structure_version);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       int str_len = strlen("SELECT ") + 1;
-       char* var_query = (char*)malloc(str_len);
-       strcpy(var_query,"SELECT ");
-       if(!column_names) {
-               var_query = realloc(var_query, strlen(var_query) + 3);
-               strcat(var_query, "* ");
+       ret = sqlite3_bind_int(stmt, 9, unread_count);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       if (UC->id.type == TGL_PEER_USER ) {
+               ret = sqlite3_bind_int(stmt, 10, UC->user.status.when);
+       } else if (UC->id.type == TGL_PEER_CHAT ) {
+               ret = sqlite3_bind_int(stmt, 10, UC->chat.date);
        } else {
+               ret = sqlite3_bind_int(stmt, 10, 0);
+       }
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-               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, " ");
-                       }
-               }
+       ret = sqlite3_bind_text(stmt, 11, "", -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
+       ret = sqlite3_bind_int(stmt, 12, UC->photo.id);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       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);
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       sqlite3_finalize(stmt);
+       return 0;
+}
 
-       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);
+int tg_db_update_user_info(const char *tablename, struct tgl_user *U)
+{
+       const char *dml;
+       sqlite3_stmt *stmt;
+       int ret;
+
+       dml = "UPDATE ? SET print_name = ?, structure_version = ?, first_name = ?, last_name = ?, phone = ?, access_hash = ?, real_first_name = ?, real_last_name = ?, username = ?, online = ?, last_seen = ? WHERE user_id = ?";
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return -EFAULT;
        }
 
-       var_query = realloc(var_query, strlen(var_query) + 2);
-       strcat(var_query, ";");
+       ret = sqlite3_bind_text(stmt, 1, tablename, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
+       ret = sqlite3_bind_text(stmt, 2, U->print_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       ret = sqlite3_exec(s_info.db,var_query, callback,(void*)data_to_callback, &err_msg);
-       if( ret != SQLITE_OK ){
-               sqlite3_free(err_msg);
-               return EINA_FALSE;
+       ret = sqlite3_bind_int(stmt, 3, U->structure_version);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       free(var_query);
-       return EINA_TRUE;
+       ret = sqlite3_bind_text(stmt, 4, U->first_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 5, U->last_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 6, U->phone, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 7, U->access_hash);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 8, U->real_first_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 9, U->real_last_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 10, U->username, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 11, U->status.online);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 12, U->last->date);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 13, U->id.id);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       if (sqlite3_step(stmt) != SQLITE_DONE) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       sqlite3_finalize(stmt);
+       return 0;
 }
 
-Eina_List *get_values_from_table_sync(const char* table_name, Eina_List* column_names, Eina_List* column_types, const char* where_clause)
+int tg_db_update_user_photo(const char *tablename, int uid, const char *photo, int photo_id)
 {
-       Eina_List* query_vals = NULL;
+       const char *dml;
+       int ret;
+       sqlite3_stmt *stmt;
+       int idx;
 
-       if (!s_info.db || !table_name) {
-               return (Eina_List *)NULL;
+       if (photo_id < 0) {
+               dml = "UPDATE ? SET photo = ?, photo_id = ? WHERE user_id = ?";
+       } else {
+               dml = "UPDATE ? SET photo = ? WHERE user_id = ?";
        }
 
-       /*****No rows identification*****/
+       idx = 1;
 
-       char* row_cnt_qry = (char *)malloc(strlen("SELECT COUNT(*) FROM ") + strlen(table_name) + strlen(";") +1);
-       strcpy(row_cnt_qry, "SELECT COUNT(*) FROM ");
-       strcat(row_cnt_qry, table_name);
-       strcat(row_cnt_qry, ";");
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, idx++, tablename, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       int no_of_rows = 0;
-       //ret = sqlite3_exec(s_info.db,var_query, callback,(void*)s_info.db, &err_msg);
+       ret = sqlite3_bind_text(stmt, idx++, photo, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
+       if (photo_id >= 0) {
+               ret = sqlite3_bind_int(stmt, idx++, photo_id);
+       }
+
+       ret = sqlite3_bind_int(stmt, idx++, uid);
+       ret = sqlite3_step(stmt);
+       sqlite3_finalize(stmt);
+       if (ret != SQLITE_DONE) {
+               return -EIO;
+       }
+
+       return 0;
+}
+
+int tg_db_insert_user_info(const char *tablename, struct tgl_user *U)
+{
+       const char *dml;
        sqlite3_stmt *stmt;
-       if (sqlite3_prepare_v2(s_info.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);
-               }
+       int ret;
+
+       dml = "INSERT (user_id, print_name, structure_version, first_name, last_name, phone, access_hash, real_first_name, real_last_name, username, online, last_seen) INTO ? VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 1, U->id.id);
+       if (ret != SQLITE_OK) {
                sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       free(row_cnt_qry);
-       if(no_of_rows <= 0) {
-               return (Eina_List *)NULL;
+       ret = sqlite3_bind_text(stmt, 2, U->print_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       /********************************/
+       ret = sqlite3_bind_int(stmt, 3, U->structure_version);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       int ret = 0 ;
-       char* err_msg = 0;
-       //int col_count = eina_list_count(column_names);
+       ret = sqlite3_bind_text(stmt, 4, U->first_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       int str_len = strlen("SELECT ") + 1;
-       char* var_query = (char*)malloc(str_len);
-       strcpy(var_query,"SELECT ");
-       if(!column_names) {
-               var_query = realloc(var_query, strlen(var_query) + 3);
-               strcat(var_query, "* ");
-       } else {
+       ret = sqlite3_bind_text(stmt, 5, U->last_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-               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, " ");
-                       }
-               }
+       ret = sqlite3_bind_text(stmt, 6, U->phone, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_int(stmt, 7, U->access_hash);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 8, U->real_first_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 9, U->real_last_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
+
+       ret = sqlite3_bind_text(stmt, 10, U->username, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
+       ret = sqlite3_bind_int(stmt, 11, U->status.online);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
        }
 
-       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);
+       ret = sqlite3_bind_int(stmt, 12, U->last ? U->last->date : 0);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return -EFAULT;
+       }
 
-       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);
+       ret = sqlite3_step(stmt);
+       if (ret != SQLITE_DONE) {
+               sqlite3_finalize(stmt);
+               return 0;
        }
 
-       var_query = realloc(var_query, strlen(var_query) + 2);
-       strcat(var_query, ";");
+       sqlite3_finalize(stmt);
+       return 0;
+}
 
+struct tgl_user *tg_db_get_user_info(const char *table_name, int uid)
+{
+       const char *dml;
+       sqlite3_stmt *stmt;
+       int ret;
+       struct tgl_user *user_info;
+       const char *tmp;
 
-       ret = sqlite3_prepare_v2(s_info.db, var_query, -1, &stmt, 0);
-       if( ret != SQLITE_OK ){
-               sqlite3_free(err_msg);
+       dml = "SELECT * FROM ?";
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
                return NULL;
        }
 
-       while(sqlite3_step(stmt) == SQLITE_ROW) {
-               int col_val_count = eina_list_count(column_names);
-               Eina_List* row_vals = NULL;
-               for(int col = 0; col < col_val_count ; col++) {
-                       char* col_type = eina_list_nth(column_types, col);
-                       if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) {
-                               long long temp = sqlite3_column_int64(stmt, col);
-                               int* val_int = (int *)malloc(sizeof(int));
-                               *val_int = temp;
-                               row_vals = eina_list_append(row_vals, val_int);
-                       } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
-                               const char *text = (const char *)sqlite3_column_text(stmt, col);
-                               char *val_text;
-
-                               val_text = strdup(text);
-                               if (!val_text) {
-                                       /**
-                                        * Handling me.
-                                        */
-                               } else {
-                                       row_vals = eina_list_append(row_vals, val_text);
-                               }
-                       }
-               }
-               query_vals = eina_list_append(query_vals, row_vals);
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+
+       if ((ret = sqlite3_step(stmt)) != SQLITE_ROW) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+       user_info = calloc(1, sizeof(*user_info));
+       if (!user_info) {
+               /**
+                * @note
+                * Unable to get the record of user info
+                */
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+
+       user_info->id.id = sqlite3_column_int(stmt, 0);
+
+       tmp = (const char *)sqlite3_column_text(stmt, 1);
+       if (tmp && tmp[0] != '\0') {
+               user_info->print_name = strdup(tmp);
+       }
+
+       user_info->structure_version = sqlite3_column_int(stmt, 2);
+
+       /**
+        * Getting the photo_path. but how can I store this? to where?
+        */
+       tmp = (const char *)sqlite3_column_text(stmt, 3);
+       if (tmp && tmp[0] != '\0') {
+               /*
+                * Where can I get this photo path?
+                */
+       }
+
+       user_info->photo_id = sqlite3_column_int(stmt, 4);
+       tmp = (const char *)sqlite3_column_text(stmt, 5);
+       if (tmp && tmp[0] != '\0') {
+               user_info->first_name = strdup(tmp);
+       }
+
+       tmp = (const char *)sqlite3_column_text(stmt, 6);
+       if (tmp && tmp[0] != '\0') {
+               user_info->last_name = strdup(tmp);
+       }
+
+       tmp = (const char *)sqlite3_column_text(stmt, 7);
+       if (tmp && tmp[0] != '\0') {
+               user_info->phone = strdup(tmp);
+       }
+
+       user_info->access_hash = sqlite3_column_int(stmt, 8);
+
+       tmp = (const char *)sqlite3_column_text(stmt, 9);
+       if (tmp && tmp[0] != '\0') {
+               user_info->real_first_name = strdup(tmp);
+       }
+
+       tmp = (const char *)sqlite3_column_text(stmt, 10);
+       if (tmp && tmp[0] != '\0') {
+               user_info->real_last_name = strdup(tmp);
        }
 
-       free(var_query);
-       return query_vals;
+       tmp = (const char *)sqlite3_column_text(stmt, 11);
+       if (tmp && tmp[0] != '\0') {
+       user_info->username = strdup(tmp);
+       }
+
+       sqlite3_finalize(stmt);
+       return user_info;
 }
 
+Eina_List *tg_db_get_user_list(const char *table_name)
+{
+       const char *dml;
+       sqlite3_stmt *stmt;
+       int ret;
+       Eina_List *user_list;
+       struct tgl_user *user_info;
+       const char *tmp;
+
+       dml = "SELECT * FROM ?";
+       ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+       if (ret != SQLITE_OK) {
+               return NULL;
+       }
+
+       ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+       if (ret != SQLITE_OK) {
+               sqlite3_finalize(stmt);
+               return NULL;
+       }
+
+       user_list = NULL;
+       while ((ret = sqlite3_step(stmt)) == SQLITE_ROW) {
+               user_info = calloc(1, sizeof(*user_info));
+               if (!user_info) {
+                       /**
+                        * @note
+                        * Unable to get the record of user info
+                        */
+                       continue;
+               }
+
+               user_info->id.id = sqlite3_column_int(stmt, 0);
+
+               tmp = (const char *)sqlite3_column_text(stmt, 1);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->print_name = strdup(tmp);
+               }
+
+               user_info->structure_version = sqlite3_column_int(stmt, 2);
+
+               /**
+                * Getting the photo_path. but how can I store this? to where?
+                */
+               tmp = (const char *)sqlite3_column_text(stmt, 3);
+               if (tmp && tmp[0] != '\0') {
+                       /*
+                        * Where can I get this photo path?
+                        */
+               }
+
+               user_info->photo_id = sqlite3_column_int(stmt, 4);
+               tmp = (const char *)sqlite3_column_text(stmt, 5);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->first_name = strdup(tmp);
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 6);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->last_name = strdup(tmp);
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 7);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->phone = strdup(tmp);
+               }
+
+               user_info->access_hash = sqlite3_column_int(stmt, 8);
+
+               tmp = (const char *)sqlite3_column_text(stmt, 9);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->real_first_name = strdup(tmp);
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 10);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->real_last_name = strdup(tmp);
+               }
+
+               tmp = (const char *)sqlite3_column_text(stmt, 11);
+               if (tmp && tmp[0] != '\0') {
+                       user_info->username = strdup(tmp);
+               }
+
+               user_list = eina_list_append(user_list, user_info);
+       }
+
+       sqlite3_finalize(stmt);
+       return user_list;
+}
index 30ddf01..9649e7d 100644 (file)
@@ -8,15 +8,36 @@
 #ifndef TG_DB_MANAGER_H_
 #define TG_DB_MANAGER_H_
 
-#include "tg_common.h"
-#include <sqlite3.h>
-
 extern int tg_db_fini(void);
 extern int tg_db_init(void);
-extern Eina_Bool create_table(const char* table_name, Eina_List* column_names, Eina_List* column_types);
-extern Eina_Bool insert_table(const char* table_name, Eina_List* column_names, Eina_List* column_types, Eina_List* column_values);
-extern Eina_Bool update_table(const char* table_name, Eina_List* column_names, Eina_List* column_types, Eina_List* column_values, const char* where_clause);
-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);
+
+extern int tg_db_create_table_peer_info(const char *table_name);
+extern int tg_db_insert_peer_info(const char *tablename, tgl_peer_t *UC, int last_msg_id, int unread_count);
+extern int tg_db_update_peer_info(const char *tablename, tgl_peer_t *UC, int last_msg_id, int unread_count);
+
+extern int tg_db_create_table_message(const char *table_name);
+extern struct tgl_message *tg_db_get_message(const char *table_name, long long id);
+extern int tg_db_insert_message(const char *table_name, struct tgl_message *M, long long unique_id);
+extern int tg_db_update_message(const char *table_name, struct tgl_message *M, long long unique_id);
+
+extern int tg_db_create_table_buddy_info(const char *table_name);
+
+extern int tg_db_create_table_chat_info(const char *table_name);
+extern int tg_db_insert_chat_info(const char *table_name, struct tgl_chat *chat, char *photo_path);
+extern int tg_db_update_chat_info(const char *table_name, struct tgl_chat *chat, char *photo);
+extern int tg_db_count_chat_info(const char *table_name, struct tgl_chat *chat);
+
+extern int tg_db_create_table_media_info(const char *table_name);
+extern int tg_db_update_media_info_filepath(const char *table_name, long long media_id, const char *filepath);
+extern int tg_db_update_media_info_by_id(const char *table_name, struct tgl_message *msg, long long id);
+extern int tg_db_insert_media_info(const char *table_name, struct tgl_message *msg, const char *filename);
+extern void *tg_db_get_media_info(const char *table_name, long long id, int *media_type);
+
+extern int tg_db_create_table_user_info(const char *table_name);
+extern Eina_List *tg_db_get_user_list(const char *table_name);
+extern struct tgl_user *tg_db_get_user_info(const char *table_name, int uid);
+extern int tg_db_insert_user_info(const char *tablename, struct tgl_user *U);
+extern int tg_db_update_user_info(const char *tablename, struct tgl_user *U);
+extern int tg_db_update_user_photo(const char *tablename, int uid, const char *photo, int photo_id);
 
 #endif /* TG_DB_MANAGER_H_ */
index 9d97c20..bf9f1fd 100644 (file)
@@ -8,8 +8,6 @@
 #ifndef SERVER_RESPONSE_H_
 #define SERVER_RESPONSE_H_
 
-
-
 extern void process_registration_command(tg_engine_data_s *tg_data, char *phone_no, Eina_Bool trough_sms);
 extern void process_validation_command(tg_engine_data_s *tg_data, char *code);
 extern void process_send_message_command(int buddy_id, int message_id, int msg_type, char* msg_data, int type_of_chat);
index 4d76090..7c2b924 100644 (file)
 #include "tg_engine.h"
 
 #define USER_INFO_TABLE_NAME "user_info_table"
-
-#define USER_INFO_TABLE_USER_ID "user_id"
-#define USER_INFO_TABLE_PRINT_NAME "print_name"
-#define USER_INFO_TABLE_STRUCTURE_VERSION "structure_version"
-#define USER_INFO_TABLE_PHOTO_PATH "photo_path"
-#define USER_INFO_TABLE_PHOTO_ID "photo_id"
-#define USER_INFO_TABLE_FIRST_NAME "first_name"
-#define USER_INFO_TABLE_LAST_NAME "last_name"
-#define USER_INFO_TABLE_PHONE_NO "phone"
-#define USER_INFO_TABLE_ACCESS_HASH "access_hash"
-#define USER_INFO_TABLE_REAL_FIRST_NAME "real_first_name"
-#define USER_INFO_TABLE_REAL_LAST_NAME "real_last_name"
-#define USER_INFO_TABLE_USER_NAME "username"
-#define USER_INFO_TABLE_ONLINE_STATUS "online"
-#define USER_INFO_TABLE_LAST_SEEN_TIME "last_seen"
-
 #define BUDDY_INFO_TABLE_NAME "buddy_info_table"
-
-#define BUDDY_INFO_TABLE_BUDDY_ID "user_id"
-#define BUDDY_INFO_TABLE_PRINT_NAME "print_name"
-#define BUDDY_INFO_TABLE_STRUCTURE_VERSION "structure_version"
-#define BUDDY_INFO_TABLE_PHOTO_PATH "photo_path"
-#define BUDDY_INFO_TABLE_PHOTO_ID "photo_id"
-#define BUDDY_INFO_TABLE_FIRST_NAME "first_name"
-#define BUDDY_INFO_TABLE_LAST_NAME "last_name"
-#define BUDDY_INFO_TABLE_PHONE_NO "phone"
-#define BUDDY_INFO_TABLE_ACCESS_HASH "access_hash"
-#define BUDDY_INFO_TABLE_REAL_FIRST_NAME "real_first_name"
-#define BUDDY_INFO_TABLE_REAL_LAST_NAME "real_last_name"
-#define BUDDY_INFO_TABLE_BUDDY_NAME "username"
-#define BUDDY_INFO_TABLE_ONLINE_STATUS "online"
-#define BUDDY_INFO_TABLE_LAST_SEEN_TIME "last_seen"
-
 #define MEDIA_INFO_TABLE_NAME "media_info_table"
 
-#define MEDIA_INFO_TABLE_MEDIA_ID "media_id"
-#define MEDIA_INFO_TABLE_MEDIA_TYPE "media_type"
-#define MEDIA_INFO_TABLE_ACCESS_HASH "access_hash"
-#define MEDIA_INFO_TABLE_USER_ID "user_id"
-#define MEDIA_INFO_TABLE_DATE "date"
-#define MEDIA_INFO_TABLE_CAPTION "caption"
-#define MEDIA_INFO_TABLE_LONGITUDE "longitude"
-#define MEDIA_INFO_TABLE_LATITUDE "latitude"
-#define MEDIA_INFO_TABLE_SIZES_NUM "sizes_num"
-
-#define MEDIA_INFO_TABLE_PHOTO_TYPE1 "photo_type1" //text
-#define MEDIA_INFO_TABLE_PHOTO_LOC_DC1 "photo_loc_dc1" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_VOL1 "photo_loc_vol1" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_ID1 "photo_loc_id1" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1 "photo_loc_secret1" //int
-#define MEDIA_INFO_TABLE_PHOTO_WIDTH1 "photo_width1" //int
-#define MEDIA_INFO_TABLE_PHOTO_HEIGHT1 "photo_height1" //int
-#define MEDIA_INFO_TABLE_PHOTO_SIZE1 "photo_size1" //int
-#define MEDIA_INFO_TABLE_PHOTO_DATA1 "photo_data1" //text
-
-#define MEDIA_INFO_TABLE_PHOTO_TYPE2 "photo_type2" //text
-#define MEDIA_INFO_TABLE_PHOTO_LOC_DC2 "photo_loc_dc2" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_VOL2 "photo_loc_vol2" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_ID2 "photo_loc_id2" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2 "photo_loc_secret2" //int
-#define MEDIA_INFO_TABLE_PHOTO_WIDTH2 "photo_width2" //int
-#define MEDIA_INFO_TABLE_PHOTO_HEIGHT2 "photo_height2" //int
-#define MEDIA_INFO_TABLE_PHOTO_SIZE2 "photo_size2" //int
-#define MEDIA_INFO_TABLE_PHOTO_DATA2 "photo_data2" //text
-
-#define MEDIA_INFO_TABLE_PHOTO_TYPE3 "photo_type3" //text
-#define MEDIA_INFO_TABLE_PHOTO_LOC_DC3 "photo_loc_dc3" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_VOL3 "photo_loc_vol3" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_ID3 "photo_loc_id3" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3 "photo_loc_secret3" //int
-#define MEDIA_INFO_TABLE_PHOTO_WIDTH3 "photo_width3" //int
-#define MEDIA_INFO_TABLE_PHOTO_HEIGHT3 "photo_height3" //int
-#define MEDIA_INFO_TABLE_PHOTO_SIZE3 "photo_size3" //int
-#define MEDIA_INFO_TABLE_PHOTO_DATA3 "photo_data3" //text
-
-#define MEDIA_INFO_TABLE_PHOTO_TYPE4 "photo_type4" //text
-#define MEDIA_INFO_TABLE_PHOTO_LOC_DC4 "photo_loc_dc4" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_VOL4 "photo_loc_vol4" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_ID4 "photo_loc_id4" //int
-#define MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4 "photo_loc_secret4" //int
-#define MEDIA_INFO_TABLE_PHOTO_WIDTH4 "photo_width4" //int
-#define MEDIA_INFO_TABLE_PHOTO_HEIGHT4 "photo_height4" //int
-#define MEDIA_INFO_TABLE_PHOTO_SIZE4 "photo_size4" //int
-#define MEDIA_INFO_TABLE_PHOTO_DATA4 "photo_data4" //text
-
-#define MEDIA_INFO_TABLE_PHONE_NO "phone"
-#define MEDIA_INFO_TABLE_FIRST_NAME "first_name"
-#define MEDIA_INFO_TABLE_LAST_NAME "last_name"
-#define MEDIA_INFO_TABLE_FILE_PATH "file_path"
-
-
 #define MESSAGE_INFO_TABLE_MESSAGE_ID "msg_id"
 #define MESSAGE_INFO_TABLE_FLAGS "flags"
 #define MESSAGE_INFO_TABLE_FWD_FROM_ID "fwd_from_id"
@@ -181,14 +93,12 @@ void insert_chat_info_to_db(struct tgl_chat *C, char* photo_path);
 
 void update_chat_info_to_db(struct tgl_chat *chat_info, char* photo_path);
 
-Eina_List* get_buddy_info(int buddy_id);
+extern struct tgl_user* get_buddy_info(int buddy_id);
 
 void insert_media_info_to_db(struct tgl_message *M, char* file_path);
 void update_sent_media_info_in_db(struct tgl_message *M, long long unique_val);
 void update_receive_media_info_in_db(long long media_id, char* file_path);
 
-Eina_List* get_image_details_from_db(long long media_id);
-
 Eina_Bool is_chat_id_already_exists(struct tgl_chat *C);
 
 #endif /* TG_DB_WRAPPER_H_ */
index c341918..394e0ce 100644 (file)
@@ -348,21 +348,7 @@ struct tgl_secret_chat {
        long long exchange_key_fingerprint;
 };
 
-typedef union tgl_peer {
-       struct {
-               tgl_peer_id_t id;
-               int flags;
-               struct tgl_message *last;
-               char *print_name;
-               int structure_version;
-               struct tgl_file_location photo_big;
-               struct tgl_file_location photo_small;
-               struct tgl_photo photo;
-       };
-       struct tgl_user user;
-       struct tgl_chat chat;
-       struct tgl_secret_chat encr_chat;
-} tgl_peer_t;
+
 /*
 struct tgl_video {
   long long id;
@@ -487,5 +473,22 @@ struct tgl_message {
                };
        };
 };
+
+typedef union tgl_peer {
+       struct {
+               tgl_peer_id_t id;
+               int flags;
+               struct tgl_message *last;
+               char *print_name;
+               int structure_version;
+               struct tgl_file_location photo_big;
+               struct tgl_file_location photo_small;
+               struct tgl_photo photo;
+       };
+       struct tgl_user user;
+       struct tgl_chat chat;
+       struct tgl_secret_chat encr_chat;
+} tgl_peer_t;
+
 #pragma pack(pop)
 #endif
index 289b545..e3c03b9 100644 (file)
@@ -8,6 +8,7 @@
 #include "logger.h"
 #include "tg_engine.h"
 #include "server_response.h"
+#include "tg_common.h"
 
 
 void process_registration_command(tg_engine_data_s *tg_data, char* phone_no, Eina_Bool trough_sms)
@@ -122,301 +123,358 @@ void send_registration_response(tg_engine_data_s *tg_data, Eina_Bool is_success)
                return;
        }
 
-       result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
+
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-
-       bundle_free(msg);
 }
 
 void send_new_group_added_response(tg_engine_data_s *tg_data, int chat_id)
 {
-       bundle *msg = bundle_create();
+       int result;
+       bundle *msg;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               ERR("Unable to create the bundle");
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "new_group_added") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char chat_id_str[50];
-       sprintf(chat_id_str,"%d",chat_id);
-       if (bundle_add_str(msg, "chat_id", chat_id_str) != 0)   {
+       str = tg_common_to_string("%d", chat_id);
+       if (bundle_add_str(msg, "chat_id", str) != 0)   {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
-       int result = SVC_RES_FAIL;
+
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-
-       bundle_free(msg);
 }
 
 void send_chat_profile_pic_updated_response(tg_engine_data_s *tg_data, int chat_id, char* filename)
 {
-       bundle *msg = bundle_create();
+       int result;
+       bundle *msg;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "new_group_icon_added") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char chat_id_str[50];
-       sprintf(chat_id_str,"%d",chat_id);
-       if (bundle_add_str(msg, "chat_id", chat_id_str) != 0)   {
+       str = tg_common_to_string("%d", chat_id);
+       if (bundle_add_str(msg, "chat_id", str) != 0)   {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
        if (bundle_add_str(msg, "chat_icon_path", filename) != 0)       {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
-       int result = SVC_RES_FAIL;
+
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-
-       bundle_free(msg);
 }
 
 void send_name_registration_response(tg_engine_data_s *tg_data)
 {
-       bundle *msg = bundle_create();
+       int result;
+       bundle *msg;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "name_registration_request") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
-       int result = SVC_RES_FAIL;
+
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_add_contacts_request(tg_engine_data_s *tg_data)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "add_contacts_request") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
-       int result = SVC_RES_FAIL;
+
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_contacts_and_chats_load_done_response(tg_engine_data_s *tg_data, Eina_Bool is_success)
 {
-       bundle *msg = bundle_create();
+       int result;
+       bundle *msg;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "contacts_and_chats_load_done") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       if (is_success) {
-               if (bundle_add_str(msg, "is_success", "true") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
-       } else {
-               if (bundle_add_str(msg, "is_success", "false") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
+       if (bundle_add_str(msg, "is_success", is_success ? "true" : "false") != BUNDLE_ERROR_NONE) {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+               return;
        }
 
-       int result = SVC_RES_FAIL;
+
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_contacts_load_done_response(tg_engine_data_s *tg_data, Eina_Bool is_success)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+
+       msg = bundle_create();
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "contacts_load_done") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       if (is_success) {
-               if (bundle_add_str(msg, "is_success", "true") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
-       } else {
-               if (bundle_add_str(msg, "is_success", "false") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
+       if (bundle_add_str(msg, "is_success", is_success ? "true" : "false") != BUNDLE_ERROR_NONE) {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+               return;
        }
 
-       int result = SVC_RES_FAIL;
-       result = tg_server_send_message(tg_data->tg_server, msg);
 
+       result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_buddy_profile_pic_updated_response(tg_engine_data_s *tg_data, int buddy_id, char* file_path)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "buddy_profile_pic_updated") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "user_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "user_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "file_path", file_path) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_message_received_response(tg_engine_data_s *tg_data, int from_id, int to_id, long long message_id, int type_of_chat)
 {
-       bundle *msg = bundle_create();
+       int result;
+       bundle *msg;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "message_received") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char from_id_str[50];
-       sprintf(from_id_str,"%d",from_id);
-
-       if (bundle_add_str(msg, "from_id", from_id_str) != 0) {
+       str = tg_common_to_string("%d", from_id);
+       if (bundle_add_str(msg, "from_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char to_id_str[50];
-       sprintf(to_id_str,"%d",to_id);
-
-       if (bundle_add_str(msg, "to_id", to_id_str) != 0) {
+       str = tg_common_to_string("%d", to_id);
+       if (bundle_add_str(msg, "to_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char msg_id_str[50];
-       sprintf(msg_id_str,"%lld",message_id);
-
-       if (bundle_add_str(msg, "message_id", msg_id_str) != 0) {
+       str = tg_common_to_string("%lld", message_id);
+       if (bundle_add_str(msg, "message_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char type_of_chat_str[50];
-       sprintf(type_of_chat_str,"%d",type_of_chat);
-
-       if (bundle_add_str(msg, "type_of_chat", type_of_chat_str) != 0) {
+       str = tg_common_to_string("%d", type_of_chat);
+       if (bundle_add_str(msg, "type_of_chat", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_message_read_by_buddy_response(tg_engine_data_s *tg_data, int buddy_id, int message_id, char* table_name, char* phone, int type_of_chat)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "message_read_by_buddy") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "buddy_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
        }
 
-       char msg_id_str[50];
-       sprintf(msg_id_str,"%d", message_id);
-
-       if (bundle_add_str(msg, "message_id", msg_id_str) != 0) {
+       str = tg_common_to_string("%d", message_id);
+       if (bundle_add_str(msg, "message_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
        }
@@ -431,177 +489,186 @@ void send_message_read_by_buddy_response(tg_engine_data_s *tg_data, int buddy_id
                bundle_free(msg);
        }
 
-       char type_of_chat_str[50];
-       sprintf(type_of_chat_str,"%d",type_of_chat);
-
-       if (bundle_add_str(msg, "type_of_chat", type_of_chat_str) != 0) {
+       str = tg_common_to_string("%d", type_of_chat);
+       if (bundle_add_str(msg, "type_of_chat", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
+       bundle_free(msg);
 
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_message_sent_to_buddy_response(tg_engine_data_s *tg_data, int buddy_id, int message_id, char* table_name, Eina_Bool is_success, int type_of_chat)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       const char *str;
+       int result;
+
+       msg = bundle_create();
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "message_sent_to_buddy") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "buddy_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char msg_id_str[50];
-       sprintf(msg_id_str,"%d", message_id);
-
-       if (bundle_add_str(msg, "message_id", msg_id_str) != 0) {
+       str = tg_common_to_string("%d", message_id);
+       if (bundle_add_str(msg, "message_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "table_name", table_name) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       if (is_success) {
-               if (bundle_add_str(msg, "is_success", "true") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
-       } else {
-               if (bundle_add_str(msg, "is_success", "false") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
+       if (bundle_add_str(msg, "is_success", is_success ? "true" : "false") != BUNDLE_ERROR_NONE) {
+               ERR("Failed to add data by key to bundle");
+               bundle_free(msg);
+               return;
        }
 
-       char type_of_chat_str[50];
-       sprintf(type_of_chat_str,"%d",type_of_chat);
-
-       if (bundle_add_str(msg, "type_of_chat", type_of_chat_str) != 0) {
+       str = tg_common_to_string("%d", type_of_chat);
+       if (bundle_add_str(msg, "type_of_chat", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
-
+       bundle_free(msg);
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_media_download_completed_response(tg_engine_data_s *tg_data, int buddy_id, long long media_id, const char* filename)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "media_download_completed") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "buddy_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char media_id_str[50];
-       sprintf(media_id_str,"%lld",media_id);
-
-       if (bundle_add_str(msg, "media_id", media_id_str) != 0) {
+       str = tg_common_to_string("%lld", media_id);
+       if (bundle_add_str(msg, "media_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       if (filename) {
-               if (bundle_add_str(msg, "file_name", filename) != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
-       } else  {
-               if (bundle_add_str(msg, "file_name", "failed_to_load") != 0) {
-                       ERR("Failed to add data by key to bundle");
-                       bundle_free(msg);
-               }
+       if (bundle_add_str(msg, "file_name", filename ? filename : "failed_to_load") != BUNDLE_ERROR_NONE) {
+               bundle_free(msg);
+               return;
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
-
+       bundle_free(msg);
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_contact_updated_response(tg_engine_data_s *tg_data, int buddy_id, char* update_message)
 {
+       int result;
+       const char *str;
+       bundle *msg;
+
        if (!update_message) {
                return;
        }
-       bundle *msg = bundle_create();
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "contact_updated") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "buddy_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "update_message", update_message) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
-
+       bundle_free(msg);
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 void send_buddy_status_updated_response(tg_engine_data_s *tg_data, int buddy_id)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
@@ -612,64 +679,66 @@ void send_buddy_status_updated_response(tg_engine_data_s *tg_data, int buddy_id)
                bundle_free(msg);
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "buddy_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
-
+       bundle_free(msg);
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
-void send_buddy_type_notification_response(tg_engine_data_s *tg_data, int buddy_id, char* budy_name, int type_status)
+void send_buddy_type_notification_response(tg_engine_data_s *tg_data, int buddy_id, char *buddy_name, int type_status)
 {
-       bundle *msg = bundle_create();
+       bundle *msg;
+       int result;
+       const char *str;
+
+       msg = bundle_create();
+       if (!msg) {
+               return;
+       }
+
        if (bundle_add_str(msg, "app_name", "Tizen Telegram") != 0)     {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
        if (bundle_add_str(msg, "command", "type_status_updated") != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char usr_id_str[50];
-       sprintf(usr_id_str,"%d",buddy_id);
-
-       if (bundle_add_str(msg, "buddy_id", usr_id_str) != 0) {
+       str = tg_common_to_string("%d", buddy_id);
+       if (bundle_add_str(msg, "buddy_id", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       if (bundle_add_str(msg, "buddy_name", budy_name) != 0) {
+       if (bundle_add_str(msg, "buddy_name", buddy_name) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
+               return;
        }
 
-       char type_status_str[50];
-       sprintf(type_status_str,"%d",type_status);
-
-       if (bundle_add_str(msg, "type_status", type_status_str) != 0) {
+       str = tg_common_to_string("%d", type_status);
+       if (bundle_add_str(msg, "type_status", str) != 0) {
                ERR("Failed to add data by key to bundle");
                bundle_free(msg);
        }
 
-       int result = SVC_RES_FAIL;
        result = tg_server_send_message(tg_data->tg_server, msg);
-
+       bundle_free(msg);
        if(result != SVC_RES_OK) {
                // error: cient not ready
        }
-       bundle_free(msg);
 }
 
 
index e32dd86..0f09122 100644 (file)
  * @author sandeep
  */
 
-#include "tg_db_wrapper.h"
-#include "tg_common.h"
 #include "tgl-layout.h"
+#include "tg_common.h"
+#include "tg_db_wrapper.h"
 
 void create_data_base_tables()
 {
-       char* table_name = USER_INFO_TABLE_NAME;
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
-       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);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       Eina_Bool ret = create_table(table_name, col_names, col_types);
-       if(!ret) {
-               // error occured
-       }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-
-       table_name = BUDDY_INFO_TABLE_NAME;
-       col_names = NULL;
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_BUDDY_ID);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PRINT_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_STRUCTURE_VERSION);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_ID);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_REAL_FIRST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_REAL_LAST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_BUDDY_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_ONLINE_STATUS);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_LAST_SEEN_TIME);
-
-       col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       ret = create_table(table_name, col_names, col_types);
-       if(!ret) {
-               // error occured
-       }
-
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-
-       table_name = MEDIA_INFO_TABLE_NAME;
-       col_names = NULL;
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_USER_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_CAPTION);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LONGITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LATITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_SIZES_NUM);
-
-
-       /********************************************************************/
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA1);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA2);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA3);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA4);
-
-
-       /********************************************************************/
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
-
-       col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-       ret = create_table(table_name, col_names, col_types);
-       if(!ret) {
-               // error occured
-       }
-
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-
-       table_name = CHAT_INFO_TABLE_NAME;
-       col_names = NULL;
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PRINT_TITLE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_STRUCT_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_TITLE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_NO_OF_USERS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_SIZE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_INVITER_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_USERS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_ADMIN_ID);
-
-       col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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);
-
-       ret = create_table(table_name, col_names, col_types);
-       if(!ret) {
-               // error occured
-       }
-
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-
-       table_name = PEER_INFO_TABLE_NAME;
-       col_names = NULL;
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_CHAT_ID);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_PEER_TYPE);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_ID);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_DATE);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_PRINT_NAME);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_STRUCT_VERSION);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_NO_OF_UNREAD_MESSAGES);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_SEEN_TIME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_ID);
-
-       col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       ret = create_table(table_name, col_names, col_types);
-       if(!ret) {
-               // error occured
-       }
-
-       eina_list_free(col_names);
-       eina_list_free(col_types);
+       tg_db_create_table_user_info(USER_INFO_TABLE_NAME);
+       tg_db_create_table_user_info(BUDDY_INFO_TABLE_NAME);
+       tg_db_create_table_media_info(MEDIA_INFO_TABLE_NAME);
+       tg_db_create_table_chat_info(CHAT_INFO_TABLE_NAME);
+       tg_db_create_table_peer_info(PEER_INFO_TABLE_NAME);
 }
 
 void create_buddy_msg_table(const char* table_name)
 {
-       if(!table_name) {
-               return;
-       }
-       // create user info table
-       Eina_List* col_names = NULL;
-
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
-
-       Eina_List* col_types = NULL;
-       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);
-       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);
-       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_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       Eina_Bool ret = create_table(table_name, col_names, col_types);
-       if(!ret) {
-               //("error: database creation failed");
-       }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
+       tg_db_create_table_message(table_name);
 }
 
 void insert_buddy_msg_to_db(struct tgl_message *M)
@@ -417,317 +90,24 @@ void insert_buddy_msg_to_db(struct tgl_message *M)
 
 void insert_peer_into_database(tgl_peer_t* UC, int last_msg_id, int unread_count)
 {
+       int ret;
+
        if (!UC) {
                return;
        }
 
-       char* table_name = PEER_INFO_TABLE_NAME;
-       Eina_List* col_names = NULL;
-       col_names = NULL;
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_CHAT_ID);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_PEER_TYPE);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_ID);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_DATE);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_PRINT_NAME);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_STRUCT_VERSION);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_NO_OF_UNREAD_MESSAGES);
-       col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_SEEN_TIME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_ID);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-
-       Eina_List* col_values = NULL;
-       col_values = eina_list_append(col_values, &(UC->id.id));
-       col_values = eina_list_append(col_values, &(UC->id.type));
-       col_values = eina_list_append(col_values, &(UC->flags));
-       char last_msg_id_str[50];
-       sprintf(last_msg_id_str, "%d", last_msg_id);
-       col_values = eina_list_append(col_values, last_msg_id_str);
-
-       // last message date
-       if (UC->last) {
-               col_values = eina_list_append(col_values, &(UC->last->date));
-       } else {
-               int last_msg_date = 0;
-               col_values = eina_list_append(col_values, &(last_msg_date));
-       }
-
-       if (UC->print_name) {
-               col_values = eina_list_append(col_values, UC->print_name);
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       col_values = eina_list_append(col_values, &(UC->structure_version));
-
-       col_values = eina_list_append(col_values, &(unread_count));
-
-       if (UC->id.type == TGL_PEER_USER ) {
-               col_values = eina_list_append(col_values, &(UC->user.status.when));
-       } else if (UC->id.type == TGL_PEER_CHAT ) {
-               col_values = eina_list_append(col_values, &(UC->chat.date));
-       } else {
-               int last_seen = 0;
-               col_values = eina_list_append(col_values, &(last_seen));
-       }
-
-       col_values = eina_list_append(col_values, "");
-
-
-
-       struct tgl_photo* photo = &(UC->photo);
-       int photo_id = -1;
-       if (photo) {
-               photo_id = photo->id;
+       ret = tg_db_insert_peer_info(PEER_INFO_TABLE_NAME, UC, last_msg_id, unread_count);
+       if (ret != 0) {
+               ret = tg_db_update_peer_info(PEER_INFO_TABLE_NAME, UC, last_msg_id, unread_count);
        }
-       col_values = eina_list_append(col_values, &(photo_id));
 
-       Eina_Bool ret = insert_table(table_name, col_names, col_types,col_values);
-       if(!ret) {
-               // already exist. So update the table
-               char* where_clause = NULL;
-               char user_id_str[50];
-               sprintf(user_id_str,"%d",UC->id.id);
-               where_clause = (char*)malloc(strlen(PEER_INFO_TABLE_CHAT_ID) + strlen(" = ") + strlen(user_id_str) + 1);
-               strcpy(where_clause, PEER_INFO_TABLE_CHAT_ID);
-               strcat(where_clause, " = ");
-               strcat(where_clause, user_id_str);
-               ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-       } else {
-
-       }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
+       return;
 }
 
 struct tgl_message* get_message_from_message_table(long long msg_id, char* table_name)
 {
-       struct tgl_message* message = NULL;
-
-       Eina_List* message_details = NULL;
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
-
-       Eina_List* col_types = NULL;
-       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);
-       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);
-       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_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       char *where_clause = NULL;
-       char msg_id_str[50];
-       sprintf(msg_id_str, "%lld", msg_id);
-       where_clause = (char *)malloc(strlen(MESSAGE_INFO_TABLE_MESSAGE_ID) + strlen(" = ") + strlen(msg_id_str) + 1);
-       strcpy(where_clause, MESSAGE_INFO_TABLE_MESSAGE_ID);
-       strcat(where_clause, " = ");
-       strcat(where_clause, msg_id_str);
-
-       message_details = get_values_from_table_sync(table_name, col_names, col_types, where_clause);
-
-       free(where_clause);
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-
-       if (message_details && eina_list_count(message_details) > 0) {
-               Eina_List* ts_msg = eina_list_nth(message_details, 0);
-
-               message = (struct tgl_message*)malloc(sizeof(struct tgl_message));
-
-
-               int *temp_msg_id = (int*)eina_list_nth(ts_msg, 0);
-               if (temp_msg_id) {
-                       message->id  = *temp_msg_id;
-                       free(temp_msg_id);
-               }
-
-               int *temp_flags = (int*)eina_list_nth(ts_msg, 1);
-               if (temp_flags) {
-                       message->flags  = *temp_flags;
-                       free(temp_flags);
-               }
-
-
-               int *temp_fwd_from_id = (int*)eina_list_nth(ts_msg, 2);
-               if (temp_fwd_from_id) {
-                       message->fwd_from_id.id  = *temp_fwd_from_id;
-                       free(temp_fwd_from_id);
-               }
-
-
-               int *temp_fwd_date = (int*)eina_list_nth(ts_msg, 3);
-               if (temp_fwd_date) {
-                       message->fwd_date  = *temp_fwd_date;
-                       free(temp_fwd_date);
-               }
-
-
-               int *temp_from_id = (int*)eina_list_nth(ts_msg, 4);
-               if (temp_from_id) {
-                       message->from_id.id  = *temp_from_id;
-                       free(temp_from_id);
-               }
-
-               int *temp_to_id = (int*)eina_list_nth(ts_msg, 5);
-               if (temp_to_id) {
-                       message->to_id.id  = *temp_to_id;
-                       free(temp_to_id);
-               }
-
-               int *temp_out = (int*)eina_list_nth(ts_msg, 6);
-               if (temp_out) {
-                       message->out  = *temp_out;
-                       free(temp_out);
-               }
-
-               int *temp_unread = (int*)eina_list_nth(ts_msg, 7);
-               if (temp_unread) {
-                       message->unread  = *temp_unread;
-                       free(temp_unread);
-               }
-
-               int *temp_date = (int*)eina_list_nth(ts_msg, 8);
-               if (temp_date) {
-                       message->date  = *temp_date;
-                       free(temp_date);
-               }
-
-               int *temp_service = (int*)eina_list_nth(ts_msg, 9);
-               if (temp_service) {
-                       message->service  = *temp_service;
-                       free(temp_service);
-               }
-
-               char *temp_msg = (char*)eina_list_nth(ts_msg, 10);
-               if (temp_msg) {
-                       message->message  = strdup(temp_msg);
-                       free(temp_msg);
-               }
-
-               int *temp_message_state = (int*)eina_list_nth(ts_msg, 11);
-               if (temp_message_state) {
-                       message->msg_state  = *temp_message_state;
-                       free(temp_message_state);
-               }
-
-               int *temp_message_len = (int*)eina_list_nth(ts_msg, 12);
-               if (temp_message_len) {
-                       message->message_len  = *temp_message_len;
-                       free(temp_message_len);
-               }
-
-               int *temp_media_type = (int*)eina_list_nth(ts_msg, 13);
-               if (temp_media_type) {
-                       message->media.type  = *temp_media_type;
-                       free(temp_media_type);
-               }
-
-               char *temp_media_id = (char*)eina_list_nth(ts_msg, 14);
-
-               char *eptr;
-               if(message->media.type == tgl_message_media_none) {
-
-                       if (temp_media_id) {
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_photo) {
-
-                       if (temp_media_id) {
-                               message->media.photo.id  = strtoll(temp_media_id, &eptr, 10);
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_document) {
-
-                       if (temp_media_id) {
-                               message->media.document.id  = strtoll(temp_media_id, &eptr, 10);
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_geo) {
-
-                       if (temp_media_id) {
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_contact) {
-
-                       if (temp_media_id) {
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_unsupported) {
-
-                       if (temp_media_id) {
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_photo_encr) {
-
-                       if (temp_media_id) {
-                               message->media.encr_photo.id  = strtoll(temp_media_id, &eptr, 10);
-                               free(temp_media_id);
-                       }
-
-               } else if(message->media.type == tgl_message_media_document_encr) {
-
-                       if (temp_media_id) {
-                               message->media.encr_document.id  = strtoll(temp_media_id, &eptr, 10);
-                               free(temp_media_id);
-                       }
-
-               } else  {
-                       if (temp_media_id) {
-                               free(temp_media_id);
-                       }
-               }
-               int *temp_unique_id = (int*)eina_list_nth(ts_msg, 15);
-               if (temp_unique_id) {
-                       free(temp_unique_id);
-               }
-       }
+       struct tgl_message* message;
+       message = tg_db_get_message(table_name, msg_id);
        return message;
 }
 
@@ -737,1826 +117,125 @@ void insert_msg_into_db(struct tgl_message *M, char* table_name, int unique_id)
                return;
        }
 
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
-
-       Eina_List* col_types = NULL;
-       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);
-       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);
-       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_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       Eina_List* col_values = NULL;
-       col_values = eina_list_append(col_values, &(M->id));
-       col_values = eina_list_append(col_values, &(M->flags));
-       col_values = eina_list_append(col_values, &(M->fwd_from_id.id));
-       col_values = eina_list_append(col_values, &(M->fwd_date));
-       col_values = eina_list_append(col_values, &(M->from_id.id));
-       col_values = eina_list_append(col_values, &(M->to_id.id));
-       col_values = eina_list_append(col_values, &(M->out));
-       col_values = eina_list_append(col_values, &(M->unread));
-       col_values = eina_list_append(col_values, &(M->date));
-       col_values = eina_list_append(col_values, &(M->service));
-
-       if(M->message)
-               col_values = eina_list_append(col_values, M->message);
-       else
-               col_values = eina_list_append(col_values, " ");
-
-       col_values = eina_list_append(col_values, &(M->msg_state));
-       col_values = eina_list_append(col_values, &(M->message_len));
-       col_values = eina_list_append(col_values, &(M->media.type));
-
-       char *dummy_val = "";
-       if(M->media.type == tgl_message_media_none) {
-               col_values = eina_list_append(col_values, (dummy_val));
-       } else if(M->media.type == tgl_message_media_photo) {
-
-               char temp_media_id[50];
-               sprintf(temp_media_id, "%lld", M->media.photo.id);
-
-               col_values = eina_list_append(col_values, temp_media_id);
-       } else if(M->media.type == tgl_message_media_document) {
+       tg_db_insert_message(table_name, M, (long long)unique_id);
+}
 
-               char temp_media_id[50];
-               sprintf(temp_media_id, "%d", M->media.document.dc_id);
+void update_msg_into_db(struct tgl_message *M, char* table_name, int unique_id)
+{
+       if(!M) {
+               return;
+       }
 
-               col_values = eina_list_append(col_values, temp_media_id);
-       } else if(M->media.type == tgl_message_media_geo) {
-               col_values = eina_list_append(col_values, (dummy_val));
-       } else if(M->media.type == tgl_message_media_contact) {
+       tg_db_update_message(table_name, M, unique_id);
+}
 
-               char temp_media_id[50];
-               sprintf(temp_media_id, "%d",M->media.user_id);
+Eina_Bool is_chat_id_already_exists(struct tgl_chat *chat_info)
+{
+       // get chat name chat id from chat_info_table
 
-               col_values = eina_list_append(col_values, temp_media_id);
-       } else if(M->media.type == tgl_message_media_unsupported) {
-               col_values = eina_list_append(col_values, (dummy_val));
-       } else if(M->media.type == tgl_message_media_photo_encr) {
+       int ret;
+       ret = tg_db_count_chat_info(CHAT_INFO_TABLE_NAME, chat_info);
+       return ret > 0 ? EINA_TRUE : EINA_FALSE;
+}
 
-               char temp_media_id[50];
-               sprintf(temp_media_id, "%lld",M->media.encr_photo.id);
+void insert_buddy_into_db(char* table_name, struct tgl_user* U)
+{
+       int ret;
 
-               col_values = eina_list_append(col_values, temp_media_id);
-       } else if(M->media.type == tgl_message_media_document_encr) {
+       if(!U) {
+               return;
+       }
 
-               char temp_media_id[50];
-               sprintf(temp_media_id, "%lld",M->media.document.id);
+       ret = tg_db_insert_user_info(table_name, U);
+       if (ret != 0) {
+               ret = tg_db_update_user_info(table_name, U);
+               if (ret != 0) {
 
-               col_values = eina_list_append(col_values, temp_media_id);
-       } else  {
-               col_values = eina_list_append(col_values, (dummy_val));
+               }
        }
+}
 
-       col_values = eina_list_append(col_values, &unique_id);
+void insert_chat_info_to_db(struct tgl_chat *chat_info, char* photo_path)
+{
+       if (!chat_info) {
+               return;
+       }
 
-       Eina_Bool ret = insert_table(table_name, col_names, col_types,col_values);
-       if(!ret) {
-               //("error: database creation failed");
-       } else {
+       tg_db_insert_chat_info(CHAT_INFO_TABLE_NAME, chat_info, photo_path);
+}
 
+void update_chat_info_to_db(struct tgl_chat *chat_info, char *photo_path)
+{
+       if (!chat_info) {
+               return;
        }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
 
+       tg_db_update_chat_info(CHAT_INFO_TABLE_NAME, chat_info, photo_path);
 }
 
-void update_msg_into_db(struct tgl_message *M, char* table_name, int unique_id)
+void update_buddy_pic_db(char* file_path, char* table_name, int id)
 {
-       if(!M) {
+       if (!file_path || !table_name) {
                return;
        }
 
-               Eina_List* col_names = NULL;
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
-               col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
-               if (unique_id != -1) {
-                       col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
-               }
-
-               Eina_List* col_types = NULL;
-               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);
-               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);
-               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_TEXT);
-               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_TEXT);
-               if (unique_id != -1) {
-                       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-               }
+       tg_db_update_user_photo(table_name, id, file_path, -1);
+}
 
-               Eina_List* col_values = NULL;
-               col_values = eina_list_append(col_values, &(M->id));
-               col_values = eina_list_append(col_values, &(M->flags));
-               col_values = eina_list_append(col_values, &(M->fwd_from_id.id));
-               col_values = eina_list_append(col_values, &(M->fwd_date));
-               col_values = eina_list_append(col_values, &(M->from_id.id));
-               col_values = eina_list_append(col_values, &(M->to_id.id));
-               col_values = eina_list_append(col_values, &(M->out));
-               col_values = eina_list_append(col_values, &(M->unread));
-               col_values = eina_list_append(col_values, &(M->date));
-               col_values = eina_list_append(col_values, &(M->service));
+/**
+ * @note
+ * This function is not used by tgl-service.
+ * Do we have to keep this from here??
+ */
+struct tgl_user* get_buddy_info(int buddy_id)
+{
+       struct tgl_user *user_info;
 
-               if(M->message)
-                       col_values = eina_list_append(col_values, M->message);
-               else
-                       col_values = eina_list_append(col_values, " ");
+       user_info = tg_db_get_user_info(BUDDY_INFO_TABLE_NAME, buddy_id);
 
-               col_values = eina_list_append(col_values, &(M->msg_state));
-               col_values = eina_list_append(col_values, &(M->message_len));
-               col_values = eina_list_append(col_values, &(M->media.type));
+       return user_info;
+}
 
-               char *dummy_val = "";
-               if(M->media.type == tgl_message_media_none) {
-                       col_values = eina_list_append(col_values, (dummy_val));
-               } else if(M->media.type == tgl_message_media_photo) {
-
-                       char temp_media_id[50];
-                       sprintf(temp_media_id, "%lld", M->media.photo.id);
-
-                       col_values = eina_list_append(col_values, temp_media_id);
-               } else if(M->media.type == tgl_message_media_document) {
-
-                       char temp_media_id[50];
-                       sprintf(temp_media_id, "%d", M->media.document.dc_id);
-
-                       col_values = eina_list_append(col_values, temp_media_id);
-               } else if(M->media.type == tgl_message_media_geo) {
-                       col_values = eina_list_append(col_values, (dummy_val));
-               } else if(M->media.type == tgl_message_media_contact) {
-
-                       char temp_media_id[50];
-                       sprintf(temp_media_id, "%d",M->media.user_id);
-
-                       col_values = eina_list_append(col_values, temp_media_id);
-               } else if(M->media.type == tgl_message_media_unsupported) {
-                       col_values = eina_list_append(col_values, (dummy_val));
-               } else if(M->media.type == tgl_message_media_photo_encr) {
-
-                       char temp_media_id[50];
-                       sprintf(temp_media_id, "%lld",M->media.encr_photo.id);
-
-                       col_values = eina_list_append(col_values, temp_media_id);
-               } else if(M->media.type == tgl_message_media_document_encr) {
-
-                       char temp_media_id[50];
-                       sprintf(temp_media_id, "%lld",M->media.document.id);
-
-                       col_values = eina_list_append(col_values, temp_media_id);
-               } else  {
-                       col_values = eina_list_append(col_values, (dummy_val));
-               }
-
-               if (unique_id != -1) {
-                       int u_id = unique_id;
-                       col_values = eina_list_append(col_values, &u_id);
-               }
-
-
-               char *where_clause = NULL;
-
-               if (unique_id > 0) {
-
-                       char usr_str[50];
-                       sprintf(usr_str,"%d",unique_id);
-                       where_clause = (char*)malloc(strlen(MESSAGE_INFO_TABLE_UNIQUE_ID) + strlen(" = ") + strlen(usr_str) + 1);
-                       strcpy(where_clause, MESSAGE_INFO_TABLE_UNIQUE_ID);
-                       strcat(where_clause, " = ");
-                       strcat(where_clause, usr_str);
-
-               } else {
-
-                       char usr_str[50];
-                       sprintf(usr_str,"%lld", M->id);
-                       where_clause = (char *)malloc(strlen(MESSAGE_INFO_TABLE_MESSAGE_ID) + strlen(" = ") + strlen(usr_str) + 1);
-                       strcpy(where_clause, MESSAGE_INFO_TABLE_MESSAGE_ID);
-                       strcat(where_clause, " = ");
-                       strcat(where_clause, usr_str);
-
-               }
-
-               Eina_Bool ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-
-               if(!ret) {
-                       //("error: database creation failed");
-               } else {
-
-               }
-               eina_list_free(col_names);
-               eina_list_free(col_types);
-               eina_list_free(col_values);
-}
-
-Eina_List* get_registered_user_info()
-{
-       Eina_List* user_details = NULL;
-
-               char* table_name = USER_INFO_TABLE_NAME;
-               Eina_List* col_names = NULL;
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
-               col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
-               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);
-
-               Eina_List* col_types = NULL;
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-               user_details = get_values_from_table_sync(table_name, col_names, col_types, NULL);
-
-               eina_list_free(col_names);
-               eina_list_free(col_types);
-       return user_details;
-}
-
-Eina_Bool is_chat_id_already_exists(struct tgl_chat *chat_info)
-{
-       // get chat name chat id from chat_info_table
-
-       char* table_name = CHAT_INFO_TABLE_NAME;
-
-       int chat_id = chat_info->id.id;
-       char chat_str[50];
-       sprintf(chat_str,"%d",chat_id);
-
-       char* where_clause = (char*)malloc(strlen(CHAT_INFO_TABLE_CHAT_ID) + strlen(" = ") + strlen(chat_str));
-       strcpy(where_clause, CHAT_INFO_TABLE_CHAT_ID);
-       strcat(where_clause, " = ");
-       strcat(where_clause, chat_str);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_TITLE);
-
-       Eina_List* vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause);
-
-       char* chat_name = NULL;
-
-       if(!vals) {
-               //("DB error");
-               return EINA_FALSE;
-       } else {
-               int row_count = eina_list_count(vals);
-
-               for (int i = 0 ; i < row_count ; i++) {
-                       Eina_List* row_vals = eina_list_nth(vals, i);
-                       chat_name = (char*)eina_list_nth(row_vals, 0);
-                       if(!chat_name) {
-                               //("DB Error");
-                               return EINA_FALSE;
-                       } else {
-                               break;
-                       }
-                       eina_list_free(row_vals);
-               }
-               eina_list_free(vals);
-       }
-
-       if(chat_name) {
-               free(chat_name);
-               return EINA_TRUE;
-       }
-
-       return EINA_FALSE;
-}
-
-void insert_buddy_into_db(char* table_name, struct tgl_user* U)
+void update_receive_media_info_in_db(long long media_id, char* file_path)
 {
-       if(!U) {
-               return;
-       }
-
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
-       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);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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));
-       if(U->print_name)
-               col_values = eina_list_append(col_values, U->print_name);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(U->structure_version));
-       col_values = eina_list_append(col_values, "");
-       col_values = eina_list_append(col_values, &(U->photo_id));
-
-       if(U->first_name)
-               col_values = eina_list_append(col_values, U->first_name);
-       else
-               col_values = eina_list_append(col_values, "");
-       if(U->last_name)
-               col_values = eina_list_append(col_values, U->last_name);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       if(U->phone)
-               col_values = eina_list_append(col_values, U->phone);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(U->access_hash));
-
-       if(U->real_first_name)
-               col_values = eina_list_append(col_values, U->real_first_name);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       if(U->real_last_name)
-               col_values = eina_list_append(col_values, U->real_last_name);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       if(U->username)
-               col_values = eina_list_append(col_values, U->username);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(U->status.online));
-       col_values = eina_list_append(col_values, &(U->status.when));
-
-       Eina_Bool ret = insert_table(table_name, col_names, col_types,col_values);
-       if(!ret) {
-               // already exist. So update the table
-               char* where_clause = NULL;
-               char user_id_str[50];
-               sprintf(user_id_str,"%d",U->id.id);
-               where_clause = (char*)malloc(strlen(USER_INFO_TABLE_USER_ID) + strlen(" = ") + strlen(user_id_str) + 1);
-               strcpy(where_clause, USER_INFO_TABLE_USER_ID);
-               strcat(where_clause, " = ");
-               strcat(where_clause, user_id_str);
-               ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-       } else {
-               // successfully inserted.
-       }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
-
+       tg_db_update_media_info_filepath(MEDIA_INFO_TABLE_NAME, media_id, file_path);
 }
 
-void insert_chat_info_to_db(struct tgl_chat *chat_info, char* photo_path)
+void insert_media_info_to_db(struct tgl_message *M, char* file_path)
 {
-       if (!chat_info) {
+       if(!M) {
                return;
        }
-       char* table_name = CHAT_INFO_TABLE_NAME;
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PRINT_TITLE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_STRUCT_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_TITLE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_NO_OF_USERS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_SIZE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_INVITER_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_USERS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_ADMIN_ID);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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, &(chat_info->id.id));
-       col_values = eina_list_append(col_values, &(chat_info->flags));
-
-       if(chat_info->print_title)
-               col_values = eina_list_append(col_values, chat_info->print_title);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(chat_info->structure_version));
-
-       long long photo_id = chat_info->photo.id;
-
-       char photo_id_str[50];
-       sprintf(photo_id_str, "%lld", photo_id);
-       col_values = eina_list_append(col_values, photo_id_str);
-
-       if (photo_path) {
-               col_values = eina_list_append(col_values, photo_path);
-       } else {
-               col_values = eina_list_append(col_values, " ");
-       }
-
-       if(chat_info->title)
-               col_values = eina_list_append(col_values, chat_info->title);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(chat_info->users_num));
-       col_values = eina_list_append(col_values, &(chat_info->user_list_size));
-       col_values = eina_list_append(col_values, &(chat_info->user_list_version));
-
-       int inventor_id = 0;
-       if (chat_info->user_list) {
-               inventor_id = chat_info->user_list[0].inviter_id;
-       }
-
-       col_values = eina_list_append(col_values, &(inventor_id));
-
-       /****** add chat users list ********/
-       char* full_ids = NULL;
-       if (chat_info->user_list) {
-               char* chat_user_ids[chat_info->user_list_size];
-               int total_len = 0;
-               for (int i = 0; i < chat_info->user_list_size; i++) {
-                       char temp_user_id[15];
-                       int temp_id = chat_info->user_list[i].user_id;
-                       sprintf(temp_user_id,"%d",temp_id);
-                       chat_user_ids[i] = (char*)malloc(strlen(temp_user_id) + 1);
-                       strcpy(chat_user_ids[i], temp_user_id);
-                       total_len = total_len + strlen(temp_user_id);
-                       total_len = total_len + 1; // delimitor
-               }
-
-               full_ids = (char*)malloc(total_len);
-               for (int i = 0; i < chat_info->user_list_size; i++) {
-                       if (i == 0) {
-                               strcpy(full_ids, chat_user_ids[i]);
-                       } else {
-                               strcat(full_ids, chat_user_ids[i]);
-                       }
-                       if (i < chat_info->user_list_size - 1) {
-                               strcat(full_ids, ",");
-                       }
-                       free(chat_user_ids[i]);
-               }
-       } else {
-               full_ids = (char*)malloc(2);
-               strcpy(full_ids, " ");
-       }
-
-       col_values = eina_list_append(col_values, full_ids);
-       /****** add chat users list ********/
-
-       col_values = eina_list_append(col_values, &(chat_info->date));
-       col_values = eina_list_append(col_values, &(chat_info->version));
-       col_values = eina_list_append(col_values, &(chat_info->admin_id));
 
-       Eina_Bool ret = insert_table(table_name, col_names, col_types,col_values);
-       if(!ret) {
-               // already exist. So update the table
-               char* where_clause = NULL;
-               char chat_id_str[50];
-               sprintf(chat_id_str,"%d", chat_info->id.id);
-               where_clause = (char*)malloc(strlen(CHAT_INFO_TABLE_CHAT_ID) + strlen(" = ") + strlen(chat_id_str) + 1);
-               strcpy(where_clause, CHAT_INFO_TABLE_CHAT_ID);
-               strcat(where_clause, " = ");
-               strcat(where_clause, chat_id_str);
-               ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-       } else {
-
-       }
-       free(full_ids);
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
+       tg_db_insert_media_info(MEDIA_INFO_TABLE_NAME, M, file_path);
 }
 
-void update_chat_info_to_db(struct tgl_chat *chat_info, char* photo_path)
+void update_sent_media_info_in_db(struct tgl_message *M, long long unique_val)
 {
-       if (!chat_info) {
+       long long id;
+       if(!M) {
                return;
        }
 
-       char* table_name = CHAT_INFO_TABLE_NAME;
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_FLAGS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PRINT_TITLE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_STRUCT_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_ID);
-       if (photo_path) {
-               col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_PATH);
-       }
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_TITLE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_NO_OF_USERS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_SIZE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_INVITER_ID);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_USERS);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_VERSION);
-       col_names = eina_list_append(col_names, CHAT_INFO_TABLE_ADMIN_ID);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       if (photo_path) {
-               col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       }
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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);
-       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, &(chat_info->id.id));
-       col_values = eina_list_append(col_values, &(chat_info->flags));
-
-       if(chat_info->print_title)
-               col_values = eina_list_append(col_values, chat_info->print_title);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(chat_info->structure_version));
-
-       long long photo_id = chat_info->photo.id;
-
-       char photo_id_str[50];
-       sprintf(photo_id_str, "%lld", photo_id);
-       col_values = eina_list_append(col_values, photo_id_str);
-
-       if (photo_path) {
-               col_values = eina_list_append(col_values, photo_path);
-       }
-
-       if(chat_info->title)
-               col_values = eina_list_append(col_values, chat_info->title);
-       else
-               col_values = eina_list_append(col_values, "");
-
-       col_values = eina_list_append(col_values, &(chat_info->users_num));
-       col_values = eina_list_append(col_values, &(chat_info->user_list_size));
-       col_values = eina_list_append(col_values, &(chat_info->user_list_version));
-
-       int inventor_id = 0;
-       if (chat_info->user_list) {
-               inventor_id = chat_info->user_list[0].inviter_id;
-       }
-
-       col_values = eina_list_append(col_values, &(inventor_id));
-
-       /****** add chat users list ********/
-       char* full_ids = NULL;
-       if (chat_info->user_list) {
-               char* chat_user_ids[chat_info->user_list_size];
-               int total_len = 0;
-               for (int i = 0; i < chat_info->user_list_size; i++) {
-                       char temp_user_id[15];
-                       int temp_id = chat_info->user_list[i].user_id;
-                       sprintf(temp_user_id,"%d",temp_id);
-                       chat_user_ids[i] = (char*)malloc(strlen(temp_user_id) + 1);
-                       strcpy(chat_user_ids[i], temp_user_id);
-                       total_len = total_len + strlen(temp_user_id);
-                       total_len = total_len + 1; // delimitor
-               }
-
-               full_ids = (char*)malloc(total_len);
-               for (int i = 0; i < chat_info->user_list_size; i++) {
-                       if (i == 0) {
-                               strcpy(full_ids, chat_user_ids[i]);
-                       } else {
-                               strcat(full_ids, chat_user_ids[i]);
-                       }
-                       if (i < chat_info->user_list_size - 1) {
-                               strcat(full_ids, ",");
-                       }
+       if (unique_val == 0) {
+               switch (M->media.type) {
+               case tgl_message_media_photo:
+                       id = M->media.photo.id;
+                       break;
+               case tgl_message_media_document:
+                       id = M->media.document.id;
+                       break;
+               default:
+                       /**
+                        * @note
+                        * To be handled.
+                        */
+                       id = 0;
+                       break;
                }
        } else {
-               full_ids = (char*)malloc(2);
-               strcpy(full_ids, " ");
-       }
-
-       col_values = eina_list_append(col_values, full_ids);
-       /****** add chat users list ********/
-
-       col_values = eina_list_append(col_values, &(chat_info->date));
-       col_values = eina_list_append(col_values, &(chat_info->version));
-       col_values = eina_list_append(col_values, &(chat_info->admin_id));
-
-       char* where_clause = NULL;
-
-       char chat_id_str[50];
-       sprintf(chat_id_str,"%d",chat_info->id.id);
-       where_clause = (char*)malloc(strlen(CHAT_INFO_TABLE_CHAT_ID) + strlen(" = ") + strlen(chat_id_str) + 1);
-       strcpy(where_clause, CHAT_INFO_TABLE_CHAT_ID);
-       strcat(where_clause, " = ");
-       strcat(where_clause, chat_id_str);
-
-       Eina_Bool ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-
-       if(!ret) {
-               // error handling
-       } else {
-
-       }
-
-       free(full_ids);
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
-}
-
-void update_buddy_pic_db(char* file_path, char* table_name, int id)
-{
-       if (!file_path || !table_name) {
-               return;
-       }
-
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-       Eina_List* col_values = NULL;
-       col_values = eina_list_append(col_values, file_path);
-
-       char* where_clause = NULL;
-
-       char usr_str[50];
-       sprintf(usr_str,"%d",id);
-       where_clause = (char*)malloc(strlen(USER_INFO_TABLE_USER_ID) + strlen(" = ") + strlen(usr_str) + 1);
-       strcpy(where_clause, USER_INFO_TABLE_USER_ID);
-       strcat(where_clause, " = ");
-       strcat(where_clause, usr_str);
-
-       Eina_Bool ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-
-       if(!ret) {
-               // error handling
-       } else {
-
-       }
-       free(where_clause);
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
-}
-
-Eina_List* get_buddy_info(int buddy_id)
-{
-       Eina_List* user_details = NULL;
-
-       char* table_name = BUDDY_INFO_TABLE_NAME;
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_BUDDY_ID);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PRINT_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_STRUCTURE_VERSION);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_PATH);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHOTO_ID);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_REAL_FIRST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_REAL_LAST_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_BUDDY_NAME);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_ONLINE_STATUS);
-       col_names = eina_list_append(col_names, BUDDY_INFO_TABLE_LAST_SEEN_TIME);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       char buddy_id_str[50];
-       sprintf(buddy_id_str, "%d", buddy_id);
-
-       char* where_clause = (char*)malloc(strlen(BUDDY_INFO_TABLE_BUDDY_ID) + strlen(" = ") + strlen(buddy_id_str) + 1);
-       strcpy(where_clause, BUDDY_INFO_TABLE_BUDDY_ID);
-       strcat(where_clause, " = ");
-       strcat(where_clause, buddy_id_str);
-
-       user_details = get_values_from_table_sync(table_name, col_names, col_types, where_clause);
-       free(where_clause);
-
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-
-       return user_details;
-}
-
-void update_receive_media_info_in_db(long long media_id, char* file_path)
-{
-       if(!file_path) {
-               return;
-       }
-       char* table_name = MEDIA_INFO_TABLE_NAME;
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-       Eina_List* col_values = NULL;
-       col_values = eina_list_append(col_values, file_path);
-
-       char media_id_str[50];
-       sprintf(media_id_str, "%lld", media_id);
-
-       char* where_clause = (char*)malloc(strlen(MEDIA_INFO_TABLE_MEDIA_ID) + strlen(" = '") + strlen(media_id_str) + strlen("'") + 1);
-       strcpy(where_clause, MEDIA_INFO_TABLE_MEDIA_ID);
-       strcat(where_clause, " = '");
-       strcat(where_clause, media_id_str);
-       strcat(where_clause, "'");
-
-       Eina_Bool ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-
-       if(!ret) {
-               // error handling
-       } else {
-
+               id = unique_val;
        }
-       free(where_clause);
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
 
+       tg_db_update_media_info_by_id(MEDIA_INFO_TABLE_NAME, M, id);
 }
-
-void insert_media_info_to_db(struct tgl_message *M, char* file_path)
-{
-       if(!M) {
-               return;
-       }
-
-       char* table_name = MEDIA_INFO_TABLE_NAME;
-
-
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_USER_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_CAPTION);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LONGITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LATITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_SIZES_NUM);
-
-
-       /********************************************************************/
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA1);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA2);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA3);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA4);
-
-
-       /********************************************************************/
-
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-       Eina_List* col_values = NULL;
-
-
-       int media_type = M->media.type;
-
-       if (media_type == tgl_message_media_photo) {
-
-               char photo_id_str[50];
-               sprintf(photo_id_str, "%lld", M->media.photo.id);
-
-               col_values = eina_list_append(col_values, photo_id_str);
-               col_values = eina_list_append(col_values, &(media_type));
-
-
-               char access_hash_str[50];
-               sprintf(access_hash_str, "%lld", M->media.photo.access_hash);
-
-               col_values = eina_list_append(col_values, access_hash_str);
-               col_values = eina_list_append(col_values, &(M->media.photo.user_id));
-               col_values = eina_list_append(col_values, &(M->media.photo.date));
-
-               if(M->media.photo.caption)
-                       col_values = eina_list_append(col_values, M->media.photo.caption);
-               else
-                       col_values = eina_list_append(col_values, "");
-
-               double longitude = M->media.photo.geo.longitude;
-               double latitude = M->media.photo.geo.latitude;
-
-               char long_str[50];
-               sprintf(long_str,"%lf",longitude);
-
-               char lat_str[50];
-               sprintf(lat_str,"%lf",latitude);
-
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, &(M->media.photo.sizes_num));
-
-
-               int i = 0;
-               for (i = 0; i < M->media.photo.sizes_num; i++) {
-                       //struct tgl_photo_size photo_size = M->media.photo->sizes[i];
-
-                       char* photo_type = M->media.photo.sizes[i].type;
-                       if(photo_type) {
-                               col_values = eina_list_append(col_values, photo_type);
-                       } else {
-                               col_values = eina_list_append(col_values, "");
-                       }
-
-                       int photo_loc_dc = M->media.photo.sizes[i].loc.dc;
-                       col_values = eina_list_append(col_values, &photo_loc_dc);
-
-
-
-                       char photo_loc_vol_str[50];
-                       sprintf(photo_loc_vol_str, "%lld", M->media.photo.sizes[i].loc.volume);
-
-                       col_values = eina_list_append(col_values, photo_loc_vol_str);
-
-                       int photo_loc_id = M->media.photo.sizes[i].loc.local_id;
-                       col_values = eina_list_append(col_values, &photo_loc_id);
-
-
-                       char photo_loc_sec_str[50];
-                       sprintf(photo_loc_sec_str, "%lld", M->media.photo.sizes[i].loc.secret);
-
-                       col_values = eina_list_append(col_values, photo_loc_sec_str);
-
-                       int photo_width = M->media.photo.sizes[i].w;
-                       col_values = eina_list_append(col_values, &photo_width);
-
-                       int photo_height = M->media.photo.sizes[i].h;
-                       col_values = eina_list_append(col_values, &photo_height);
-
-                       int pic_size = M->media.photo.sizes[i].size;
-                       col_values = eina_list_append(col_values, &pic_size);
-
-                       char* photo_data = M->media.photo.sizes[i].data;
-                       if (photo_data) {
-                               col_values = eina_list_append(col_values, photo_data);
-                       } else {
-                               col_values = eina_list_append(col_values, "");
-                       }
-               }
-
-               int j = i;
-               for (j = i; j < 4; j++) {
-
-                       char* photo_type = "";
-                       col_values = eina_list_append(col_values, photo_type);
-
-                       int photo_loc_dc = -1;
-                       col_values = eina_list_append(col_values, &photo_loc_dc);
-
-                       col_values = eina_list_append(col_values, "");
-
-                       int photo_loc_id = -1;
-                       col_values = eina_list_append(col_values, &photo_loc_id);
-
-
-                       col_values = eina_list_append(col_values, "");
-
-                       int photo_width = -1;
-                       col_values = eina_list_append(col_values, &photo_width);
-
-                       int photo_height = -1;
-                       col_values = eina_list_append(col_values, &photo_height);
-
-                       int photo_size = -1;
-                       col_values = eina_list_append(col_values, &photo_size);
-
-                       char* photo_data = "";
-                       col_values = eina_list_append(col_values, photo_data);
-
-               }
-
-
-       } else if (media_type == tgl_message_media_document) {
-
-               col_values = eina_list_append(col_values, &(M->media.document.id));
-               col_values = eina_list_append(col_values, &(media_type));
-               col_values = eina_list_append(col_values, &(M->media.document.access_hash));
-               col_values = eina_list_append(col_values, &(M->media.document.user_id));
-               col_values = eina_list_append(col_values, &(M->media.document.date));
-
-               if(M->media.document.caption)
-                       col_values = eina_list_append(col_values, M->media.document.caption);
-               else
-                       col_values = eina_list_append(col_values, "");
-
-               double longitude = 0.0f;
-               double latitude = 0.0f;
-
-               char long_str[50];
-               sprintf(long_str,"%lf",longitude);
-
-               char lat_str[50];
-               sprintf(lat_str,"%lf",latitude);
-
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, &(M->media.document.size));
-
-
-               for (int j = 0; j < 4; j++) {
-
-                       char *photo_type;
-                       int *photo_loc_dc;
-                       int *photo_loc_id;
-                       int *photo_width;
-                       int *photo_height;
-                       int *photo_size;
-                       char *photo_data;
-
-                       photo_type = strdup(" ");
-                       photo_loc_dc = malloc(sizeof(*photo_loc_dc));
-                       *photo_loc_dc = -1;
-                       photo_loc_id = malloc(sizeof(*photo_loc_id));
-                       *photo_loc_id = -1;
-                       photo_width = malloc(sizeof(*photo_width));
-                       *photo_width = -1;
-                       photo_height = malloc(sizeof(*photo_height));
-                       *photo_height = -1;
-                       photo_size = malloc(sizeof(*photo_size));
-                       *photo_size = -1;
-                       photo_data = strdup(" ");
-
-                       col_values = eina_list_append(col_values, photo_type);
-                       col_values = eina_list_append(col_values, photo_loc_dc);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_loc_id);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_width);
-                       col_values = eina_list_append(col_values, photo_height);
-                       col_values = eina_list_append(col_values, photo_size);
-                       col_values = eina_list_append(col_values, photo_data);
-
-               }
-       } else {
-               // To be checked
-               int dummy = 0;
-               col_values = eina_list_append(col_values, &(dummy));
-               col_values = eina_list_append(col_values, &(media_type));
-               col_values = eina_list_append(col_values, &(dummy));
-               col_values = eina_list_append(col_values, &(dummy));
-               col_values = eina_list_append(col_values, &(dummy));
-
-               col_values = eina_list_append(col_values, "");
-
-               double longitude = 0.0f;
-               double latitude = 0.0f;
-
-               char long_str[50];
-               sprintf(long_str,"%lf",longitude);
-
-               char lat_str[50];
-               sprintf(lat_str,"%lf",latitude);
-
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, &(dummy));
-
-               for (int j = 0; j < 4; j++) {
-
-                       char* photo_type = strdup(" ");
-                       int *photo_loc_dc = malloc(sizeof(*photo_loc_dc));
-                       int *photo_loc_vol = malloc(sizeof(*photo_loc_vol));
-                       int *photo_loc_id = malloc(sizeof(*photo_loc_id));
-                       int *photo_width = malloc(sizeof(*photo_width));
-                       int *photo_height = malloc(sizeof(*photo_height));
-                       int *photo_size = malloc(sizeof(*photo_size));
-                       char* photo_data = strdup(" ");
-
-                       *photo_loc_dc = -1;
-                       *photo_loc_vol = -1;
-                       *photo_loc_id = -1;
-                       *photo_width = -1;
-                       *photo_height = -1;
-                       *photo_size = -1;
-
-                       col_values = eina_list_append(col_values, photo_type);
-                       col_values = eina_list_append(col_values, photo_loc_dc);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_loc_id);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_width);
-                       col_values = eina_list_append(col_values, photo_height);
-                       col_values = eina_list_append(col_values, photo_size);
-                       col_values = eina_list_append(col_values, photo_data);
-               }
-       }
-
-       if(M->media.phone) {
-               //col_values = eina_list_append(col_values, M->media.phone);
-               col_values = eina_list_append(col_values, "");
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       if(M->media.first_name) {
-               //col_values = eina_list_append(col_values, M->media.first_name);
-               col_values = eina_list_append(col_values, "");
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       if(M->media.last_name) {
-               //col_values = eina_list_append(col_values, M->media.last_name);
-               col_values = eina_list_append(col_values, "");
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       if(file_path) {
-               col_values = eina_list_append(col_values, file_path);
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       Eina_Bool ret = insert_table(table_name, col_names, col_types,col_values);
-       if(!ret) {
-               //("error: database creation failed");
-       } else {
-
-       }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
-
-}
-
-void update_sent_media_info_in_db(struct tgl_message *M, long long unique_val)
-{
-       if(!M) {
-               return;
-       }
-       char* table_name = MEDIA_INFO_TABLE_NAME;
-
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_USER_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_CAPTION);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LONGITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LATITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_SIZES_NUM);
-
-
-       /********************************************************************/
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA1);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA2);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA3);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA4);
-
-
-       /********************************************************************/
-
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LAST_NAME);
-
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-
-       Eina_List* col_values = NULL;
-
-
-       int media_type = M->media.type;
-
-       if (media_type == tgl_message_media_photo) {
-
-               char photo_id_str[50];
-               sprintf(photo_id_str, "%lld", M->media.photo.id);
-
-               col_values = eina_list_append(col_values, photo_id_str);
-               col_values = eina_list_append(col_values, &(media_type));
-
-
-               char access_hash_str[50];
-               sprintf(access_hash_str, "%lld", M->media.photo.access_hash);
-
-               col_values = eina_list_append(col_values, access_hash_str);
-               col_values = eina_list_append(col_values, &(M->media.photo.user_id));
-               col_values = eina_list_append(col_values, &(M->media.photo.date));
-
-               if(M->media.photo.caption)
-                       col_values = eina_list_append(col_values, M->media.photo.caption);
-               else
-                       col_values = eina_list_append(col_values, "");
-
-               double longitude = M->media.photo.geo.longitude;
-               double latitude = M->media.photo.geo.latitude;
-
-               char long_str[50];
-               sprintf(long_str,"%lf",longitude);
-
-               char lat_str[50];
-               sprintf(lat_str,"%lf",latitude);
-
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, &(M->media.photo.sizes_num));
-
-
-               int i = 0;
-               for (i = 0; i < M->media.photo.sizes_num; i++) {
-                       //struct tgl_photo_size photo_size = M->media.photo->sizes[i];
-
-                       char* photo_type = M->media.photo.sizes[i].type;
-                       if(photo_type) {
-                               col_values = eina_list_append(col_values, photo_type);
-                       } else {
-                               col_values = eina_list_append(col_values, "");
-                       }
-
-                       int photo_loc_dc = M->media.photo.sizes[i].loc.dc;
-                       col_values = eina_list_append(col_values, &photo_loc_dc);
-
-
-
-                       char photo_loc_vol_str[50];
-                       sprintf(photo_loc_vol_str, "%lld", M->media.photo.sizes[i].loc.volume);
-
-                       col_values = eina_list_append(col_values, photo_loc_vol_str);
-
-                       int photo_loc_id = M->media.photo.sizes[i].loc.local_id;
-                       col_values = eina_list_append(col_values, &photo_loc_id);
-
-
-                       char photo_loc_sec_str[50];
-                       sprintf(photo_loc_sec_str, "%lld", M->media.photo.sizes[i].loc.secret);
-
-                       col_values = eina_list_append(col_values, photo_loc_sec_str);
-
-                       int photo_width = M->media.photo.sizes[i].w;
-                       col_values = eina_list_append(col_values, &photo_width);
-
-                       int photo_height = M->media.photo.sizes[i].h;
-                       col_values = eina_list_append(col_values, &photo_height);
-
-                       int pic_size = M->media.photo.sizes[i].size;
-                       col_values = eina_list_append(col_values, &pic_size);
-
-                       char* photo_data = M->media.photo.sizes[i].data;
-                       if (photo_data) {
-                               col_values = eina_list_append(col_values, photo_data);
-                       } else {
-                               col_values = eina_list_append(col_values, "");
-                       }
-               }
-
-               int j = i;
-               for (j = i; j < 4; j++) {
-
-                       char* photo_type = strdup(" ");
-                       int *photo_loc_dc = malloc(sizeof(*photo_loc_dc));
-                       int *photo_loc_vol = malloc(sizeof(*photo_loc_vol));
-                       int *photo_loc_id = malloc(sizeof(*photo_loc_id));
-                       int *photo_width = malloc(sizeof(*photo_width));
-                       int *photo_height = malloc(sizeof(*photo_height));
-                       int *photo_size = malloc(sizeof(*photo_size));
-                       char* photo_data = strdup(" ");
-
-                       *photo_loc_dc = -1;
-                       *photo_loc_vol = -1;
-                       *photo_loc_id = -1;
-                       *photo_width = -1;
-                       *photo_height = -1;
-                       *photo_size = -1;
-
-                       col_values = eina_list_append(col_values, photo_type);
-                       col_values = eina_list_append(col_values, photo_loc_dc);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_loc_id);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_width);
-                       col_values = eina_list_append(col_values, photo_height);
-                       col_values = eina_list_append(col_values, photo_size);
-                       col_values = eina_list_append(col_values, photo_data);
-
-               }
-
-
-       } else if (media_type == tgl_message_media_document) {
-
-               col_values = eina_list_append(col_values, &(M->media.document.id));
-               col_values = eina_list_append(col_values, &(media_type));
-               col_values = eina_list_append(col_values, &(M->media.document.access_hash));
-               col_values = eina_list_append(col_values, &(M->media.document.user_id));
-               col_values = eina_list_append(col_values, &(M->media.document.date));
-
-               if(M->media.document.caption)
-                       col_values = eina_list_append(col_values, M->media.document.caption);
-               else
-                       col_values = eina_list_append(col_values, "");
-
-               double longitude = 0.0f;
-               double latitude = 0.0f;
-
-               char long_str[50];
-               sprintf(long_str,"%lf",longitude);
-
-               char lat_str[50];
-               sprintf(lat_str,"%lf",latitude);
-
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, &(M->media.document.size));
-
-
-               for (int j = 0; j < 4; j++) {
-
-                       char* photo_type = strdup(" ");
-                       int *photo_loc_dc = malloc(sizeof(*photo_loc_dc));
-                       int *photo_loc_vol = malloc(sizeof(*photo_loc_vol));
-                       int *photo_loc_id = malloc(sizeof(*photo_loc_id));
-                       int *photo_width = malloc(sizeof(*photo_width));
-                       int *photo_height = malloc(sizeof(*photo_height));
-                       int *photo_size = malloc(sizeof(*photo_size));
-                       char* photo_data = strdup(" ");
-
-                       *photo_loc_dc = -1;
-                       *photo_loc_vol = -1;
-                       *photo_loc_id = -1;
-                       *photo_width = -1;
-                       *photo_height = -1;
-                       *photo_size = -1;
-
-                       col_values = eina_list_append(col_values, photo_type);
-                       col_values = eina_list_append(col_values, photo_loc_dc);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_loc_id);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_width);
-                       col_values = eina_list_append(col_values, photo_height);
-                       col_values = eina_list_append(col_values, photo_size);
-                       col_values = eina_list_append(col_values, photo_data);
-
-               }
-       } else {
-               // To be checked
-               int dummy = 0;
-               col_values = eina_list_append(col_values, &(dummy));
-               col_values = eina_list_append(col_values, &(media_type));
-               col_values = eina_list_append(col_values, &(dummy));
-               col_values = eina_list_append(col_values, &(dummy));
-               col_values = eina_list_append(col_values, &(dummy));
-
-               col_values = eina_list_append(col_values, "");
-
-               double longitude = 0.0f;
-               double latitude = 0.0f;
-
-               char long_str[50];
-               sprintf(long_str,"%lf",longitude);
-
-               char lat_str[50];
-               sprintf(lat_str,"%lf",latitude);
-
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, long_str);
-               col_values = eina_list_append(col_values, &(dummy));
-
-               for (int j = 0; j < 4; j++) {
-
-                       char* photo_type = strdup(" ");
-                       int *photo_loc_dc = malloc(sizeof(*photo_loc_dc));
-                       int *photo_loc_vol = malloc(sizeof(*photo_loc_vol));
-                       int *photo_loc_id = malloc(sizeof(*photo_loc_id));
-                       int *photo_width = malloc(sizeof(*photo_width));
-                       int *photo_height = malloc(sizeof(*photo_height));
-                       int *photo_size = malloc(sizeof(*photo_size));
-                       char* photo_data = strdup(" ");
-
-                       *photo_loc_dc = -1;
-                       *photo_loc_vol = -1;
-                       *photo_loc_id = -1;
-                       *photo_width = -1;
-                       *photo_height = -1;
-                       *photo_size = -1;
-
-                       col_values = eina_list_append(col_values, photo_type);
-                       col_values = eina_list_append(col_values, photo_loc_dc);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_loc_id);
-                       col_values = eina_list_append(col_values, strdup(" "));
-                       col_values = eina_list_append(col_values, photo_width);
-                       col_values = eina_list_append(col_values, photo_height);
-                       col_values = eina_list_append(col_values, photo_size);
-                       col_values = eina_list_append(col_values, photo_data);
-               }
-       }
-
-       if(M->media.phone) {
-               //col_values = eina_list_append(col_values, M->media.phone);
-               col_values = eina_list_append(col_values, "");
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       if(M->media.first_name) {
-               //col_values = eina_list_append(col_values, M->media.first_name);
-               col_values = eina_list_append(col_values, "");
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-       if(M->media.last_name) {
-               //col_values = eina_list_append(col_values, M->media.last_name);
-               col_values = eina_list_append(col_values, "");
-       } else {
-               col_values = eina_list_append(col_values, "");
-       }
-
-
-       char* where_clause = NULL;
-       if(unique_val != 0 ) {
-               char usr_str[50];
-               sprintf(usr_str,"%lld",unique_val);
-               where_clause = (char*)malloc(strlen(MEDIA_INFO_TABLE_MEDIA_ID) + strlen(" = '") + strlen(usr_str) + strlen("'") + 1);
-               strcpy(where_clause, MEDIA_INFO_TABLE_MEDIA_ID);
-               strcat(where_clause, " = '");
-               strcat(where_clause, usr_str);
-               strcat(where_clause, "'");
-       } else {
-               char usr_str[50];
-               sprintf(usr_str,"%lld",M->media.photo.id);
-               where_clause = (char*)malloc(strlen(MEDIA_INFO_TABLE_MEDIA_ID) + strlen(" = '") + strlen(usr_str) + strlen("'") + 1);
-               strcpy(where_clause, MEDIA_INFO_TABLE_MEDIA_ID);
-               strcat(where_clause, " = '");
-               strcat(where_clause, usr_str);
-               strcat(where_clause, "'");
-       }
-
-       Eina_Bool ret = update_table(table_name, col_names, col_types, col_values, where_clause);
-
-       if(!ret) {
-               //("error: database creation failed");
-       } else {
-
-       }
-       eina_list_free(col_names);
-       eina_list_free(col_types);
-       eina_list_free(col_values);
-
-}
-
-Eina_List* get_image_details_from_db(long long media_id)
-{
-       Eina_List* vals = NULL;
-
-       char* table_name = MEDIA_INFO_TABLE_NAME;
-
-       char usr_str[50];
-       sprintf(usr_str,"%lld",media_id);
-       char* where_clause = (char*)malloc(strlen(MEDIA_INFO_TABLE_MEDIA_ID) + strlen(" = ") + strlen(usr_str) + 1);
-       strcpy(where_clause, MEDIA_INFO_TABLE_MEDIA_ID);
-       strcat(where_clause, " = ");
-       strcat(where_clause, usr_str);
-
-       Eina_List* col_types = NULL;
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       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_TEXT);
-
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-       col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
-
-       Eina_List* col_names = NULL;
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_TYPE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_ACCESS_HASH);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_USER_ID);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DATE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_CAPTION);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LONGITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LATITUDE);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_SIZES_NUM);
-
-       /********************************************************************/
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA1);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA2);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA3);
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA4);
-
-       /********************************************************************/
-
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHONE_NO);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FIRST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LAST_NAME);
-       col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
-
-       vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause);
-
-       eina_list_free(col_types);
-       eina_list_free(col_names);
-
-       return vals;
-}
-
-
index 3600362..3dce7ff 100644 (file)
@@ -21,8 +21,7 @@ tg_server *tg_server_create()
 
 void tg_server_destroy(tg_server *proxy_cl)
 {
-       if (proxy_cl)
-       {
+       if (proxy_cl) {
                message_port_unregister_local_port(proxy_cl->local_port_id);
                free(proxy_cl->remote_port_name);
                free(proxy_cl->remote_app_name);
@@ -39,8 +38,7 @@ int tg_server_register_port(tg_server *proxy_cl, const char *const port_name)
        RETVM_IF(!port_name, result, "Message port name is NULL");
 
        int temp_id = message_port_register_local_port(port_name, _on_message_received_cb, proxy_cl);
-       if (temp_id < 0)
-       {
+       if (temp_id < 0) {
                _tg_server_convert_msg_port_result(temp_id);
                ERR("Failed to register local message port");
                proxy_cl->local_port_id = 0;
@@ -93,30 +91,25 @@ int _tg_server_set_remote_data(tg_server *proxy_cl, const char *rem_app_name, co
        char *temp_rem_app_name = NULL;
        char *temp_rem_port_name = NULL;
 
-       if (!proxy_cl->remote_app_name && rem_app_name)
-       {
+       if (!proxy_cl->remote_app_name && rem_app_name) {
                temp_rem_app_name = strdup(rem_app_name);
                RETVM_IF(!temp_rem_app_name, SVC_RES_FAIL,
                                "Failed to set remote application name. Strdup failed");
        }
 
-       if (!proxy_cl->remote_port_name && rem_port_name)
-       {
+       if (!proxy_cl->remote_port_name && rem_port_name) {
                temp_rem_port_name = strdup(rem_port_name);
-               if (!temp_rem_port_name)
-               {
+               if (!temp_rem_port_name) {
                        ERR("Failed to set remote port name. Strdup failed");
                        free(temp_rem_app_name);
                        return SVC_RES_FAIL;
                }
        }
 
-       if (temp_rem_app_name)
-       {
+       if (temp_rem_app_name) {
                proxy_cl->remote_app_name = temp_rem_app_name;
        }
-       if (temp_rem_port_name)
-       {
+       if (temp_rem_port_name) {
                proxy_cl->remote_port_name = temp_rem_port_name;
        }
 
@@ -168,13 +161,10 @@ static void _on_message_received_cb(int port_id, const char *rem_app_name, const
        int res = _tg_server_set_remote_data(proxy_cl, rem_app_name, rem_port_name);
        RETM_IF(res != SVC_RES_OK ,"Failed to set remote data to message port");
 
-       if (proxy_cl->cb_func)
-       {
+       if (proxy_cl->cb_func) {
                res = proxy_cl->cb_func(proxy_cl->cb_data, rec_msg);
                RETM_IF(res != SVC_RES_OK ,"Message port callback function failed");
-       }
-       else
-       {
+       } else {
                DBG("Message port callback function not set");
        }
 }
index 623fc4b..a8613a4 100644 (file)
@@ -10,6 +10,7 @@
 #include <Ecore.h>
 #include "tg_db_wrapper.h"
 #include "tgl-fetch.h"
+#include "tg_common.h"
 
 #define DC_SERIALIZED_MAGIC 0x868aa81d
 #define STATE_FILE_MAGIC 0x28949a93
@@ -723,7 +724,6 @@ void tg_notification(struct tgl_state *TLS, char *type, char *message)
 
 void tg_user_status_update(struct tgl_state *TLS, struct tgl_user *U)
 {
-
        if (tgl_get_peer_type (U->id) != TGL_PEER_USER) {
                return;
        }
@@ -737,7 +737,6 @@ void tg_user_status_update(struct tgl_state *TLS, struct tgl_user *U)
                        // newly created user
                } else {
                        // existing user
-
                }
 
                if (U->flags & FLAG_USER_SELF) {
@@ -1159,508 +1158,30 @@ void media_download_request(tg_engine_data_s *tg_data, int buddy_id, long long m
 {
 #if 1
        // get media details by mediaid
-       Eina_List* img_details = get_image_details_from_db(media_id);
+       int media_type;
+       void *media;
 
-       if(!img_details) {
+       media = tg_db_get_media_info(MEDIA_INFO_TABLE_NAME, media_id, &media_type);
+       if (!media) {
                send_media_download_completed_response(tg_data, buddy_id, media_id, NULL);
                return;
-       } else {
-
-               char *media_id_str = 0;
-               int media_type = 0;
-               char *access_hash_str = 0;
-               int user_id = 0;
-               int date = 0;
-               char *caption = 0;
-               char *longitude = 0;
-               char *latitude = 0;
-               int sizes = 0;
-               char *phone_no = 0;
-               char *first_name = 0;
-               char *last_name = 0;
-               char *file_path = 0;
-
-               char *photo_type1 = 0;
-               int photo_loc_dc1 = 0;
-               char *photo_loc_vol_str1 = 0;
-               int photo_loc_id1 = 0;
-               char *photo_loc_sec_str1 = 0;
-               int photo_width1 = 0;
-               int photo_height1 = 0;
-               int photo_size1 = 0;
-               char *photo_data1 = 0;
-
-               char *photo_type2 = 0;
-               int photo_loc_dc2 = 0;
-               char *photo_loc_vol_str2 = 0;
-               int photo_loc_id2 = 0;
-               char *photo_loc_sec_str2 = 0;
-               int photo_width2 = 0;
-               int photo_height2 = 0;
-               int photo_size2 = 0;
-               char *photo_data2 = 0;
-
-               char *photo_type3 = 0;
-               int photo_loc_dc3 = 0;
-               char *photo_loc_vol_str3 = 0;
-               int photo_loc_id3 = 0;
-               char *photo_loc_sec_str3 = 0;
-               int photo_width3 = 0;
-               int photo_height3 = 0;
-               int photo_size3 = 0;
-               char *photo_data3 = 0;
-
-               char *photo_type4 = 0;
-               int photo_loc_dc4 = 0;
-               char *photo_loc_vol_str4 = 0;
-               int photo_loc_id4 = 0;
-               char *photo_loc_sec_str4 = 0;
-               int photo_width4 = 0;
-               int photo_height4 = 0;
-               int photo_size4 = 0;
-               char *photo_data4 = 0;
-
-
-               int row_count = eina_list_count(img_details);
-
-               for (int i = 0 ; i < row_count ; i++) {
-                       Eina_List* row_vals = eina_list_nth(img_details, i);
-
-                       char *temp_media_id = (char *)eina_list_nth(row_vals, 0);
-
-                       if(temp_media_id) {
-                               media_id_str = strdup(temp_media_id);
-                               free(temp_media_id);
-                       }
-
-                       int* temp_media_type = (int*)eina_list_nth(row_vals, 1);
-
-                       if(temp_media_type) {
-                               media_type = *temp_media_type;
-                               free(temp_media_type);
-                       }
-
-                       char *temp_access_hash = (char *)eina_list_nth(row_vals, 2);
-
-                       if(temp_access_hash) {
-                               access_hash_str = strdup(temp_access_hash);
-                               free(temp_access_hash);
-                       }
-
-                       int* temp_user_id = (int*)eina_list_nth(row_vals, 3);
-
-                       if(temp_user_id) {
-                               user_id = *temp_user_id;
-                               free(temp_user_id);
-                       }
-
-                       int* temp_date = (int*)eina_list_nth(row_vals, 4);
-
-                       if(temp_date) {
-                               date = *temp_date;
-                               free(temp_date);
-                       }
-
-                       char *temp_caption = (char *)eina_list_nth(row_vals, 5);
-
-                       if(temp_caption) {
-                               caption = strdup(temp_caption);
-                               free(temp_caption);
-                       }
-
-                       char *temp_longitude = (char *)eina_list_nth(row_vals, 6);
-
-                       if(temp_longitude) {
-                               longitude = strdup(temp_longitude);
-                               free(temp_longitude);
-                       }
-
-                       char *temp_latitude = (char *)eina_list_nth(row_vals, 7);
-
-                       if(temp_latitude) {
-                               latitude = strdup(temp_latitude);
-                               free(temp_latitude);
-                       }
-
-                       int* temp_sizes = (int*)eina_list_nth(row_vals, 8);
-
-                       if(temp_sizes) {
-                               sizes = *temp_sizes;
-                               free(temp_sizes);
-                       }
-
-                       /***************************************************************/
-
-                       char *temp_photo_type1 = (char *)eina_list_nth(row_vals, 9);
-                       if (temp_photo_type1 && strlen(temp_photo_type1) > 0) {
-                               photo_type1 =strdup(temp_photo_type1);
-                               free(temp_photo_type1);
-                       }
-
-
-                       int* temp_photo_loc_dc1 = (int*)eina_list_nth(row_vals, 10);
-                       if (temp_photo_loc_dc1) {
-                               photo_loc_dc1 = *temp_photo_loc_dc1;
-                               free(temp_photo_loc_dc1);
-                       }
-
-
-                       char *temp_photo_loc_vol1 = (char *)eina_list_nth(row_vals, 11);
-                       if(temp_photo_loc_vol1 && strlen(temp_photo_loc_vol1) > 0) {
-                               photo_loc_vol_str1 = strdup(temp_photo_loc_vol1);
-                               free(temp_photo_loc_vol1);
-                       }
-
-
-                       int* temp_photo_loc_id1 = (int*)eina_list_nth(row_vals, 12);
-                       if (temp_photo_loc_id1) {
-                               photo_loc_id1 = *temp_photo_loc_id1;
-                               free(temp_photo_loc_id1);
-                       }
-
-                       char *temp_photo_loc_sec1 = (char *)eina_list_nth(row_vals, 13);
-                       if(temp_photo_loc_sec1 && strlen(temp_photo_loc_sec1) > 0) {
-                               photo_loc_sec_str1 = strdup(temp_photo_loc_sec1);
-                               free(temp_photo_loc_sec1);
-                       }
-
-
-                       int* temp_photo_width1 = (int*)eina_list_nth(row_vals, 14);
-                       if(temp_photo_width1) {
-                               photo_width1 = *temp_photo_width1;
-                               free(temp_photo_width1);
-                       }
-
-
-                       int* temp_photo_height1 = (int*)eina_list_nth(row_vals, 15);
-                       if(temp_photo_height1) {
-                               photo_height1 = *temp_photo_height1;
-                               free(temp_photo_height1);
-                       }
-
-                       int* temp_photo_size1 = (int*)eina_list_nth(row_vals, 16);
-                       if(temp_photo_size1) {
-                               photo_size1 = *temp_photo_size1;
-                               free(temp_photo_size1);
-                       }
-
-
-                       char *temp_photo_data1 = (char *)eina_list_nth(row_vals, 17);
-                       if(temp_photo_data1 && strlen(temp_photo_data1) > 0) {
-                               photo_data1 = strdup(temp_photo_data1);
-                               free(temp_photo_data1);
-                       }
-
-
-                       char *temp_photo_type2 = (char *)eina_list_nth(row_vals, 18);
-                       if (temp_photo_type2 && strlen(temp_photo_type2) > 0) {
-                               photo_type2 =strdup(temp_photo_type2);
-                               free(temp_photo_type2);
-                       }
-
-
-                       int* temp_photo_loc_dc2 = (int*)eina_list_nth(row_vals, 19);
-                       if (temp_photo_loc_dc2) {
-                               photo_loc_dc2 = *temp_photo_loc_dc2;
-                               free(temp_photo_loc_dc2);
-                       }
-
-
-                       char *temp_photo_loc_vol2 = (char *)eina_list_nth(row_vals, 20);
-                       if(temp_photo_loc_vol2 && strlen(temp_photo_loc_vol2) > 0) {
-                               photo_loc_vol_str2 = strdup(temp_photo_loc_vol2);
-                               free(temp_photo_loc_vol2);
-                       }
-
-
-                       int* temp_photo_loc_id2 = (int*)eina_list_nth(row_vals, 21);
-                       if (temp_photo_loc_id2) {
-                               photo_loc_id2 = *temp_photo_loc_id2;
-                               free(temp_photo_loc_id2);
-                       }
-
-                       char *temp_photo_loc_sec2 = (char *)eina_list_nth(row_vals, 22);
-                       if(temp_photo_loc_sec2 && strlen(temp_photo_loc_sec2) > 0) {
-                               photo_loc_sec_str2 = strdup(temp_photo_loc_sec2);
-                               free(temp_photo_loc_sec2);
-                       }
-
-
-                       int* temp_photo_width2 = (int*)eina_list_nth(row_vals, 23);
-                       if(temp_photo_width2) {
-                               photo_width2 = *temp_photo_width2;
-                               free(temp_photo_width2);
-                       }
-
-
-                       int* temp_photo_height2 = (int*)eina_list_nth(row_vals, 24);
-                       if(temp_photo_height2) {
-                               photo_height2 = *temp_photo_height2;
-                               free(temp_photo_height2);
-                       }
-
-                       int* temp_photo_size2 = (int*)eina_list_nth(row_vals, 25);
-                       if(temp_photo_size2) {
-                               photo_size2 = *temp_photo_size2;
-                               free(temp_photo_size2);
-                       }
-
-
-                       char *temp_photo_data2 = (char *)eina_list_nth(row_vals, 26);
-                       if(temp_photo_data2 && strlen(temp_photo_data2) > 0) {
-                               photo_data2 = strdup(temp_photo_data2);
-                               free(temp_photo_data2);
-                       }
-
-                       char *temp_photo_type3 = (char *)eina_list_nth(row_vals, 27);
-                       if (temp_photo_type3 && strlen(temp_photo_type3) > 0) {
-                               photo_type3 =strdup(temp_photo_type3);
-                               free(temp_photo_type3);
-                       }
-
-
-                       int* temp_photo_loc_dc3 = (int*)eina_list_nth(row_vals, 28);
-                       if (temp_photo_loc_dc3) {
-                               photo_loc_dc3 = *temp_photo_loc_dc3;
-                               free(temp_photo_loc_dc3);
-                       }
-
-
-                       char *temp_photo_loc_vol3 = (char *)eina_list_nth(row_vals, 29);
-                       if(temp_photo_loc_vol3 && strlen(temp_photo_loc_vol3) > 0) {
-                               photo_loc_vol_str3 = strdup(temp_photo_loc_vol3);
-                               free(temp_photo_loc_vol3);
-                       }
-
-
-                       int* temp_photo_loc_id3 = (int*)eina_list_nth(row_vals, 30);
-                       if (temp_photo_loc_id3) {
-                               photo_loc_id3 = *temp_photo_loc_id3;
-                               free(temp_photo_loc_id3);
-                       }
-
-                       char *temp_photo_loc_sec3 = (char *)eina_list_nth(row_vals, 31);
-                       if(temp_photo_loc_sec3 && strlen(temp_photo_loc_sec3) > 0) {
-                               photo_loc_sec_str3 = strdup(temp_photo_loc_sec3);
-                               free(temp_photo_loc_sec3);
-                       }
-
-
-                       int* temp_photo_width3 = (int*)eina_list_nth(row_vals, 32);
-                       if(temp_photo_width3) {
-                               photo_width3 = *temp_photo_width3;
-                               free(temp_photo_width3);
-                       }
-
-
-                       int* temp_photo_height3 = (int*)eina_list_nth(row_vals, 33);
-                       if(temp_photo_height3) {
-                               photo_height3 = *temp_photo_height3;
-                               free(temp_photo_height3);
-                       }
-
-                       int* temp_photo_size3 = (int*)eina_list_nth(row_vals, 34);
-                       if(temp_photo_size3) {
-                               photo_size3 = *temp_photo_size3;
-                               free(temp_photo_size3);
-                       }
-
-
-                       char *temp_photo_data3 = (char *)eina_list_nth(row_vals, 35);
-                       if(temp_photo_data3 && strlen(temp_photo_data3) > 0) {
-                               photo_data3 = strdup(temp_photo_data3);
-                               free(temp_photo_data3);
-                       }
-
-                       char *temp_photo_type4 = (char *)eina_list_nth(row_vals, 36);
-                       if (temp_photo_type4 && strlen(temp_photo_type4) > 0) {
-                               photo_type4 =strdup(temp_photo_type4);
-                               free(temp_photo_type4);
-                       }
-
-
-                       int* temp_photo_loc_dc4 = (int*)eina_list_nth(row_vals, 37);
-                       if (temp_photo_loc_dc4) {
-                               photo_loc_dc4 = *temp_photo_loc_dc4;
-                               free(temp_photo_loc_dc4);
-                       }
-
-
-                       char *temp_photo_loc_vol4 = (char *)eina_list_nth(row_vals, 38);
-                       if(temp_photo_loc_vol4 && strlen(temp_photo_loc_vol4) > 0) {
-                               photo_loc_vol_str4 = strdup(temp_photo_loc_vol4);
-                               free(temp_photo_loc_vol4);
-                       }
-
-
-                       int* temp_photo_loc_id4 = (int*)eina_list_nth(row_vals, 39);
-                       if (temp_photo_loc_id4) {
-                               photo_loc_id4 = *temp_photo_loc_id4;
-                               free(temp_photo_loc_id4);
-                       }
-
-                       char *temp_photo_loc_sec4 = (char *)eina_list_nth(row_vals, 40);
-                       if(temp_photo_loc_sec4 && strlen(temp_photo_loc_sec4) > 0) {
-                               photo_loc_sec_str4 = strdup(temp_photo_loc_sec4);
-                               free(temp_photo_loc_sec4);
-                       }
-
-
-                       int* temp_photo_width4 = (int*)eina_list_nth(row_vals, 41);
-                       if(temp_photo_width4) {
-                               photo_width4 = *temp_photo_width4;
-                               free(temp_photo_width4);
-                       }
-
-
-                       int* temp_photo_height4 = (int*)eina_list_nth(row_vals, 42);
-                       if(temp_photo_height4) {
-                               photo_height4 = *temp_photo_height4;
-                               free(temp_photo_height4);
-                       }
-
-                       int* temp_photo_size4 = (int*)eina_list_nth(row_vals, 43);
-                       if(temp_photo_size4) {
-                               photo_size4 = *temp_photo_size4;
-                               free(temp_photo_size4);
-                       }
-
-
-                       char *temp_photo_data4 = (char *)eina_list_nth(row_vals, 44);
-                       if(temp_photo_data4 && strlen(temp_photo_data4) > 0) {
-                               photo_data4 = strdup(temp_photo_data4);
-                               free(temp_photo_data4);
-                       }
-
-
-                       /**************************************************************/
-
-                       char *temp_phone_no = (char *)eina_list_nth(row_vals, 45);
-
-                       if(temp_phone_no && strlen(temp_phone_no) > 0) {
-                               phone_no = strdup(temp_phone_no);
-                               free(temp_phone_no);
-                       }
-
-                       char *temp_first_name = (char *)eina_list_nth(row_vals, 46);
-
-                       if(temp_first_name && strlen(temp_first_name) > 0) {
-                               first_name = strdup(temp_first_name);
-                               free(temp_first_name);
-                       }
-
-                       char *temp_last_name = (char *)eina_list_nth(row_vals, 47);
-
-                       if(temp_last_name && strlen(temp_last_name) > 0) {
-                               last_name = strdup(temp_last_name);
-                               free(temp_last_name);
-                       }
-
-                       char *temp_file_path = (char *)eina_list_nth(row_vals, 48);
-
-                       if(temp_file_path && strlen(temp_file_path) > 0) {
-                               file_path = strdup(temp_file_path);
-                               free(temp_file_path);
-                       }
-                       break;
-                       eina_list_free(row_vals);
-               }
-
-               if (media_type == tgl_message_media_none) {
-
-               } else if (media_type == tgl_message_media_photo) {
-
-                       long long media_id = atoll(media_id_str);
-                       long long access_hash = atoll(access_hash_str);
-
-                       struct tgl_photo* photo_prop = (struct tgl_photo*)malloc(sizeof(struct tgl_photo));
-                       photo_prop->id = media_id;
-                       photo_prop->access_hash = access_hash;
-                       photo_prop->user_id = user_id;
-                       photo_prop->date = date;
-                       photo_prop->caption = caption;
-                       photo_prop->geo.latitude = atof(latitude);
-                       photo_prop->geo.longitude = atof(longitude);
-                       photo_prop->sizes_num = sizes;
-
-                       photo_prop->sizes = talloc(sizeof(struct tgl_photo_size) * photo_prop->sizes_num);
-                       int i;
-                       for (i = 0; i < photo_prop->sizes_num; i++) {
-
-                               if (i == 0) {
-                                       photo_prop->sizes[i].w = photo_width1;
-                                       photo_prop->sizes[i].h = photo_height1;
-                                       photo_prop->sizes[i].size = photo_size1;
-                                       if(photo_data1) {
-                                               photo_prop->sizes[i].data = strdup(photo_data1);
-                                       }
-                                       if(photo_type1) {
-                                               photo_prop->sizes[i].type = strdup(photo_type1);
-                                       }
-                                       photo_prop->sizes[i].loc.dc = photo_loc_dc1;
-                                       photo_prop->sizes[i].loc.local_id = photo_loc_id1;
-                                       photo_prop->sizes[i].loc.secret = atoll(photo_loc_sec_str1);
-                                       photo_prop->sizes[i].loc.volume = atoll(photo_loc_vol_str1);
-                               } else if (i == 1) {
-
-                                       photo_prop->sizes[i].w = photo_width2;
-                                       photo_prop->sizes[i].h = photo_height2;
-                                       photo_prop->sizes[i].size = photo_size2;
-                                       if(photo_data2) {
-                                               photo_prop->sizes[i].data = strdup(photo_data2);
-                                       }
-                                       if(photo_type2) {
-                                               photo_prop->sizes[i].type = strdup(photo_type2);
-                                       }
-                                       photo_prop->sizes[i].loc.dc = photo_loc_dc2;
-                                       photo_prop->sizes[i].loc.local_id = photo_loc_id2;
-                                       photo_prop->sizes[i].loc.secret = atoll(photo_loc_sec_str2);
-                                       photo_prop->sizes[i].loc.volume = atoll(photo_loc_vol_str2);
-
-                               } else if (i == 2) {
-
-                                       photo_prop->sizes[i].w = photo_width3;
-                                       photo_prop->sizes[i].h = photo_height3;
-                                       photo_prop->sizes[i].size = photo_size3;
-                                       if(photo_data3) {
-                                               photo_prop->sizes[i].data = strdup(photo_data3);
-                                       }
-                                       if(photo_type3) {
-                                               photo_prop->sizes[i].type = strdup(photo_type3);
-                                       }
-                                       photo_prop->sizes[i].loc.dc = photo_loc_dc3;
-                                       photo_prop->sizes[i].loc.local_id = photo_loc_id3;
-                                       photo_prop->sizes[i].loc.secret = atoll(photo_loc_sec_str3);
-                                       photo_prop->sizes[i].loc.volume = atoll(photo_loc_vol_str3);
-
-                               } else if (i == 3) {
-
-                                       photo_prop->sizes[i].w = photo_width4;
-                                       photo_prop->sizes[i].h = photo_height4;
-                                       photo_prop->sizes[i].size = photo_size4;
-                                       if(photo_data4) {
-                                               photo_prop->sizes[i].data = strdup(photo_data4);
-                                       }
-                                       if(photo_type4) {
-                                               photo_prop->sizes[i].type = strdup(photo_type4);
-                                       }
-                                       photo_prop->sizes[i].loc.dc = photo_loc_dc4;
-                                       photo_prop->sizes[i].loc.local_id = photo_loc_id4;
-                                       photo_prop->sizes[i].loc.secret = atoll(photo_loc_sec_str4);
-                                       photo_prop->sizes[i].loc.volume = atoll(photo_loc_vol_str4);
-
-
-                               } else {
-
-                               }
-
-                       }
-
-                       tgl_do_load_photo(s_info.TLS, photo_prop ,&on_image_download_completed, photo_prop);
+       }
 
-               } else {
+       if (media_type == tgl_message_media_photo) {
+               struct tgl_photo *photo = media;
+               tgl_do_load_photo(s_info.TLS, photo, &on_image_download_completed, photo);
+               /**
+                * @note
+                * After this, what happens to "photo"?
+                * Is it released automatically?
+                */
+       } else if (media_type == tgl_message_media_document) {
+               /**
+                * @todo
+                * implements me
+                */
+       } else {
 
-               }
        }
 #endif
 }
diff --git a/tg-engine-service/tg_engine_utils/tg_common.c b/tg-engine-service/tg_engine_utils/tg_common.c
new file mode 100644 (file)
index 0000000..7eeaa54
--- /dev/null
@@ -0,0 +1,18 @@
+#include <stdio.h>
+#include <stdarg.h>
+#include "tg_common.h"
+
+const char *tg_common_to_string(const char *fmt, ...)
+{
+       va_list vp;
+       static char string_buffer[256];
+       int ret;
+
+       va_start(vp, fmt);
+       ret = vsnprintf(string_buffer, sizeof(string_buffer) - 1, fmt, vp);
+       va_end(vp);
+
+       return ret <= 0 ? NULL : string_buffer;
+}
+
+/* End of a file */
index be43315..66e1d83 100644 (file)
@@ -24,6 +24,8 @@ typedef enum MESSAGE_STATE {
        TG_MESSAGE_STATE_UNKNOWN
 } TG_MESSAGE_STATE;
 
+extern const char *tg_common_to_string(const char *fmt, ...);
+
 //static char* get_table_name_from_number(const char* phone_no)
 static inline char *get_table_name_from_number(const int id)
 {
index 1307a6a..26e9a0b 100644 (file)
@@ -20,6 +20,7 @@
         <privilege>http://tizen.org/privilege/appmanager.launch</privilege>
         <privilege>http://tizen.org/privilege/content.write</privilege>
         <privilege>http://tizen.org/privilege/push</privilege>
+        <privilege>http://tizen.org/privilege/alarm.get</privilege>
         <privilege>http://tizen.org/privilege/network.profile</privilege>
         <privilege>http://tizen.org/privilege/display</privilege>
         <privilege>http://tizen.org/privilege/account.read</privilege>
         <privilege>http://tizen.org/privilege/bluetooth</privilege>
         <privilege>http://tizen.org/privilege/mediastorage</privilege>
         <privilege>http://tizen.org/privilege/internet</privilege>
-        <privilege>http://tizen.org/privilege/network.set</privilege>
         <privilege>http://tizen.org/privilege/notification</privilege>
+        <privilege>http://tizen.org/privilege/network.set</privilege>
         <privilege>http://tizen.org/privilege/externalstorage.appdata</privilege>
         <privilege>http://tizen.org/privilege/contact.read</privilege>
     </privileges>
+    <feature name="http://tizen.org/feature/camera.front.flash">true</feature>
+    <feature name="http://tizen.org/feature/camera.back.flash">true</feature>
+    <feature name="http://tizen.org/feature/network.push">true</feature>
+    <feature name="http://tizen.org/feature/camera">true</feature>
+    <feature name="http://tizen.org/feature/network.wifi">true</feature>
+    <feature name="http://tizen.org/feature/camera.front">true</feature>
+    <feature name="http://tizen.org/feature/screen.size.all">true</feature>
+    <feature name="http://tizen.org/feature/network.telephony">true</feature>
+    <feature name="http://tizen.org/feature/camera.back">true</feature>
 </manifest>