3 * Copyright (c) 2000-2012 Samsung Electronics Co., Ltd. All Rights Reserved.
5 * This file is part of msg-service.
7 * Contact: Jaeyun Jeong <jyjeong@samsung.com>
8 * Sangkoo Kim <sangkoo.kim@samsung.com>
9 * Seunghwan Lee <sh.cat.lee@samsung.com>
10 * SoonMin Jung <sm0415.jung@samsung.com>
11 * Jae-Young Lee <jy4710.lee@samsung.com>
12 * KeeBum Kim <keebum.kim@samsung.com>
14 * PROPRIETARY/CONFIDENTIAL
16 * This software is the confidential and proprietary information of
17 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
18 * disclose such Confidential Information and shall use it only in
19 * accordance with the terms of the license agreement you entered
20 * into with SAMSUNG ELECTRONICS.
22 * SAMSUNG make no representations or warranties about the suitability
23 * of the software, either express or implied, including but not limited
24 * to the implied warranties of merchantability, fitness for a particular
25 * purpose, or non-infringement. SAMSUNG shall not be liable for any
26 * damages suffered by licensee as a result of using, modifying or
27 * distributing this software or its derivatives.
36 #include "MsgCppTypes.h"
37 #include "MsgUtilFile.h"
38 #include "MsgContact.h"
39 #include "MsgSoundPlayer.h"
40 #include "MsgGconfWrapper.h"
41 #include "MsgSqliteWrapper.h"
42 #include "MsgPluginManager.h"
43 #include "MsgUtilStorage.h"
44 #include "MsgStorageHandler.h"
47 /*==================================================================================================
49 ==================================================================================================*/
50 extern MsgDbHandler dbHandle;
53 /*==================================================================================================
54 FUNCTION IMPLEMENTATION
55 ==================================================================================================*/
56 MSG_ERROR_T MsgMakeSortRule(const MSG_SORT_RULE_S *pSortRule, char *pSqlSort)
61 memset(sql, 0x00, sizeof(sql));
62 memset(order, 0x00, sizeof(order));
64 if (pSortRule->bAscending == true)
65 strncpy(order, "ASC", 5);
67 strncpy(order, "DESC", 5);
69 int nameOrder = MsgGetContactNameOrder();
71 switch (pSortRule->sortType)
73 case MSG_SORT_BY_DISPLAY_FROM :
75 snprintf(sql, sizeof(sql), "ORDER BY B.FIRST_NAME %s, B.LAST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
77 snprintf(sql, sizeof(sql), "ORDER BY B.LAST_NAME %s, B.FIRST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
79 case MSG_SORT_BY_DISPLAY_TO :
81 snprintf(sql, sizeof(sql), "ORDER BY B.FIRST_NAME %s, B.LAST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
83 snprintf(sql, sizeof(sql), "ORDER BY B.LAST_NAME %s, B.FIRST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
85 case MSG_SORT_BY_DISPLAY_TIME :
86 snprintf(sql, sizeof(sql), "ORDER BY A.DISPLAY_TIME %s;", order);
88 case MSG_SORT_BY_MSG_TYPE :
89 snprintf(sql, sizeof(sql), "ORDER BY A.MAIN_TYPE %s, A.DISPLAY_TIME DESC;", order);
91 case MSG_SORT_BY_READ_STATUS :
92 snprintf(sql, sizeof(sql), "ORDER BY A.READ_STATUS %s, A.DISPLAY_TIME DESC;", order);
94 case MSG_SORT_BY_STORAGE_TYPE :
95 snprintf(sql, sizeof(sql), "ORDER BY A.STORAGE_ID %s, A.DISPLAY_TIME DESC;", order);
97 case MSG_SORT_BY_THREAD_NAME :
99 snprintf(sql, sizeof(sql), "ORDER BY FIRST_NAME %s, LAST_NAME %s;", order, order);
101 snprintf(sql, sizeof(sql), "ORDER BY LAST_NAME %s, FIRST_NAME %s;", order, order);
103 case MSG_SORT_BY_THREAD_DATE :
104 snprintf(sql, sizeof(sql), "ORDER BY MSG_TIME %s;", order);
106 case MSG_SORT_BY_THREAD_COUNT :
107 snprintf(sql, sizeof(sql), "ORDER BY UNREAD_CNT %s;", order);
110 snprintf(sql, sizeof(sql), "ORDER BY A.DISPLAY_TIME %s;", order);
114 memcpy(pSqlSort, sql, strlen(sql));
120 MSG_ERROR_T MsgStoGetSmsSendOpt(MSG_MESSAGE_ID_T MsgId, MSG_SENDINGOPT_INFO_S* pSendOpt)
122 char sqlQuery[MAX_QUERY_LEN+1];
124 memset(sqlQuery, 0x00, sizeof(sqlQuery));
126 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT DELREP_REQ, KEEP_COPY, REPLY_PATH FROM %s WHERE MSG_ID = %d;",
127 MSGFW_SMS_SENDOPT_TABLE_NAME, MsgId);
129 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
130 return MSG_ERR_DB_PREPARE;
132 if (dbHandle.stepQuery() == MSG_ERR_DB_ROW)
134 pSendOpt->bSetting = true;
135 pSendOpt->bDeliverReq = (bool)dbHandle.columnInt(0);
136 pSendOpt->bKeepCopy = (bool)dbHandle.columnInt(1);
137 pSendOpt->option.smsSendOptInfo.bReplyPath = (bool)dbHandle.columnInt(2);
141 dbHandle.finalizeQuery();
142 return MSG_ERR_DB_STEP;
145 dbHandle.finalizeQuery();
151 MSG_ERROR_T MsgStoGetMmsSendOpt(MSG_MESSAGE_ID_T MsgId, MSG_SENDINGOPT_INFO_S* pSendOpt)
153 char sqlQuery[MAX_QUERY_LEN+1];
155 memset(sqlQuery, 0x00, sizeof(sqlQuery));
157 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT ASK_DELIVERY_REPORT, KEEP_COPY, ASK_READ_REPLY, EXPIRY_TIME, PRIORITY FROM %s WHERE MSG_ID = %d;",
158 MMS_PLUGIN_ATTRIBUTE_TABLE_NAME, MsgId);
160 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
161 return MSG_ERR_DB_PREPARE;
163 if (dbHandle.stepQuery() == MSG_ERR_DB_ROW)
165 pSendOpt->bSetting = true;
166 pSendOpt->bDeliverReq = (bool)dbHandle.columnInt(0);
167 pSendOpt->bKeepCopy = (bool)dbHandle.columnInt(1);
168 pSendOpt->option.mmsSendOptInfo.bReadReq = (bool)dbHandle.columnInt(2);
169 pSendOpt->option.mmsSendOptInfo.expiryTime.time = (unsigned int)dbHandle.columnInt(3);
170 pSendOpt->option.mmsSendOptInfo.priority = (MSG_PRIORITY_TYPE_T)dbHandle.columnInt(4);
174 dbHandle.finalizeQuery();
175 return MSG_ERR_DB_STEP;
178 dbHandle.finalizeQuery();
184 MSG_ERROR_T MsgStoAddScheduledMessage(MSG_MESSAGE_ID_T MsgID, int AlarmId, int ListenerFd)
186 char sqlQuery[MAX_QUERY_LEN+1];
188 memset(sqlQuery, 0x00, sizeof(sqlQuery));
190 snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, %d, %d);",
191 MSGFW_SCHEDULED_MSG_TABLE_NAME, MsgID, AlarmId, ListenerFd);
193 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
195 return MSG_ERR_DB_EXEC;
198 if (dbHandle.stepQuery() != MSG_ERR_DB_DONE)
200 return MSG_ERR_DB_EXEC;
203 dbHandle.finalizeQuery();
209 MSG_ERROR_T MsgStoDeleteScheduledMessage(MSG_MESSAGE_ID_T MsgId)
211 char sqlQuery[MAX_QUERY_LEN+1];
213 memset(sqlQuery, 0x00, sizeof(sqlQuery));
215 snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE MSG_ID = %d;",
216 MSGFW_SCHEDULED_MSG_TABLE_NAME, MsgId);
218 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
220 MSG_DEBUG("Delete Scheduled Msg Fail!!");
221 return MSG_ERR_DB_EXEC;
228 MSG_ERROR_T MsgStoGetScheduledMessage(int AlarmId, MSG_REQUEST_INFO_S *pReqInfo, int *pListenerFd)
232 MSG_ERROR_T err = MSG_SUCCESS;
234 char sqlQuery[MAX_QUERY_LEN+1];
236 memset(sqlQuery, 0x00, sizeof(sqlQuery));
238 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID, LISTENER_FD FROM %s WHERE ALARM_ID = %d;",
239 MSGFW_SCHEDULED_MSG_TABLE_NAME, AlarmId);
241 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
242 return MSG_ERR_DB_PREPARE;
244 if (dbHandle.stepQuery() == MSG_ERR_DB_ROW)
246 pReqInfo->msgInfo.msgId = dbHandle.columnInt(0);
247 *pListenerFd = dbHandle.columnInt(1);
250 dbHandle.finalizeQuery();
252 err = MsgStoGetMessage(pReqInfo->msgInfo.msgId, &(pReqInfo->msgInfo), &(pReqInfo->sendOptInfo));
254 if (err != MSG_SUCCESS)
256 MSG_DEBUG("MsgStoGetMessage() Error!! [%d]", err);
266 bool MsgStoCheckSyncMLMsgInThread(MSG_THREAD_ID_T threadId)
268 MSG_ERROR_T err = MSG_SUCCESS;
270 bool isSyncMLMsg = false;
272 char sqlQuery[MAX_QUERY_LEN+1];
274 memset(sqlQuery, 0x00, sizeof(sqlQuery));
276 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID FROM %s WHERE SUB_TYPE = %d AND ADDRESS_ID = %d;",
277 MSGFW_MESSAGE_TABLE_NAME, MSG_SYNCML_CP, threadId);
279 MSG_DEBUG("sqlQuery [%s]", sqlQuery);
281 err = dbHandle.getTable(sqlQuery, &rowCnt);
283 if (rowCnt > 0) isSyncMLMsg = true;
285 MSG_DEBUG("rowCnt [%d]", rowCnt);
287 dbHandle.freeTable();
293 MSG_ERROR_T MsgStoResetNetworkStatus()
297 char sqlQuery[MAX_QUERY_LEN+1];
299 memset(sqlQuery, 0x00, sizeof(sqlQuery));
301 snprintf(sqlQuery, sizeof(sqlQuery),
302 "UPDATE %s SET NETWORK_STATUS = %d WHERE NETWORK_STATUS = %d; UPDATE %s SET NETWORK_STATUS = %d WHERE NETWORK_STATUS = %d;"
303 , MSGFW_MESSAGE_TABLE_NAME, MSG_NETWORK_SEND_FAIL, MSG_NETWORK_SENDING
304 , MSGFW_MESSAGE_TABLE_NAME, MSG_NETWORK_RETRIEVE_FAIL, MSG_NETWORK_RETRIEVING);
306 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
307 return MSG_ERR_DB_EXEC;
315 MSG_ERROR_T MsgStoCleanAbnormalMmsData()
319 int rowCnt = 0, index = 2; // numbers of index
321 MSG_MESSAGE_ID_T msgId;
323 char sqlQuery[MAX_QUERY_LEN+1];
324 char filePath[MSG_FILEPATH_LEN_MAX];
326 memset(sqlQuery, 0x00, sizeof(sqlQuery));
328 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT A.MSG_ID, A.FILE_PATH FROM %s A, %s B WHERE A.MSG_ID = B.MSG_ID AND (B.SUB_TYPE = %d OR B.SUB_TYPE = %d OR B.SUB_TYPE = %d);",
329 MMS_PLUGIN_MESSAGE_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME, MSG_SENDCONF_MMS, MSG_RETRIEVE_AUTOCONF_MMS, MSG_RETRIEVE_MANUALCONF_MMS);
331 MSG_ERROR_T err = dbHandle.getTable(sqlQuery, &rowCnt);
333 if (err == MSG_ERR_DB_NORECORD)
335 dbHandle.freeTable();
339 else if (err != MSG_SUCCESS)
341 MSG_DEBUG("%s", sqlQuery);
343 dbHandle.freeTable();
349 for (int i = 0; i < rowCnt; i++)
351 memset(filePath, 0x00, sizeof(filePath));
353 msgId = dbHandle.getColumnToInt(index++);
355 dbHandle.getColumnToString(index++, MSG_FILEPATH_LEN_MAX, filePath);
357 if(strlen(filePath) > 1)
359 MSG_DEBUG("strlen(filePath) [%d]", strlen(filePath));
360 MSG_DEBUG("filePath [%s]", filePath);
361 if(MsgGetFileSize(filePath) < 0)
363 // abnormal mms message
364 MSG_DEBUG("abnormal mms message [%d]", msgId);
366 // delete mms message
367 MsgStoDeleteMessage(msgId, false);
372 dbHandle.freeTable();
379 MSG_ERROR_T MsgStoCheckReadReportStatus(MSG_MESSAGE_ID_T msgId)
383 bool bReadReportRequested;
384 bool bReadReportIsSent;
386 bReadReportRequested = MsgStoCheckReadReportRequested(&dbHandle, msgId);
387 if(bReadReportRequested == false)
388 return MSG_ERR_READREPORT_NOT_REQUESTED;
390 bReadReportIsSent = MsgStoCheckReadReportIsSent(&dbHandle, msgId);
391 if(bReadReportIsSent == true)
392 return MSG_ERR_READREPORT_ALEADY_SENT;