#include "tg_user_main_view.h"
#include "tg_messaging_view.h"
#include "tg_start_messaging_view.h"
+#include "tg_common.h"
--static void
++ static void
popup_block_clicked_cb(void *data, Evas_Object *obj, void *event_info)
{
evas_object_del(obj);
}
--static void
++ static void
popup_timeout_cb(void *data, Evas_Object *obj, void *event_info)
{
evas_object_del(obj);
if (item) {
tg_peer_info_s* peer_info = item->use_data;
if(peer_info) {
- //if (peer_info->last_msg_id > 0) {
-
- // get message from message table.
-
- char* tablename = get_table_name_from_number(peer_info->peer_id);
- //tg_message_s* msg = get_message_from_message_table(peer_info->last_msg_id, tablename);
- tg_message_s* msg = get_latest_message_from_message_table(tablename);
+ tg_main_list_item_s *list_item;
+ // get message from message table.
+ const char *tablename;
+ //tg_message_s* msg = get_message_from_message_table(peer_info->last_msg_id, tablename);
+ tg_message_s *msg;
+
+ tablename = tg_common_to_string("tg_%d_msg", peer_info->peer_id);
+ if (!tablename) {
+ ERR("Unable to convert a string for peer_id");
+ return;
+ }
- if (msg) {
+ msg = get_latest_message_from_message_table(tablename);
+ if (!msg) {
+ ERR("Unable to get messages");
+ return;
+ }
- switch (msg->media_type) {
- case tgl_message_media_photo:
- item->last_message = strdup("Image");
- break;
- case tgl_message_media_document:
- item->last_message = strdup("Document");
- break;
- case tgl_message_media_geo:
- item->last_message = strdup("Geo location");
- break;
- case tgl_message_media_contact:
- item->last_message = strdup("Contact");
- break;
- case tgl_message_media_photo_encr:
- item->last_message = strdup("Image encrypted");
- break;
- case tgl_message_media_document_encr:
- item->last_message = strdup("Document encrypted");
- break;
- case tgl_message_media_none:
- if (msg->message && strlen(msg->message) > 0) {
- item->last_message = strdup(msg->message);
- if (item->last_message) {
- if (msg->service) {
++ if (msg) {
++ if (msg->service) {
++ if (msg->message && strlen(msg->message) > 0) {
++ item->last_message = strdup(msg->message);
++ } else {
++ item->last_message = strdup(" ");
++ }
++ } else {
++ switch (msg->media_type) {
++ case tgl_message_media_none:
+ if (msg->message && strlen(msg->message) > 0) {
+ item->last_message = strdup(msg->message);
+ } else {
+ item->last_message = strdup(" ");
+ }
- } else {
-
- int media_type = msg->media_type;
- if(media_type == tgl_message_media_none) {
- if (msg->message && strlen(msg->message) > 0) {
- item->last_message = strdup(msg->message);
- } else {
- item->last_message = strdup(" ");
- }
- } else if(media_type == tgl_message_media_photo) {
- item->last_message = strdup("Image");
- } else if(media_type == tgl_message_media_document) {
- item->last_message = strdup("Document");
- } else if(media_type == tgl_message_media_geo) {
- item->last_message = strdup("Geo location");
- } else if(media_type == tgl_message_media_contact) {
- item->last_message = strdup("Contact");
- } else if(media_type == tgl_message_media_unsupported) {
- item->last_message = strdup(" ");
- } else if(media_type == tgl_message_media_photo_encr) {
- item->last_message = strdup("Image encrypted");
- } else if(media_type == tgl_message_media_document_encr) {
- item->last_message = strdup("Document encrypted");
- } else {
- item->last_message = strdup(" ");
- }
- }
-
- tg_main_list_item_s* main_list_item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
- main_list_item->peer_id = peer_info->peer_id;
- main_list_item->peer_type = peer_info->peer_type;
- main_list_item->peer_print_name = strdup(peer_info->print_name);
- main_list_item->last_seen_time = msg->date;
- main_list_item->profile_pic = NULL;
- main_list_item->last_msg_id = msg->msg_id;
- main_list_item->last_message = strdup(item->last_message);
- main_list_item->last_msg_type = msg->media_type;
- main_list_item->is_out_msg = msg->out;
- main_list_item->last_msg_status = msg->msg_state;
- main_list_item->last_msg_service = msg->service;
- main_list_item->number_of_unread_msgs = get_unread_message_count(tablename);
- if (peer_info->photo_path) {
- main_list_item->profile_pic_path = strdup(peer_info->photo_path);
- } else {
- main_list_item->profile_pic_path = NULL;
++ break;
++ case tgl_message_media_photo:
++ item->last_message = strdup("Image");
++ break;
++ case tgl_message_media_document:
++ item->last_message = strdup("Document");
++ break;
++ case tgl_message_media_geo:
++ item->last_message = strdup("Geo location");
++ break;
++ case tgl_message_media_contact:
++ item->last_message = strdup("Contact");
++ break;
++ case tgl_message_media_unsupported:
++ item->last_message = strdup(" ");
++ break;
++ case tgl_message_media_photo_encr:
++ item->last_message = strdup("Image encrypted");
++ break;
++ case tgl_message_media_document_encr:
++ item->last_message = strdup("Document encrypted");
++ break;
++ default:
++ item->last_message = strdup(" ");
+ break;
}
- ERR("strdup: %d", errno);
- main_list_item->user_name_lbl = NULL;
- main_list_item->status_lbl = NULL;
- main_list_item->date_lbl = NULL;
- main_list_item->msg_status_lbl = NULL;
- ad->main_list = eina_list_append(ad->main_list, main_list_item);
+ }
- /* Fall through to default in this case */
- case tgl_message_media_unsupported:
- default:
- item->last_message = strdup(" ");
- break;
+ }
++ ERR("strdup: %d", errno);
++ }
++ }
- list_item = (tg_main_list_item_s *)malloc(sizeof(*item));
- if (!list_item) {
- ERR("Unable to allocate heap for an item");
- break;
- }
- list_item->peer_id = peer_info->peer_id;
- list_item->peer_type = peer_info->peer_type;
- list_item->peer_print_name = strdup(peer_info->print_name);
- if (!list_item->peer_print_name) {
- free(list_item);
- ERR("Unable to allocate heap for print_name");
- break;
- }
- list_item->last_seen_time = msg->date;
- list_item->profile_pic = NULL;
- list_item->last_msg_id = msg->msg_id;
- list_item->last_message = strdup(item->last_message);
- if (!list_item->last_message) {
- free(list_item->peer_print_name);
- free(list_item);
- ERR("Unable to allocate heap for peer_print_name");
- break;
- }
- list_item->last_msg_type = msg->media_type;
- list_item->is_out_msg = msg->out;
- list_item->last_msg_status = msg->msg_state;
- list_item->number_of_unread_msgs = get_unread_message_count(tablename);
- if (peer_info->photo_path) {
- list_item->profile_pic_path = strdup(peer_info->photo_path);
- } else {
- list_item->profile_pic_path = NULL;
- }
- list_item->user_name_lbl = NULL;
- list_item->status_lbl = NULL;
- list_item->date_lbl = NULL;
- list_item->msg_status_lbl = NULL;
- ad->main_list = eina_list_append(ad->main_list, list_item);
-
- // delete message object
- if(msg->message) {
- free(msg->message);
- msg->message = NULL;
- }
- // delete message object
- if(msg->message) {
- free(msg->message);
- msg->message = NULL;
- }
++ tg_main_list_item_s* main_list_item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
++ main_list_item->peer_id = peer_info->peer_id;
++ main_list_item->peer_type = peer_info->peer_type;
++ main_list_item->peer_print_name = strdup(peer_info->print_name);
++ main_list_item->last_seen_time = msg->date;
++ main_list_item->profile_pic = NULL;
++ main_list_item->last_msg_id = msg->msg_id;
++ main_list_item->last_message = strdup(item->last_message);
++ main_list_item->last_msg_type = msg->media_type;
++ main_list_item->is_out_msg = msg->out;
++ main_list_item->last_msg_status = msg->msg_state;
++ main_list_item->last_msg_service = msg->service;
++ main_list_item->number_of_unread_msgs = get_unread_message_count(tablename);
++ if (peer_info->photo_path) {
++ main_list_item->profile_pic_path = strdup(peer_info->photo_path);
++ } else {
++ main_list_item->profile_pic_path = NULL;
++ }
++ main_list_item->user_name_lbl = NULL;
++ main_list_item->status_lbl = NULL;
++ main_list_item->date_lbl = NULL;
++ main_list_item->msg_status_lbl = NULL;
++ ad->main_list = eina_list_append(ad->main_list, main_list_item);
- if(msg->media_id) {
- free(msg->media_id);
- msg->media_id = NULL;
- }
- if(msg->media_id) {
- free(msg->media_id);
- msg->media_id = NULL;
- }
++ // delete message object
++ if(msg->message) {
++ free(msg->message);
++ msg->message = NULL;
++ }
- free(msg);
- msg = NULL;
- free(msg);
- msg = NULL;
++ // delete message object
++ if(msg->message) {
++ free(msg->message);
++ msg->message = NULL;
++ }
+
- } else {
- item->last_message = strdup(" ");
- if (peer_info->peer_type == TGL_PEER_CHAT) {
- tg_main_list_item_s* main_list_item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
- main_list_item->peer_id = peer_info->peer_id;
- main_list_item->peer_type = peer_info->peer_type;
- main_list_item->peer_print_name = strdup(peer_info->print_name);
- main_list_item->last_seen_time = peer_info->last_seen_time;
- main_list_item->profile_pic = NULL;
- main_list_item->last_message = strdup(item->last_message);
- main_list_item->last_msg_type = -1;
- main_list_item->last_msg_service = 0;
- main_list_item->is_out_msg = -1;
- main_list_item->last_msg_id = -1;
- main_list_item->last_msg_status = -1;
- main_list_item->number_of_unread_msgs = 0;
- if (peer_info->photo_path) {
- main_list_item->profile_pic_path = strdup(peer_info->photo_path);
- } else {
- main_list_item->profile_pic_path = NULL;
- }
- main_list_item->user_name_lbl = NULL;
- main_list_item->status_lbl = NULL;
- main_list_item->date_lbl = NULL;
- main_list_item->msg_status_lbl = NULL;
- ad->main_list = eina_list_append(ad->main_list, main_list_item);
- }
- }
++ if(msg->media_id) {
++ free(msg->media_id);
++ msg->media_id = NULL;
++ }
- if (tablename) {
- free(tablename);
- tablename = NULL;
- }
- //}
++ } else {
++ item->last_message = strdup(" ");
++ if (peer_info->peer_type == TGL_PEER_CHAT) {
++ tg_main_list_item_s* main_list_item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
++ main_list_item->peer_id = peer_info->peer_id;
++ main_list_item->peer_type = peer_info->peer_type;
++ main_list_item->peer_print_name = strdup(peer_info->print_name);
++ main_list_item->last_seen_time = peer_info->last_seen_time;
++ main_list_item->profile_pic = NULL;
++ main_list_item->last_message = strdup(item->last_message);
++ main_list_item->last_msg_type = -1;
++ main_list_item->last_msg_service = 0;
++ main_list_item->is_out_msg = -1;
++ main_list_item->last_msg_id = -1;
++ main_list_item->last_msg_status = -1;
++ main_list_item->number_of_unread_msgs = 0;
++ if (peer_info->photo_path) {
++ main_list_item->profile_pic_path = strdup(peer_info->photo_path);
+ } else {
- item->last_message = strdup(" ");
- if (peer_info->peer_type == TGL_PEER_CHAT) {
- tg_main_list_item_s* item = (tg_main_list_item_s*)malloc(sizeof(tg_main_list_item_s));
- item->peer_id = peer_info->peer_id;
- item->peer_type = peer_info->peer_type;
- item->peer_print_name = strdup(peer_info->print_name);
- item->last_seen_time = peer_info->last_seen_time;
- item->profile_pic = NULL;
- item->last_message = strdup(item->last_message);
- item->last_msg_type = -1;
- item->is_out_msg = -1;
- item->last_msg_id = -1;
- item->last_msg_status = -1;
- item->number_of_unread_msgs = 0;
- if (peer_info->photo_path) {
- item->profile_pic_path = strdup(peer_info->photo_path);
- } else {
- item->profile_pic_path = NULL;
- }
- item->user_name_lbl = NULL;
- item->status_lbl = NULL;
- item->date_lbl = NULL;
- item->msg_status_lbl = NULL;
- ad->main_list = eina_list_append(ad->main_list, item);
- }
++ main_list_item->profile_pic_path = NULL;
}
++ main_list_item->user_name_lbl = NULL;
++ main_list_item->status_lbl = NULL;
++ main_list_item->date_lbl = NULL;
++ main_list_item->msg_status_lbl = NULL;
++ ad->main_list = eina_list_append(ad->main_list, main_list_item);
}
}
--
--
}
void load_group_chat_data(appdata_s *ad)
result = bundle_get_str(rec_msg, "is_success", &is_success_val);
if (strncmp("true", is_success_val, strlen("true")) == 0) {
-- //show_toast(app, is_success_val);
++ //show_toast(app, is_success_val);
// Launch login view
elm_naviframe_item_pop(app->nf);
launch_login_cb(data);
for (int i = 0 ; i < size ; i++) {
user_data_with_pic_s *item = eina_list_nth(app->buddy_list, i);
if (item->use_data->user_id.id == user_id) {
-- if (item->use_data->photo_path) {
-- free(item->use_data->photo_path);
-- item->use_data->photo_path = NULL;
-- }
++ if (item->use_data->photo_path) {
++ free(item->use_data->photo_path);
++ item->use_data->photo_path = NULL;
++ }
item->use_data->photo_path = strdup(pic_file_path);
if (item->contact_icon) {
elm_image_file_set(item->contact_icon, pic_file_path, NULL);
for (int i = 0 ; i < size ; i++) {
peer_with_pic_s *item = eina_list_nth(app->peer_list, i);
if (item->use_data->peer_id == user_id) {
-- if (item->use_data->photo_path) {
-- free(item->use_data->photo_path);
-- item->use_data->photo_path = NULL;
-- }
++ if (item->use_data->photo_path) {
++ free(item->use_data->photo_path);
++ item->use_data->photo_path = NULL;
++ }
item->use_data->photo_path = strdup(pic_file_path);
if (item->contact_icon) {
elm_image_file_set(item->contact_icon, pic_file_path, NULL);
}
}
-- if(app->main_list) {
-- int size = eina_list_count(app->main_list);
-- for (int i = 0 ; i < size ; i++) {
-- tg_main_list_item_s *item = eina_list_nth(app->main_list, i);
-- if (item->peer_id == user_id) {
-- if (item->profile_pic_path) {
-- free(item->profile_pic_path);
-- item->profile_pic_path = NULL;
-- }
-- item->profile_pic_path = strdup(pic_file_path);
-- if (item->profile_pic) {
-- elm_image_file_set(item->profile_pic, pic_file_path, NULL);
-- }
-- break;
-- }
-- }
-- }
++ if(app->main_list) {
++ int size = eina_list_count(app->main_list);
++ for (int i = 0 ; i < size ; i++) {
++ tg_main_list_item_s *item = eina_list_nth(app->main_list, i);
++ if (item->peer_id == user_id) {
++ if (item->profile_pic_path) {
++ free(item->profile_pic_path);
++ item->profile_pic_path = NULL;
++ }
++ item->profile_pic_path = strdup(pic_file_path);
++ if (item->profile_pic) {
++ elm_image_file_set(item->profile_pic, pic_file_path, NULL);
++ }
++ break;
++ }
++ }
++ }
}
} else if (strcmp(rec_key_val, "message_received") == 0) {
} else {
sel_item->last_message = strdup(" ");
}
- } else if(media_type == tgl_message_media_photo) {
- sel_item->last_message = strdup("Image");
- } else if(media_type == tgl_message_media_document) {
- sel_item->last_message = strdup("Document");
- } else if(media_type == tgl_message_media_geo) {
- sel_item->last_message = strdup("Geo location");
- } else if(media_type == tgl_message_media_contact) {
- sel_item->last_message = strdup("Contact");
- } else if(media_type == tgl_message_media_unsupported) {
- sel_item->last_message = strdup(" ");
- } else if(media_type == tgl_message_media_photo_encr) {
- sel_item->last_message = strdup("Image encrypted");
- } else if(media_type == tgl_message_media_document_encr) {
- sel_item->last_message = strdup("Document encrypted");
- } else {
- sel_item->last_message = strdup(" ");
+ } else {
-
- int media_type = msg->media_type;
- if(media_type == tgl_message_media_none) {
- if (msg->message && strlen(msg->message) > 0) {
- sel_item->last_message = strdup(msg->message);
- } else {
- sel_item->last_message = strdup(" ");
- }
- } else if(media_type == tgl_message_media_photo) {
++ switch (msg->media_type) {
++ case tgl_message_media_photo:
+ sel_item->last_message = strdup("Image");
- } else if(media_type == tgl_message_media_document) {
++ break;
++ case tgl_message_media_document:
+ sel_item->last_message = strdup("Document");
- } else if(media_type == tgl_message_media_geo) {
++ break;
++ case tgl_message_media_geo:
+ sel_item->last_message = strdup("Geo location");
- } else if(media_type == tgl_message_media_contact) {
++ break;
++ case tgl_message_media_contact:
+ sel_item->last_message = strdup("Contact");
- } else if(media_type == tgl_message_media_unsupported) {
- sel_item->last_message = strdup(" ");
- } else if(media_type == tgl_message_media_photo_encr) {
++ break;
++ case tgl_message_media_photo_encr:
+ sel_item->last_message = strdup("Image encrypted");
- } else if(media_type == tgl_message_media_document_encr) {
++ break;
++ case tgl_message_media_document_encr:
+ sel_item->last_message = strdup("Document encrypted");
- } else {
++ break;
++ case tgl_message_media_none:
++ if (msg->message && strlen(msg->message) > 0) {
++ sel_item->last_message = strdup(msg->message);
++ break;
++ }
++ case tgl_message_media_unsupported:
++ default:
+ sel_item->last_message = strdup(" ");
- }
++ break;
}
sel_item->last_msg_id = msg->msg_id;
sel_item->last_msg_type = msg->media_type;
}
if (sel_item->status_lbl) {
-- char* org_msg = NULL;
-- if (sel_item->last_message) {
-- org_msg = sel_item->last_message;
-- } else {
-- org_msg = "";
-- }
--
-- int len_org_str = strlen(org_msg);
--
-- char res[25] = {'\0'};
-- char status_buf[126] = {'\0'};
-- if(len_org_str > 25) {
-- strncpy(res, org_msg, 24);
- //snprintf(status_buf, 512, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", res);
- sprintf(status_buf,"<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", res);
- if(msg->service) {
- sprintf(status_buf,"<font=Tizen:style=Italic color=#158CB0 align=left><font_size=30>%s</font_size></font>", res);
- } else {
- sprintf(status_buf,"<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", res);
- }
-- } else {
- //snprintf(status_buf, 512, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", org_msg);
- snprintf(status_buf, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", org_msg);
- if(msg->service) {
- sprintf(status_buf, "<font=Tizen:style=Italic color=#158CB0 align=left><font_size=30>%s</font_size></font>", org_msg);
- } else {
- sprintf(status_buf, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", org_msg);
- }
-- }
++ char* org_msg = NULL;
++ if (sel_item->last_message) {
++ org_msg = sel_item->last_message;
++ } else {
++ org_msg = "";
++ }
++
++ int len_org_str = strlen(org_msg);
++
++ char res[25] = {'\0'};
++ char status_buf[126] = {'\0'};
++ if(len_org_str > 25) {
++ strncpy(res, org_msg, 24);
++ if(msg->service) {
++ sprintf(status_buf,"<font=Tizen:style=Italic color=#158CB0 align=left><font_size=30>%s</font_size></font>", res);
++ } else {
++ sprintf(status_buf,"<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", res);
++ }
++ } else {
++ if(msg->service) {
++ sprintf(status_buf, "<font=Tizen:style=Italic color=#158CB0 align=left><font_size=30>%s</font_size></font>", org_msg);
++ } else {
++ sprintf(status_buf, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", org_msg);
++ }
++ }
elm_object_text_set(sel_item->status_lbl, status_buf);
}
}
}
--
--
--
if (type_of_chat == TGL_PEER_USER) {
- if (app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE && app->buddy_in_cahtting_data
- && app->buddy_in_cahtting_data->use_data->user_id.id == from_id) {
+ if (app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE && app->peer_in_cahtting_data
+ && app->peer_in_cahtting_data->use_data->peer_id == from_id) {
on_text_message_received_from_buddy(app, message_id, type_of_chat);
}
char* chat_id_str = NULL;
result = bundle_get_str(rec_msg, "chat_id", &chat_id_str);
--
++
#if 0
-- int chat_id = atoi(chat_id_str);
++ int chat_id = atoi(chat_id_str);
// get group chat details from database.(chat info)
// tg_chat_info_s* chat_info = get_chat_info(chat_id);
char* update_msg = NULL;
result = bundle_get_str(rec_msg, "update_message", &update_msg);
-- //show_toast(app, update_msg);
++ //show_toast(app, update_msg);
} else if (strcmp(rec_key_val, "buddy_status_updated") == 0) {
char* buddy_id_str = NULL;
result = bundle_get_str(rec_msg, "buddy_id", &buddy_id_str);
char* type_status_message = NULL;
switch (type_status) {
-- case tgl_typing_none:
-- type_status_message = (char*)malloc(strlen("doing nothing") + 1);
-- strcpy(type_status_message, "doing nothing");
-- break;
-- case tgl_typing_typing:
-- type_status_message = (char*)malloc(strlen("typing...") + 1);
-- strcpy(type_status_message, "typing...");
-- break;
-- case tgl_typing_cancel:
-- type_status_message = (char*)malloc(strlen("deleting typed message") + 1);
-- strcpy(type_status_message, "deleting typed message");
-- break;
-- case tgl_typing_record_video:
-- type_status_message = (char*)malloc(strlen("recording video") + 1);
-- strcpy(type_status_message, "recording video");
-- break;
-- case tgl_typing_upload_video:
-- type_status_message = (char*)malloc(strlen("uploading video") + 1);
-- strcpy(type_status_message, "uploading video");
-- break;
-- case tgl_typing_record_audio:
-- type_status_message = (char*)malloc(strlen("recording audio") + 1);
-- strcpy(type_status_message, "recording audio");
-- break;
-- case tgl_typing_upload_audio:
-- type_status_message = (char*)malloc(strlen("uploading audio") + 1);
-- strcpy(type_status_message, "uploading audio");
-- break;
-- case tgl_typing_upload_photo:
-- type_status_message = (char*)malloc(strlen("uploading photo") + 1);
-- strcpy(type_status_message, "uploading photo");
-- break;
-- case tgl_typing_upload_document:
-- type_status_message = (char*)malloc(strlen("uploading document") + 1);
-- strcpy(type_status_message, "uploading document");
-- break;
-- case tgl_typing_geo:
-- type_status_message = (char*)malloc(strlen("choosing location") + 1);
-- strcpy(type_status_message, "choosing location");
-- break;
-- case tgl_typing_choose_contact:
-- type_status_message = (char*)malloc(strlen("choosing contact") + 1);
-- strcpy(type_status_message, "choosing contact");
-- break;
++ case tgl_typing_none:
++ type_status_message = (char*)malloc(strlen("doing nothing") + 1);
++ strcpy(type_status_message, "doing nothing");
++ break;
++ case tgl_typing_typing:
++ type_status_message = (char*)malloc(strlen("typing...") + 1);
++ strcpy(type_status_message, "typing...");
++ break;
++ case tgl_typing_cancel:
++ type_status_message = (char*)malloc(strlen("deleting typed message") + 1);
++ strcpy(type_status_message, "deleting typed message");
++ break;
++ case tgl_typing_record_video:
++ type_status_message = (char*)malloc(strlen("recording video") + 1);
++ strcpy(type_status_message, "recording video");
++ break;
++ case tgl_typing_upload_video:
++ type_status_message = (char*)malloc(strlen("uploading video") + 1);
++ strcpy(type_status_message, "uploading video");
++ break;
++ case tgl_typing_record_audio:
++ type_status_message = (char*)malloc(strlen("recording audio") + 1);
++ strcpy(type_status_message, "recording audio");
++ break;
++ case tgl_typing_upload_audio:
++ type_status_message = (char*)malloc(strlen("uploading audio") + 1);
++ strcpy(type_status_message, "uploading audio");
++ break;
++ case tgl_typing_upload_photo:
++ type_status_message = (char*)malloc(strlen("uploading photo") + 1);
++ strcpy(type_status_message, "uploading photo");
++ break;
++ case tgl_typing_upload_document:
++ type_status_message = (char*)malloc(strlen("uploading document") + 1);
++ strcpy(type_status_message, "uploading document");
++ break;
++ case tgl_typing_geo:
++ type_status_message = (char*)malloc(strlen("choosing location") + 1);
++ strcpy(type_status_message, "choosing location");
++ break;
++ case tgl_typing_choose_contact:
++ type_status_message = (char*)malloc(strlen("choosing contact") + 1);
++ strcpy(type_status_message, "choosing contact");
++ break;
}
// update UI. may be contacts view or conversation view.
type_status_message = NULL;
}
- char* org_msg = NULL;
- if (sel_item->last_message) {
- org_msg = sel_item->last_message;
- } else {
- org_msg = "";
- }
-
- int len_org_str = strlen(org_msg);
-
- char res[25] = {'\0'};
- char status_buf[126] = {'\0'};
- if(len_org_str > 25) {
- strncpy(res, org_msg, 24);
- sprintf(status_buf,"<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", res);
- } else {
- snprintf(status_buf, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", org_msg);
- }
+ } else if (strcmp(rec_key_val, "user_status_updated") == 0) {
+
+ char* buddy_id_str = NULL;
+ result = bundle_get_str(rec_msg, "buddy_id", &buddy_id_str);
+ int buddy_id = atoi(buddy_id_str);
+
+ char* buddy_name = NULL;
+ result = bundle_get_str(rec_msg, "buddy_name", &buddy_name);
+
+ if (app->current_app_state == TG_USER_MAIN_VIEW_STATE) {
+ if (app->main_list) {
+ int main_list_size = eina_list_count(app->main_list);
+ for (int i = 0; i < main_list_size; i++) {
+ tg_main_list_item_s* sel_item = eina_list_nth(app->main_list, i);
+ if (sel_item->peer_id == buddy_id ) {
+ // update last message
+
+ if (sel_item->profile_pic) {
+
+ }
+
+ if (sel_item->user_name_lbl) {
+
+ }
+
+ if (sel_item->status_lbl) {
++ char* org_msg = NULL;
++ if (sel_item->last_message) {
++ org_msg = sel_item->last_message;
++ } else {
++ org_msg = "";
++ }
++
++ int len_org_str = strlen(org_msg);
++
++ char res[25] = {'\0'};
++ char status_buf[126] = {'\0'};
++ if(len_org_str > 25) {
++ strncpy(res, org_msg, 24);
++ sprintf(status_buf,"<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", res);
++ } else {
++ snprintf(status_buf, "<font=Tizen:style=Italic color=#A4A4A4 align=left><font_size=30>%s</font_size></font>", org_msg);
++ }
+ elm_object_text_set(sel_item->status_lbl, status_buf);
+ }
+
+ if (sel_item->date_lbl) {
+
+ }
+ if (sel_item->msg_status_lbl) {
+
+ }
+
+ break;
+ }
+ }
+ }
+
+ }
+ if (app->current_app_state == TG_CHAT_MESSAGING_VIEW_STATE && app->buddy_in_cahtting_data && app->buddy_in_cahtting_data->use_data->user_id.id == buddy_id) {
+ on_user_presence_state_changed(app, buddy_id);
+ }
+
} else {
}
{
appdata_s *ad = data;
switch(ad->current_app_state) {
-- case TG_INIT_SCREEN_STATE:
-- elm_win_lower(ad->win);
-- elm_exit();
-- break;
-- case TG_USER_MAIN_VIEW_STATE:
-- elm_win_lower(ad->win);
-- elm_exit();
-- break;
-- case TG_CHAT_MESSAGING_VIEW_STATE:
-- // to be handled
-- if (ad->is_last_msg_changed) {
-- // update main view.
-- // refresh main view
++ case TG_INIT_SCREEN_STATE:
++ elm_win_lower(ad->win);
++ elm_exit();
++ break;
++ case TG_USER_MAIN_VIEW_STATE:
++ elm_win_lower(ad->win);
++ elm_exit();
++ break;
++ case TG_CHAT_MESSAGING_VIEW_STATE:
++ // to be handled
++ if (ad->is_last_msg_changed) {
++ // update main view.
++ // refresh main view
-- } else {
++ } else {
-- }
-- refresh_main_view_list(ad);
-- elm_naviframe_item_pop(ad->nf);
-- ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
-- break;
-- case TG_START_MESSAGING_VIEW_STATE:
-- elm_naviframe_item_pop(ad->nf);
-- ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
-- break;
-- case TG_REGISTRATION_STATE:
-- elm_win_lower(ad->win);
-- elm_exit();
-- break;
-- case TG_LOGIN_STATE:
++ }
++ refresh_main_view_list(ad);
++ elm_naviframe_item_pop(ad->nf);
++ ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
++ break;
++ case TG_START_MESSAGING_VIEW_STATE:
++ elm_naviframe_item_pop(ad->nf);
++ ad->current_app_state = TG_USER_MAIN_VIEW_STATE;
++ break;
++ case TG_REGISTRATION_STATE:
++ elm_win_lower(ad->win);
++ elm_exit();
++ break;
++ case TG_LOGIN_STATE:
-- if (ad->timer_value > 0) {
-- Ecore_Timer* timer = evas_object_data_get(ad->nf, "code_timer");
-- if (timer)
-- ecore_timer_del(timer);
-- }
++ if (ad->timer_value > 0) {
++ Ecore_Timer* timer = evas_object_data_get(ad->nf, "code_timer");
++ if (timer)
++ ecore_timer_del(timer);
++ }
-- elm_naviframe_item_pop(ad->nf);
-- ad->current_app_state = TG_REGISTRATION_STATE;
-- break;
-- case TG_PROFILE_REGISTRATION_STATE:
-- /* ad->current_app_state = TG_REGISTRATION_STATE;
-- elm_naviframe_item_pop(ad->nf);*/
-- elm_win_lower(ad->win);
-- elm_exit();
-- break;
-- case TG_BUDDY_LIST_STATE:
-- evas_object_data_set(ad->nf, "buddy_list", NULL);
-- elm_win_lower(ad->win);
-- elm_exit();
-- break;
-- case TG_BUDDY_CHAT_CONV_STATE:
-- ad->buddy_in_cahtting_data = NULL;
-- if (ad->loaded_msg_list) {
-- eina_list_free(ad->loaded_msg_list);
-- ad->loaded_msg_list = NULL;
-- }
-- elm_naviframe_item_pop(ad->nf);
-- ad->current_app_state = TG_BUDDY_LIST_STATE;
-- //evas_object_show(ad->panel);
-- //refresh_buddy_list(ad);
-- break;
-- case TG_BUDDY_LIST_SELECTION_STATE:
-- if (ad->buddy_list) {
-- for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) {
-- user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
-- user_data_s* user = item->use_data;
-- user->is_selected = EINA_FALSE;
-- }
++ elm_naviframe_item_pop(ad->nf);
++ ad->current_app_state = TG_REGISTRATION_STATE;
++ break;
++ case TG_PROFILE_REGISTRATION_STATE:
++ /* ad->current_app_state = TG_REGISTRATION_STATE;
++ elm_naviframe_item_pop(ad->nf);*/
++ elm_win_lower(ad->win);
++ elm_exit();
++ break;
++ case TG_BUDDY_LIST_STATE:
++ evas_object_data_set(ad->nf, "buddy_list", NULL);
++ elm_win_lower(ad->win);
++ elm_exit();
++ break;
++ case TG_BUDDY_CHAT_CONV_STATE:
++ ad->buddy_in_cahtting_data = NULL;
++ if (ad->loaded_msg_list) {
++ eina_list_free(ad->loaded_msg_list);
++ ad->loaded_msg_list = NULL;
++ }
++ elm_naviframe_item_pop(ad->nf);
++ ad->current_app_state = TG_BUDDY_LIST_STATE;
++ //evas_object_show(ad->panel);
++ //refresh_buddy_list(ad);
++ break;
++ case TG_BUDDY_LIST_SELECTION_STATE:
++ if (ad->buddy_list) {
++ for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) {
++ user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
++ user_data_s* user = item->use_data;
++ user->is_selected = EINA_FALSE;
}
-- elm_naviframe_item_pop(ad->nf);
-- ad->current_app_state = TG_BUDDY_LIST_STATE;
-- evas_object_show(ad->panel);
- elm_panel_hidden_set(ad->panel, EINA_FALSE);
- //elm_panel_hidden_set(ad->panel, EINA_FALSE);
-- //refresh_buddy_list(ad);
-- break;
-- case TG_GROUP_CHAT_NAME_ENTRY_STATE:
-- if (ad->buddy_list) {
-- for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) {
-- user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
-- user_data_s* user = item->use_data;
-- user->is_selected = EINA_FALSE;
-- }
++ }
++ elm_naviframe_item_pop(ad->nf);
++ ad->current_app_state = TG_BUDDY_LIST_STATE;
++ evas_object_show(ad->panel);
++ //elm_panel_hidden_set(ad->panel, EINA_FALSE);
++ //refresh_buddy_list(ad);
++ break;
++ case TG_GROUP_CHAT_NAME_ENTRY_STATE:
++ if (ad->buddy_list) {
++ for (int i = 0 ; i < eina_list_count(ad->buddy_list) ; i++) {
++ user_data_with_pic_s *item = eina_list_nth(ad->buddy_list, i);
++ user_data_s* user = item->use_data;
++ user->is_selected = EINA_FALSE;
}
-- elm_naviframe_item_pop(ad->nf);
-- ad->current_app_state = TG_BUDDY_LIST_STATE;
-- evas_object_show(ad->panel);
- elm_panel_hidden_set(ad->panel, EINA_FALSE);
- //elm_panel_hidden_set(ad->panel, EINA_FALSE);
-- //refresh_buddy_list(ad);
-- break;
-- default:
-- break;
++ }
++ elm_naviframe_item_pop(ad->nf);
++ ad->current_app_state = TG_BUDDY_LIST_STATE;
++ evas_object_show(ad->panel);
++ //elm_panel_hidden_set(ad->panel, EINA_FALSE);
++ //refresh_buddy_list(ad);
++ break;
++ default:
++ break;
}
}
--void
++ void
layout_back_cb(void *data, Evas_Object *obj, void *event_info)
{
appdata_s *ad = data;
//eina_list_free(user_info);
}
--static bool
++ static bool
app_create(void *data)
{
/*
return true;
}
--static void
++ static void
app_control(app_control_h app_control, void *data)
{
/* Handle the launch request. */
}
--static void
++ static void
app_pause(void *data)
{
/* Take necessary actions when application becomes invisible. */
}
--static void
++ static void
app_resume(void *data)
{
/* Take necessary actions when application becomes visible. */
}
--static void
++ static void
app_terminate(void *data)
{
/* Release all resources. */
tg_db_fini();
}
--static void
++ static void
ui_app_lang_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LANGUAGE_CHANGED*/
return;
}
--static void
++ static void
ui_app_orient_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/
return;
}
--static void
++ static void
ui_app_region_changed(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_REGION_FORMAT_CHANGED*/
}
--static void
++ static void
ui_app_low_battery(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LOW_BATTERY*/
}
--static void
++ static void
ui_app_low_memory(app_event_info_h event_info, void *user_data)
{
/*APP_EVENT_LOW_MEMORY*/
}
--int
++ int
main(int argc, char *argv[])
{
appdata_s ad = {0,};
return EINA_TRUE;
}
-Eina_Bool create_table(const char* table_name, Eina_List* column_names, Eina_List* column_types)
+static inline int create_table_query_to_db(const char *ddl, const char *table_name)
{
- if(!table_name || ! column_names || !column_types) {
- return EINA_FALSE;
+ sqlite3_stmt *stmt;
+ int ret;
+
+ ret = sqlite3_prepare_v2(s_info.db, ddl, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_DONE) {
+ sqlite3_finalize(stmt);
+ return -EIO;
}
- sqlite3* db = create_database(DEFAULT_TG_DATABASE_PATH);
-
- int ret = 0 ;
- char* err_msg = 0;
- int col_count = eina_list_count(column_names);
-
- int str_len = strlen("CREATE TABLE IF NOT EXISTS ") + strlen(table_name) + strlen("(") + 1;
- char* var_query = (char*)malloc(str_len);
- strcpy(var_query,"CREATE TABLE IF NOT EXISTS ");
- strcat(var_query, table_name);
- strcat(var_query, "(");
-
- for(int col = 0; col < col_count ; col++) {
- char* col_name = eina_list_nth(column_names, col);
- var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1);
- strcat(var_query, col_name);
- var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1);
- strcat(var_query, " ");
- char* col_type = eina_list_nth(column_types, col);
- var_query = realloc(var_query, strlen(var_query)+strlen(col_type) + 1);
- strcat(var_query, col_type);
- if(col < col_count - 1){
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, ",");
- } else {
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, ");");
+ sqlite3_finalize(stmt);
+ return 0;
+}
+
+int tg_db_create_table_user_info(const char *table_name)
+{
+ const char *ddl;
+
+ ddl = "CREATE TABLE ? (" \
+ "user_id INTEGER PRIMARY KEY NOT NULL," \
+ "print_name TEXT," \
+ "structure_version INTEGER," \
+ "photo_path TEXT," \
+ "photo_id INTEGER," \
+ "first_name TEXT," \
+ "last_name TEXT," \
+ "phone TEXT," \
+ "access_hash INTEGER," \
+ "real_first_name TEXT," \
+ "real_last_name TEXT," \
+ "username TEXT," \
+ "online INTEGER," \
+ "last_seen INTEGER)";
+
+ return create_table_query_to_db(ddl, table_name);
+}
+
+int tg_db_create_table_media_info(const char *table_name)
+{
+ const char *ddl;
+ ddl = "CREATE TABLE ? (" \
+ "media_id TEXT," \
+ "media_type INTEGER," \
+ "access_hash TEXT," \
+ "user_id INTEGER," \
+ "date INTEGER," \
+ "caption TEXT," \
+ "longitude TEXT," \
+ "latitude TEXT," \
+ "sizes_num INTEGER," \
+ "photo_type1 TEXT," \
+ "photo_loc_dc1 INTEGER," \
+ "photo_loc_vol1 TEXT," \
+ "photo_loc_id1 INTEGER," \
+ "photo_loc_secret1 TEXT," \
+ "photo_width1 INTEGER," \
+ "photo_height1 INTEGER," \
+ "photo_size1 INTEGER," \
+ "photo_data1 TEXT," \
+ "photo_type2 TEXT," \
+ "photo_loc_dc2 INTEGER," \
+ "photo_loc_vol2 TEXT," \
+ "photo_loc_id2 INTEGER," \
+ "photo_loc_secret2 TEXT," \
+ "photo_width2 INTEGER," \
+ "photo_height2 INTEGER," \
+ "photo_size2 INTEGER," \
+ "photo_data2 TEXT," \
+ "photo_type3 TEXT," \
+ "photo_loc_dc3 INTEGER," \
+ "photo_loc_vol3 TEXT," \
+ "photo_loc_id3 INTEGER," \
+ "photo_loc_secret3 TEXT," \
+ "photo_width3 INTEGER," \
+ "photo_height3 INTEGER," \
+ "photo_size3 INTEGER," \
+ "photo_data3 TEXT," \
+ "photo_type4 TEXT," \
+ "photo_loc_dc4 INTEGER," \
+ "photo_loc_vol4 TEXT," \
+ "photo_loc_id4 INTEGER," \
+ "photo_loc_secret4 TEXT," \
+ "photo_width4 INTEGER," \
+ "photo_height4 INTEGER," \
+ "photo_size4 INTEGER," \
+ "photo_data4 TEXT," \
+ "phone TEXT," \
+ "first_name TEXT," \
+ "last_name TEXT," \
+ "file_path TEXT)";
+ return create_table_query_to_db(ddl, table_name);
+}
+
+int tg_db_update_media_info_filepath(const char *table_name, long long media_id, const char *filepath)
+{
+ const char *dml;
+ const char *id_str;
+ int ret;
+ sqlite3_stmt *stmt;
+
+ dml = "UPDATE ? SET file_path = ? WHERE media_id = ?";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 2, filepath, -1, SQLITE_TRANSIENT);
+ id_str = tg_common_to_string("%lld", media_id);
+ ret = sqlite3_bind_text(stmt, 3, id_str, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+ return 0;
+}
+
+int tg_db_update_media_info_by_id(const char *table_name, struct tgl_message *msg, long long id)
+{
+ const char *dml;
+ const char *tmp;
+ int ret;
+ sqlite3_stmt *stmt;
+ int i;
+
+ dml = "UPDATE ? SET media_id = ?, "
+ "media_type = ?, "
+ "access_hash = ?, "
+ "user_id = ?, "
+ "date = ?, "
+ "caption = ?, "
+ "longitude = ?, "
+ "latitude = ?, "
+ "sizes_num = ?, "
+ "photo_type1 = ?," \
+ "photo_loc_dc1 = ?," \
+ "photo_loc_vol1 = ?," \
+ "photo_loc_id1 = ?," \
+ "photo_loc_secret1 = ?," \
+ "photo_width1 = ?," \
+ "photo_height1 = ?," \
+ "photo_size1 = ?," \
+ "photo_data1 = ?," \
+ "photo_type2 = ?," \
+ "photo_loc_dc2 = ?," \
+ "photo_loc_vol2 = ?," \
+ "photo_loc_id2 = ?," \
+ "photo_loc_secret2 = ?," \
+ "photo_width2 = ?," \
+ "photo_height2 = ?," \
+ "photo_size2 = ?," \
+ "photo_data2 = ?," \
+ "photo_type3 = ?," \
+ "photo_loc_dc3 = ?," \
+ "photo_loc_vol3 = ?," \
+ "photo_loc_id3 = ?," \
+ "photo_loc_secret3 = ?," \
+ "photo_width3 = ?," \
+ "photo_height3 = ?," \
+ "photo_size3 = ?," \
+ "photo_data3 = ?," \
+ "photo_type4 = ?," \
+ "photo_loc_dc4 = ?," \
+ "photo_loc_vol4 = ?," \
+ "photo_loc_id4 = ?," \
+ "photo_loc_secret4 = ?," \
+ "photo_width4 = ?," \
+ "photo_height4 = ?," \
+ "photo_size4 = ?," \
+ "photo_data4 = ?," \
+ "phone = ?," \
+ "first_name = ?," \
+ "last_name = ? WHERE media_id = ?";
+ /* Except filename */
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ switch (msg->media.type) {
+ case tgl_message_media_photo:
+ tmp = tg_common_to_string("%lld", msg->media.photo.id);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+ ret = sqlite3_bind_int64(stmt, 4, msg->media.photo.access_hash);
+ ret = sqlite3_bind_int(stmt, 5, msg->media.photo.user_id);
+ ret = sqlite3_bind_int(stmt, 6, msg->media.photo.date);
+ ret = sqlite3_bind_text(stmt, 7, msg->media.photo.caption, -1, SQLITE_TRANSIENT);
+
+ tmp = tg_common_to_string("%lf", msg->media.photo.geo.longitude);
+ ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+
+ tmp = tg_common_to_string("%lf", msg->media.photo.geo.latitude);
+ ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+
+ ret = sqlite3_bind_int(stmt, 10, msg->media.photo.sizes_num);
+ for (i = 0; i < 4; i++) {
+ if (i < msg->media.photo.sizes_num) {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), msg->media.photo.sizes[i].type, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), msg->media.photo.sizes[i].loc.dc);
+ tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.volume);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), msg->media.photo.sizes[i].loc.local_id);
+ tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.secret);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), msg->media.photo.sizes[i].w);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), msg->media.photo.sizes[i].h);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), msg->media.photo.sizes[i].size);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), msg->media.photo.sizes[i].data, -1, SQLITE_TRANSIENT);
+ } else {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ }
}
+ break;
+ case tgl_message_media_document:
+ tmp = tg_common_to_string("%lld", msg->media.document.id);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+ ret = sqlite3_bind_int64(stmt, 4, msg->media.document.access_hash);
+ ret = sqlite3_bind_int(stmt, 5, msg->media.document.user_id);
+ ret = sqlite3_bind_int(stmt, 6, msg->media.document.date);
+ ret = sqlite3_bind_text(stmt, 7, msg->media.document.caption, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 10, msg->media.document.size);
+ for (i = 0; i < 4; i++) {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ }
+ break;
+ default:
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+ ret = sqlite3_bind_int64(stmt, 4, 0);
+ ret = sqlite3_bind_int(stmt, 5, 0);
+ ret = sqlite3_bind_int(stmt, 6, 0);
+ ret = sqlite3_bind_text(stmt, 7, " ", -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 10, 0);
+ for (i = 0; i < 4; i++) {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ }
+ break;
}
- ret = sqlite3_exec(db,var_query, NULL,NULL, &err_msg);
- close_database(db);
- if( ret != SQLITE_OK ){
- sqlite3_free(err_msg);
- return EINA_FALSE;
+ ret = sqlite3_bind_text(stmt, 46, msg->media.phone, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 47, msg->media.first_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 48, msg->media.last_name, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lld", id);
+ ret = sqlite3_bind_text(stmt, 49, tmp, -1, SQLITE_TRANSIENT);
+
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+ if (ret != SQLITE_DONE) {
+ return -EIO;
}
- return EINA_TRUE;
+
+ return 0;
}
-Eina_Bool insert_table(const char* table_name, Eina_List* column_names, Eina_List* column_types, Eina_List* column_values)
+void *tg_db_get_media_info(const char *table_name, long long id, int *media_type)
{
- if( !table_name || ! column_names || !column_types || !column_values) {
- return EINA_FALSE;
+ void *info = NULL;
+ const char *dml;
+ sqlite3_stmt *stmt;
+ const char *tmp;
+ int ret;
+ int i;
+
+ if (!media_type || !table_name) {
+ return NULL;
}
- sqlite3* db = create_database(DEFAULT_TG_DATABASE_PATH);
- int ret = 0 ;
- char* err_msg = 0;
- int col_count = eina_list_count(column_names);
+ dml = "SELECT * FROM ? WHERE media_id = ?";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
-
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lld", id);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_ROW) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
- int str_len = strlen("INSERT INTO ") + strlen(table_name) + strlen("(") + 1;
- char* var_query = (char*)malloc(str_len);
- strcpy(var_query,"INSERT INTO ");
- strcat(var_query, table_name);
- strcat(var_query, "(");
+ *media_type = sqlite3_column_int(stmt, 1);
+ if (*media_type == tgl_message_media_photo) {
+ struct tgl_photo *photo;
+ const char *tmp;
- for(int col = 0; col < col_count ; col++) {
+ photo = calloc(1, sizeof(*photo));
+ if (!photo) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
- char* col_name = eina_list_nth(column_names, col);
- var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1);
- strcat(var_query, col_name);
+ tmp = (const char *)sqlite3_column_text(stmt, 0);
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lld", &photo->id) != 1) {
- if(col < col_count - 1){
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, ",");
- } else {
- var_query = realloc(var_query, strlen(var_query) + strlen(") VALUES (") + 1);
- strcat(var_query, ") VALUES (");
+ }
}
+
+ photo->access_hash = sqlite3_column_int(stmt, 2);
+ photo->user_id = sqlite3_column_int(stmt, 3);
+ photo->date = sqlite3_column_int(stmt, 4);
+ tmp = (const char *)sqlite3_column_text(stmt, 5);
+ if (tmp && tmp[0] != '\0') {
+ photo->caption = strdup(tmp);
+ }
+
+ tmp = (const char *)sqlite3_column_text(stmt, 6);
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lf", &photo->geo.longitude) != 1) {
+
+ }
+ }
+
+ tmp = (const char *)sqlite3_column_text(stmt, 7);
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lf", &photo->geo.latitude) != 1) {
+
+ }
+ }
+
+ photo->sizes_num = sqlite3_column_int(stmt, 8);
+ photo->sizes = calloc(4, sizeof(*photo->sizes));
+ for (i = 0; i < photo->sizes_num; i++) {
+ if (i < photo->sizes_num) {
+ tmp = (const char *)sqlite3_column_text(stmt, 9 + (i * 9));
+ if (tmp && tmp[0] != '\0') {
+ photo->sizes[i].type = strdup(tmp);
+ }
+ photo->sizes[i].loc.dc = sqlite3_column_int(stmt, 10 + (i * 9));
+ tmp = (const char *)sqlite3_column_text(stmt, 11 + (i * 9));
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lld", &photo->sizes[i].loc.volume) != 1) {
+
+ }
+ }
+ photo->sizes[i].loc.local_id = sqlite3_column_int(stmt, 12);
+ tmp = (const char *)sqlite3_column_text(stmt, 13 + (i * 9));
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lld", &photo->sizes[i].loc.secret) != 1) {
+
+ }
+ }
+ photo->sizes[i].w = sqlite3_column_int(stmt, 14 + (i * 9));
+ photo->sizes[i].h = sqlite3_column_int(stmt, 15 + (i * 9));
+ photo->sizes[i].size = sqlite3_column_int(stmt, 16 + (i * 9));
+
+ tmp = (const char *)sqlite3_column_text(stmt, 17 + (i * 9));
+ if (tmp && tmp[0] != '\0') {
+ photo->sizes[i].data = strdup(tmp);
+ }
+ }
+ }
+
+ // 45: phone
+ // 46: first_name
+ // 47: last_name
+ // 48: file_path
+ info = photo;
+ } else if (*media_type == tgl_message_media_document) {
+ struct tgl_document *document;
+
+ document = calloc(1, sizeof(*document));
+ if (!document) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
+
+ tmp = (const char *)sqlite3_column_text(stmt, 0);
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lld", &document->id) != 1) {
+
+ }
+ }
+
+ tmp = (const char *)sqlite3_column_text(stmt, 2);
+ if (tmp && tmp[0] != '\0') {
+ if (sscanf(tmp, "%lld", &document->access_hash) != 1) {
+
+ }
+ }
+
+ document->user_id = sqlite3_column_int(stmt, 3);
+ document->date = sqlite3_column_int(stmt, 4);
+
+ tmp = (const char *)sqlite3_column_text(stmt, 5);
+ if (tmp && tmp[0] != '\0') {
+ document->caption = strdup(tmp);
+ }
+
+ // 6: "longitude TEXT,"
+ // 7: "latitude TEXT,"
+ // 9 ~ 44: Photo informations
+
+ document->size = sqlite3_column_int(stmt, 8);
+
+ // 45 "phone TEXT,"
+ // 46 "first_name TEXT,"
+ // 47 "last_name TEXT,"
+ // 48 "file_path TEXT)"
+
+ info = document;
+ } else {
+ /**
+ * @todo
+ * Handles me
+ */
}
- int col_val_count = eina_list_count(column_values);
+ sqlite3_finalize(stmt);
+ return info;
+}
- for(int col = 0; col < col_val_count ; col++) {
+int tg_db_insert_media_info(const char *table_name, struct tgl_message *msg, const char *filename)
+{
+ const char *dml;
+ const char *tmp;
+ int ret;
+ sqlite3_stmt *stmt;
+ int i;
+
+ dml = "INSERT INTO ? VALUES (" \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?, ?, " \
+ "?, ?, ?, ?)";
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+
+ switch (msg->media.type) {
+ case tgl_message_media_photo:
+ tmp = tg_common_to_string("%lld", msg->media.photo.id);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+ ret = sqlite3_bind_int64(stmt, 4, msg->media.photo.access_hash);
+ ret = sqlite3_bind_int(stmt, 5, msg->media.photo.user_id);
+ ret = sqlite3_bind_int(stmt, 6, msg->media.photo.date);
+ ret = sqlite3_bind_text(stmt, 7, msg->media.photo.caption, -1, SQLITE_TRANSIENT);
+
+ tmp = tg_common_to_string("%lf", msg->media.photo.geo.longitude);
+ ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+
+ tmp = tg_common_to_string("%lf", msg->media.photo.geo.latitude);
+ ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+
+ ret = sqlite3_bind_int(stmt, 10, msg->media.photo.sizes_num);
+ for (i = 0; i < 4; i++) {
+ if (i < msg->media.photo.sizes_num) {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), msg->media.photo.sizes[i].type, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), msg->media.photo.sizes[i].loc.dc);
+ tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.volume);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), msg->media.photo.sizes[i].loc.local_id);
+ tmp = tg_common_to_string("%lld", msg->media.photo.sizes[i].loc.secret);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), msg->media.photo.sizes[i].w);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), msg->media.photo.sizes[i].h);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), msg->media.photo.sizes[i].size);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), msg->media.photo.sizes[i].data, -1, SQLITE_TRANSIENT);
+ } else {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ }
+ }
+ break;
+ case tgl_message_media_document:
+ tmp = tg_common_to_string("%lld", msg->media.document.id);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+ ret = sqlite3_bind_int64(stmt, 4, msg->media.document.access_hash);
+ ret = sqlite3_bind_int(stmt, 5, msg->media.document.user_id);
+ ret = sqlite3_bind_int(stmt, 6, msg->media.document.date);
+ ret = sqlite3_bind_text(stmt, 7, msg->media.document.caption, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 10, msg->media.document.size);
+ for (i = 0; i < 4; i++) {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ }
+ break;
+ default:
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 2, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 3, msg->media.type);
+ ret = sqlite3_bind_int64(stmt, 4, 0);
+ ret = sqlite3_bind_int(stmt, 5, 0);
+ ret = sqlite3_bind_int(stmt, 6, 0);
+ ret = sqlite3_bind_text(stmt, 7, " ", -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 8, tmp, -1, SQLITE_TRANSIENT);
+ tmp = tg_common_to_string("%lf", 0.0f);
+ ret = sqlite3_bind_text(stmt, 9, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 10, 0);
+ for (i = 0; i < 4; i++) {
+ ret = sqlite3_bind_text(stmt, 11 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 12 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 13 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 14 + (i * 9), 0);
+ tmp = tg_common_to_string("%lld", 0);
+ ret = sqlite3_bind_text(stmt, 15 + (i * 9), tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 16 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 17 + (i * 9), 0);
+ ret = sqlite3_bind_int(stmt, 18 + (i * 9), 0);
+ ret = sqlite3_bind_text(stmt, 19 + (i * 9), " ", -1, SQLITE_TRANSIENT);
+ }
+ break;
+ }
- char* col_type = eina_list_nth(column_types, col);
- char* col_value = NULL;
- if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) {
- int* tmp_value = eina_list_nth(column_values, col);
+ ret = sqlite3_bind_text(stmt, 46, msg->media.phone, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 47, msg->media.first_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 48, msg->media.last_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 49, filename, -1, SQLITE_TRANSIENT);
-#if 0
- long long val = *tmp_value;
- col_value = (char*)malloc(50);
- //sprintf(col_value, "%lld", *tmp_value);
- sprintf(col_value, "%lld", val);
-#endif
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
- int act_val = (*tmp_value);
- col_value = (char*)malloc(50);
- sprintf(col_value, "%d", act_val);
+ if (ret != SQLITE_DONE) {
+ return -EIO;
+ }
+
+ return 0;
+}
- var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1);
- strcat(var_query, col_value);
+int tg_db_create_table_chat_info(const char *table_name)
+{
+ const char *ddl;
+ ddl = "CREATE TABLE ? (" \
+ "chat_id INTEGER PRIMARY KEY NOT NULL," \
+ "flags INTEGER," \
+ "print_title TEXT," \
+ "struct_version INTEGER," \
+ "photo_id TEXT," \
+ "photo_path TEXT," \
+ "title TEXT," \
+ "users_num INTEGER," \
+ "user_list_size INTEGER," \
+ "user_list_version INTEGER," \
+ "inviter_id INTEGER," \
+ "chat_users TEXT," \
+ "date INTEGER," \
+ "version INTEGER," \
+ "admin_id INTEGER)";
+ return create_table_query_to_db(ddl, table_name);
+}
- } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
- char* tmp_value = eina_list_nth(column_values, col);
- col_value = (char*)malloc(strlen(tmp_value) + 1);
- strcpy(col_value,tmp_value);
+int tg_db_count_chat_info(const char *table_name, struct tgl_chat *chat)
+{
+ const char *dml;
+ sqlite3_stmt *stmt;
+ int ret;
- var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1);
- strcat(var_query, "'");
+ dml = "SELECT COUNT(*) FROM ? WHERE chat_id = ?";
- var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1);
- strcat(var_query, col_value);
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 2, chat->id.id);
+ ret = sqlite3_step(stmt);
+ ret = sqlite3_column_int(stmt, 0);
+ sqlite3_finalize(stmt);
+ return ret;
+}
- var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1);
- strcat(var_query, "'");
+int tg_db_update_chat_info(const char *table_name, struct tgl_chat *chat, char *photo)
+{
+ const char *dml;
+ int ret;
+ sqlite3_stmt *stmt;
+ const char *tmp;
+ char *str;
+ int i;
+ int str_len;
+ int str_size;
+
+ dml = "UPDATE ? SET " \
+ "chat_id = ?, " \
+ "flags = ?, " \
+ "print_title = ?, " \
+ "struct_version = ?, " \
+ "photo_id = ?, " \
+ "photo_path = ?, " \
+ "title = ?, " \
+ "users_num = ?, " \
+ "user_list_size = ?, " \
+ "user_list_version = ?, " \
+ "inviter_id = ?, " \
+ "chat_users = ?, " \
+ "date = ?, " \
+ "version = ?, " \
+ "admin_id = ? " \
+ "WHERE chat_id = ?";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 2, chat->id.id);
+ ret = sqlite3_bind_int(stmt, 3, chat->flags);
+ ret = sqlite3_bind_text(stmt, 4, chat->print_title, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 5, chat->structure_version);
+ tmp = tg_common_to_string("%lld", chat->photo.id);
+ ret = sqlite3_bind_text(stmt, 6, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 7, photo, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 8, chat->title, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 9, chat->users_num);
+ ret = sqlite3_bind_int(stmt, 10, chat->user_list_size);
+ ret = sqlite3_bind_int(stmt, 11, chat->user_list_version);
+ ret = sqlite3_bind_int(stmt, 12, chat->user_list[0].inviter_id);
+
+ str_size = 64;
+ str_len = 0;
+ str = malloc(str_size);
+ for (i = 0; i < chat->user_list_size; i++) {
+ str_len += snprintf(str + str_len, str_size - str_len - 1, "%d, ", chat->user_list[i].user_id);
+ if (str_size - str_len < 32) {
+ char *ptr;
+ str_size <<= 1; /* doulbing current size */
+ ptr = realloc(str, str_size);
+ if (!ptr) {
+ break;
+ }
+ str = ptr;
}
+ }
+ /* Cut off the last colon */
+ str[str_len - 2] = '\0';
+ ret = sqlite3_bind_text(stmt, 13, str, str_len - 2, SQLITE_TRANSIENT);
+ free(str);
+ ret = sqlite3_bind_int(stmt, 14, chat->date);
+ ret = sqlite3_bind_int(stmt, 15, chat->version);
+ ret = sqlite3_bind_int(stmt, 16, chat->admin_id);
+ ret = sqlite3_bind_int(stmt, 17, chat->id.id);
+
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+ return 0;
+}
- if(col < col_count - 1){
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, ", ");
- } else {
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, ");");
+int tg_db_insert_chat_info(const char *table_name, struct tgl_chat *chat, char *photo_path)
+{
+ const char *dml;
+ int ret;
+ sqlite3_stmt *stmt;
+ const char *tmp;
+ char *str;
+ int i;
+ int str_len;
+ int str_size;
+
+ dml = "INSERT INTO ? VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 2, chat->id.id);
+ ret = sqlite3_bind_text(stmt, 3, chat->print_title, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 4, chat->structure_version);
+ tmp = tg_common_to_string("%lld", chat->photo.id);
+ ret = sqlite3_bind_text(stmt, 5, tmp, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 6, photo_path, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_text(stmt, 7, chat->title, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 8, chat->users_num);
+ ret = sqlite3_bind_int(stmt, 9, chat->user_list_size);
+ ret = sqlite3_bind_int(stmt, 10, chat->user_list_version);
+ ret = sqlite3_bind_int(stmt, 11, chat->user_list[0].inviter_id);
+
+ str_size = 64;
+ str_len = 0;
+ str = malloc(str_size);
+ for (i = 0; i < chat->user_list_size; i++) {
+ str_len += snprintf(str + str_len, str_size - str_len - 1, "%d, ", chat->user_list[i].user_id);
+ if (str_size - str_len < 32) {
+ char *ptr;
+ str_size <<= 1; /* doulbing current size */
+ ptr = realloc(str, str_size);
+ if (!ptr) {
+ break;
+ }
+ str = ptr;
}
- free(col_value);
}
+ /* Cut off the last colon */
+ str[str_len - 2] = '\0';
+ ret = sqlite3_bind_text(stmt, 12, str, str_len - 2, SQLITE_TRANSIENT);
+ free(str);
+ ret = sqlite3_bind_int(stmt, 13, chat->date);
+ ret = sqlite3_bind_int(stmt, 14, chat->version);
+ ret = sqlite3_bind_int(stmt, 15, chat->admin_id);
+
+ ret = sqlite3_step(stmt);
+
+ sqlite3_finalize(stmt);
+ return 0;
+}
- ret = sqlite3_exec(db,var_query, NULL, NULL, &err_msg);
- close_database(db);
- if( ret != SQLITE_OK ){
- sqlite3_free(err_msg);
- return EINA_FALSE;
+int tg_db_create_table_message(const char *table_name)
+{
+ const char *ddl;
+
+ ddl = "CREATE TABLE ? (" \
+ "msg_id INTEGER," \
+ "flags INTEGER," \
+ "fwd_from_id INTEGER," \
+ "fwd_date INTEGER," \
+ "from_id INTEGER," \
+ "to_id INTEGER," \
+ "out INTEGER," \
+ "unread INTEGER," \
+ "date INTEGER," \
+ "service INTEGER," \
+ "message TEXT," \
+ "message_state INTEGER," \
+ "message_len INTEGER," \
+ "media_type INTEGER," \
+ "media_id TEXT," \
+ "unique_id INTEGER)";
+
+ return create_table_query_to_db(ddl, table_name);
+}
+
+struct tgl_message *tg_db_get_message(const char *table_name, long long id)
+{
+ struct tgl_message *msg;
+ int ret;
+ sqlite3_stmt *stmt;
+ const char *dml;
+ const char *tmp;
+
+ dml = "SELECT * FROM ? WHERE msg_id = ?";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return NULL;
}
- return EINA_TRUE;
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
+
+ ret = sqlite3_bind_int64(stmt, 2, id);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
+
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_ROW) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
+
+ msg = calloc(1, sizeof(*msg));
+ if (!msg) {
+ sqlite3_finalize(stmt);
+ return NULL;
+ }
+
+ msg->id = id;
+ msg->flags = sqlite3_column_int(stmt, 1);
+ msg->fwd_from_id.id = sqlite3_column_int(stmt, 2);
+ msg->fwd_date = sqlite3_column_int(stmt, 3);
+ msg->from_id.id = sqlite3_column_int(stmt, 4);
+ msg->to_id.id = sqlite3_column_int(stmt, 5);
+ msg->out = sqlite3_column_int(stmt, 6);
+ msg->unread = sqlite3_column_int(stmt, 7);
+ msg->date = sqlite3_column_int(stmt, 8);
+ msg->service = sqlite3_column_int(stmt, 9);
+ tmp = (const char *)sqlite3_column_text(stmt, 10);
+ if (tmp && tmp[0] != '\0') {
+ msg->message = strdup(tmp);
+ if (!msg->message) {
+ /*
+ * @todo
+ */
+ }
+ }
+ msg->msg_state = sqlite3_column_int(stmt, 11);
+ msg->message_len = sqlite3_column_int(stmt, 12);
+ msg->media.type = sqlite3_column_int(stmt, 13);
+ if (msg->media.type == tgl_message_media_photo) {
+ msg->media.photo.id = sqlite3_column_int64(stmt, 14);
+ } else if (msg->media.type == tgl_message_media_document) {
+ msg->media.document.id = sqlite3_column_int64(stmt, 14);
+ } else {
+ // 14
+ }
+ //msg->id = sqlite3_column_int64(stmt, 15);
+ sqlite3_finalize(stmt);
+ return msg;
}
+int tg_db_update_message(const char *table_name, struct tgl_message *M, long long unique_id)
+{
+ int ret;
+ sqlite3_stmt *stmt;
+ const char *dml;
+ dml = "UPDATE ? SET " \
+ "msg_id = ?, " \
+ "flags = ?, " \
+ "fwd_from_id = ?, " \
+ "fwd_date = ?, " \
+ "from_id = ?, " \
+ "to_id = ?, " \
+ "out = ?, " \
+ "unread = ?, " \
+ "date = ?, " \
+ "service = ?, " \
+ "message = ?, " \
+ "message_state = ?, " \
+ "message_len = ?, " \
+ "media_type = ?, " \
+ "media_id = ?, " \
+ "WHERE ? = ?";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int64(stmt, 2, M->id);
+ ret = sqlite3_bind_int(stmt, 3, M->flags);
+ ret = sqlite3_bind_int(stmt, 4, M->fwd_from_id.id);
+ ret = sqlite3_bind_int(stmt, 5, M->fwd_date);
+ ret = sqlite3_bind_int(stmt, 6, M->from_id.id);
+ ret = sqlite3_bind_int(stmt, 7, M->to_id.id);
+ ret = sqlite3_bind_int(stmt, 8, M->out);
+ ret = sqlite3_bind_int(stmt, 9, M->unread);
+ ret = sqlite3_bind_int(stmt, 10, M->date);
+ ret = sqlite3_bind_int(stmt, 11, M->service);
+ ret = sqlite3_bind_text(stmt, 12, M->message, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 13, M->msg_state);
+ ret = sqlite3_bind_int(stmt, 14, M->message_len);
+ ret = sqlite3_bind_int(stmt, 15, M->media.type);
+ if (M->media.type == tgl_message_media_photo) {
+ ret = sqlite3_bind_int64(stmt, 16, M->media.photo.id);
+ } else if (M->media.type == tgl_message_media_document) {
+ ret = sqlite3_bind_int64(stmt, 16, M->media.document.id);
+ } else {
+ ret = sqlite3_bind_int64(stmt, 17, 0);
+ }
+ if (unique_id > 0) {
+ ret = sqlite3_bind_text(stmt, 18, "unique_id", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int64(stmt, 19, unique_id);
+ } else {
+ ret = sqlite3_bind_text(stmt, 18, "msg_id", -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int64(stmt, 19, M->id);
+ }
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+ return 0;
+}
-Eina_Bool update_table(const char* table_name, Eina_List* column_names, Eina_List* column_types, Eina_List* column_values, const char* where_clause)
+int tg_db_insert_message(const char *table_name, struct tgl_message *M, long long unique_id)
{
- if( !table_name || ! column_names || !column_types || !column_values) {
- return EINA_FALSE;
+ int ret;
+ sqlite3_stmt *stmt;
+ const char *dml;
+
+ dml = "INSERT INTO ? VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ ret = sqlite3_bind_text(stmt, 1, table_name, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 2, M->id);
+ ret = sqlite3_bind_int(stmt, 3, M->flags);
+ ret = sqlite3_bind_int(stmt, 4, M->fwd_from_id.id);
+ ret = sqlite3_bind_int(stmt, 5, M->fwd_date);
+ ret = sqlite3_bind_int(stmt, 6, M->from_id.id);
+ ret = sqlite3_bind_int(stmt, 7, M->to_id.id);
+ ret = sqlite3_bind_int(stmt, 8, M->out);
+ ret = sqlite3_bind_int(stmt, 9, M->unread);
+ ret = sqlite3_bind_int(stmt, 10, M->date);
+ ret = sqlite3_bind_int(stmt, 11, M->service);
+ ret = sqlite3_bind_text(stmt, 12, M->message, -1, SQLITE_TRANSIENT);
+ ret = sqlite3_bind_int(stmt, 13, M->msg_state);
+ ret = sqlite3_bind_int(stmt, 14, M->message_len);
+ ret = sqlite3_bind_int(stmt, 15, M->media.type);
+ if (M->media.type == tgl_message_media_photo) {
+ ret = sqlite3_bind_int64(stmt, 16, M->media.photo.id);
+ } else if (M->media.type == tgl_message_media_document) {
+ ret = sqlite3_bind_int64(stmt, 16, M->media.document.id);
+ } else {
+ ret = sqlite3_bind_int64(stmt, 16, 0);
}
+ ret = sqlite3_bind_int64(stmt, 17, unique_id);
- sqlite3* db = create_database(DEFAULT_TG_DATABASE_PATH);
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+ return ret == SQLITE_DONE ? 0 : -EIO;
+}
- int ret = 0 ;
- char* err_msg = 0;
- int col_count = eina_list_count(column_names);
+int tg_db_create_table_peer_info(const char *table_name)
+{
+ const char *ddl;
+ ddl = "CREATE TABLE ? (" \
+ "user_id INTEGER PRIMARY KEY NOT NULL," \
+ "peer_type INTEGER," \
+ "flags INTEGER," \
+ "message_id TEXT," \
+ "message_date INTEGER," \
+ "print_name TEXT," \
+ "struct_version INTEGER," \
+ "unread_message_count INTEGER," \
+ "last_seen INTEGER," \
+ "photo_path TEXT," \
+ "photo_id INTEGER)";
+ return create_table_query_to_db(ddl, table_name);
+}
- int str_len = strlen("UPDATE ") + strlen(table_name) + strlen(" SET ") + 1;
- char* var_query = (char*)malloc(str_len);
- strcpy(var_query,"UPDATE ");
- strcat(var_query, table_name);
- strcat(var_query, " SET ");
+int tg_db_update_peer_info(const char *tablename, tgl_peer_t *UC, int last_msg_id, int unread_count)
+{
+ const char *dml;
+ sqlite3_stmt *stmt;
+ const char *str;
+ int ret;
+ dml = "UPDATE ? SET " \
+ "peer_type = ?," \
+ "flags = ?," \
+ "message_id = ?," \
+ "message_data = ?," \
+ "print_name = ?," \
+ "struct_version = ?," \
+ "unread_message_count = ?," \
+ "last_seen = ?," \
+ "photo_path = ?," \
+ "photo_id = ? WHERE user_id = ?";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return -EFAULT;
+ }
- int col_val_count = eina_list_count(column_values);
+ ret = sqlite3_bind_text(stmt, 1, tablename, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- for(int col = 0; col < col_val_count ; col++) {
- char* col_name = eina_list_nth(column_names, col);
- char* col_type = eina_list_nth(column_types, col);
+ ret = sqlite3_bind_int(stmt, 2, UC->id.type);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- char* col_value = NULL;
- if(!strcmp(col_type, "INTEGER") || !strcmp(col_type, "INTEGER PRIMARY KEY NOT NULL")) {
- int* tmp_value = eina_list_nth(column_values, col);
+ ret = sqlite3_bind_int(stmt, 3, UC->flags);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- int act_val = (*tmp_value);
- col_value = (char*)malloc(50);
- sprintf(col_value, "%d", act_val);
+ str = tg_common_to_string("%d", last_msg_id);
+ ret = sqlite3_bind_text(stmt, 4, str, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- var_query = realloc(var_query, strlen(var_query) + strlen(col_name) + strlen(" = ") + strlen(col_value) + 1);
- strcat(var_query, col_name);
- strcat(var_query, " = ");
- strcat(var_query, col_value);
+ ret = sqlite3_bind_int(stmt, 5, UC->last ? UC->last->date : 0);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- } else if(!strcmp(col_type, "TEXT") || !strcmp(col_type, "TEXT PRIMARY KEY NOT NULL")) {
+ ret = sqlite3_bind_text(stmt, 6, UC->print_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- char* tmp_value = eina_list_nth(column_values, col);
- col_value = (char*)malloc(strlen(tmp_value) + 1);
- strcpy(col_value,tmp_value);
+ ret = sqlite3_bind_int(stmt, 7, UC->structure_version);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- var_query = realloc(var_query, strlen(var_query)+ strlen(col_name) + strlen(" = ")+strlen("'") + 1);
- strcat(var_query, col_name);
- strcat(var_query, " = ");
- strcat(var_query, "'");
+ ret = sqlite3_bind_int(stmt, 8, unread_count);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- var_query = realloc(var_query, strlen(var_query)+strlen(col_value) + 1);
- strcat(var_query, col_value);
+ if (UC->id.type == TGL_PEER_USER ) {
+ ret = sqlite3_bind_int(stmt, 9, UC->user.status.when);
+ } else if (UC->id.type == TGL_PEER_CHAT ) {
+ ret = sqlite3_bind_int(stmt, 9, UC->chat.date);
+ } else {
+ ret = sqlite3_bind_int(stmt, 9, 0);
+ }
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- var_query = realloc(var_query, strlen(var_query)+strlen("'") + 1);
- strcat(var_query, "'");
- }
+ ret = sqlite3_bind_text(stmt, 10, "", -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- if(col < col_count - 1){
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, ", ");
- } else {
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, " ");
- }
- free(col_value);
+ ret = sqlite3_bind_int(stmt, 11, UC->photo.id);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
}
- var_query = realloc(var_query, strlen(var_query) + strlen(" WHERE ") + strlen(where_clause) + 2);
- strcat(var_query, " WHERE ");
- strcat(var_query, where_clause);
- strcat(var_query, ";");
+ ret = sqlite3_bind_int(stmt, 12, UC->id.id);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- ret = sqlite3_exec(db,var_query, NULL,NULL, &err_msg);
- close_database(db);
- if( ret != SQLITE_OK ){
- sqlite3_free(err_msg);
- return EINA_FALSE;
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_DONE) {
+ sqlite3_finalize(stmt);
+ return -EIO;
}
- return EINA_TRUE;
+ sqlite3_finalize(stmt);
+ return 0;
}
-Eina_Bool get_values_from_table(const char* table_name, Eina_List* column_names, int (*callback)(void*,int,char**,char**), const char* where_clause, void* data_to_callback)
+int tg_db_insert_peer_info(const char *tablename, tgl_peer_t *UC, int last_msg_id, int unread_count)
{
- if (!table_name) {
- return EINA_FALSE;
+ const char *dml;
+ sqlite3_stmt *stmt;
+ const char *str;
+ int ret;
+
+ dml = "INSERT INTO ? ("
+ "user_id,peer_type,flags,message_id,message_date," \
+ "print_name,struct_version,unread_message_count,last_seen," \
+ "photo_path,photo_id) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return -EFAULT;
}
- sqlite3* db = create_database(DEFAULT_TG_DATABASE_PATH);
- /*****No rows identification*****/
+ ret = sqlite3_bind_text(stmt, 1, tablename, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- char* row_cnt_qry = (char*)malloc(strlen("SELECT COUNT(*) FROM ") + strlen(table_name) + strlen(";") +1);
- strcpy(row_cnt_qry, "SELECT COUNT(*) FROM ");
- strcat(row_cnt_qry, table_name);
- strcat(row_cnt_qry, ";");
+ ret = sqlite3_bind_int(stmt, 2, UC->id.id);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- int no_of_rows = 0;
- //ret = sqlite3_exec(s_info.db,var_query, callback,(void*)s_info.db, &err_msg);
+ ret = sqlite3_bind_int(stmt, 3, UC->id.type);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- sqlite3_stmt *stmt;
- if (sqlite3_prepare_v2(db, row_cnt_qry, -1, &stmt, NULL) == SQLITE_OK) {
- if (sqlite3_step(stmt) == SQLITE_ERROR) {
- no_of_rows = 0;
- } else {
- no_of_rows = sqlite3_column_int(stmt, 0);
- }
+ ret = sqlite3_bind_int(stmt, 4, UC->flags);
+ if (ret != SQLITE_OK) {
sqlite3_finalize(stmt);
+ return -EFAULT;
}
- free(row_cnt_qry);
- if(no_of_rows <= 0) {
- close_database(db);
- return EINA_FALSE;
+ str = tg_common_to_string("%d", last_msg_id);
+ ret = sqlite3_bind_text(stmt, 5, str, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 6, UC->last ? UC->last->date : 0);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
}
- close_database(db);
- /********************************/
- int ret = 0 ;
- char* err_msg = 0;
- //int col_count = eina_list_count(column_names);
+ ret = sqlite3_bind_text(stmt, 7, UC->print_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- db = create_database(DEFAULT_TG_DATABASE_PATH);
+ ret = sqlite3_bind_int(stmt, 8, UC->structure_version);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- int str_len = strlen("SELECT ") + 1;
- char* var_query = (char*)malloc(str_len);
- strcpy(var_query,"SELECT ");
- if(!column_names) {
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, "* ");
+ ret = sqlite3_bind_int(stmt, 9, unread_count);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ if (UC->id.type == TGL_PEER_USER ) {
+ ret = sqlite3_bind_int(stmt, 10, UC->user.status.when);
+ } else if (UC->id.type == TGL_PEER_CHAT ) {
+ ret = sqlite3_bind_int(stmt, 10, UC->chat.date);
} else {
+ ret = sqlite3_bind_int(stmt, 10, 0);
+ }
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- int col_count = eina_list_count(column_names);
- char* col_name = NULL;
- for(int col = 0; col < col_count ; col++) {
- col_name = eina_list_nth(column_names, col);
- var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1);
- strcat(var_query, col_name);
- col_name = NULL;
- var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1);
-
- if(col < col_count - 1){
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, ", ");
- } else {
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, " ");
- }
- }
+ ret = sqlite3_bind_text(stmt, 11, "", -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+ ret = sqlite3_bind_int(stmt, 12, UC->photo.id);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
}
- var_query = realloc(var_query, strlen(var_query) + strlen("FROM ") + 2);
- strcat(var_query, "FROM ");
- var_query = realloc(var_query, strlen(var_query) + strlen(table_name) + 1);
- strcat(var_query, table_name);
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- if (where_clause) {
- var_query = realloc(var_query, strlen(var_query)+strlen(" WHERE ") + 1);
- strcat(var_query, " WHERE ");
- var_query = realloc(var_query, strlen(var_query)+strlen(where_clause) + 1);
- strcat(var_query, where_clause);
+ sqlite3_finalize(stmt);
+ return 0;
+}
+
+int tg_db_update_user_info(const char *tablename, struct tgl_user *U)
+{
+ const char *dml;
+ sqlite3_stmt *stmt;
+ int ret;
+
+ dml = "UPDATE ? SET print_name = ?, structure_version = ?, first_name = ?, last_name = ?, phone = ?, access_hash = ?, real_first_name = ?, real_last_name = ?, username = ?, online = ?, last_seen = ? WHERE user_id = ?";
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return -EFAULT;
}
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, ";");
+ ret = sqlite3_bind_text(stmt, 1, tablename, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+ ret = sqlite3_bind_text(stmt, 2, U->print_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- ret = sqlite3_exec(db,var_query, callback,(void*)data_to_callback, &err_msg);
- close_database(db);
- if( ret != SQLITE_OK ){
- sqlite3_free(err_msg);
- return EINA_FALSE;
+ ret = sqlite3_bind_int(stmt, 3, U->structure_version);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
}
- free(var_query);
- return EINA_TRUE;
+ ret = sqlite3_bind_text(stmt, 4, U->first_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 5, U->last_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 6, U->phone, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 7, U->access_hash);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 8, U->real_first_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 9, U->real_last_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 10, U->username, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 11, U->status.online);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 12, U->last->date);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 13, U->id.id);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ if (sqlite3_step(stmt) != SQLITE_DONE) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ sqlite3_finalize(stmt);
+ return 0;
}
-Eina_List *get_values_from_table_sync(const char* table_name, Eina_List* column_names, Eina_List* column_types, const char* where_clause)
+int tg_db_update_user_photo(const char *tablename, int uid, const char *photo, int photo_id)
{
- Eina_List* query_vals = NULL;
+ const char *dml;
+ int ret;
+ sqlite3_stmt *stmt;
+ int idx;
- if (!table_name) {
- return (Eina_List *)NULL;
+ if (photo_id < 0) {
+ dml = "UPDATE ? SET photo = ?, photo_id = ? WHERE user_id = ?";
+ } else {
+ dml = "UPDATE ? SET photo = ? WHERE user_id = ?";
}
- sqlite3* db = create_database(DEFAULT_TG_DATABASE_PATH);
- /*****No rows identification*****/
+ idx = 1;
- char* row_cnt_qry = (char *)malloc(strlen("SELECT COUNT(*) FROM ") + strlen(table_name) + strlen(";") +1);
- strcpy(row_cnt_qry, "SELECT COUNT(*) FROM ");
- strcat(row_cnt_qry, table_name);
- strcat(row_cnt_qry, ";");
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return -EFAULT;
+ }
- int no_of_rows = 0;
- //ret = sqlite3_exec(s_info.db,var_query, callback,(void*)s_info.db, &err_msg);
+ ret = sqlite3_bind_text(stmt, idx++, tablename, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, idx++, photo, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ if (photo_id >= 0) {
+ ret = sqlite3_bind_int(stmt, idx++, photo_id);
+ }
+ ret = sqlite3_bind_int(stmt, idx++, uid);
+ ret = sqlite3_step(stmt);
+ sqlite3_finalize(stmt);
+ if (ret != SQLITE_DONE) {
+ return -EIO;
+ }
+
+ return 0;
+}
+
+int tg_db_insert_user_info(const char *tablename, struct tgl_user *U)
+{
+ const char *dml;
sqlite3_stmt *stmt;
- if (sqlite3_prepare_v2(db, row_cnt_qry, -1, &stmt, NULL) == SQLITE_OK) {
- if (sqlite3_step(stmt) == SQLITE_ERROR) {
- no_of_rows = 0;
- } else {
- no_of_rows = sqlite3_column_int(stmt, 0);
- }
+ int ret;
+
+ dml = "INSERT (user_id, print_name, structure_version, first_name, last_name, phone, access_hash, real_first_name, real_last_name, username, online, last_seen) INTO ? VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
+
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 1, U->id.id);
+ if (ret != SQLITE_OK) {
sqlite3_finalize(stmt);
+ return -EFAULT;
}
- close_database(db);
- free(row_cnt_qry);
- if(no_of_rows <= 0) {
- return (Eina_List *)NULL;
+
+ ret = sqlite3_bind_text(stmt, 2, U->print_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
}
- /********************************/
- db = create_database(DEFAULT_TG_DATABASE_PATH);
- int ret = 0 ;
- char* err_msg = 0;
- //int col_count = eina_list_count(column_names);
+ ret = sqlite3_bind_int(stmt, 3, U->structure_version);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- int str_len = strlen("SELECT ") + 1;
- char* var_query = (char*)malloc(str_len);
- strcpy(var_query,"SELECT ");
- if(!column_names) {
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, "* ");
- } else {
+ ret = sqlite3_bind_text(stmt, 4, U->first_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- int col_count = eina_list_count(column_names);
- char* col_name = NULL;
- for(int col = 0; col < col_count ; col++) {
- col_name = eina_list_nth(column_names, col);
- var_query = realloc(var_query, strlen(var_query)+strlen(col_name) + 1);
- strcat(var_query, col_name);
- col_name = NULL;
- var_query = realloc(var_query, strlen(var_query)+strlen(" ") + 1);
-
- if(col < col_count - 1){
- var_query = realloc(var_query, strlen(var_query) + 3);
- strcat(var_query, ", ");
- } else {
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, " ");
- }
- }
+ ret = sqlite3_bind_text(stmt, 5, U->last_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 6, U->phone, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_int(stmt, 7, U->access_hash);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 8, U->real_first_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 9, U->real_last_name, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+
+ ret = sqlite3_bind_text(stmt, 10, U->username, -1, SQLITE_TRANSIENT);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
+ ret = sqlite3_bind_int(stmt, 11, U->status.online);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
}
- var_query = realloc(var_query, strlen(var_query) + strlen("FROM ") + 2);
- strcat(var_query, "FROM ");
- var_query = realloc(var_query, strlen(var_query) + strlen(table_name) + 1);
- strcat(var_query, table_name);
+ ret = sqlite3_bind_int(stmt, 12, U->last ? U->last->date : 0);
+ if (ret != SQLITE_OK) {
+ sqlite3_finalize(stmt);
+ return -EFAULT;
+ }
- if (where_clause) {
- var_query = realloc(var_query, strlen(var_query)+strlen(" WHERE ") + 1);
- strcat(var_query, " WHERE ");
- var_query = realloc(var_query, strlen(var_query)+strlen(where_clause) + 1);
- strcat(var_query, where_clause);
+ ret = sqlite3_step(stmt);
+ if (ret != SQLITE_DONE) {
+ sqlite3_finalize(stmt);
+ return 0;
}
- var_query = realloc(var_query, strlen(var_query) + 2);
- strcat(var_query, ";");
+ sqlite3_finalize(stmt);
+ return 0;
+}
+struct tgl_user *tg_db_get_user_info(const char *table_name, int uid)
+{
+ const char *dml;
+ sqlite3_stmt *stmt;
+ int ret;
+ struct tgl_user *user_info;
+ const char *tmp;
- ret = sqlite3_prepare_v2(db, var_query, -1, &stmt, 0);
- close_database(db);
- if( ret != SQLITE_OK ){
- sqlite3_free(err_msg);
+ dml = "SELECT * FROM ?";
+ ret = sqlite3_prepare_v2(s_info.db, dml, -1, &stmt, NULL);
+ if (ret != SQLITE_OK) {
return NULL;
}