add telegram account, fix db insert error.
[apps/native/telegram-tizen.git] / TelegramTizen / src / tg_db_wrapper.c
1 /*
2     This file is part of Telegram application for tizen
3
4     This library is free software; you can redistribute it and/or
5     modify it under the terms of the GNU Lesser General Public
6     License as published by the Free Software Foundation; either
7     version 2.1 of the License, or (at your option) any later version.
8
9     This library is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12     Lesser General Public License for more details.
13
14     You should have received a copy of the GNU Lesser General Public
15     License along with this library; if not, write to the Free Software
16     Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
17 */
18
19 #include "tg_db_wrapper.h"
20 #include <mime_type.h>
21 #include <utils_i18n.h>
22
23 static const char* g_empty_char = "";
24 static const char* g_zero_char = "0.000";
25 static const int g_base_int = -1;
26 static const int g_zero_int = 0;
27
28
29 Eina_Bool insert_unsent_message_to_db(const char *app_name, const char *command, const char *buddy_id, const char *msg_id, const char *msg_type, const char *msg_data, const char *type_of_chat)
30 {
31         Eina_Bool ret = EINA_FALSE;
32         if (!app_name || !command || !buddy_id || !msg_id || !msg_type || !msg_data || !type_of_chat)
33                 return ret;
34
35         char *table_name = MESSAGE_TRANSPORT_TABLE_NAME;
36         Eina_List *col_names = NULL;
37         col_names = NULL;
38         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_APP_NAME);
39         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_COMMAND);
40         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_BUDDY_ID);
41         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_MESSAGE_ID);
42         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_MESSAGE_TYPE);
43         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_MESSAGE_DATA);
44         col_names = eina_list_append(col_names, MESSAGE_TRANSPORT_TABLE_TYPE_OF_CHAT);
45
46         Eina_List *col_types = NULL;
47         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
48         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
49         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
50         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
51         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
52         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
53         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
54
55
56         Eina_List *col_values = NULL;
57         col_values = eina_list_append(col_values, app_name);
58         col_values = eina_list_append(col_values, command);
59         col_values = eina_list_append(col_values, buddy_id);
60         col_values = eina_list_append(col_values, msg_id);
61         col_values = eina_list_append(col_values, msg_type);
62         col_values = eina_list_append(col_values, msg_data);
63         col_values = eina_list_append(col_values, type_of_chat);
64
65
66         ret = insert_table(table_name, col_names, col_types, col_values);
67         if (!ret)
68                 LOGE("db table creation failed for %s", table_name);
69
70         eina_list_free(col_names);
71         eina_list_free(col_types);
72         eina_list_free(col_values);
73         return ret;
74 }
75
76 Eina_Bool insert_unsent_media_message_to_db(const char *app_name, const char *command, const char *buddy_id, const char *msg_id, const char *media_id, const char *msg_type, const char *file_path, const char *type_of_chat)
77 {
78         Eina_Bool ret = EINA_FALSE;
79
80         if (!app_name || !command || !buddy_id || !msg_id || !media_id || !msg_type || !file_path || !type_of_chat)
81                 return ret;
82
83
84         char *table_name = MEDIA_TRANSPORT_TABLE_NAME;
85         Eina_List *col_names = NULL;
86         col_names = NULL;
87         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_APP_NAME);
88         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_COMMAND);
89         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_BUDDY_ID);
90         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_MESSAGE_ID);
91         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_MEDIA_ID);
92         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_MESSAGE_TYPE);
93         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_FILE_PATH);
94         col_names = eina_list_append(col_names, MEDIA_TRANSPORT_TABLE_TYPE_OF_CHAT);
95
96         Eina_List *col_types = NULL;
97         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
98         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
99         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
100         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
101         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
102         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
103         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
104         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
105
106         Eina_List *col_values = NULL;
107         col_values = eina_list_append(col_values, app_name);
108         col_values = eina_list_append(col_values, command);
109         col_values = eina_list_append(col_values, buddy_id);
110         col_values = eina_list_append(col_values, msg_id);
111         col_values = eina_list_append(col_values, media_id);
112         col_values = eina_list_append(col_values, msg_type);
113         col_values = eina_list_append(col_values, file_path);
114         col_values = eina_list_append(col_values, type_of_chat);
115
116         ret = insert_table(table_name, col_names, col_types, col_values);
117         if (!ret)
118                         LOGE("db table creation failed for %s", table_name);
119
120         eina_list_free(col_names);
121         eina_list_free(col_types);
122         eina_list_free(col_values);
123         return ret;
124 }
125
126
127 Eina_List *get_all_peer_details(char *start_name)
128 {
129         Eina_List *peer_details = NULL;
130         char *table_name = PEER_INFO_TABLE_NAME;
131         Eina_List *col_names = NULL;
132
133         col_names = eina_list_append(col_names, PEER_INFO_TABLE_CHAT_ID);
134         col_names = eina_list_append(col_names, PEER_INFO_TABLE_PEER_TYPE);
135         col_names = eina_list_append(col_names, PEER_INFO_TABLE_FLAGS);
136         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_ID);
137         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_DATE);
138         col_names = eina_list_append(col_names, PEER_INFO_TABLE_PRINT_NAME);
139         col_names = eina_list_append(col_names, PEER_INFO_TABLE_STRUCT_VERSION);
140         col_names = eina_list_append(col_names, PEER_INFO_TABLE_NO_OF_UNREAD_MESSAGES);
141         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_SEEN_TIME);
142         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
143         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
144         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
145
146         Eina_List *col_types = NULL;
147         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
148         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
149         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
150         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
151         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
152         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
153         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
154         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
155         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
156         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
157         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
158         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
159
160         //peer_details = get_values_from_table_sync(db, table_name, col_names, col_types, NULL, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
161         char where_clause[1024] = { 0, };
162         char *wh_cs = NULL;
163         if (start_name) {
164                 snprintf(where_clause, sizeof(where_clause), PEER_INFO_TABLE_PRINT_NAME" LIKE '%s%s'", start_name, "%");
165                 wh_cs = where_clause;
166         }
167         peer_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, PEER_INFO_TABLE_LAST_MESSAGE_DATE, EINA_FALSE, wh_cs, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
168
169         eina_list_free(col_names);
170         eina_list_free(col_types);
171         return peer_details;
172 }
173
174 peer_with_pic_s* get_peer_info(int peer_id)
175 {
176         Eina_List *peer_details = NULL;
177         char *table_name = PEER_INFO_TABLE_NAME;
178         Eina_List *col_names = NULL;
179
180         col_names = eina_list_append(col_names, PEER_INFO_TABLE_CHAT_ID);
181         col_names = eina_list_append(col_names, PEER_INFO_TABLE_PEER_TYPE);
182         col_names = eina_list_append(col_names, PEER_INFO_TABLE_FLAGS);
183         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_ID);
184         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_DATE);
185         col_names = eina_list_append(col_names, PEER_INFO_TABLE_PRINT_NAME);
186         col_names = eina_list_append(col_names, PEER_INFO_TABLE_STRUCT_VERSION);
187         col_names = eina_list_append(col_names, PEER_INFO_TABLE_NO_OF_UNREAD_MESSAGES);
188         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_SEEN_TIME);
189         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
190         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
191         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
192
193         Eina_List *col_types = NULL;
194         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
195         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
196         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
197         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
198         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
199         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
200         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
201         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
202         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
203         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
204         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
205         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
206
207         char where_clause[1024];
208         sprintf(where_clause, PEER_INFO_TABLE_CHAT_ID" = %d", peer_id);
209
210         peer_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, PEER_INFO_TABLE_LAST_MESSAGE_DATE, EINA_FALSE, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
211
212         peer_with_pic_s *item = NULL;
213         Eina_List *ts_msg = NULL;
214
215         int pos = 0;
216         EINA_LIST_FREE(peer_details, ts_msg) {
217                 if (pos == 0) {
218                         tg_peer_info_s* peer_info = (tg_peer_info_s*)malloc(sizeof(tg_peer_info_s));
219
220                         int *temp_peer_id = (int *)eina_list_nth(ts_msg, 0);
221                         if (temp_peer_id) {
222                                 peer_info->peer_id  = *temp_peer_id;
223                                 free(temp_peer_id);
224                         }
225
226                         int *temp_peer_type = (int *)eina_list_nth(ts_msg, 1);
227                         if (temp_peer_type) {
228                                 peer_info->peer_type  = *temp_peer_type;
229                                 free(temp_peer_type);
230                         }
231
232                         int *temp_flags = (int *)eina_list_nth(ts_msg, 2);
233                         if (temp_flags) {
234                                 peer_info->flags = *temp_flags;
235                                 free(temp_flags);
236                         }
237
238                         char *temp_msg_id = (char *)eina_list_nth(ts_msg, 3);
239                         if (temp_msg_id) {
240                                 peer_info->last_msg_id  = atoll(temp_msg_id);
241                                 free(temp_msg_id);
242                         } else {
243                                 peer_info->last_msg_id = 0;
244                         }
245
246                         int *temp_last_msg_date = (int *)eina_list_nth(ts_msg, 4);
247                         if (temp_last_msg_date) {
248                                 peer_info->last_msg_date = *temp_last_msg_date;
249                                 free(temp_last_msg_date);
250                         }
251
252                         char *temp_print_name = (char *)eina_list_nth(ts_msg, 5);
253                         if (temp_print_name) {
254                                 peer_info->print_name  = strdup(temp_print_name);
255                                 free(temp_print_name);
256                         } else {
257                                 peer_info->print_name = NULL;
258                         }
259
260                         int *temp_struct_ver = (int *)eina_list_nth(ts_msg, 6);
261                         if (temp_struct_ver) {
262                                 peer_info->struct_version = *temp_struct_ver;
263                                 free(temp_struct_ver);
264                         }
265
266                         int *temp_no_unread = (int *)eina_list_nth(ts_msg, 7);
267                         if (temp_no_unread) {
268                                 peer_info->no_of_unread_msgs = *temp_no_unread;
269                                 free(temp_no_unread);
270                         }
271
272                         int *temp_last_seen = (int *)eina_list_nth(ts_msg, 8);
273                         if (temp_last_seen) {
274                                 peer_info->last_seen_time = *temp_last_seen;
275                                 free(temp_last_seen);
276                         }
277
278                         char *temp_pic_path = (char *)eina_list_nth(ts_msg, 9);
279                         if (temp_pic_path) {
280                                 peer_info->photo_path = strdup(temp_pic_path);
281                                 free(temp_pic_path);
282                         } else {
283                                 peer_info->photo_path = NULL;
284                         }
285
286                         int *temp_pic_id = (int *)eina_list_nth(ts_msg, 10);
287                         if (temp_pic_id) {
288                                 peer_info->photo_id = *temp_pic_id;
289                                 free(temp_pic_id);
290                         }
291                         int *temp_unknown = (int *)eina_list_nth(ts_msg, 11);
292                         if (temp_unknown) {
293                                 peer_info->is_unknown = *temp_unknown;
294                                 free(temp_unknown);
295                         }
296
297                         eina_list_free(ts_msg);
298
299                         item = (peer_with_pic_s*) malloc(sizeof(peer_with_pic_s));
300                         item->use_data = peer_info;
301                         item->contact_icon = NULL;
302                 } else {
303                         void *val = NULL;
304                         EINA_LIST_FREE(ts_msg, val) {
305                                 if (!val)
306                                         free(val);
307                         }
308                 }
309                 pos++;
310         }
311
312         eina_list_free(col_names);
313         eina_list_free(col_types);
314
315         return item;
316 }
317
318 Eina_List *get_group_chat_details()
319 {
320         Eina_List *chat_details = NULL;
321         char *table_name = CHAT_INFO_TABLE_NAME;
322         Eina_List *col_names = NULL;
323         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_ID);
324         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_FLAGS);
325         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PRINT_TITLE);
326         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_STRUCT_VERSION);
327         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_ID);
328         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_PATH);
329         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_TITLE);
330         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_NO_OF_USERS);
331         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_SIZE);
332         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_VERSION);
333         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_INVITER_ID);
334         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_USERS);
335         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_DATE);
336         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_VERSION);
337         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_ADMIN_ID);
338
339         Eina_List *col_types = NULL;
340         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
341         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
342         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
343         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
344         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
345         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
346         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
347         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
348         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
349         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
350         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
351         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
352         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
353         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
354         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
355
356         chat_details = get_values_from_table_sync(table_name, col_names, col_types, NULL, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
357
358         eina_list_free(col_names);
359         eina_list_free(col_types);
360
361         return chat_details;
362 }
363
364 tg_chat_info_s* get_chat_info(int chat_id)
365 {
366         Eina_List *chat_details = NULL;
367
368         char *table_name = CHAT_INFO_TABLE_NAME;
369         Eina_List *col_names = NULL;
370         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_ID);
371         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_FLAGS);
372         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PRINT_TITLE);
373         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_STRUCT_VERSION);
374         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_ID);
375         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_PHOTO_PATH);
376         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_TITLE);
377         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_NO_OF_USERS);
378         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_SIZE);
379         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_USER_LIST_VERSION);
380         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_INVITER_ID);
381         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_CHAT_USERS);
382         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_DATE);
383         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_VERSION);
384         col_names = eina_list_append(col_names, CHAT_INFO_TABLE_ADMIN_ID);
385
386         Eina_List *col_types = NULL;
387         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
388         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
389         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
390         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
391         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
392         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
393         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
394         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
395         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
396         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
397         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
398         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
399         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
400         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
401         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
402
403         char where_clause[1024];
404         sprintf(where_clause, CHAT_INFO_TABLE_CHAT_ID" = %d", chat_id);
405
406         chat_details = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
407
408         eina_list_free(col_names);
409         eina_list_free(col_types);
410
411         tg_chat_info_s* chat_info = NULL;
412         if (chat_details && eina_list_count(chat_details) > 0) {
413                 Eina_List *ts_msg = eina_list_nth(chat_details, 0);
414
415                 chat_info = (tg_chat_info_s*)malloc(sizeof(tg_chat_info_s));
416
417                 int *temp_chat_id = (int *)eina_list_nth(ts_msg, 0);
418                 if (temp_chat_id) {
419                         chat_info->chat_id  = *temp_chat_id;
420                         free(temp_chat_id);
421                 }
422
423                 int *temp_flags = (int *)eina_list_nth(ts_msg, 1);
424                 if (temp_flags) {
425                         chat_info->flags  = *temp_flags;
426                         free(temp_flags);
427                 }
428
429                 char *temp_print_title = (char *)eina_list_nth(ts_msg, 2);
430                 if (temp_print_title) {
431                         chat_info->print_title  = strdup(temp_print_title);
432                         free(temp_print_title);
433                 }
434
435                 int *temp_struct_ver = (int *)eina_list_nth(ts_msg, 3);
436                 if (temp_struct_ver) {
437                         chat_info->struct_version  = *temp_struct_ver;
438                         free(temp_struct_ver);
439                 }
440
441                 char *temp_photo_id = (char *)eina_list_nth(ts_msg, 4);
442                 if (temp_photo_id) {
443                         chat_info->photo_id  = atoll(temp_photo_id);
444                         free(temp_photo_id);
445                 }
446
447                 char *temp_photo_path = (char *)eina_list_nth(ts_msg, 5);
448                 if (temp_photo_path) {
449                         chat_info->photo_path  = strdup(temp_photo_path);
450                         free(temp_photo_path);
451                 }
452
453                 char *temp_title = (char *)eina_list_nth(ts_msg, 6);
454                 if (temp_title) {
455                         chat_info->title  = strdup(temp_title);
456                         free(temp_title);
457                 }
458
459                 int *temp_users_num = (int *)eina_list_nth(ts_msg, 7);
460                 if (temp_users_num) {
461                         chat_info->users_num  = *temp_users_num;
462                         free(temp_users_num);
463                 }
464
465                 int *temp_user_list_size = (int *)eina_list_nth(ts_msg, 8);
466                 if (temp_user_list_size) {
467                         chat_info->user_list_size  = *temp_user_list_size;
468                         free(temp_user_list_size);
469                 }
470
471                 int *temp_user_list_version = (int *)eina_list_nth(ts_msg, 9);
472                 if (temp_user_list_version) {
473                         chat_info->user_list_version  = *temp_user_list_version;
474                         free(temp_user_list_version);
475                 }
476
477                 int *temp_inviter_id = (int *)eina_list_nth(ts_msg, 10);
478                 if (temp_inviter_id) {
479                         chat_info->inviter_id  = *temp_inviter_id;
480                         free(temp_inviter_id);
481                 }
482
483                 char *temp_full_ids = (char *)eina_list_nth(ts_msg, 11);
484                 if (temp_full_ids) {
485                         char *item = strtok(temp_full_ids, ",");
486                         int count = 0;
487                         chat_info->chat_users[count] = atoi(item);
488
489                         while (item != NULL) {
490                                 count++;
491                                 item = strtok(NULL, ",");
492                                 if (item != NULL) {
493                                         chat_info->chat_users[count] = atoi(item);
494                                 }
495                         }
496                         free(temp_full_ids);
497                 }
498
499                 int *temp_date = (int *)eina_list_nth(ts_msg, 12);
500                 if (temp_date) {
501                         chat_info->date  = *temp_date;
502                         free(temp_date);
503                 }
504
505                 int *temp_version = (int *)eina_list_nth(ts_msg, 13);
506                 if (temp_version) {
507                         chat_info->version  = *temp_version;
508                         free(temp_version);
509                 }
510
511                 int *temp_admin_id = (int *)eina_list_nth(ts_msg, 14);
512                 if (temp_admin_id) {
513                         chat_info->admin_id  = *temp_admin_id;
514                         free(temp_admin_id);
515                 }
516                 eina_list_free(ts_msg);
517                 eina_list_free(chat_details);
518         }
519         return chat_info;
520 }
521
522 Eina_List *get_registered_user_info()
523 {
524         Eina_List *user_details = NULL;
525
526         char *table_name = USER_INFO_TABLE_NAME;
527         Eina_List *col_names = NULL;
528         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
529         col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
530         col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
531         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
532         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
533         col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
534         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
535         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
536         col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
537         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
538         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
539         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
540         col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS);
541         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_SEEN_TIME);
542
543         Eina_List *col_types = NULL;
544         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
545         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
546         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
547         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
548         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
549         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
550         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
551         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
552         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
553         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
554         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
555         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
556         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
557         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
558
559         user_details = get_values_from_table_sync(table_name, col_names, col_types, NULL, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
560
561         eina_list_free(col_names);
562         eina_list_free(col_types);
563
564         return user_details;
565 }
566
567 Eina_List *get_buddy_list_info()
568 {
569         Eina_List *user_details = NULL;
570
571         char *table_name = BUDDY_INFO_TABLE_NAME;
572         Eina_List *col_names = NULL;
573         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
574         col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
575         col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
576         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
577         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
578         col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
579         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
580         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
581         col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
582         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
583         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
584         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
585         col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS);
586         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_SEEN_TIME);
587         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_BLOCKED);
588         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_DELETED);
589         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
590
591
592         Eina_List *col_types = NULL;
593         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
594         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
595         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
596         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
597         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
598         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
599         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
600         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
601         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
602         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
603         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
604         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
605         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
606         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
607         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
608         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
609         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
610
611
612         char where_clause[1024];
613         sprintf(where_clause, USER_INFO_TABLE_IS_UNKNOWN_PEER" = 0 OR "USER_INFO_TABLE_IS_DELETED" = 0");
614
615         user_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, USER_INFO_TABLE_FIRST_NAME, EINA_TRUE, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
616
617         eina_list_free(col_names);
618         eina_list_free(col_types);
619
620         return user_details;
621 }
622
623 Eina_List *get_unknown_buddy_list_info()
624 {
625         Eina_List *user_details = NULL;
626
627         char *table_name = BUDDY_INFO_TABLE_NAME;
628         Eina_List *col_names = NULL;
629         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
630         col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
631         col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
632         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
633         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
634         col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
635         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
636         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
637         col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
638         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
639         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
640         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
641         col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS);
642         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_SEEN_TIME);
643         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_BLOCKED);
644         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_DELETED);
645         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
646
647
648         Eina_List *col_types = NULL;
649         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
650         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
651         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
652         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
653         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
654         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
655         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
656         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
657         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
658         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
659         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
660         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
661         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
662         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
663         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
664         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
665         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
666
667         char where_clause[1024];
668         sprintf(where_clause, USER_INFO_TABLE_IS_UNKNOWN_PEER" = 1 OR "USER_INFO_TABLE_IS_DELETED" = 1");
669
670         user_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, USER_INFO_TABLE_PRINT_NAME, EINA_TRUE, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
671
672         eina_list_free(col_names);
673         eina_list_free(col_types);
674
675         return user_details;
676 }
677
678 char *get_profile_pic_path(int buddy_id)
679 {
680         Eina_List *buddy_details_array = NULL;
681         char *profile_pic_path = NULL;
682
683         char *table_name = BUDDY_INFO_TABLE_NAME;
684         Eina_List *col_names = NULL;
685         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
686
687         Eina_List *col_types = NULL;
688         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
689
690
691         char where_clause[1024];
692         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
693
694         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
695
696         // buddy id is uniqe, there will be only one value.
697         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
698                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
699                 if (buddy_details && eina_list_count(buddy_details) > 0) {
700                         char *pic_path = (char *)eina_list_nth(buddy_details, 0);
701
702                         if (pic_path && strlen(pic_path) > 0) {
703                                 profile_pic_path = strdup(pic_path);
704                         }
705                         free(pic_path);
706                         eina_list_free(buddy_details);
707                 }
708                 eina_list_free(buddy_details_array);
709         }
710         eina_list_free(col_names);
711         eina_list_free(col_types);
712         return profile_pic_path;
713 }
714
715
716 char *get_buddy_name_from_id(int buddy_id)
717 {
718         Eina_List *buddy_details_array = NULL;
719         char *profile_name = NULL;
720
721         char *table_name = BUDDY_INFO_TABLE_NAME;
722         Eina_List *col_names = NULL;
723         col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
724
725         Eina_List *col_types = NULL;
726         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
727
728         char where_clause[1024];
729         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
730
731         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
732
733         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
734                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
735                 if (buddy_details && eina_list_count(buddy_details) > 0) {
736                         char *name = (char *)eina_list_nth(buddy_details, 0);
737                         if (name && strlen(name) > 0)
738                                 profile_name = strdup(name);
739                         free(name);
740                         eina_list_free(buddy_details);
741                 }
742
743                 eina_list_free(buddy_details_array);
744         }
745
746         eina_list_free(col_names);
747         eina_list_free(col_types);
748
749         return profile_name;
750 }
751
752 Eina_Bool is_phone_number_exists_in_buddy_list(const char *phone_num)
753 {
754         Eina_Bool is_exist = EINA_FALSE;
755         if (!phone_num)
756                 return is_exist;
757
758         char *table_name = BUDDY_INFO_TABLE_NAME;
759         Eina_List *col_names = NULL;
760         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
761
762         Eina_List *col_types = NULL;
763         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
764
765         char where_clause[1024];
766         sprintf(where_clause, USER_INFO_TABLE_PHONE_NO" LIKE '%s%s%s'", "%", phone_num, "%");
767         Eina_List *buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
768
769         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
770                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
771                 if (buddy_details && eina_list_count(buddy_details) > 0) {
772                         char *name = (char *)eina_list_nth(buddy_details, 0);
773
774                         if (name && strlen(name) > 0)
775                                 is_exist = EINA_TRUE;
776                         free(name);
777                         eina_list_free(buddy_details);
778                 }
779
780                 eina_list_free(buddy_details_array);
781         }
782
783         eina_list_free(col_names);
784         eina_list_free(col_types);
785         return is_exist;
786 }
787
788 char *get_buddy_phone_num_from_id(int buddy_id)
789 {
790         Eina_List *buddy_details_array = NULL;
791         char *phone_num = NULL;
792
793         char *table_name = BUDDY_INFO_TABLE_NAME;
794         Eina_List *col_names = NULL;
795         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
796
797         Eina_List *col_types = NULL;
798         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
799
800         char where_clause[1024];
801         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
802
803         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
804
805         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
806                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
807                 if (buddy_details && eina_list_count(buddy_details) > 0) {
808                         char *pn = (char *)eina_list_nth(buddy_details, 0);
809                         if (pn && strlen(pn) > 0)
810                                 phone_num = strdup(pn);
811                         free(pn);
812                         eina_list_free(buddy_details);
813                 }
814
815                 eina_list_free(buddy_details_array);
816         }
817
818         eina_list_free(col_names);
819         eina_list_free(col_types);
820
821         return phone_num;
822 }
823
824 int  get_buddy_block_status(int buddy_id)
825 {
826         Eina_List *buddy_details_array = NULL;
827
828         char *table_name = BUDDY_INFO_TABLE_NAME;
829         Eina_List *col_names = NULL;
830         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_BLOCKED);
831
832         Eina_List *col_types = NULL;
833         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
834
835         char where_clause[1024];
836         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
837
838         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
839
840         int is_unknown = 0;
841
842         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
843                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
844                 if (buddy_details && eina_list_count(buddy_details) > 0) {
845                         int *temp_unknown_status = (int *)eina_list_nth(buddy_details, 0);
846                         if (temp_unknown_status) {
847                                 is_unknown = *temp_unknown_status;
848                                 free(temp_unknown_status);
849                         }
850                         eina_list_free(buddy_details);
851                 }
852                 eina_list_free(buddy_details_array);
853         }
854
855         eina_list_free(col_names);
856         eina_list_free(col_types);
857
858         return is_unknown;
859 }
860
861 int  get_buddy_delete_status(int buddy_id)
862 {
863         Eina_List *buddy_details_array = NULL;
864
865         char *table_name = BUDDY_INFO_TABLE_NAME;
866         Eina_List *col_names = NULL;
867         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_DELETED);
868
869         Eina_List *col_types = NULL;
870         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
871
872         char where_clause[1024];
873         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
874
875         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
876
877         int is_unknown = 0;
878
879         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
880                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
881                 if (buddy_details && eina_list_count(buddy_details) > 0) {
882
883                         int *temp_unknown_status = (int *)eina_list_nth(buddy_details, 0);
884                         if (temp_unknown_status) {
885                                 is_unknown = *temp_unknown_status;
886                                 free(temp_unknown_status);
887                         }
888                         eina_list_free(buddy_details);
889                 }
890                 eina_list_free(buddy_details_array);
891         }
892
893         eina_list_free(col_names);
894         eina_list_free(col_types);
895
896         return is_unknown;
897 }
898
899 Eina_Bool is_telegram_account(int buddy_id)
900 {
901         if(buddy_id == 333000 || buddy_id == 777000)
902                 return EINA_TRUE;
903         return EINA_FALSE;
904 }
905
906 int  get_buddy_unknown_status(int buddy_id)
907 {
908         Eina_List *buddy_details_array = NULL;
909
910         char *table_name = BUDDY_INFO_TABLE_NAME;
911         Eina_List *col_names = NULL;
912         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
913
914         Eina_List *col_types = NULL;
915         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
916
917         char where_clause[1024];
918         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
919
920         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
921
922         int is_unknown = 0;
923
924         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
925                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
926                 if (buddy_details && eina_list_count(buddy_details) > 0) {
927
928                         int *temp_unknown_status = (int *)eina_list_nth(buddy_details, 0);
929                         if (temp_unknown_status) {
930                                 is_unknown = *temp_unknown_status;
931                                 free(temp_unknown_status);
932                         }
933                         eina_list_free(buddy_details);
934                 }
935                 eina_list_free(buddy_details_array);
936         }
937
938         eina_list_free(col_names);
939         eina_list_free(col_types);
940
941         return is_unknown;
942 }
943
944 int  get_buddy_online_status(int buddy_id)
945 {
946         Eina_List *buddy_details_array = NULL;
947
948         char *table_name = BUDDY_INFO_TABLE_NAME;
949         Eina_List *col_names = NULL;
950         col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS);
951
952         Eina_List *col_types = NULL;
953         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
954
955         char where_clause[1024];
956         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
957
958         buddy_details_array = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
959
960         int is_online = -1;
961
962         if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
963                 Eina_List *buddy_details = eina_list_nth(buddy_details_array, 0);
964                 if (buddy_details && eina_list_count(buddy_details) > 0) {
965
966                         int *temp_online_status = (int *)eina_list_nth(buddy_details, 0);
967                         if (temp_online_status) {
968                                 is_online = *temp_online_status;
969                                 free(temp_online_status);
970                         }
971                         eina_list_free(buddy_details);
972                 }
973                 eina_list_free(buddy_details_array);
974         }
975
976         eina_list_free(col_names);
977         eina_list_free(col_types);
978
979         return is_online;
980 }
981
982 Eina_List *get_buddy_info(int buddy_id)
983 {
984         Eina_List *user_details = NULL;
985
986         char *table_name = BUDDY_INFO_TABLE_NAME;
987         Eina_List *col_names = NULL;
988         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
989         col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
990         col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
991         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
992         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
993         col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
994         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
995         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
996         col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
997         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
998         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
999         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
1000         col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS);
1001         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_SEEN_TIME);
1002         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_BLOCKED);
1003         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_DELETED);
1004         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
1005
1006         Eina_List *col_types = NULL;
1007         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1008         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1009         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1010         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1011         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1012         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1013         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1014         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1015         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1016         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1017         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1018         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1019         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1020         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1021         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1022         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1023         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1024
1025         char where_clause[1024];
1026         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
1027
1028         user_details = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
1029
1030         eina_list_free(col_names);
1031         eina_list_free(col_types);
1032
1033         return user_details;
1034 }
1035
1036 int get_unread_message_count(char *table_name)
1037 {
1038         /* number of rows, having out == 1 and unread == 0 */
1039         if (!table_name)
1040                 return 0;
1041
1042         int num_of_rows = 0;
1043         char where_clause[1024];
1044         sprintf(where_clause, MESSAGE_INFO_TABLE_UNREAD " = 1 AND " MESSAGE_INFO_TABLE_OUT_MSG " != 1 AND " MESSAGE_INFO_TABLE_SERVICE " < 1 AND " MESSAGE_INFO_TABLE_MARKED_FOR_DELETE " != 1");
1045
1046         num_of_rows = get_number_of_rows(table_name, where_clause);
1047         return num_of_rows;
1048 }
1049
1050 tg_message_s *get_latest_message_from_message_table(char *table_name, Eina_Bool is_for_date)
1051 {
1052         tg_message_s *message = NULL;
1053
1054         Eina_List *message_details = NULL;
1055
1056         Eina_List *col_names = NULL;
1057         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
1058         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
1059         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
1060         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
1061         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
1062         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
1063         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
1064         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
1065         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
1066         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
1067         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
1068         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
1069         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
1070         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
1071         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
1072         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
1073         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MARKED_FOR_DELETE);
1074
1075         Eina_List *col_types = NULL;
1076         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1077         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1078         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1079         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1080         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1081         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1082         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1083         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1084         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1085         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1086         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1087         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1088         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1089         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1090         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1091         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1092         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1093
1094         char where_clause[1024] = { 0, };
1095         char *wh_c = NULL;
1096         if (!is_for_date) {
1097                 sprintf(where_clause, MESSAGE_INFO_TABLE_SERVICE " != 2 AND " MESSAGE_INFO_TABLE_MARKED_FOR_DELETE " != 1");
1098                 wh_c = where_clause;
1099         }
1100
1101         message_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, MESSAGE_INFO_TABLE_DATE, EINA_FALSE, wh_c, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
1102
1103         eina_list_free(col_types);
1104         eina_list_free(col_names);
1105
1106         if (message_details && eina_list_count(message_details) > 0) {
1107                 Eina_List *ts_msg = eina_list_nth(message_details, 0);
1108                 message = (tg_message_s*)malloc(sizeof(tg_message_s));
1109
1110                 int *temp_msg_id = (int *)eina_list_nth(ts_msg, 0);
1111                 if (temp_msg_id) {
1112                         message->msg_id  = *temp_msg_id;
1113                         free(temp_msg_id);
1114                 }
1115
1116                 int *temp_flags = (int *)eina_list_nth(ts_msg, 1);
1117                 if (temp_flags) {
1118                         message->flags  = *temp_flags;
1119                         free(temp_flags);
1120                 }
1121
1122                 int *temp_fwd_from_id = (int *)eina_list_nth(ts_msg, 2);
1123                 if (temp_fwd_from_id) {
1124                         message->fwd_from_id  = *temp_fwd_from_id;
1125                         free(temp_fwd_from_id);
1126                 }
1127
1128                 int *temp_fwd_date = (int *)eina_list_nth(ts_msg, 3);
1129                 if (temp_fwd_date) {
1130                         message->fwd_date  = *temp_fwd_date;
1131                         free(temp_fwd_date);
1132                 }
1133
1134                 int *temp_from_id = (int *)eina_list_nth(ts_msg, 4);
1135                 if (temp_from_id) {
1136                         message->from_id  = *temp_from_id;
1137                         free(temp_from_id);
1138                 }
1139
1140                 int *temp_to_id = (int *)eina_list_nth(ts_msg, 5);
1141                 if (temp_to_id) {
1142                         message->to_id  = *temp_to_id;
1143                         free(temp_to_id);
1144                 }
1145
1146                 int *temp_out = (int *)eina_list_nth(ts_msg, 6);
1147                 if (temp_out) {
1148                         message->out  = *temp_out;
1149                         free(temp_out);
1150                 }
1151
1152                 int *temp_unread = (int *)eina_list_nth(ts_msg, 7);
1153                 if (temp_unread) {
1154                         message->unread  = *temp_unread;
1155                         free(temp_unread);
1156                 }
1157
1158                 int *temp_date = (int *)eina_list_nth(ts_msg, 8);
1159                 if (temp_date) {
1160                         message->date  = *temp_date;
1161                         free(temp_date);
1162                 }
1163
1164                 int *temp_service = (int *)eina_list_nth(ts_msg, 9);
1165                 if (temp_service) {
1166                         message->service  = *temp_service;
1167                         free(temp_service);
1168                 }
1169
1170                 char *temp_msg = (char *)eina_list_nth(ts_msg, 10);
1171                 if (temp_msg) {
1172                         message->message  = strdup(temp_msg);
1173                         free(temp_msg);
1174                 }
1175
1176                 int *temp_message_state = (int *)eina_list_nth(ts_msg, 11);
1177                 if (temp_message_state) {
1178                         message->msg_state  = *temp_message_state;
1179                         free(temp_message_state);
1180                 }
1181
1182                 int *temp_message_len = (int *)eina_list_nth(ts_msg, 12);
1183                 if (temp_message_len) {
1184                         message->message_len  = *temp_message_len;
1185                         free(temp_message_len);
1186                 }
1187
1188                 int *temp_media_type = (int *)eina_list_nth(ts_msg, 13);
1189                 if (temp_media_type) {
1190                         message->media_type  = *temp_media_type;
1191                         free(temp_media_type);
1192                 }
1193
1194                 char *temp_media_id = (char *)eina_list_nth(ts_msg, 14);
1195                 if (temp_media_id) {
1196                         message->media_id  = strdup(temp_media_id);
1197                         free(temp_media_id);
1198                 }
1199
1200                 int *temp_unique_id = (int *)eina_list_nth(ts_msg, 15);
1201                 if (temp_unique_id) {
1202                         message->unique_id  = *temp_unique_id;
1203                         free(temp_unique_id);
1204                 }
1205         }
1206         return message;
1207 }
1208
1209 Eina_Bool set_all_rows_read(const char *table_name)
1210 {
1211         if (!table_name)
1212                 return EINA_FALSE;
1213
1214         Eina_List *col_names = NULL;
1215         Eina_List *col_types = NULL;
1216         Eina_List *col_values = NULL;
1217         int un_read_res = 0;
1218
1219         Eina_Bool ret = EINA_FALSE;
1220
1221         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
1222         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1223         col_values = eina_list_append(col_values, &(un_read_res));
1224
1225         char where_clause[1024];
1226         sprintf(where_clause, MESSAGE_INFO_TABLE_UNREAD" = 1");
1227
1228         ret = update_table(table_name, col_names, col_types, col_values, where_clause);
1229
1230         eina_list_free(col_names);
1231         eina_list_free(col_types);
1232         eina_list_free(col_values);
1233         return ret;
1234 }
1235
1236 void update_msg_into_db(tg_message_s *M, char *table_name)
1237 {
1238         if (!M)
1239                 return;
1240
1241         Eina_List *col_names = NULL;
1242         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
1243         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
1244         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
1245         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
1246         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
1247         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
1248         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
1249         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
1250         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
1251         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
1252         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
1253         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
1254         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
1255         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
1256         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
1257
1258         Eina_List *col_types = NULL;
1259         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1260         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1261         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1262         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1263         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1264         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1265         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1266         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1267         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1268         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1269         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1270         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1271         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1272         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1273         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1274
1275         Eina_List *col_values = NULL;
1276         col_values = eina_list_append(col_values, &(M->msg_id));
1277         col_values = eina_list_append(col_values, &(M->flags));
1278         col_values = eina_list_append(col_values, &(M->fwd_from_id));
1279         col_values = eina_list_append(col_values, &(M->fwd_date));
1280         col_values = eina_list_append(col_values, &(M->from_id));
1281         col_values = eina_list_append(col_values, &(M->to_id));
1282         col_values = eina_list_append(col_values, &(M->out));
1283         col_values = eina_list_append(col_values, &(M->unread));
1284         col_values = eina_list_append(col_values, &(M->date));
1285         col_values = eina_list_append(col_values, &(M->service));
1286
1287         if (M->message)
1288                 col_values = eina_list_append(col_values, M->message);
1289         else
1290                 col_values = eina_list_append(col_values, " ");
1291
1292         col_values = eina_list_append(col_values, &(M->msg_state));
1293         col_values = eina_list_append(col_values, &(M->message_len));
1294         col_values = eina_list_append(col_values, &(M->media_type));
1295         col_values = eina_list_append(col_values, (M->media_id));
1296
1297         char where_clause[1024];
1298         sprintf(where_clause, MESSAGE_INFO_TABLE_MESSAGE_ID" = %d", M->msg_id);
1299         update_table(table_name, col_names, col_types, col_values, where_clause);
1300         eina_list_free(col_names);
1301         eina_list_free(col_types);
1302         eina_list_free(col_values);
1303         return;
1304 }
1305
1306 int insert_current_date_to_table(char *tb_name)
1307 {
1308         tg_message_s *last_msg = get_latest_message_from_message_table(tb_name, EINA_TRUE);
1309         if (last_msg) {
1310                 struct tm old_lt;
1311                 struct tm new_lt;
1312                 int old_date = last_msg->date;
1313                 time_t old_t = old_date;
1314                 (void) localtime_r(&old_t, &old_lt);
1315                 time_t new_t = time(NULL);
1316                 (void) localtime_r(&new_t, &new_lt);
1317                 if (old_lt.tm_mday == new_lt.tm_mday && old_lt.tm_mon == new_lt.tm_mon && old_lt.tm_year == new_lt.tm_year) {
1318                         // no need of new date
1319                         return -1;
1320                 } else {
1321                         tg_message_s date_msg;
1322                         date_msg.msg_id = get_time_stamp_in_macro();
1323                         date_msg.media_type = tgl_message_media_none;
1324                         int cur_time = time(NULL);
1325                         cur_time = cur_time - 10;
1326                         // convert time to string
1327                         char res[256];
1328                         sprintf(res, "%d", cur_time);
1329                         date_msg.date = cur_time;
1330                         date_msg.message = res;
1331                         date_msg.message_len = strlen(res);
1332                         date_msg.service = 2;
1333                         date_msg.unread = 0;
1334                         date_msg.out = 0;
1335                         date_msg.media_id = g_empty_char;
1336                         date_msg.is_marked_for_delete = 0;
1337                         insert_msg_into_db(&date_msg, tb_name, date_msg.msg_id);
1338                         if (date_msg.msg_id < 0) {
1339                                 date_msg.msg_id = -1 * date_msg.msg_id;
1340                         }
1341                         return date_msg.msg_id;
1342                 }
1343
1344         } else {
1345                 tg_message_s date_msg;
1346                 date_msg.msg_id = get_time_stamp_in_macro();
1347                 date_msg.media_type = tgl_message_media_none;
1348                 int cur_time = time(NULL);
1349                 cur_time = cur_time - 10;
1350                 // convert time to string
1351                 char res[256];
1352                 sprintf(res, "%d", cur_time);
1353                 date_msg.date = cur_time;
1354                 date_msg.message = res;
1355                 date_msg.message_len = strlen(res);
1356                 date_msg.service = 2;
1357                 date_msg.unread = 0;
1358                 date_msg.out = 0;
1359                 date_msg.media_id = g_empty_char;
1360                 date_msg.is_marked_for_delete = 0;
1361                 insert_msg_into_db(&date_msg, tb_name, date_msg.msg_id);
1362                 if (date_msg.msg_id < 0) {
1363                         date_msg.msg_id = -1 * date_msg.msg_id;
1364                 }
1365                 return date_msg.msg_id;
1366         }
1367         return -1;
1368 }
1369
1370
1371 tg_message_s *get_message_from_message_table(long long msg_id, char *table_name)
1372 {
1373         tg_message_s *message = NULL;
1374         Eina_List *message_details = NULL;
1375
1376         Eina_List *col_names = NULL;
1377         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
1378         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
1379         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
1380         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
1381         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
1382         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
1383         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
1384         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
1385         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
1386         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
1387         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
1388         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
1389         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
1390         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
1391         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
1392         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
1393
1394         Eina_List *col_types = NULL;
1395         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1396         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1397         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1398         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1399         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1400         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1401         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1402         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1403         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1404         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1405         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1406         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1407         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1408         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1409         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1410         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1411
1412         char where_clause[1024];
1413         sprintf(where_clause, MESSAGE_INFO_TABLE_MESSAGE_ID" = %lld", msg_id);
1414
1415         message_details = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
1416
1417         eina_list_free(col_names);
1418         eina_list_free(col_types);
1419
1420         if (message_details && eina_list_count(message_details) > 0) {
1421                 Eina_List *ts_msg = eina_list_nth(message_details, 0);
1422                 message = (tg_message_s*)malloc(sizeof(tg_message_s));
1423                 int *temp_msg_id = (int *)eina_list_nth(ts_msg, 0);
1424                 if (temp_msg_id) {
1425                         message->msg_id  = *temp_msg_id;
1426                         free(temp_msg_id);
1427                 }
1428
1429                 int *temp_flags = (int *)eina_list_nth(ts_msg, 1);
1430                 if (temp_flags) {
1431                         message->flags  = *temp_flags;
1432                         free(temp_flags);
1433                 }
1434
1435                 int *temp_fwd_from_id = (int *)eina_list_nth(ts_msg, 2);
1436                 if (temp_fwd_from_id) {
1437                         message->fwd_from_id  = *temp_fwd_from_id;
1438                         free(temp_fwd_from_id);
1439                 }
1440
1441
1442                 int *temp_fwd_date = (int *)eina_list_nth(ts_msg, 3);
1443                 if (temp_fwd_date) {
1444                         message->fwd_date  = *temp_fwd_date;
1445                         free(temp_fwd_date);
1446                 }
1447
1448                 int *temp_from_id = (int *)eina_list_nth(ts_msg, 4);
1449                 if (temp_from_id) {
1450                         message->from_id  = *temp_from_id;
1451                         free(temp_from_id);
1452                 }
1453
1454                 int *temp_to_id = (int *)eina_list_nth(ts_msg, 5);
1455                 if (temp_to_id) {
1456                         message->to_id  = *temp_to_id;
1457                         free(temp_to_id);
1458                 }
1459
1460                 int *temp_out = (int *)eina_list_nth(ts_msg, 6);
1461                 if (temp_out) {
1462                         message->out  = *temp_out;
1463                         free(temp_out);
1464                 }
1465
1466                 int *temp_unread = (int *)eina_list_nth(ts_msg, 7);
1467                 if (temp_unread) {
1468                         message->unread  = *temp_unread;
1469                         free(temp_unread);
1470                 }
1471
1472                 int *temp_date = (int *)eina_list_nth(ts_msg, 8);
1473                 if (temp_date) {
1474                         message->date  = *temp_date;
1475                         free(temp_date);
1476                 }
1477
1478                 int *temp_service = (int *)eina_list_nth(ts_msg, 9);
1479                 if (temp_service) {
1480                         message->service  = *temp_service;
1481                         free(temp_service);
1482                 }
1483
1484                 char *temp_msg = (char *)eina_list_nth(ts_msg, 10);
1485                 if (temp_msg) {
1486                         message->message  = strdup(temp_msg);
1487                         free(temp_msg);
1488                 }
1489
1490                 int *temp_message_state = (int *)eina_list_nth(ts_msg, 11);
1491                 if (temp_message_state) {
1492                         message->msg_state  = *temp_message_state;
1493                         free(temp_message_state);
1494                 }
1495
1496                 int *temp_message_len = (int *)eina_list_nth(ts_msg, 12);
1497                 if (temp_message_len) {
1498                         message->message_len  = *temp_message_len;
1499                         free(temp_message_len);
1500                 }
1501
1502                 int *temp_media_type = (int *)eina_list_nth(ts_msg, 13);
1503                 if (temp_media_type) {
1504                         message->media_type  = *temp_media_type;
1505                         free(temp_media_type);
1506                 }
1507
1508                 char *temp_media_id = (char *)eina_list_nth(ts_msg, 14);
1509                 if (temp_media_id) {
1510                         message->media_id  = strdup(temp_media_id);
1511                         free(temp_media_id);
1512                 }
1513
1514                 int *temp_unique_id = (int *)eina_list_nth(ts_msg, 15);
1515                 if (temp_unique_id) {
1516                         message->unique_id  = *temp_unique_id;
1517                         free(temp_unique_id);
1518                 }
1519         }
1520         return message;
1521 }
1522
1523 Eina_List *get_messages_from_message_table_order_by(char *table_name, const char *order_column, Eina_Bool is_asc, unsigned int limit, unsigned int offset)
1524 {
1525         tg_message_s *message = NULL;
1526         Eina_List *message_list = NULL;
1527         Eina_List *message_details = NULL;
1528         Eina_List *col_names = NULL;
1529         Eina_List *col_types = NULL;
1530
1531         /* Column names */
1532         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
1533         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
1534         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
1535         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
1536         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
1537         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
1538         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
1539         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
1540         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
1541         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
1542         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
1543         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
1544         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
1545         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
1546         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
1547         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
1548
1549         /* Column types */
1550         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1551         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1552         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1553         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1554         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1555         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1556         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1557         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1558         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1559         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1560         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1561         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1562         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1563         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1564         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1565         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1566
1567         char where_clause[1024];
1568         sprintf(where_clause, MESSAGE_INFO_TABLE_MARKED_FOR_DELETE " != 1");
1569
1570         message_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, order_column, is_asc, where_clause, limit, offset);
1571
1572         eina_list_free(col_names);
1573         eina_list_free(col_types);
1574
1575         Eina_List *ts_msg = NULL;
1576
1577         EINA_LIST_FREE(message_details, ts_msg) {
1578                 message = (tg_message_s*)malloc(sizeof(tg_message_s));
1579                 message_list = eina_list_append(message_list, message);
1580
1581                 int *temp_msg_id = (int *)eina_list_nth(ts_msg, 0);
1582                 if (temp_msg_id) {
1583                         message->msg_id  = *temp_msg_id;
1584                         free(temp_msg_id);
1585                 }
1586
1587                 int *temp_flags = (int *)eina_list_nth(ts_msg, 1);
1588                 if (temp_flags) {
1589                         message->flags  = *temp_flags;
1590                         free(temp_flags);
1591                 }
1592
1593                 int *temp_fwd_from_id = (int *)eina_list_nth(ts_msg, 2);
1594                 if (temp_fwd_from_id) {
1595                         message->fwd_from_id  = *temp_fwd_from_id;
1596                         free(temp_fwd_from_id);
1597                 }
1598
1599                 int *temp_fwd_date = (int *)eina_list_nth(ts_msg, 3);
1600                 if (temp_fwd_date) {
1601                         message->fwd_date  = *temp_fwd_date;
1602                         free(temp_fwd_date);
1603                 }
1604
1605                 int *temp_from_id = (int *)eina_list_nth(ts_msg, 4);
1606                 if (temp_from_id) {
1607                         message->from_id  = *temp_from_id;
1608                         free(temp_from_id);
1609                 }
1610
1611                 int *temp_to_id = (int *)eina_list_nth(ts_msg, 5);
1612                 if (temp_to_id) {
1613                         message->to_id  = *temp_to_id;
1614                         free(temp_to_id);
1615                 }
1616
1617                 int *temp_out = (int *)eina_list_nth(ts_msg, 6);
1618                 if (temp_out) {
1619                         message->out  = *temp_out;
1620                         free(temp_out);
1621                 }
1622
1623                 int *temp_unread = (int *)eina_list_nth(ts_msg, 7);
1624                 if (temp_unread) {
1625                         message->unread  = *temp_unread;
1626                         free(temp_unread);
1627                 }
1628
1629                 int *temp_date = (int *)eina_list_nth(ts_msg, 8);
1630                 if (temp_date) {
1631                         message->date  = *temp_date;
1632                         free(temp_date);
1633                 }
1634
1635                 int *temp_service = (int *)eina_list_nth(ts_msg, 9);
1636                 if (temp_service) {
1637                         message->service  = *temp_service;
1638                         free(temp_service);
1639                 }
1640
1641                 char *temp_msg = (char *)eina_list_nth(ts_msg, 10);
1642                 if (temp_msg) {
1643                         message->message  = strdup(temp_msg);
1644                         free(temp_msg);
1645                 }
1646
1647                 int *temp_message_state = (int *)eina_list_nth(ts_msg, 11);
1648                 if (temp_message_state) {
1649                         message->msg_state  = *temp_message_state;
1650                         free(temp_message_state);
1651                 }
1652
1653                 int *temp_message_len = (int *)eina_list_nth(ts_msg, 12);
1654                 if (temp_message_len) {
1655                         message->message_len  = *temp_message_len;
1656                         free(temp_message_len);
1657                 }
1658
1659                 int *temp_media_type = (int *)eina_list_nth(ts_msg, 13);
1660                 if (temp_media_type) {
1661                         message->media_type  = *temp_media_type;
1662                         free(temp_media_type);
1663                 }
1664
1665                 char *temp_media_id = (char *)eina_list_nth(ts_msg, 14);
1666                 if (temp_media_id) {
1667                         message->media_id  = strdup(temp_media_id);
1668                         free(temp_media_id);
1669                 }
1670
1671                 int *temp_unique_id = (int *)eina_list_nth(ts_msg, 15);
1672                 if (temp_unique_id) {
1673                         message->unique_id  = *temp_unique_id;
1674                         free(temp_unique_id);
1675                 }
1676         }
1677         return message_list;
1678 }
1679
1680
1681
1682 void insert_or_update_peer_into_database(tg_peer_info_s* UC)
1683 {
1684         if (!UC) {
1685                 return;
1686         }
1687
1688         char *table_name = PEER_INFO_TABLE_NAME;
1689         Eina_List *col_names = NULL;
1690         col_names = NULL;
1691         col_names = eina_list_append(col_names, PEER_INFO_TABLE_CHAT_ID);
1692         col_names = eina_list_append(col_names, PEER_INFO_TABLE_PEER_TYPE);
1693         col_names = eina_list_append(col_names, PEER_INFO_TABLE_FLAGS);
1694         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_ID);
1695         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_MESSAGE_DATE);
1696         col_names = eina_list_append(col_names, PEER_INFO_TABLE_PRINT_NAME);
1697         col_names = eina_list_append(col_names, PEER_INFO_TABLE_STRUCT_VERSION);
1698         col_names = eina_list_append(col_names, PEER_INFO_TABLE_NO_OF_UNREAD_MESSAGES);
1699         col_names = eina_list_append(col_names, PEER_INFO_TABLE_LAST_SEEN_TIME);
1700         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
1701         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
1702         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
1703
1704
1705         Eina_List *col_types = NULL;
1706         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1707         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1708         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1709         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1710         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1711         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1712         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1713         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1714         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1715         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1716         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1717         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1718
1719
1720         Eina_List *col_values = NULL;
1721         col_values = eina_list_append(col_values, &(UC->peer_id));
1722         col_values = eina_list_append(col_values, &(UC->peer_type));
1723         col_values = eina_list_append(col_values, &(UC->flags));
1724         char last_msg_id_str[50];
1725         sprintf(last_msg_id_str, "%lld", UC->last_msg_id);
1726         col_values = eina_list_append(col_values, last_msg_id_str);
1727
1728         // last message date
1729
1730         col_values = eina_list_append(col_values, &(UC->last_msg_date));
1731
1732
1733         if (UC->print_name) {
1734                 col_values = eina_list_append(col_values, UC->print_name);
1735         } else {
1736                 col_values = eina_list_append(col_values, g_empty_char);
1737         }
1738
1739         col_values = eina_list_append(col_values, &(UC->struct_version));
1740         col_values = eina_list_append(col_values, &(UC->no_of_unread_msgs));
1741         col_values = eina_list_append(col_values, &(UC->last_seen_time));
1742         col_values = eina_list_append(col_values, UC->photo_path);
1743
1744         col_values = eina_list_append(col_values, &(UC->photo_id));
1745         col_values = eina_list_append(col_values, &(UC->is_unknown));
1746
1747         Eina_Bool ret = insert_table(table_name, col_names, col_types, col_values);
1748         if (!ret) {
1749                 // already exist. So update the table
1750                 char where_clause[1024];
1751                 sprintf(where_clause, PEER_INFO_TABLE_CHAT_ID" = %d", UC->peer_id);
1752                 ret = update_table(table_name, col_names, col_types, col_values, where_clause);
1753         } else {
1754
1755         }
1756         eina_list_free(col_names);
1757         eina_list_free(col_types);
1758         eina_list_free(col_values);
1759         
1760 }
1761
1762 void insert_msg_into_db(tg_message_s *M, char *table_name, int unique_id)
1763 {
1764         if (!M) {
1765                 return;
1766         }
1767
1768         Eina_List *col_names = NULL;
1769         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
1770         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
1771         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
1772         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
1773         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
1774         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
1775         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
1776         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
1777         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
1778         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
1779         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
1780         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
1781         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
1782         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
1783         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
1784         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
1785         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MARKED_FOR_DELETE);
1786
1787         Eina_List *col_types = NULL;
1788         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
1789         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1790         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1791         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1792         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1793         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1794         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1795         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1796         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1797         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1798         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1799         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1800         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1801         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1802         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1803         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1804         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1805
1806
1807         Eina_List *col_values = NULL;
1808         col_values = eina_list_append(col_values, &(M->msg_id));
1809         col_values = eina_list_append(col_values, &(M->flags));
1810         col_values = eina_list_append(col_values, &(M->fwd_from_id));
1811         col_values = eina_list_append(col_values, &(M->fwd_date));
1812         col_values = eina_list_append(col_values, &(M->from_id));
1813         col_values = eina_list_append(col_values, &(M->to_id));
1814         col_values = eina_list_append(col_values, &(M->out));
1815         col_values = eina_list_append(col_values, &(M->unread));
1816         col_values = eina_list_append(col_values, &(M->date));
1817         col_values = eina_list_append(col_values, &(M->service));
1818
1819         if (M->message)
1820                 col_values = eina_list_append(col_values, M->message);
1821         else
1822                 col_values = eina_list_append(col_values, " ");
1823
1824         col_values = eina_list_append(col_values, &(M->msg_state));
1825         col_values = eina_list_append(col_values, &(M->message_len));
1826         col_values = eina_list_append(col_values, &(M->media_type));
1827
1828         col_values = eina_list_append(col_values, M->media_id);
1829
1830         col_values = eina_list_append(col_values, &unique_id);
1831
1832         col_values = eina_list_append(col_values, &(M->is_marked_for_delete));
1833
1834         Eina_Bool ret = insert_table(table_name, col_names, col_types, col_values);
1835         if (!ret) {
1836                 //("error: database creation failed");
1837         } else {
1838
1839         }
1840         eina_list_free(col_names);
1841         eina_list_free(col_types);
1842         eina_list_free(col_values);
1843
1844 }
1845
1846 void insert_media_info_to_db(tg_message_s *M, char *file_path, int width, int height, int size, char *latitude, char *longitude, char *first_name, char *last_name, char *phone_number)
1847 {
1848         if (!M) {
1849                 return;
1850         }
1851
1852         char *table_name = MEDIA_INFO_TABLE_NAME;
1853         Eina_List *col_names = NULL;
1854         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_ID);
1855         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_TYPE);
1856         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_ACCESS_HASH);
1857         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_USER_ID);
1858         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DATE);
1859         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_CAPTION);
1860         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LONGITUDE);
1861         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LATITUDE);
1862         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_SIZES_NUM);
1863
1864
1865         /********************************************************************/
1866
1867         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE1);
1868         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC1);
1869         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL1);
1870         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID1);
1871         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1);
1872         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
1873         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
1874         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
1875         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA1);
1876
1877         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE2);
1878         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC2);
1879         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL2);
1880         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID2);
1881         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2);
1882         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
1883         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
1884         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
1885         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA2);
1886
1887         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE3);
1888         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC3);
1889         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL3);
1890         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID3);
1891         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3);
1892         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
1893         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
1894         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
1895         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA3);
1896
1897         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE4);
1898         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC4);
1899         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL4);
1900         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID4);
1901         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4);
1902         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
1903         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
1904         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
1905         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA4);
1906
1907
1908         /********************************************************************/
1909
1910         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHONE_NO);
1911         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FIRST_NAME);
1912         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LAST_NAME);
1913         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
1914
1915         /****************************NEW****************************************/
1916
1917         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MIME_TYPE);
1918         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_TYPE);
1919         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_WIDTH);
1920         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_HEIGHT);
1921         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_DURATION);
1922         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_SIZE);
1923         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_DC);
1924         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_THUMB_FILE);
1925
1926         /****************************NEW****************************************/
1927
1928
1929         Eina_List *col_types = NULL;
1930         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1931         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1932         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1933         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1934         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1935         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1936         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1937         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1938         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1939
1940
1941         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1942         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1943         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1944         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1945         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1946         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1947         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1948         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1949         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1950
1951         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1952         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1953         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1954         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1955         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1956         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1957         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1958         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1959         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1960
1961         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1962         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1963         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1964         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1965         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1966         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1967         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1968         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1969         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1970
1971         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1972         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1973         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1974         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1975         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1976         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1977         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1978         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1979         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1980
1981         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1982         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1983         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1984         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1985         /****************************NEW****************************************/
1986
1987         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1988         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1989         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1990         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1991         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1992         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1993         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
1994         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
1995
1996         /****************************NEW****************************************/
1997
1998         Eina_List *col_values = NULL;
1999         int temp_val = 0;
2000         int media_type = M->media_type;
2001
2002         col_values = eina_list_append(col_values, M->media_id);
2003         col_values = eina_list_append(col_values, &(media_type));
2004
2005         if (media_type == tgl_message_media_photo) {
2006
2007                 /**
2008                  * @todo
2009                  * Should implement this to get the temp_val.
2010                  * Currently it is ZERO always.
2011                  */
2012
2013                 col_values = eina_list_append(col_values, g_zero_char);
2014                 col_values = eina_list_append(col_values, &g_zero_int);
2015                 col_values = eina_list_append(col_values, &(M->date));
2016                 col_values = eina_list_append(col_values, g_empty_char);
2017
2018                 if (longitude) {
2019                         col_values = eina_list_append(col_values, longitude);
2020                 } else {
2021                         col_values = eina_list_append(col_values, g_zero_char);
2022                 }
2023                 if (latitude) {
2024                         col_values = eina_list_append(col_values, latitude);
2025                 } else {
2026                         col_values = eina_list_append(col_values, g_zero_char);
2027                 }
2028
2029                 int temp_sizes = 4;
2030                 col_values = eina_list_append(col_values, &temp_sizes);
2031                 for (int j = 0; j < 4; j++) {
2032                         col_values = eina_list_append(col_values, g_empty_char);
2033                         col_values = eina_list_append(col_values, &g_base_int);
2034                         col_values = eina_list_append(col_values, g_empty_char);
2035                         col_values = eina_list_append(col_values, &g_base_int);
2036                         col_values = eina_list_append(col_values, g_empty_char);
2037                         col_values = eina_list_append(col_values, &width);
2038                         col_values = eina_list_append(col_values, &height);
2039                         col_values = eina_list_append(col_values, &size);
2040                         col_values = eina_list_append(col_values, g_empty_char);
2041                 }
2042         } else if (media_type == tgl_message_media_document) {
2043
2044                 col_values = eina_list_append(col_values, &(temp_val));
2045                 col_values = eina_list_append(col_values, &(temp_val));
2046                 col_values = eina_list_append(col_values, &(temp_val));
2047                 col_values = eina_list_append(col_values, g_empty_char);
2048
2049                 if (longitude) {
2050                         col_values = eina_list_append(col_values, longitude);
2051                 } else {
2052                         col_values = eina_list_append(col_values, g_zero_char);
2053                 }
2054                 if (latitude) {
2055                         col_values = eina_list_append(col_values, latitude);
2056                 } else {
2057                         col_values = eina_list_append(col_values, g_zero_char);
2058                 }
2059                 col_values = eina_list_append(col_values, &(temp_val));
2060
2061
2062                 for (int j = 0; j < 4; j++) {
2063
2064                         col_values = eina_list_append(col_values, g_empty_char);
2065                         col_values = eina_list_append(col_values, &g_base_int);
2066                         col_values = eina_list_append(col_values, g_empty_char);
2067                         col_values = eina_list_append(col_values, &g_base_int);
2068                         col_values = eina_list_append(col_values, g_empty_char);
2069                         col_values = eina_list_append(col_values, &width);
2070                         col_values = eina_list_append(col_values, &height);
2071                         col_values = eina_list_append(col_values, &size);
2072                         col_values = eina_list_append(col_values, g_empty_char);
2073
2074                 }
2075         } else if (media_type == tgl_message_media_geo) {
2076                         // To be checked
2077                         col_values = eina_list_append(col_values, &g_zero_int);
2078                         col_values = eina_list_append(col_values, &g_zero_int);
2079                         col_values = eina_list_append(col_values, &g_zero_int);
2080
2081                         col_values = eina_list_append(col_values, g_empty_char);
2082
2083                         if (longitude) {
2084                                 col_values = eina_list_append(col_values, longitude);
2085                         } else {
2086                                 col_values = eina_list_append(col_values, g_zero_char);
2087                         }
2088                         if (latitude) {
2089                                 col_values = eina_list_append(col_values, latitude);
2090                         } else {
2091                                 col_values = eina_list_append(col_values, g_zero_char);
2092                         }
2093                         col_values = eina_list_append(col_values, &g_zero_int);
2094
2095                         for (int j = 0; j < 4; j++) {
2096
2097                                 col_values = eina_list_append(col_values, g_empty_char);
2098                                 col_values = eina_list_append(col_values, &g_base_int);
2099                                 col_values = eina_list_append(col_values, g_empty_char);
2100                                 col_values = eina_list_append(col_values, &g_base_int);
2101                                 col_values = eina_list_append(col_values, g_empty_char);
2102                                 col_values = eina_list_append(col_values, &width);
2103                                 col_values = eina_list_append(col_values, &height);
2104                                 col_values = eina_list_append(col_values, &size);
2105                                 col_values = eina_list_append(col_values, g_empty_char);
2106                         }
2107         } else {
2108                 // To be checked
2109                 col_values = eina_list_append(col_values, &g_zero_int);
2110                 col_values = eina_list_append(col_values, &g_zero_int);
2111                 col_values = eina_list_append(col_values, &g_zero_int);
2112
2113                 col_values = eina_list_append(col_values, g_empty_char);
2114
2115                 if (longitude) {
2116                         col_values = eina_list_append(col_values, longitude);
2117                 } else {
2118                         col_values = eina_list_append(col_values, g_zero_char);
2119                 }
2120                 if (latitude) {
2121                         col_values = eina_list_append(col_values, latitude);
2122                 } else {
2123                         col_values = eina_list_append(col_values, g_zero_char);
2124                 }
2125                 col_values = eina_list_append(col_values, &g_zero_int);
2126
2127                 for (int j = 0; j < 4; j++) {
2128
2129                         col_values = eina_list_append(col_values, g_empty_char);
2130                         col_values = eina_list_append(col_values, &g_base_int);
2131                         col_values = eina_list_append(col_values, g_empty_char);
2132                         col_values = eina_list_append(col_values, &g_base_int);
2133                         col_values = eina_list_append(col_values, g_empty_char);
2134                         col_values = eina_list_append(col_values, &width);
2135                         col_values = eina_list_append(col_values, &height);
2136                         col_values = eina_list_append(col_values, &size);
2137                         col_values = eina_list_append(col_values, g_empty_char);
2138                 }
2139         }
2140
2141         if (phone_number) {
2142                 col_values = eina_list_append(col_values, phone_number);
2143         } else {
2144                 col_values = eina_list_append(col_values, g_empty_char);
2145         }
2146
2147         if (first_name) {
2148                 col_values = eina_list_append(col_values, first_name);
2149         } else {
2150                 col_values = eina_list_append(col_values, g_empty_char);
2151         }
2152
2153         if (last_name) {
2154                 col_values = eina_list_append(col_values, last_name);
2155         } else {
2156                 col_values = eina_list_append(col_values, g_empty_char);
2157         }
2158
2159
2160
2161
2162         if (file_path) {
2163                 col_values = eina_list_append(col_values, file_path);
2164         } else {
2165                 col_values = eina_list_append(col_values, g_empty_char);
2166         }
2167
2168
2169         /*****************************************/
2170         col_values = eina_list_append(col_values, g_empty_char);
2171
2172         char *mime_type = NULL;
2173         if (file_path) {
2174                 char *extn = strrchr(file_path, '.');
2175
2176                 if (extn) {
2177                         extn = replace(extn, '.', "");
2178                 }
2179
2180
2181                 if (extn) {
2182                         mime_type_get_mime_type(extn, &mime_type);
2183                 }
2184         }
2185         if (mime_type) {
2186                 col_values = eina_list_append(col_values, mime_type);
2187         } else {
2188                 char *doc_type = "none";
2189                 col_values = eina_list_append(col_values, doc_type);
2190         }
2191
2192         int doc_width = 0;
2193         col_values = eina_list_append(col_values, &doc_width);
2194
2195         int doc_height = 0;
2196         col_values = eina_list_append(col_values, &doc_height);
2197
2198         int doc_duration = 0;
2199         col_values = eina_list_append(col_values, &doc_duration);
2200
2201         int doc_size = 0;
2202         col_values = eina_list_append(col_values, &doc_size);
2203
2204         int doc_dc = 0;
2205         col_values = eina_list_append(col_values, &doc_dc);
2206
2207         const char *doc_thumb = NULL;
2208         get_thumbnail_from_video_url(file_path, &doc_thumb);
2209
2210         if (!doc_thumb) {
2211                 doc_thumb = g_empty_char;
2212         }
2213
2214         col_values = eina_list_append(col_values, doc_thumb);
2215
2216         /*****************************************/
2217
2218
2219
2220         Eina_Bool ret = insert_table(table_name, col_names, col_types, col_values);
2221         if (!ret) {
2222                 //("error: database creation failed");
2223         } else {
2224
2225         }
2226         eina_list_free(col_names);
2227         eina_list_free(col_types);
2228         eina_list_free(col_values);
2229
2230 }
2231
2232 int get_media_size_from_db(long long media_id)
2233 {
2234         int video_size = 0;
2235         char *table_name = MEDIA_INFO_TABLE_NAME;
2236
2237         char where_clause[1024];
2238         sprintf(where_clause, MEDIA_INFO_TABLE_MEDIA_ID" = '%lld'", media_id);
2239
2240         Eina_List *col_types = NULL;
2241         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2242
2243         Eina_List *col_names = NULL;
2244         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_SIZE);
2245
2246         Eina_List *vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
2247
2248         if (!vals) {
2249                 //("DB error");
2250                 eina_list_free(col_names);
2251                 return 0;
2252         } else {
2253                 Eina_List *row_vals = NULL;
2254                 int pos = 0;
2255                 void *val = NULL;
2256                 EINA_LIST_FREE(vals, row_vals) {
2257                         if (pos == 0) {
2258                                 int *temp_video_size = (int *)eina_list_nth(row_vals, 0);
2259                                 if (temp_video_size) {
2260                                         video_size  = *temp_video_size;
2261                                 }
2262                         }
2263                         EINA_LIST_FREE(row_vals, val) {
2264                                 if (val) {
2265                                         free(val);
2266                                         val = NULL;
2267                                 }
2268                         }
2269                         pos++;
2270                 }
2271         }
2272         eina_list_free(col_names);
2273         return video_size;
2274 }
2275
2276 char *get_video_thumb_path_from_db(long long media_id)
2277 {
2278         char *file_path = NULL;
2279         char *table_name = MEDIA_INFO_TABLE_NAME;
2280
2281         char where_clause[1024];
2282         sprintf(where_clause, MEDIA_INFO_TABLE_MEDIA_ID" = '%lld'", media_id);
2283
2284         Eina_List *col_types = NULL;
2285         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2286
2287         Eina_List *col_names = NULL;
2288         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_THUMB_FILE);
2289
2290         Eina_List *vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
2291         file_path = NULL;
2292
2293         if (!vals) {
2294                 //("DB error");
2295                 //free(where_clause);
2296                 eina_list_free(col_names);
2297                 return NULL;
2298         } else {
2299                 Eina_List *row_vals = NULL;
2300                 int pos = 0;
2301                 void *val = NULL;
2302                 EINA_LIST_FREE(vals, row_vals) {
2303                         if (pos == 0) {
2304                                 char *temp_file_path = (char *)eina_list_nth(row_vals, 0);
2305                                 if (temp_file_path) {
2306                                         file_path = strdup(temp_file_path);
2307                                 }
2308                         }
2309
2310                         EINA_LIST_FREE(row_vals, val) {
2311                                 if (val) {
2312                                         free(val);
2313                                         val = NULL;
2314                                 }
2315                         }
2316                         pos++;
2317                 }
2318         }
2319
2320         //free(where_clause);
2321         eina_list_free(col_names);
2322         return file_path;
2323 }
2324
2325 char *get_media_path_from_db(long long media_id)
2326 {
2327         char *file_path = NULL;
2328         char *table_name = MEDIA_INFO_TABLE_NAME;
2329
2330         char where_clause[1024];
2331         sprintf(where_clause, MEDIA_INFO_TABLE_MEDIA_ID" = '%lld'", media_id);
2332
2333         Eina_List *col_types = NULL;
2334         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2335
2336         Eina_List *col_names = NULL;
2337         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
2338
2339         Eina_List *vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
2340         file_path = NULL;
2341
2342         if (!vals) {
2343                 //("DB error");
2344                 eina_list_free(col_names);
2345                 return NULL;
2346         } else {
2347                 // there will be only one item and one row
2348                 Eina_List *first_row = eina_list_nth(vals, 0);
2349                 char *temp_file_path = (char *)eina_list_nth(first_row, 0);
2350                 if (temp_file_path)
2351                         file_path = strdup(temp_file_path);
2352
2353                 Eina_List *row_vals = NULL;
2354                 void *val = NULL;
2355                 EINA_LIST_FREE(vals, row_vals) {
2356                         EINA_LIST_FREE(row_vals, val) {
2357                                 if (val) {
2358                                         free(val);
2359                                         val = NULL;
2360                                 }
2361                         }
2362                 }
2363         }
2364         eina_list_free(col_names);
2365         return file_path;
2366 }
2367
2368 Eina_List *get_image_sizes_from_db(long long media_id)
2369 {
2370         Eina_List *vals = NULL;
2371
2372         char *table_name = MEDIA_INFO_TABLE_NAME;
2373         char where_clause[1024];
2374         sprintf(where_clause, MEDIA_INFO_TABLE_MEDIA_ID" = '%lld'", media_id);
2375
2376         Eina_List *col_types = NULL;
2377         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2378         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2379         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2380         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2381         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2382         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2383         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2384         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2385         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2386         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2387         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2388         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2389
2390         Eina_List *col_names = NULL;
2391         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
2392         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
2393         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
2394         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
2395         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
2396         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
2397         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
2398         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
2399         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
2400         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
2401         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
2402         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
2403         vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
2404         eina_list_free(col_types);
2405         eina_list_free(col_names);
2406         return vals;
2407 }
2408
2409 Eina_List *get_image_details_from_db(long long media_id)
2410 {
2411         Eina_List *vals = NULL;
2412         char *table_name = MEDIA_INFO_TABLE_NAME;
2413
2414         char where_clause[1024];
2415         sprintf(where_clause, MEDIA_INFO_TABLE_MEDIA_ID" = '%lld'", media_id);
2416
2417         Eina_List *col_types = NULL;
2418         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2419         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2420         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2421         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2422         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2423         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2424         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2425         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2426         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2427
2428         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2429         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2430         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2431         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2432         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2433         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2434         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2435         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2436         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2437
2438
2439         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2440         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2441         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2442         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2443         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2444         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2445         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2446         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2447         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2448
2449
2450         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2451         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2452         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2453         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2454         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2455         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2456         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2457         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2458         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2459
2460
2461         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2462         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2463         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2464         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2465         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2466         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2467         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2468         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2469         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2470
2471         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2472         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2473         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2474         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2475
2476         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2477         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2478         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2479         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2480         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2481         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2482         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2483         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2484
2485         Eina_List *col_names = NULL;
2486         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_ID);
2487         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MEDIA_TYPE);
2488         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_ACCESS_HASH);
2489         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_USER_ID);
2490         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DATE);
2491         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_CAPTION);
2492         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LONGITUDE);
2493         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LATITUDE);
2494         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_SIZES_NUM);
2495
2496         /********************************************************************/
2497
2498         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE1);
2499         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC1);
2500         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL1);
2501         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID1);
2502         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET1);
2503         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH1);
2504         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT1);
2505         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE1);
2506         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA1);
2507
2508         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE2);
2509         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC2);
2510         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL2);
2511         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID2);
2512         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET2);
2513         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH2);
2514         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT2);
2515         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE2);
2516         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA2);
2517
2518         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE3);
2519         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC3);
2520         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL3);
2521         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID3);
2522         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET3);
2523         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH3);
2524         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT3);
2525         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE3);
2526         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA3);
2527
2528         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_TYPE4);
2529         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_DC4);
2530         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_VOL4);
2531         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_ID4);
2532         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_LOC_SECRET4);
2533         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_WIDTH4);
2534         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_HEIGHT4);
2535         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_SIZE4);
2536         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHOTO_DATA4);
2537
2538         /********************************************************************/
2539
2540         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_PHONE_NO);
2541         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FIRST_NAME);
2542         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_LAST_NAME);
2543         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_FILE_PATH);
2544
2545         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_MIME_TYPE);
2546         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_TYPE);
2547         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_WIDTH);
2548         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_HEIGHT);
2549         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_DURATION);
2550         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_SIZE);
2551         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_DC);
2552         col_names = eina_list_append(col_names, MEDIA_INFO_TABLE_DOCUMENT_THUMB_FILE);
2553
2554         vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
2555         eina_list_free(col_types);
2556         eina_list_free(col_names);
2557         return vals;
2558 }
2559
2560 Eina_List *get_all_buddy_details(char *start_name)
2561 {
2562         Eina_List *user_details = NULL;
2563         const char* _name = start_name;
2564         if (!_name) {
2565                 _name = g_empty_char;
2566         }
2567
2568         char *table_name = BUDDY_INFO_TABLE_NAME;
2569         Eina_List *col_names = NULL;
2570         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_ID);
2571         col_names = eina_list_append(col_names, USER_INFO_TABLE_PRINT_NAME);
2572         col_names = eina_list_append(col_names, USER_INFO_TABLE_STRUCTURE_VERSION);
2573         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_PATH);
2574         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHOTO_ID);
2575         col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
2576         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
2577         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
2578         col_names = eina_list_append(col_names, USER_INFO_TABLE_ACCESS_HASH);
2579         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_FIRST_NAME);
2580         col_names = eina_list_append(col_names, USER_INFO_TABLE_REAL_LAST_NAME);
2581         col_names = eina_list_append(col_names, USER_INFO_TABLE_USER_NAME);
2582         col_names = eina_list_append(col_names, USER_INFO_TABLE_ONLINE_STATUS);
2583         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_SEEN_TIME);
2584         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_BLOCKED);
2585         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_DELETED);
2586         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
2587
2588
2589         Eina_List *col_types = NULL;
2590         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
2591         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2592         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2593         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2594         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2595         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2596         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2597         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2598         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2599         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2600         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2601         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
2602         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2603         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2604         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2605         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2606         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
2607
2608         char where_clause[1024];
2609         sprintf(where_clause, " ( "USER_INFO_TABLE_LAST_SEEN_TIME " > 0 AND "USER_INFO_TABLE_USER_ID " != 333000 AND "USER_INFO_TABLE_USER_ID " != 777000 AND "USER_INFO_TABLE_IS_UNKNOWN_PEER" = 0 AND "USER_INFO_TABLE_IS_DELETED" = 0 ) AND ("USER_INFO_TABLE_PRINT_NAME" LIKE '%s%s' )", _name, "%");
2610
2611         user_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, USER_INFO_TABLE_FIRST_NAME, EINA_TRUE, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
2612
2613         eina_list_free(col_names);
2614         eina_list_free(col_types);
2615         return user_details;
2616 }
2617
2618 Eina_List *load_buddy_data_by_name(int current_user, char *name)
2619 {
2620         Eina_List *buddy_list = NULL;
2621         Eina_List *user_info = get_all_buddy_details(name);
2622
2623         if (!user_info) {
2624                 return buddy_list;
2625         }
2626
2627         Eina_List *row_vals = NULL;
2628         EINA_LIST_FREE(user_info, row_vals) {
2629                 if (!row_vals)
2630                         continue;
2631
2632                 int *temp_user_id = (int *)eina_list_nth(row_vals, 0);
2633                 if (current_user == (*temp_user_id)) {
2634                         void *val = NULL;
2635                         EINA_LIST_FREE(row_vals, val) {
2636                                 if (val)
2637                                         free(val);
2638                         }
2639                         continue;
2640                 }
2641
2642                 user_data_s* user_data = (user_data_s*)malloc(sizeof(user_data_s));
2643                 user_data->is_selected = EINA_FALSE;
2644
2645                 if (temp_user_id) {
2646                         user_data->user_id.id = *temp_user_id;
2647                         user_data->user_id.type = TGL_PEER_USER;
2648                         free(temp_user_id);
2649                 }
2650
2651                 char *print_name = (char *)eina_list_nth(row_vals, 1);
2652                 if (print_name) {
2653                         user_data->print_name = strdup(print_name);
2654                         free(print_name);
2655                 } else {
2656                         user_data->print_name = NULL;
2657                 }
2658
2659                 int *temp_struct_ver = (int *)eina_list_nth(row_vals, 2);
2660                 if (temp_struct_ver) {
2661                         user_data->structure_version = *temp_struct_ver;
2662                         free(temp_struct_ver);
2663                 }
2664
2665                 char *photo_path = (char *)eina_list_nth(row_vals, 3);
2666                 if (photo_path) {
2667                         user_data->photo_path = strdup(photo_path);
2668                         free(photo_path);
2669                 } else {
2670                         user_data->photo_path = NULL;
2671                 }
2672
2673
2674                 int *temp_photo_id = (int *)eina_list_nth(row_vals, 4);
2675                 if (temp_photo_id) {
2676                         user_data->photo_id = *temp_photo_id;
2677                         free(temp_photo_id);
2678                 }
2679
2680                 char *first_name = (char *)eina_list_nth(row_vals, 5);
2681                 if (first_name) {
2682                         user_data->first_name = strdup(first_name);
2683                         free(first_name);
2684                 } else {
2685                         user_data->first_name = NULL;
2686                 }
2687
2688                 char *last_name = (char *)eina_list_nth(row_vals, 6);
2689                 if (last_name) {
2690                         user_data->last_name = strdup(last_name);
2691                         free(last_name);
2692                 } else {
2693                         user_data->last_name = NULL;
2694                 }
2695
2696                 char *phone_no = (char *)eina_list_nth(row_vals, 7);
2697                 if (phone_no) {
2698                         user_data->phone = strdup(phone_no);
2699                         free(phone_no);
2700                 } else {
2701                         user_data->phone = NULL;
2702                 }
2703
2704                 int *temp_access_hash = (int *)eina_list_nth(row_vals, 8);
2705                 if (temp_access_hash) {
2706                         user_data->access_hash = *temp_access_hash;
2707                         free(temp_access_hash);
2708                 }
2709
2710                 char *real_first_name = (char *)eina_list_nth(row_vals, 9);
2711                 if (real_first_name) {
2712                         user_data->real_first_name = strdup(real_first_name);
2713                         free(real_first_name);
2714                 } else {
2715                         user_data->real_first_name = NULL;
2716                 }
2717
2718                 char *real_last_name = (char *)eina_list_nth(row_vals, 10);
2719                 if (real_last_name) {
2720                         user_data->real_last_name = strdup(real_last_name);
2721                         free(real_last_name);
2722                 } else {
2723                         user_data->real_last_name = NULL;
2724                 }
2725
2726                 char *user_name = (char *)eina_list_nth(row_vals, 11);
2727                 if (user_name) {
2728                         user_data->username = strdup(user_name);
2729                         free(user_name);
2730                 } else {
2731                         user_data->username = NULL;
2732                 }
2733
2734                 int *temp_online_status = (int *)eina_list_nth(row_vals, 12);
2735                 if (temp_online_status) {
2736                         user_data->online = *temp_online_status;
2737                         free(temp_online_status);
2738                 }
2739
2740                 int *temp_last_seen = (int *)eina_list_nth(row_vals, 13);
2741                 if (temp_last_seen) {
2742                         user_data->last_seen = *temp_last_seen;
2743                         free(temp_last_seen);
2744                 }
2745
2746                 int *temp_is_blocked = (int *)eina_list_nth(row_vals, 14);
2747                 if (temp_is_blocked) {
2748                         user_data->is_blocked = *temp_is_blocked;
2749                         free(temp_is_blocked);
2750                 }
2751
2752                 int *temp_is_deleted = (int *)eina_list_nth(row_vals, 15);
2753                 if (temp_is_deleted) {
2754                         user_data->is_deleted = *temp_is_deleted;
2755                         free(temp_is_deleted);
2756                 }
2757
2758                 int *temp_is_unknown = (int *)eina_list_nth(row_vals, 16);
2759                 if (temp_is_unknown) {
2760                         user_data->is_unknown = *temp_is_unknown;
2761                         free(temp_is_unknown);
2762                 }
2763
2764                 user_data_with_pic_s *item = (user_data_with_pic_s*) malloc(sizeof(user_data_with_pic_s));
2765                 item->use_data = user_data;
2766                 item->contact_icon = NULL;
2767                 buddy_list = eina_list_append(buddy_list, item);
2768                 eina_list_free(row_vals);
2769         }
2770         return buddy_list;
2771 }
2772
2773
2774 Eina_List *load_peer_data_by_name(char *name)
2775 {
2776         Eina_List *peer_list = NULL;
2777         Eina_List *peer_details = get_all_peer_details(name);
2778
2779         Eina_List *ts_msg = NULL;
2780         EINA_LIST_FREE(peer_details, ts_msg) {
2781                 tg_peer_info_s* peer_info = (tg_peer_info_s*)malloc(sizeof(tg_peer_info_s));
2782                 int *temp_peer_id = (int *)eina_list_nth(ts_msg, 0);
2783                 if (temp_peer_id) {
2784                         peer_info->peer_id  = *temp_peer_id;
2785                         free(temp_peer_id);
2786                 }
2787
2788                 int *temp_peer_type = (int *)eina_list_nth(ts_msg, 1);
2789                 if (temp_peer_type) {
2790                         peer_info->peer_type  = *temp_peer_type;
2791                         free(temp_peer_type);
2792                 }
2793
2794                 int *temp_flags = (int *)eina_list_nth(ts_msg, 2);
2795                 if (temp_flags) {
2796                         peer_info->flags = *temp_flags;
2797                         free(temp_flags);
2798                 }
2799
2800                 char *temp_msg_id = (char *)eina_list_nth(ts_msg, 3);
2801                 if (temp_msg_id) {
2802                         peer_info->last_msg_id  = atoll(temp_msg_id);
2803                         free(temp_msg_id);
2804                 } else {
2805                         peer_info->last_msg_id = 0;
2806                 }
2807
2808                 int *temp_last_msg_date = (int *)eina_list_nth(ts_msg, 4);
2809                 if (temp_last_msg_date) {
2810                         peer_info->last_msg_date = *temp_last_msg_date;
2811                         free(temp_last_msg_date);
2812                 }
2813
2814                 char *temp_print_name = (char *)eina_list_nth(ts_msg, 5);
2815                 if (temp_print_name) {
2816                         peer_info->print_name  = strdup(temp_print_name);
2817                         free(temp_print_name);
2818                 } else {
2819                         peer_info->print_name = NULL;
2820                 }
2821
2822                 int *temp_struct_ver = (int *)eina_list_nth(ts_msg, 6);
2823                 if (temp_struct_ver) {
2824                         peer_info->struct_version = *temp_struct_ver;
2825                         free(temp_struct_ver);
2826                 }
2827
2828                 int *temp_no_unread = (int *)eina_list_nth(ts_msg, 7);
2829                 if (temp_no_unread) {
2830                         peer_info->no_of_unread_msgs = *temp_no_unread;
2831                         free(temp_no_unread);
2832                 }
2833
2834                 int *temp_last_seen = (int *)eina_list_nth(ts_msg, 8);
2835                 if (temp_last_seen) {
2836                         peer_info->last_seen_time = *temp_last_seen;
2837                         free(temp_last_seen);
2838                 }
2839
2840                 char *temp_pic_path = (char *)eina_list_nth(ts_msg, 9);
2841                 if (temp_pic_path) {
2842                         peer_info->photo_path = strdup(temp_pic_path);
2843                         free(temp_pic_path);
2844                 } else {
2845                         peer_info->photo_path = NULL;
2846                 }
2847
2848                 int *temp_pic_id = (int *)eina_list_nth(ts_msg, 10);
2849                 if (temp_pic_id) {
2850                         peer_info->photo_id = *temp_pic_id;
2851                         free(temp_pic_id);
2852                 }
2853
2854                 int *temp_unknown = (int *)eina_list_nth(ts_msg, 11);
2855                 if (temp_unknown) {
2856                         peer_info->is_unknown = *temp_unknown;
2857                         free(temp_unknown);
2858                 }
2859
2860                 eina_list_free(ts_msg);
2861                 peer_with_pic_s *item = (peer_with_pic_s*) malloc(sizeof(peer_with_pic_s));
2862                 item->use_data = peer_info;
2863                 item->contact_icon = NULL;
2864                 peer_list = eina_list_append(peer_list, item);
2865         }
2866         return peer_list;
2867 }
2868
2869 void free_media_details(tgl_media_s *media_msg)
2870 {
2871         if (media_msg) {
2872                 if (media_msg->caption) {
2873                         free(media_msg->caption);
2874                 }
2875                 if (media_msg->longitude) {
2876                         free(media_msg->longitude);
2877                 }
2878                 if (media_msg->latitude) {
2879                         free(media_msg->latitude);
2880                 }
2881                 if (media_msg->phone_no) {
2882                         free(media_msg->phone_no);
2883                 }
2884                 if (media_msg->first_name) {
2885                         free(media_msg->first_name);
2886                 }
2887                 if (media_msg->last_name) {
2888                         free(media_msg->last_name);
2889                 }
2890                 if (media_msg->file_path) {
2891                         free(media_msg->file_path);
2892                 }
2893                 if (media_msg->photo_type1) {
2894                         free(media_msg->photo_type1);
2895                 }
2896                 if (media_msg->photo_data1) {
2897                         free(media_msg->photo_data1);
2898                 }
2899                 if (media_msg->photo_type2) {
2900                         free(media_msg->photo_type2);
2901                 }
2902                 if (media_msg->photo_data2) {
2903                         free(media_msg->photo_data2);
2904                 }
2905                 if (media_msg->photo_type3) {
2906                         free(media_msg->photo_type3);
2907                 }
2908                 if (media_msg->photo_data3) {
2909                         free(media_msg->photo_data3);
2910                 }
2911                 if (media_msg->photo_type4) {
2912                         free(media_msg->photo_type4);
2913                 }
2914                 if (media_msg->photo_data4) {
2915                         free(media_msg->photo_data4);
2916                 }
2917                 if (media_msg->mime_type) {
2918                         free(media_msg->mime_type);
2919                 }
2920                 if (media_msg->doc_type) {
2921                         free(media_msg->doc_type);
2922                 }
2923         }
2924 }
2925
2926 tgl_media_s *get_media_details_from_db(long long media_id)
2927 {
2928         Eina_List *img_details = get_image_details_from_db(media_id);
2929
2930         if (!img_details) {
2931                 return NULL;
2932         }
2933
2934         tgl_media_s* media_info = (tgl_media_s*)malloc(sizeof(tgl_media_s));
2935
2936         Eina_List *row_vals = eina_list_nth(img_details, 0);
2937
2938         char *temp_media_id = (char *)eina_list_nth(row_vals, 0);
2939
2940         if (temp_media_id) {
2941                 media_info->media_id = atoll(temp_media_id);
2942                 free(temp_media_id);
2943         } else {
2944                 media_info->media_id = 0;
2945         }
2946
2947         int* temp_media_type = (int *)eina_list_nth(row_vals, 1);
2948
2949         if (temp_media_type) {
2950                 media_info->media_type = *temp_media_type;
2951                 free(temp_media_type);
2952         } else {
2953                 media_info->media_type = -1;
2954         }
2955
2956         char *temp_access_hash = (char *)eina_list_nth(row_vals, 2);
2957
2958         if (temp_access_hash) {
2959                 media_info->access_hash = atoll(temp_access_hash);
2960                 free(temp_access_hash);
2961         } else {
2962                 media_info->access_hash = 0;
2963         }
2964
2965         int* temp_user_id = (int *)eina_list_nth(row_vals, 3);
2966
2967         if (temp_user_id) {
2968                 media_info->user_id = *temp_user_id;
2969                 free(temp_user_id);
2970         } else {
2971                 media_info->user_id = 0;
2972         }
2973
2974         int* temp_date = (int *)eina_list_nth(row_vals, 4);
2975
2976         if (temp_date) {
2977                 media_info->date = *temp_date;
2978                 free(temp_date);
2979         } else {
2980                 media_info->date = 0;
2981         }
2982
2983         char *temp_caption = (char *)eina_list_nth(row_vals, 5);
2984
2985         if (temp_caption) {
2986                 media_info->caption = strdup(temp_caption);
2987                 free(temp_caption);
2988         }
2989
2990         char *temp_longitude = (char *)eina_list_nth(row_vals, 6);
2991
2992         if (temp_longitude) {
2993                 media_info->longitude = strdup(temp_longitude);
2994                 free(temp_longitude);
2995         } else {
2996                 media_info->longitude = 0;
2997         }
2998
2999         char *temp_latitude = (char *)eina_list_nth(row_vals, 7);
3000
3001         if (temp_latitude) {
3002                 media_info->latitude = strdup(temp_latitude);
3003                 free(temp_latitude);
3004         } else {
3005                 media_info->latitude = 0;
3006         }
3007
3008         int* temp_sizes = (int *)eina_list_nth(row_vals, 8);
3009
3010         if (temp_sizes) {
3011                 media_info->sizes = *temp_sizes;
3012                 free(temp_sizes);
3013         } else {
3014                 media_info->sizes = 0;
3015         }
3016
3017         /***************************************************************/
3018
3019         char *temp_photo_type1 = (char *)eina_list_nth(row_vals, 9);
3020         if (temp_photo_type1 && strlen(temp_photo_type1) > 0) {
3021                 media_info->photo_type1 = strdup(temp_photo_type1);
3022                 free(temp_photo_type1);
3023         } else {
3024                 media_info->photo_type1 = 0;
3025         }
3026
3027
3028         int* temp_photo_loc_dc1 = (int *)eina_list_nth(row_vals, 10);
3029         if (temp_photo_loc_dc1) {
3030                 media_info->photo_loc_dc1 = *temp_photo_loc_dc1;
3031                 free(temp_photo_loc_dc1);
3032         } else {
3033                 media_info->photo_loc_dc1 = 0;
3034         }
3035
3036
3037         char *temp_photo_loc_vol1 = (char *)eina_list_nth(row_vals, 11);
3038         if (temp_photo_loc_vol1 && strlen(temp_photo_loc_vol1) > 0) {
3039                 media_info->photo_loc_vol1 = atoll(temp_photo_loc_vol1);
3040                 free(temp_photo_loc_vol1);
3041         } else {
3042                 media_info->photo_loc_vol1 = 0;
3043         }
3044
3045
3046         int* temp_photo_loc_id1 = (int *)eina_list_nth(row_vals, 12);
3047         if (temp_photo_loc_id1) {
3048                 media_info->photo_loc_id1 = *temp_photo_loc_id1;
3049                 free(temp_photo_loc_id1);
3050         } else {
3051                 media_info->photo_loc_id1 = 0;
3052         }
3053
3054         char *temp_photo_loc_sec1 = (char *)eina_list_nth(row_vals, 13);
3055         if (temp_photo_loc_sec1 && strlen(temp_photo_loc_sec1) > 0) {
3056                 media_info->photo_loc_sec1 = atoll(temp_photo_loc_sec1);
3057                 free(temp_photo_loc_sec1);
3058         } else {
3059                 media_info->photo_loc_sec1 = 0;
3060         }
3061
3062
3063         int* temp_photo_width1 = (int *)eina_list_nth(row_vals, 14);
3064         if (temp_photo_width1) {
3065                 media_info->photo_width1 = *temp_photo_width1;
3066                 free(temp_photo_width1);
3067         } else {
3068                 media_info->photo_width1 = 0;
3069         }
3070
3071
3072         int* temp_photo_height1 = (int *)eina_list_nth(row_vals, 15);
3073         if (temp_photo_height1) {
3074                 media_info->photo_height1 = *temp_photo_height1;
3075                 free(temp_photo_height1);
3076         } else {
3077                 media_info->photo_height1 = 0;
3078         }
3079
3080         int* temp_photo_size1 = (int *)eina_list_nth(row_vals, 16);
3081         if (temp_photo_size1) {
3082                 media_info->photo_size1 = *temp_photo_size1;
3083                 free(temp_photo_size1);
3084         } else {
3085                 media_info->photo_size1 = 0;
3086         }
3087
3088
3089         char *temp_photo_data1 = (char *)eina_list_nth(row_vals, 17);
3090         if (temp_photo_data1 && strlen(temp_photo_data1) > 0) {
3091                 media_info->photo_data1 = strdup(temp_photo_data1);
3092                 free(temp_photo_data1);
3093         } else {
3094                 media_info->photo_data1 = 0;
3095         }
3096
3097
3098         char *temp_photo_type2 = (char *)eina_list_nth(row_vals, 18);
3099         if (temp_photo_type2 && strlen(temp_photo_type2) > 0) {
3100                 media_info->photo_type2 = strdup(temp_photo_type2);
3101                 free(temp_photo_type2);
3102         } else {
3103                 media_info->photo_type2 = 0;
3104         }
3105
3106
3107         int* temp_photo_loc_dc2 = (int *)eina_list_nth(row_vals, 19);
3108         if (temp_photo_loc_dc2) {
3109                 media_info->photo_loc_dc2 = *temp_photo_loc_dc2;
3110                 free(temp_photo_loc_dc2);
3111         } else {
3112                 media_info->photo_loc_dc2 = 0;
3113         }
3114
3115
3116         char *temp_photo_loc_vol2 = (char *)eina_list_nth(row_vals, 20);
3117         if (temp_photo_loc_vol2 && strlen(temp_photo_loc_vol2) > 0) {
3118                 media_info->photo_loc_vol2 = atoll(temp_photo_loc_vol2);
3119                 free(temp_photo_loc_vol2);
3120         } else {
3121                 media_info->photo_loc_vol2 = 0;
3122         }
3123
3124
3125         int* temp_photo_loc_id2 = (int *)eina_list_nth(row_vals, 21);
3126         if (temp_photo_loc_id2) {
3127                 media_info->photo_loc_id2 = *temp_photo_loc_id2;
3128                 free(temp_photo_loc_id2);
3129         } else {
3130                 media_info->photo_loc_id2 = 0;
3131         }
3132
3133         char *temp_photo_loc_sec2 = (char *)eina_list_nth(row_vals, 22);
3134         if (temp_photo_loc_sec2 && strlen(temp_photo_loc_sec2) > 0) {
3135                 media_info->photo_loc_sec2 = atoll(temp_photo_loc_sec2);
3136                 free(temp_photo_loc_sec2);
3137         } else {
3138                 media_info->photo_loc_sec2 = 0;
3139         }
3140
3141
3142         int* temp_photo_width2 = (int *)eina_list_nth(row_vals, 23);
3143         if (temp_photo_width2) {
3144                 media_info->photo_width2 = *temp_photo_width2;
3145                 free(temp_photo_width2);
3146         } else {
3147                 media_info->photo_width2 = 0;
3148         }
3149
3150
3151         int* temp_photo_height2 = (int *)eina_list_nth(row_vals, 24);
3152         if (temp_photo_height2) {
3153                 media_info->photo_height2 = *temp_photo_height2;
3154                 free(temp_photo_height2);
3155         } else {
3156                 media_info->photo_height2 = 0;
3157         }
3158
3159         int* temp_photo_size2 = (int *)eina_list_nth(row_vals, 25);
3160         if (temp_photo_size2) {
3161                 media_info->photo_size2 = *temp_photo_size2;
3162                 free(temp_photo_size2);
3163         } else {
3164                 media_info->photo_size2 = 0;
3165         }
3166
3167
3168         char *temp_photo_data2 = (char *)eina_list_nth(row_vals, 26);
3169         if (temp_photo_data2 && strlen(temp_photo_data2) > 0) {
3170                 media_info->photo_data2 = strdup(temp_photo_data2);
3171                 free(temp_photo_data2);
3172         } else {
3173                 media_info->photo_data2 = 0;
3174         }
3175
3176         char *temp_photo_type3 = (char *)eina_list_nth(row_vals, 27);
3177         if (temp_photo_type3 && strlen(temp_photo_type3) > 0) {
3178                 media_info->photo_type3 = strdup(temp_photo_type3);
3179                 free(temp_photo_type3);
3180         } else {
3181                 media_info->photo_type3 = 0;
3182         }
3183
3184
3185         int* temp_photo_loc_dc3 = (int *)eina_list_nth(row_vals, 28);
3186         if (temp_photo_loc_dc3) {
3187                 media_info->photo_loc_dc3 = *temp_photo_loc_dc3;
3188                 free(temp_photo_loc_dc3);
3189         } else {
3190                 media_info->photo_loc_dc3 = 0;
3191         }
3192
3193
3194         char *temp_photo_loc_vol3 = (char *)eina_list_nth(row_vals, 29);
3195         if (temp_photo_loc_vol3 && strlen(temp_photo_loc_vol3) > 0) {
3196                 media_info->photo_loc_vol3 = atoll(temp_photo_loc_vol3);
3197                 free(temp_photo_loc_vol3);
3198         } else {
3199                 media_info->photo_loc_vol3 = 0;
3200         }
3201
3202
3203         int* temp_photo_loc_id3 = (int *)eina_list_nth(row_vals, 30);
3204         if (temp_photo_loc_id3) {
3205                 media_info->photo_loc_id3 = *temp_photo_loc_id3;
3206                 free(temp_photo_loc_id3);
3207         } else {
3208                 media_info->photo_loc_id3 = 0;
3209         }
3210
3211         char *temp_photo_loc_sec3 = (char *)eina_list_nth(row_vals, 31);
3212         if (temp_photo_loc_sec3 && strlen(temp_photo_loc_sec3) > 0) {
3213                 media_info->photo_loc_sec3 = atoll(temp_photo_loc_sec3);
3214                 free(temp_photo_loc_sec3);
3215         } else {
3216                 media_info->photo_loc_sec3 = 0;
3217         }
3218
3219
3220         int* temp_photo_width3 = (int *)eina_list_nth(row_vals, 32);
3221         if (temp_photo_width3) {
3222                 media_info->photo_width3 = *temp_photo_width3;
3223                 free(temp_photo_width3);
3224         } else {
3225                 media_info->photo_width3 = 0;
3226         }
3227
3228
3229         int* temp_photo_height3 = (int *)eina_list_nth(row_vals, 33);
3230         if (temp_photo_height3) {
3231                 media_info->photo_height3 = *temp_photo_height3;
3232                 free(temp_photo_height3);
3233         } else {
3234                 media_info->photo_height3 = 0;
3235         }
3236
3237         int* temp_photo_size3 = (int *)eina_list_nth(row_vals, 34);
3238         if (temp_photo_size3) {
3239                 media_info->photo_size3 = *temp_photo_size3;
3240                 free(temp_photo_size3);
3241         } else {
3242                 media_info->photo_size3 = 0;
3243         }
3244
3245
3246         char *temp_photo_data3 = (char *)eina_list_nth(row_vals, 35);
3247         if (temp_photo_data3 && strlen(temp_photo_data3) > 0) {
3248                 media_info->photo_data3 = strdup(temp_photo_data3);
3249                 free(temp_photo_data3);
3250         } else {
3251                 media_info->photo_data3 = 0;
3252         }
3253
3254         char *temp_photo_type4 = (char *)eina_list_nth(row_vals, 36);
3255         if (temp_photo_type4 && strlen(temp_photo_type4) > 0) {
3256                 media_info->photo_type4 = strdup(temp_photo_type4);
3257                 free(temp_photo_type4);
3258         } else {
3259                 media_info->photo_type4 = 0;
3260         }
3261
3262
3263         int* temp_photo_loc_dc4 = (int *)eina_list_nth(row_vals, 37);
3264         if (temp_photo_loc_dc4) {
3265                 media_info->photo_loc_dc4 = *temp_photo_loc_dc4;
3266                 free(temp_photo_loc_dc4);
3267         } else {
3268                 media_info->photo_loc_dc4 = 0;
3269         }
3270
3271
3272         char *temp_photo_loc_vol4 = (char *)eina_list_nth(row_vals, 38);
3273         if (temp_photo_loc_vol4 && strlen(temp_photo_loc_vol4) > 0) {
3274                 media_info->photo_loc_vol4 = atoll(temp_photo_loc_vol4);
3275                 free(temp_photo_loc_vol4);
3276         } else {
3277                 media_info->photo_loc_vol4 = 0;
3278         }
3279
3280
3281         int* temp_photo_loc_id4 = (int *)eina_list_nth(row_vals, 39);
3282         if (temp_photo_loc_id4) {
3283                 media_info->photo_loc_id4 = *temp_photo_loc_id4;
3284                 free(temp_photo_loc_id4);
3285         } else {
3286                 media_info->photo_loc_id4 = 0;
3287         }
3288
3289         char *temp_photo_loc_sec4 = (char *)eina_list_nth(row_vals, 40);
3290         if (temp_photo_loc_sec4 && strlen(temp_photo_loc_sec4) > 0) {
3291                 media_info->photo_loc_sec4 = atoll(temp_photo_loc_sec4);
3292                 free(temp_photo_loc_sec4);
3293         } else {
3294                 media_info->photo_loc_sec4 = 0;
3295         }
3296
3297
3298         int* temp_photo_width4 = (int *)eina_list_nth(row_vals, 41);
3299         if (temp_photo_width4) {
3300                 media_info->photo_width4 = *temp_photo_width4;
3301                 free(temp_photo_width4);
3302         } else {
3303                 media_info->photo_width4 = 0;
3304         }
3305
3306
3307         int* temp_photo_height4 = (int *)eina_list_nth(row_vals, 42);
3308         if (temp_photo_height4) {
3309                 media_info->photo_height4 = *temp_photo_height4;
3310                 free(temp_photo_height4);
3311         } else {
3312                 media_info->photo_height4 = 0;
3313         }
3314
3315         int* temp_photo_size4 = (int *)eina_list_nth(row_vals, 43);
3316         if (temp_photo_size4) {
3317                 media_info->photo_size4 = *temp_photo_size4;
3318                 free(temp_photo_size4);
3319         } else {
3320                 media_info->photo_size4 = 0;
3321         }
3322
3323
3324         char *temp_photo_data4 = (char *)eina_list_nth(row_vals, 44);
3325         if (temp_photo_data4 && strlen(temp_photo_data4) > 0) {
3326                 media_info->photo_data4 = strdup(temp_photo_data4);
3327                 free(temp_photo_data4);
3328         } else {
3329                 media_info->photo_data4 = 0;
3330         }
3331
3332
3333         /**************************************************************/
3334
3335         char *temp_phone_no = (char *)eina_list_nth(row_vals, 45);
3336
3337         if (temp_phone_no && strlen(temp_phone_no) > 0) {
3338                 media_info->phone_no = strdup(temp_phone_no);
3339                 free(temp_phone_no);
3340         } else {
3341                 media_info->phone_no = 0;
3342         }
3343
3344         char *temp_first_name = (char *)eina_list_nth(row_vals, 46);
3345
3346         if (temp_first_name && strlen(temp_first_name) > 0) {
3347                 media_info->first_name = strdup(temp_first_name);
3348                 free(temp_first_name);
3349         } else {
3350                 media_info->first_name = 0;
3351         }
3352
3353         char *temp_last_name = (char *)eina_list_nth(row_vals, 47);
3354
3355         if (temp_last_name && strlen(temp_last_name) > 0) {
3356                 media_info->last_name = strdup(temp_last_name);
3357                 free(temp_last_name);
3358         } else {
3359                 media_info->last_name = 0;
3360         }
3361
3362         char *temp_file_path = (char *)eina_list_nth(row_vals, 48);
3363
3364         if (temp_file_path && strlen(temp_file_path) > 0) {
3365                 media_info->file_path = strdup(temp_file_path);
3366                 free(temp_file_path);
3367         } else {
3368                 media_info->file_path = 0;
3369         }
3370
3371         char *temp_mime_type = (char *)eina_list_nth(row_vals, 49);
3372
3373         if (temp_mime_type && strlen(temp_mime_type) > 0) {
3374                 media_info->mime_type = strdup(temp_mime_type);
3375                 free(temp_mime_type);
3376         } else {
3377                 media_info->mime_type = 0;
3378         }
3379
3380         char *temp_doc_type = (char *)eina_list_nth(row_vals, 50);
3381
3382         if (temp_doc_type && strlen(temp_doc_type) > 0) {
3383                 media_info->doc_type = strdup(temp_doc_type);
3384                 free(temp_doc_type);
3385         } else {
3386                 media_info->doc_type = 0;
3387         }
3388
3389         int* temp_doc_width = (int *)eina_list_nth(row_vals, 51);
3390         if (temp_doc_width) {
3391                 media_info->doc_width = *temp_doc_width;
3392                 free(temp_doc_width);
3393         } else {
3394                 media_info->doc_width = 0;
3395         }
3396
3397         int* temp_doc_height = (int *)eina_list_nth(row_vals, 52);
3398         if (temp_doc_height) {
3399                 media_info->doc_height = *temp_doc_height;
3400                 free(temp_doc_height);
3401         } else {
3402                 media_info->doc_height = 0;
3403         }
3404
3405         int* temp_doc_duration = (int *)eina_list_nth(row_vals, 53);
3406         if (temp_doc_duration) {
3407                 media_info->doc_duration = *temp_doc_duration;
3408                 free(temp_doc_duration);
3409         } else {
3410                 media_info->doc_duration = 0;
3411         }
3412
3413         int* temp_doc_size = (int *)eina_list_nth(row_vals, 54);
3414         if (temp_doc_size) {
3415                 media_info->doc_size = *temp_doc_size;
3416                 free(temp_doc_size);
3417         } else {
3418                 media_info->doc_size = 0;
3419         }
3420
3421         eina_list_free(row_vals);
3422
3423         return media_info;
3424
3425 }
3426
3427 Eina_List *get_all_peer_ids()
3428 {
3429         Eina_List *peer_details = NULL;
3430         char *table_name = PEER_INFO_TABLE_NAME;
3431         Eina_List *col_names = NULL;
3432         Eina_List *col_types = NULL;
3433
3434         col_names = eina_list_append(col_names, PEER_INFO_TABLE_CHAT_ID);
3435         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
3436         peer_details = get_values_from_table_sync_order_by(table_name, col_names, col_types, PEER_INFO_TABLE_LAST_MESSAGE_DATE, EINA_FALSE, NULL, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
3437
3438         eina_list_free(col_names);
3439         eina_list_free(col_types);
3440         return peer_details;
3441 }
3442
3443 int get_number_of_unread_messages()
3444 {
3445         int no_of_unread = 0;
3446         Eina_List *peer_details = get_all_peer_ids();
3447
3448         Eina_List *ts_msg = NULL;
3449         int peer_id = 0;
3450         EINA_LIST_FREE(peer_details, ts_msg) {
3451                 int *temp_peer_id = (int *)eina_list_nth(ts_msg, 0);
3452                 if (temp_peer_id) {
3453                         peer_id  = *temp_peer_id;
3454                         free(temp_peer_id);
3455                         temp_peer_id = NULL;
3456                 }
3457                 char *msg_table = get_table_name_from_number(peer_id);
3458                 int count = 0;
3459                 if (msg_table) {
3460                          count = get_unread_message_count(msg_table);
3461                 }
3462                 no_of_unread = no_of_unread + count;
3463                 free(msg_table);
3464                 eina_list_free(ts_msg);
3465         }
3466         return no_of_unread;
3467 }
3468
3469 void create_buddy_msg_table(const char *table_name)
3470 {
3471         if (!table_name) {
3472                 return;
3473         }
3474         // create user info table
3475         Eina_List *col_names = NULL;
3476         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_ID);
3477         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FLAGS);
3478         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_FROM_ID);
3479         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FWD_DATE);
3480         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_FROM_ID);
3481         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_TO_ID);
3482         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_OUT_MSG);
3483         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNREAD);
3484         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_DATE);
3485         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_SERVICE);
3486         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE);
3487         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_STATE);
3488         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MESSAGE_LENGTH);
3489         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_TYPE);
3490         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MEDIA_ID);
3491         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_UNIQUE_ID);
3492         col_names = eina_list_append(col_names, MESSAGE_INFO_TABLE_MARKED_FOR_DELETE);
3493
3494
3495         Eina_List *col_types = NULL;
3496         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER_PRIMARY_KEY);
3497         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3498         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3499         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3500         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3501         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3502         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3503         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3504         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3505         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3506         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
3507         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3508         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3509         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3510         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
3511         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3512         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3513
3514         Eina_Bool ret = create_table(table_name, col_names, col_types);
3515         if (!ret) {
3516                 DBG("create_table failed");
3517         }
3518         else {
3519                 /* Create index only when creating a table is suceeded */
3520                 create_index(table_name, "date");
3521         }
3522         eina_list_free(col_names);
3523         eina_list_free(col_types);
3524 }
3525
3526
3527 Eina_Bool mark_all_records_for_deletion(char *tablename)
3528 {
3529         if (!tablename) {
3530                 return EINA_FALSE;
3531         }
3532         char var_query[1024];
3533         sprintf(var_query, "UPDATE %s SET "MESSAGE_INFO_TABLE_MARKED_FOR_DELETE" = 1 WHERE "MESSAGE_INFO_TABLE_MARKED_FOR_DELETE" = 0;", tablename);
3534
3535         char *err_msg = 0;
3536         int ret;
3537         sqlite3* db = create_database();
3538         ret = sqlite3_exec(db, var_query, NULL, NULL, &err_msg);
3539         close_database(db);
3540         if (ret != SQLITE_OK) {
3541                 sqlite3_free(err_msg);
3542                 return EINA_FALSE;
3543         }
3544
3545         return EINA_TRUE;
3546 }
3547
3548
3549 void get_buddy_contact_details_from_db(int buddy_id, char **first_name, char **last_name, char **phone_number)
3550 {
3551         char *file_path = NULL;
3552         char *table_name = BUDDY_INFO_TABLE_NAME;
3553
3554         char where_clause[1024];
3555         sprintf(where_clause, USER_INFO_TABLE_USER_ID" = %d", buddy_id);
3556
3557         Eina_List *col_types = NULL;
3558         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
3559         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
3560         col_types = eina_list_append(col_types, TG_DB_COLUMN_TEXT);
3561
3562         Eina_List *col_names = NULL;
3563         col_names = eina_list_append(col_names, USER_INFO_TABLE_FIRST_NAME);
3564         col_names = eina_list_append(col_names, USER_INFO_TABLE_LAST_NAME);
3565         col_names = eina_list_append(col_names, USER_INFO_TABLE_PHONE_NO);
3566
3567         Eina_List *vals = get_values_from_table_sync(table_name, col_names, col_types, where_clause, TG_DBMGR_NOLIMITED, TG_DBMGR_NOLIMITED);
3568         file_path = NULL;
3569         eina_list_free(col_names);
3570
3571         if (!vals)
3572                 return;
3573
3574         Eina_List *row_vals = NULL;
3575         int pos = 0;
3576         EINA_LIST_FREE(vals, row_vals) {
3577                 if (pos == 0) {
3578                         char *temp_fname = (char *)eina_list_nth(row_vals, 0);
3579                         *first_name = strdup(temp_fname);
3580                         char *temp_lname = (char *)eina_list_nth(row_vals, 1);
3581                         *last_name = strdup(temp_lname);
3582                         char *temp_pnumber = (char *)eina_list_nth(row_vals, 2);
3583                         *phone_number = strdup(temp_pnumber);
3584                 }
3585                 void *val = NULL;
3586                 EINA_LIST_FREE(row_vals, val) {
3587                         if (val)
3588                                 free(val);
3589                 }
3590                 pos++;
3591         }
3592         eina_list_free(vals);
3593
3594         return;
3595 }
3596
3597 Eina_Bool delete_date_messages_from_table(char *tablename)
3598 {
3599         if (!tablename) {
3600                 return EINA_FALSE;
3601         }
3602
3603         char var_query[1024];
3604         sprintf(var_query, "DELETE FROM %s WHERE "MESSAGE_INFO_TABLE_SERVICE" = 2;", tablename);
3605
3606         int ret;
3607         char *err_msg = 0;
3608         sqlite3* db = create_database();
3609         ret = sqlite3_exec(db, var_query, NULL, NULL, &err_msg);
3610         close_database(db);
3611         if (ret != SQLITE_OK) {
3612                 sqlite3_free(err_msg);
3613                 return EINA_FALSE;
3614         }
3615         return EINA_TRUE;
3616 }
3617
3618 Eina_Bool mark_group_chat_as_unknown(int chat_id)
3619 {
3620         char *table_name = PEER_INFO_TABLE_NAME;
3621         Eina_List *col_types = NULL;
3622         Eina_List *col_names = NULL;
3623         Eina_List *col_values = NULL;
3624         //char *where_clause = NULL;
3625         int un_read_res = 1;
3626         //char usr_str[50];
3627         Eina_Bool ret;
3628
3629         col_names = eina_list_append(col_names, USER_INFO_TABLE_IS_UNKNOWN_PEER);
3630         col_types = eina_list_append(col_types, TG_DB_COLUMN_INTEGER);
3631         col_values = eina_list_append(col_values, &(un_read_res));
3632
3633         char where_clause[1024];
3634         sprintf(where_clause, PEER_INFO_TABLE_CHAT_ID" = %d", chat_id);
3635
3636         ret = update_table(table_name, col_names, col_types, col_values, where_clause);
3637
3638         eina_list_free(col_names);
3639         eina_list_free(col_types);
3640         eina_list_free(col_values);
3641
3642         return ret;
3643 }