[TRE-46]Add msg-manager pkg
[platform/core/messaging/msg-service.git] / manager / src / msg-manager.cpp
1 #include <stdlib.h>
2 #include <glib.h>
3
4 #include <msg.h>
5 #include <msg_storage.h>
6 #include <tizen.h>
7 #include <service_app.h>
8 #include <app_event.h>
9 #include <bundle.h>
10 #include <notification_list.h>
11 #include <notification_text_domain.h>
12 #include <notification_internal.h>
13
14 #include "msg-manager.h"
15 #include "msg-manager-contact.h"
16 #include "msg-manager-debug.h"
17
18
19 bool service_app_create(void *data)
20 {
21         MSG_MGR_DEBUG("app_create");
22
23         return true;
24 }
25
26 void service_app_terminate(void *data)
27 {
28         // Todo: add your code here.
29         return;
30 }
31
32 void _incoming_msg_func(app_control_h app_control)
33 {
34         MSG_MGR_BEGIN();
35
36         int ret = 0;
37         char *rcv_msg_type = NULL;
38         char *rcv_msg_id = NULL;
39
40         ret = app_control_get_extra_data(app_control, EVENT_KEY_MSG_TYPE, &rcv_msg_type);
41         if (ret != APP_CONTROL_ERROR_NONE || rcv_msg_type == NULL)
42                 return;
43
44         MSG_MGR_INFO("rcv_msg_type(%s)", rcv_msg_type);
45         if (g_strcmp0(rcv_msg_type, EVENT_VAL_SMS) != 0)
46                 return;
47
48         ret = app_control_get_extra_data(app_control, EVENT_KEY_MSG_ID, &rcv_msg_id);
49         if (ret != APP_CONTROL_ERROR_NONE || rcv_msg_id == NULL)
50                 return;
51
52         MSG_MGR_INFO("rcv_msg_id(%s)", rcv_msg_id);
53
54         int msg_err = MSG_SUCCESS;
55         msg_message_id_t msg_id = atoi(rcv_msg_id);
56         msg_handle_t msg_handle = NULL;
57         msg_struct_t msg = NULL;
58         msg_struct_t opt = NULL;
59         contactInfo contact_info = {0,};
60         contact_info.msgId = msg_id;
61
62         msg_err = msg_open_msg_handle(&msg_handle);
63         if (msg_err != MSG_SUCCESS) {
64                 MSG_MGR_ERR("msg_open_msg_handle() failed [%d]", msg_err);
65                 return;
66         }
67
68         msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
69         opt = msg_create_struct(MSG_STRUCT_SENDOPT);
70         msg_err = msg_get_message(msg_handle, msg_id, msg, opt);
71         if (msg_err != MSG_SUCCESS) {
72                 MSG_MGR_ERR("msg_get_message() failed [%d]", msg_err);
73                 return;
74         }
75
76         msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &contact_info.msgType);
77         msg_get_int_value(msg, MSG_MESSAGE_FOLDER_ID_INT, &contact_info.folderId);
78         msg_get_int_value(msg, MSG_MESSAGE_SIM_INDEX_INT, &contact_info.simIndex);
79         msg_get_list_handle(msg, MSG_MESSAGE_ADDR_LIST_HND, (void **)&contact_info.addrList);
80         msg_get_str_value(msg, MSG_MESSAGE_SUBJECT_STR, contact_info.subject, MAX_CONTACT_TEXT_LEN);
81         int msgSize = 0;
82         msg_get_int_value(msg, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
83         if (msgSize > 0)
84                 msg_get_str_value(msg, MSG_MESSAGE_SMS_DATA_STR, contact_info.msgText, MAX_CONTACT_TEXT_LEN);
85
86         if ((contact_info.folderId == MSG_INBOX_ID || contact_info.folderId == MSG_SPAMBOX_ID)) {
87                 MsgMgrAddPhoneLog(&contact_info);
88         }
89
90         msg_release_struct(&msg);
91         msg_release_struct(&opt);
92
93 #if 0
94         char **db_res = NULL;
95         int row_cnt = 0, col_cnt = 0;
96         msg_err = msg_db_select_with_query(msg_handle, "MSG_ID FROM MSG_MESSAGE_TABLE;", &db_res, &row_cnt, &col_cnt);
97         if (msg_err != MSG_SUCCESS) {
98                 MSG_MGR_ERR("msg_db_select_with_query() failed [%d]", msg_err);
99                 return;
100         }
101
102         MSG_MGR_DEBUG("row count [%d] col count [%d]", row_cnt, col_cnt);
103         if (db_res == NULL || *db_res == NULL) {
104                 MSG_MGR_DEBUG("NULL");
105         } else {
106                 for (int i = col_cnt; i < col_cnt * (row_cnt + 1); i++) {
107                         MSG_MGR_DEBUG("db_res[%d] [%s]", i, db_res[i]);
108                 }
109         }
110
111         msg_err = msg_db_free(msg_handle, db_res);
112         if (msg_err != MSG_SUCCESS) {
113                 MSG_MGR_ERR("msg_db_free() failed [%d]", msg_err);
114                 return;
115         }
116 #endif
117
118         msg_close_msg_handle(&msg_handle);
119
120         g_free(rcv_msg_type);
121         g_free(rcv_msg_id);
122
123         MSG_MGR_END();
124 }
125
126 void _outgoing_msg_func(app_control_h app_control)
127 {
128         MSG_MGR_BEGIN();
129
130         int ret = 0;
131         char *sent_msg_id = NULL;
132
133         ret = app_control_get_extra_data(app_control, EVENT_KEY_MSG_ID, &sent_msg_id);
134         if (ret != APP_CONTROL_ERROR_NONE || sent_msg_id == NULL)
135                 return;
136
137         MSG_MGR_INFO("sent_msg_id(%s)", sent_msg_id);
138
139         int msg_err = MSG_SUCCESS;
140         msg_message_id_t msg_id = atoi(sent_msg_id);
141         msg_handle_t msg_handle = NULL;
142         msg_struct_t msg = NULL;
143         msg_struct_t opt = NULL;
144         contactInfo contact_info = {0,};
145         contact_info.msgId = msg_id;
146
147         msg_err = msg_open_msg_handle(&msg_handle);
148         if (msg_err != MSG_SUCCESS) {
149                 MSG_MGR_ERR("msg_open_msg_handle() failed [%d]", msg_err);
150                 return;
151         }
152
153         msg = msg_create_struct(MSG_STRUCT_MESSAGE_INFO);
154         opt = msg_create_struct(MSG_STRUCT_SENDOPT);
155         msg_err = msg_get_message(msg_handle, msg_id, msg, opt);
156         if (msg_err != MSG_SUCCESS) {
157                 MSG_MGR_ERR("msg_get_message() failed [%d]", msg_err);
158                 return;
159         }
160
161         msg_get_int_value(msg, MSG_MESSAGE_TYPE_INT, &contact_info.msgType);
162         msg_get_int_value(msg, MSG_MESSAGE_FOLDER_ID_INT, &contact_info.folderId);
163         msg_get_int_value(msg, MSG_MESSAGE_SIM_INDEX_INT, &contact_info.simIndex);
164         msg_get_list_handle(msg, MSG_MESSAGE_ADDR_LIST_HND, (void **)&contact_info.addrList);
165         msg_get_str_value(msg, MSG_MESSAGE_SUBJECT_STR, contact_info.subject, 100);
166         int msgSize = 0;
167         msg_get_int_value(msg, MSG_MESSAGE_DATA_SIZE_INT, &msgSize);
168         if (msgSize > 0)
169                 msg_get_str_value(msg, MSG_MESSAGE_SMS_DATA_STR, contact_info.msgText, 100);
170
171         MsgMgrAddPhoneLog(&contact_info);
172
173         msg_release_struct(&msg);
174         msg_release_struct(&opt);
175
176         msg_close_msg_handle(&msg_handle);
177
178         g_free(sent_msg_id);
179
180         MSG_MGR_END();
181 }
182
183 void _refresh_noti_func(app_control_h app_control)
184 {
185
186 }
187
188 void service_app_control(app_control_h app_control, void *data)
189 {
190         MSG_MGR_INFO("service_app_control called");
191
192         //check "launch on event"
193         int ret = 0;
194         const char *incoming_event_uri = "event://tizen.system.event.incoming_msg";
195         const char *outgoing_event_uri = "event://tizen.system.event.outgoing_msg";
196         char *operation = NULL;
197         char *uri = NULL;
198
199         ret = app_control_get_operation(app_control, &operation);
200         if (ret == APP_CONTROL_ERROR_NONE && operation) {
201                 if (g_strcmp0(operation, APP_CONTROL_OPERATION_LAUNCH_ON_EVENT) == 0) {
202                         /* launch by system event */
203                         ret = app_control_get_uri(app_control, &uri);
204                         if (ret == APP_CONTROL_ERROR_NONE && uri) {
205                                 if (g_strcmp0(uri, incoming_event_uri) == 0) {
206                                         _incoming_msg_func(app_control);
207                                 } else if (g_strcmp0(uri, outgoing_event_uri) == 0) {
208                                         _outgoing_msg_func(app_control);
209                                 }
210                                 g_free(uri);
211                         }
212                 } else if (g_strcmp0(operation, APP_CONTROL_OPERATION_DEFAULT) == 0) {
213                         /* launch by default */
214                         char *cmd;
215                         ret = app_control_get_extra_data(app_control, "cmd", &cmd);
216                         if (ret == APP_CONTROL_ERROR_NONE && cmd) {
217                                 if (g_strcmp0(cmd, "refresh") == 0)
218                                         _refresh_noti_func(app_control);
219
220                                 g_free(cmd);
221                         }
222                 }
223
224                 g_free(operation);
225         }
226
227         return;
228 }
229
230 static void
231 service_app_lang_changed(app_event_info_h event_info, void *user_data)
232 {
233         /*APP_EVENT_LANGUAGE_CHANGED*/
234 }
235
236 static void
237 service_app_region_changed(app_event_info_h event_info, void *user_data)
238 {
239         /*APP_EVENT_REGION_FORMAT_CHANGED*/
240 }
241
242 static void
243 service_app_low_battery(app_event_info_h event_info, void *user_data)
244 {
245         /*APP_EVENT_LOW_BATTERY*/
246 }
247
248 static void
249 service_app_low_memory(app_event_info_h event_info, void *user_data)
250 {
251         /*APP_EVENT_LOW_MEMORY*/
252 }
253
254 int main(int argc, char* argv[])
255 {
256         char ad[50] = {0,};
257         service_app_lifecycle_callback_s event_callback;
258         app_event_handler_h handlers[5] = {NULL, };
259
260         event_callback.create = service_app_create;
261         event_callback.terminate = service_app_terminate;
262         event_callback.app_control = service_app_control;
263
264         service_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, service_app_low_battery, &ad);
265         service_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, service_app_low_memory, &ad);
266         service_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, service_app_lang_changed, &ad);
267         service_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, service_app_region_changed, &ad);
268
269         return service_app_main(argc, argv, &event_callback, ad);
270 }