Fixed Bugs in Telegram 08/57008/1
authorpolu.sandeep <polu.sandeep@samsung.com>
Thu, 14 Jan 2016 10:08:43 +0000 (19:08 +0900)
committerpolu.sandeep <polu.sandeep@samsung.com>
Thu, 14 Jan 2016 10:08:43 +0000 (19:08 +0900)
Change-Id: I72e555e5a90587cd985b6a0cb4f125e18080a5e5

TelegramTizen/src/telegramtizen.c
TelegramTizen/src/tg_messaging_view.c
TelegramTizen/src/tg_search_peer_view.c
TelegramTizen/src/tg_user_info_view.c
tg-engine-service/db_manager/tg_db_manager.c
tg-engine-service/tg_engine/tg_engine.c
tg-engine-service/tg_engine/tg_engine.h
tg-engine-service/tizen-manifest.xml

index 7302af9..6d48fd8 100644 (file)
@@ -1864,6 +1864,8 @@ static int on_new_contact_added(appdata_s *app, bundle *const rec_msg)
        if (is_success) {
                load_buddy_list_data(app);
                load_peer_data(app);
+       } else {
+               show_toast(app, "Failed to add contact. Please try after sometime.");
        }
        hide_loading_popup(app);
        if (app->current_app_state == TG_ADD_CONTACT_STATE) {
@@ -2047,6 +2049,7 @@ static int on_group_chat_deleted_response(appdata_s *app, bundle *const rec_msg)
 
                        elm_naviframe_item_pop(app->nf);
                        app->current_app_state = TG_USER_MAIN_VIEW_STATE;
+                       show_floating_button(app);
                }
 
                if (app->current_app_state ==  TG_SET_CHAT_INFO_STATE && app->peer_in_cahtting_data
index 190a02b..fde3443 100644 (file)
@@ -114,43 +114,7 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev
                        ad->is_loading_from_msg_view = EINA_TRUE;
                        on_create_new_contact(ad);
                } else if (id == 1) {
-#if 0
-                       char* tablename = get_table_name_from_number(user_data->peer_id);
-                       delete_all_records(tablename);
-                       free(tablename);
-
-                       // clear all messages
-                       Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list");
-                       elm_genlist_clear(genlist);
 
-                       // remove main item from main list
-                       if (ad->main_item_in_cahtting_data) {
-                               tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
-                               if (old_item->peer_print_name) {
-                                       free(old_item->peer_print_name);
-                                       old_item->peer_print_name = NULL;
-                               }
-                               if (old_item->last_message) {
-                                       free(old_item->last_message);
-                                       old_item->last_message = NULL;
-                               }
-                               if (old_item->profile_pic_path) {
-                                       free(old_item->profile_pic_path);
-                                       old_item->profile_pic_path = NULL;
-                               }
-                               old_item->date_lbl = NULL;
-                               old_item->msg_status_lbl = NULL;
-                               old_item->main_item_layout = NULL;
-                               old_item->profile_pic = NULL;
-                               old_item->profile_pic_path = NULL;
-                               old_item->status_lbl = NULL;
-                               old_item->user_name_lbl = NULL;
-                               ad->main_list = eina_list_remove(ad->main_list,  ad->main_item_in_cahtting_data);
-
-                               ad->main_item_in_cahtting_data = NULL;
-                       }
-                       ad->is_last_msg_changed = EINA_FALSE;
-#else
                        // mark all the massages for deletion.
                        char* tablename = get_table_name_from_number(user_data->peer_id);
                        mark_all_records_for_deletion(tablename);
@@ -201,11 +165,11 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev
                                old_item->last_message = strdup("");
                        }
 
-                       Evas_Object *nomsg_layout = evas_object_data_del(ad->nf, "chat_list_no_msg_text");
+                       Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
                        if (nomsg_layout) {
                                elm_object_signal_emit(nomsg_layout, "show", "message");
                        }
-#endif
+
                } else {
                        char* tablename = get_table_name_from_number(user_data->peer_id);
                        delete_all_records(tablename);
@@ -254,48 +218,10 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev
                return;
        }
 
-
-       if (id == 1) { // Clear history
-               if (user_data->peer_type == TGL_PEER_USER || user_data->peer_type == TGL_PEER_CHAT) {
-
-#if 0
-                       char* tablename = get_table_name_from_number(user_data->peer_id);
-                       delete_all_records(tablename);
-                       free(tablename);
-
-                       // clear all messages
-                       Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list");
-                       elm_genlist_clear(genlist);
-
-                       // remove main item from main list
-                       if (ad->main_item_in_cahtting_data) {
-                               tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
-                               if (old_item->peer_print_name) {
-                                       free(old_item->peer_print_name);
-                                       old_item->peer_print_name = NULL;
-                               }
-                               if (old_item->last_message) {
-                                       free(old_item->last_message);
-                                       old_item->last_message = NULL;
-                               }
-                               if (old_item->profile_pic_path) {
-                                       free(old_item->profile_pic_path);
-                                       old_item->profile_pic_path = NULL;
-                               }
-                               old_item->date_lbl = NULL;
-                               old_item->msg_status_lbl = NULL;
-                               old_item->main_item_layout = NULL;
-                               old_item->profile_pic = NULL;
-                               old_item->profile_pic_path = NULL;
-                               old_item->status_lbl = NULL;
-                               old_item->user_name_lbl = NULL;
-                               ad->main_list = eina_list_remove(ad->main_list,  ad->main_item_in_cahtting_data);
-
-                               ad->main_item_in_cahtting_data = NULL;
-                       }
-
-                       ad->is_last_msg_changed = EINA_FALSE;
-#else
+       if (user_data->peer_type == TGL_PEER_USER) {
+               if (id == 0) {
+                       launch_user_info_screen(ad, user_data->peer_id);
+               } else if (id == 1) {
                        // mark all the massages for deletion.
                        char* tablename = get_table_name_from_number(user_data->peer_id);
                        mark_all_records_for_deletion(tablename);
@@ -333,73 +259,19 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev
                        elm_box_clear(box);
                        elm_box_recalculate(box);
 
-
                        // send request to server
-                       send_delete_group_chat_request(ad, ad->service_client, user_data->peer_id);
+                       send_delete_all_messages_request(ad, ad->service_client, user_data->peer_id, user_data->peer_type);
 
-                       if (ad->main_item_in_cahtting_data) {
-                               tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
-                               if (old_item->last_message) {
-                                       free(old_item->last_message);
-                                       old_item->last_message = NULL;
-                               }
-                               old_item->last_message = strdup("");
-                       }
-
-                       Evas_Object *nomsg_layout = evas_object_data_del(ad->nf, "chat_list_no_msg_text");
+                       Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
                        if (nomsg_layout) {
                                elm_object_signal_emit(nomsg_layout, "show", "message");
                        }
-#endif
-
-               } else {
-
-               }
-
-       } else if (id == 2) { //Delete
-               if (user_data->peer_type == TGL_PEER_USER) {
+               }  else if (id == 2) {
                        show_loading_popup(ad);
                        char* tablename = get_table_name_from_number(user_data->peer_id);
                        delete_all_records(tablename);
                        free(tablename);
 
-#if 0
-                       // clear all messages
-                       Evas_Object *genlist = evas_object_data_get(ad->nf, "chat_list");
-                       elm_genlist_clear(genlist);
-
-                       // remove main item from main list
-                       if (ad->main_item_in_cahtting_data) {
-                               tg_main_list_item_s* old_item = ad->main_item_in_cahtting_data;
-                               if (old_item->peer_print_name) {
-                                       free(old_item->peer_print_name);
-                                       old_item->peer_print_name = NULL;
-                               }
-                               if (old_item->last_message) {
-                                       free(old_item->last_message);
-                                       old_item->last_message = NULL;
-                               }
-                               if (old_item->profile_pic_path) {
-                                       free(old_item->profile_pic_path);
-                                       old_item->profile_pic_path = NULL;
-                               }
-                               old_item->date_lbl = NULL;
-                               old_item->msg_status_lbl = NULL;
-                               old_item->main_item_layout = NULL;
-                               old_item->profile_pic = NULL;
-                               old_item->profile_pic_path = NULL;
-                               old_item->status_lbl = NULL;
-                               old_item->user_name_lbl = NULL;
-                               ad->main_list = eina_list_remove(ad->main_list,  ad->main_item_in_cahtting_data);
-
-                               ad->main_item_in_cahtting_data = NULL;
-                       }
-
-                       ad->is_last_msg_changed = EINA_FALSE;
-
-
-                       app_nf_back_cb(ad, NULL, NULL);
-#else
                        elm_naviframe_item_pop(ad->nf);
                        load_registered_user_data(ad);
                        load_buddy_list_data(ad);
@@ -407,25 +279,65 @@ void on_messaging_menu_option_selected_cb(void *data, Evas_Object *obj, void *ev
                        load_peer_data(ad);
                        load_main_list_data(ad);
                        ecore_timer_add(1, on_load_main_view_requested, ad);
-#endif
+               }
+       } else if (user_data->peer_type == TGL_PEER_CHAT) {
+               if (id == 0) {
+                       // mark all the massages for deletion.
+                       char* tablename = get_table_name_from_number(user_data->peer_id);
+                       mark_all_records_for_deletion(tablename);
+                       // delete date messages
+                       delete_date_messages_from_table(tablename);
+                       free(tablename);
+                       // clear screen
+                       // clear all messages
+                       Evas_Object *scroller = evas_object_data_get(ad->nf, "chat_list");
+
+
+                       Evas_Object *box_layout = NULL;
+                       Evas_Object *box = NULL;
+                       Eina_List *list = NULL;
+
+                       box_layout = elm_object_content_get(scroller);
+                       if (!box_layout) {
+                               LOGE("Fail to get the box into scroller");
+                               return;
+                       }
+
+                       list = elm_box_children_get(box_layout);
+                       if (!list) {
+                               LOGE("Fail to get the list into box");
+                               return;
+                       }
+
+                       box = eina_list_nth(list, 0);
+                       if (!box) {
+                               LOGE("Fail to get the box into box layout");
+                               return;
+                       }
+
+                       eina_list_free(list);
+                       elm_box_clear(box);
+                       elm_box_recalculate(box);
 
-               } else if (user_data->peer_type == TGL_PEER_CHAT) {
+                       send_delete_all_messages_request(ad, ad->service_client, user_data->peer_id, user_data->peer_type);
 
+                       Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
+                       if (nomsg_layout) {
+                               elm_object_signal_emit(nomsg_layout, "show", "message");
+                       }
+
+               } else if (id == 1) {
                        //send group chat delete request
                        show_loading_popup(ad);
                        send_delete_group_chat_request(ad, ad->service_client, user_data->peer_id);
-
-               } else {
-
                }
-       } else if (id == 0) { // View profile
-               launch_user_info_screen(ad, user_data->peer_id);
-       } else {
        }
+
        if (ad->msg_popup) {
                evas_object_del(ad->msg_popup);
                ad->msg_popup = NULL;
        }
+       return;
 }
 
 
@@ -1464,7 +1376,7 @@ Evas_Object *on_message_item_content_get_cb(void *data, Evas_Object *obj, const
                Evas_Object *chat_scroller = obj;
                appdata_s* ad = evas_object_data_get(chat_scroller, "app_data");
 
-               Evas_Object *nomsg_layout = evas_object_data_del(ad->nf, "chat_list_no_msg_text");
+               Evas_Object *nomsg_layout = evas_object_data_get(ad->nf, "chat_list_no_msg_text");
                if (nomsg_layout) {
                        elm_object_signal_emit(nomsg_layout, "hide", "message");
                }
@@ -3843,8 +3755,8 @@ void launch_messaging_view_cb(appdata_s* ad, int user_id)
                // show no messages
                elm_object_part_text_set(layout, "no_msg_text", i18n_get_text("IDS_TGRAM_BODY_NO_MESSAGES_HERE_YET_ING"));
                elm_object_signal_emit(layout, "show", "message");
-               evas_object_data_set(ad->nf, "chat_list_no_msg_text", layout);
        }
+       evas_object_data_set(ad->nf, "chat_list_no_msg_text", layout);
 
        send_request_for_marked_as_read(ad, ad->service_client, sel_item->use_data->peer_id, sel_item->use_data->peer_type);
        eext_object_event_callback_add(ad->nf, EEXT_CALLBACK_MORE, on_messaging_menu_button_clicked, ad);
index a9e6a6b..e324a6c 100755 (executable)
@@ -718,6 +718,14 @@ void add_contact_to_phone_book(appdata_s *ad)
        }
 
 }
+static Eina_Bool on_contacts_reloaded(void *data)
+{
+       appdata_s *ad = data;
+       elm_naviframe_item_pop(ad->nf);
+       ad->current_app_state = TG_PEER_SEARCH_VIEW_STATE;
+       show_floating_button(ad);
+       return ECORE_CALLBACK_CANCEL;
+}
 
 void on_new_contact_added_response_received(appdata_s *ad, int buddy_id, Eina_Bool is_success)
 {
@@ -735,10 +743,6 @@ void on_new_contact_added_response_received(appdata_s *ad, int buddy_id, Eina_Bo
                        load_main_list_data(ad);
                        ecore_timer_add(1, on_load_main_view_requested, ad);
                } else {
-                       elm_naviframe_item_pop(ad->nf);
-                       ad->current_app_state = TG_PEER_SEARCH_VIEW_STATE;
-                       show_floating_button(ad);
-
                        // add new buddy to list
                        Evas_Object *peer_list = evas_object_data_get(ad->nf, "search_list");
                        if (peer_list) {
@@ -755,6 +759,7 @@ void on_new_contact_added_response_received(appdata_s *ad, int buddy_id, Eina_Bo
                                        _append_contact_item(peer_list, ad, ad->contact_list);
                                }
                        }
+                       ecore_timer_add(5, on_contacts_reloaded, ad);
                }
        } else {
                // show failed message
@@ -782,6 +787,7 @@ static void on_new_contact_done_clicked(void *data, Evas_Object *obj, void *even
                last_name = elm_entry_markup_to_utf8(elm_object_text_get(last_name_entry));
 
        if ((phone_num && strlen(phone_num) > 0) && (first_name && strlen(first_name) > 0) && (last_name && strlen(last_name) > 0)) {
+               add_contact_to_phone_book(ad);
                show_loading_popup(ad);
                send_add_buddy_request(ad, ad->service_client, -1, first_name, last_name, phone_num);
        } else {
index 329a220..c3d1b2b 100644 (file)
@@ -805,14 +805,18 @@ void launch_user_info_screen(appdata_s* ad, int peer_id)
        evas_object_show(layout);
        elm_object_content_set(scroller, layout);
 
+       char temp_name[512] = {'\0'};
+       char* user_name = replace(ad->peer_in_cahtting_data->use_data->print_name, '_', " ");
+       snprintf(temp_name, 512, "%s", user_name);
+       free(user_name);
 
-       Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, ad->main_item_in_cahtting_data->buddy_display_name, NULL, NULL, scroller, NULL);
+       Elm_Object_Item* navi_item = elm_naviframe_item_push(ad->nf, temp_name, NULL, NULL, scroller, NULL);
        elm_object_item_part_text_set(navi_item, "subtitle", "Subtitle");
 
 
        /*********************** set last seen ******************************/
 
-       Eina_List* buddy_details_array = get_buddy_info(ad->main_item_in_cahtting_data->peer_id);
+       Eina_List* buddy_details_array = get_buddy_info(ad->peer_in_cahtting_data->use_data->peer_id);
        if (buddy_details_array && eina_list_count(buddy_details_array) > 0) {
                Eina_List* buddy_details = eina_list_nth(buddy_details_array, 0);
                if (buddy_details && eina_list_count(buddy_details) > 0) {
index 4432608..8f54880 100644 (file)
@@ -28,7 +28,7 @@ sqlite3* create_database(char* database_name)
                return NULL;
 
        int ret;
-       sqlite3 *db;
+       sqlite3 *db = NULL;
        ret = sqlite3_open(database_name, &db);
        //ret = sqlite3_open_v2(database_name, &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE, NULL);
        if(ret) {
index 7b6455a..20a227c 100644 (file)
@@ -13,6 +13,7 @@
 #include <mime_type.h>
 #include "device_contacts_manager.h"
 #include "tg-engine-service.h"
+#include "logger.h"
 
 #define DC_SERIALIZED_MAGIC 0x868aa81d
 #define STATE_FILE_MAGIC 0x28949a93
@@ -1992,16 +1993,48 @@ void on_offline_chat_received(struct tgl_state *TLS, void *callback_extra, int s
                if (message->service || message->from_id.id == tg_data->id.id) {
                        continue;
                }
-               /*
-               Eina_Bool ret = insert_buddy_msg_to_db(message);
-               if (ret) {
-                       tg_msg_receive(s_info.TLS, message);
-               }
-               */
                tg_msg_receive(s_info.TLS, message);
        }
+       Eina_Bool is_offline_msg_requested = EINA_FALSE;
+       tg_data->current_offline_buddy_index = tg_data->current_offline_buddy_index + 1;
+       if (tg_data->current_offline_buddy_index < eina_list_count(tg_data->peer_list)) {
+
+               for (int i = tg_data->current_offline_buddy_index; i < eina_list_count(tg_data->peer_list); i++) {
+
+                       tg_data->current_offline_buddy_index = i;
+
+                       tgl_peer_t* UC = eina_list_nth(tg_data->peer_list, i);
+
+                       if (UC->id.id == 333000 || UC->id.id == 777000) {
+                               continue;
+                       }
+
+                       struct tgl_message *last_msg = UC->last;
+                       if (last_msg) {
+                               // check last message in message table
+                               char* msg_table = get_table_name_from_number(UC->id.id);
+                               struct tgl_message* org_last_msg = get_message_from_message_tableby_message_id(msg_table, last_msg->id);
+                               if (!org_last_msg) {
+                                       tgl_do_get_history(s_info.TLS, UC->id, 10, 0, on_offline_chat_received, UC);
+                                       is_offline_msg_requested = EINA_TRUE;
+                                       break;
+                               } else {
+                                       if (org_last_msg->message) {
+                                               free(org_last_msg->message);
+                                       }
+                                       free(org_last_msg);
+                               }
+                               free(msg_table);
+                       }
+               }
+       }
+       if (!is_offline_msg_requested) {
+               send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+       }
 }
 
+#if 0
+
 static Eina_Bool on_load_offline_messages(void *data)
 {
        struct tgl_state *TLS = data;
@@ -2047,6 +2080,66 @@ static Eina_Bool on_load_offline_messages(void *data)
        return ECORE_CALLBACK_CANCEL;
 }
 
+#else
+
+static Eina_Bool on_load_offline_messages(void *data)
+{
+       struct tgl_state *TLS = data;
+       if (TLS) {
+               tg_engine_data_s *tg_data = TLS->callback_data;
+
+
+               if (tg_data->peer_list && eina_list_count(tg_data->peer_list) > 0) {
+                       for (int i = 0; i < eina_list_count(tg_data->peer_list); i++) {
+                               tgl_peer_t* UC = eina_list_nth(tg_data->peer_list, i);
+                               char* msg_table = get_table_name_from_number(UC->id.id);
+                               create_buddy_msg_table(msg_table);
+                               delete_all_messages_from_chat(UC->id.id, UC->id.type);
+                               free(msg_table);
+                       }
+               }
+
+               Eina_Bool is_offline_msg_requested = EINA_FALSE;
+
+               if (tg_data->peer_list && eina_list_count(tg_data->peer_list) > 0) {
+                       for (int i = 0; i < eina_list_count(tg_data->peer_list); i++) {
+
+                               tg_data->current_offline_buddy_index = i;
+
+                               tgl_peer_t* UC = eina_list_nth(tg_data->peer_list, i);
+
+                               if (UC->id.id == 333000 || UC->id.id == 777000) {
+                                       continue;
+                               }
+
+                               struct tgl_message *last_msg = UC->last;
+                               if (last_msg) {
+                                       // check last message in message table
+                                       char* msg_table = get_table_name_from_number(UC->id.id);
+                                       struct tgl_message* org_last_msg = get_message_from_message_tableby_message_id(msg_table, last_msg->id);
+                                       if (!org_last_msg) {
+                                               tgl_do_get_history(s_info.TLS, UC->id, 10, 0, on_offline_chat_received, UC);
+                                               is_offline_msg_requested = EINA_TRUE;
+                                               break;
+                                       } else {
+                                               if (org_last_msg->message) {
+                                                       free(org_last_msg->message);
+                                               }
+                                               free(org_last_msg);
+                                       }
+                                       free(msg_table);
+                               }
+                       }
+               }
+
+               if (!is_offline_msg_requested) {
+                       send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+               }
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+#endif
 
 extern void on_peer_chat_info_received(struct tgl_state *TLS, void *callback_extra, int success, struct tgl_chat *chat_info);
 
@@ -2062,7 +2155,7 @@ static Eina_Bool on_async_peer_info_requested(void *data)
                                tgl_do_get_chat_info(TLS, UC->id, 0, &on_peer_chat_info_received, NULL);
                        }
                } else {
-                       send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+                       //send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
                        ecore_timer_add(5, on_send_unsent_messages_requested, TLS);
                }
        }
@@ -2235,7 +2328,7 @@ void on_contacts_and_chats_loaded(struct tgl_state *TLS, void *callback_extra, i
 #endif
 
        if ((tg_data->chat_list == NULL) || (eina_list_count(tg_data->chat_list) <= 0)) {
-               send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
+               //send_contacts_and_chats_load_done_response(TLS->callback_data, EINA_TRUE);
                ecore_timer_add(5, on_send_unsent_messages_requested, TLS);
        } else {
                // load chat info one by one.
@@ -3258,7 +3351,7 @@ void on_buddy_readded(struct tgl_state *TLS,void *callback_extra, int success, i
 void on_new_buddy_added(struct tgl_state *TLS,void *callback_extra, int success, int size, struct tgl_user *users[])
 {
        tg_engine_data_s *tg_data = TLS->callback_data;
-       if (success) {
+       if (success && size > 0) {
                struct tgl_user *buddy = users[0];
                if (buddy) {
                        char* msg_table = get_table_name_from_number(buddy->id.id);
@@ -3284,7 +3377,7 @@ void on_new_buddy_added(struct tgl_state *TLS,void *callback_extra, int success,
                }
 
        } else {
-               send_new_contact_added_response(tg_data, -1, EINA_TRUE);
+               send_new_contact_added_response(tg_data, -1, EINA_FALSE);
        }
 }
 
index 188036b..c099dd2 100644 (file)
@@ -151,6 +151,7 @@ typedef struct tg_engine_data {
        int current_buddy_index;
        int current_group_chat_index;
        Ecore_Timer *code_response_timer;
+       int current_offline_buddy_index;
        Eina_List *peer_list;
 } tg_engine_data_s;
 
index fa9b1bb..434a21a 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <manifest xmlns="http://tizen.org/ns/packages" api-version="2.4" package="org.tizen.tg-engine-service" version="1.0.0">
     <profile name="mobile"/>
-    <service-application appid="org.tizen.tg-engine-service" exec="tg-engine-service" multiple="false" nodisplay="true" taskmanage="false" type="capp">
+    <service-application appid="org.tizen.tg-engine-service" auto-restart="true" exec="tg-engine-service" multiple="false" nodisplay="true" on-boot="true" type="capp">
         <label>tg-engine-service</label>
         <background-category value="background-network"/>
         <background-category value="download"/>