2 * Copyright 2012-2013 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://floralicense.org/license/
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
22 #include "MsgCppTypes.h"
23 #include "MsgUtilFile.h"
24 #include "MsgContact.h"
25 #include "MsgSoundPlayer.h"
26 #include "MsgGconfWrapper.h"
27 #include "MsgSqliteWrapper.h"
28 #include "MsgPluginManager.h"
29 #include "MsgUtilStorage.h"
30 #include "MsgStorageHandler.h"
32 /*==================================================================================================
34 ==================================================================================================*/
35 extern MsgDbHandler dbHandle;
38 /*==================================================================================================
39 FUNCTION IMPLEMENTATION
40 ==================================================================================================*/
41 msg_error_t MsgMakeSortRule(const MSG_SORT_RULE_S *pSortRule, char *pSqlSort)
46 memset(sql, 0x00, sizeof(sql));
47 memset(order, 0x00, sizeof(order));
49 if (pSortRule->bAscending == true)
50 strncpy(order, "ASC", 5);
52 strncpy(order, "DESC", 5);
54 int nameOrder = MsgGetContactNameOrder();
56 switch (pSortRule->sortType)
58 case MSG_SORT_BY_DISPLAY_FROM :
60 snprintf(sql, sizeof(sql), "ORDER BY B.FIRST_NAME %s, B.LAST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
62 snprintf(sql, sizeof(sql), "ORDER BY B.LAST_NAME %s, B.FIRST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
64 case MSG_SORT_BY_DISPLAY_TO :
66 snprintf(sql, sizeof(sql), "ORDER BY B.FIRST_NAME %s, B.LAST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
68 snprintf(sql, sizeof(sql), "ORDER BY B.LAST_NAME %s, B.FIRST_NAME %s, B.ADDRESS_VAL, A.DISPLAY_TIME DESC;", order, order);
70 case MSG_SORT_BY_DISPLAY_TIME :
71 snprintf(sql, sizeof(sql), "ORDER BY DISPLAY_TIME %s;", order);
73 case MSG_SORT_BY_MSG_TYPE :
74 snprintf(sql, sizeof(sql), "ORDER BY MAIN_TYPE %s, DISPLAY_TIME DESC;", order);
76 case MSG_SORT_BY_READ_STATUS :
77 snprintf(sql, sizeof(sql), "ORDER BY READ_STATUS %s, DISPLAY_TIME DESC;", order);
79 case MSG_SORT_BY_STORAGE_TYPE :
80 snprintf(sql, sizeof(sql), "ORDER BY A.STORAGE_ID %s, A.DISPLAY_TIME DESC;", order);
82 case MSG_SORT_BY_THREAD_NAME :
84 snprintf(sql, sizeof(sql), "ORDER BY FIRST_NAME %s, LAST_NAME %s;", order, order);
86 snprintf(sql, sizeof(sql), "ORDER BY LAST_NAME %s, FIRST_NAME %s;", order, order);
88 case MSG_SORT_BY_THREAD_DATE :
89 snprintf(sql, sizeof(sql), "ORDER BY MSG_TIME %s;", order);
91 case MSG_SORT_BY_THREAD_COUNT :
92 snprintf(sql, sizeof(sql), "ORDER BY UNREAD_CNT %s;", order);
95 snprintf(sql, sizeof(sql), "ORDER BY A.DISPLAY_TIME %s;", order);
99 memcpy(pSqlSort, sql, strlen(sql));
105 msg_error_t MsgStoGetSmsSendOpt(msg_message_id_t msgId, MSG_SENDINGOPT_INFO_S* pSendOpt)
107 char sqlQuery[MAX_QUERY_LEN+1];
109 memset(sqlQuery, 0x00, sizeof(sqlQuery));
111 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT DELREP_REQ, KEEP_COPY, REPLY_PATH FROM %s WHERE MSG_ID = %d;",
112 MSGFW_SMS_SENDOPT_TABLE_NAME, msgId);
114 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
115 return MSG_ERR_DB_PREPARE;
117 if (dbHandle.stepQuery() == MSG_ERR_DB_ROW) {
118 pSendOpt->bSetting = true;
119 pSendOpt->bDeliverReq = (bool)dbHandle.columnInt(0);
120 pSendOpt->bKeepCopy = (bool)dbHandle.columnInt(1);
121 pSendOpt->option.smsSendOptInfo.bReplyPath = (bool)dbHandle.columnInt(2);
123 dbHandle.finalizeQuery();
124 return MSG_ERR_DB_STEP;
127 dbHandle.finalizeQuery();
133 msg_error_t MsgStoGetMmsSendOpt(msg_message_id_t msgId, MSG_SENDINGOPT_INFO_S* pSendOpt)
135 char sqlQuery[MAX_QUERY_LEN+1];
137 memset(sqlQuery, 0x00, sizeof(sqlQuery));
139 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT ASK_DELIVERY_REPORT, KEEP_COPY, ASK_READ_REPLY, EXPIRY_TIME, PRIORITY FROM %s WHERE MSG_ID = %d;",
140 MMS_PLUGIN_MESSAGE_TABLE_NAME, msgId);
142 if (dbHandle.prepareQuery(sqlQuery) != MSG_SUCCESS)
143 return MSG_ERR_DB_PREPARE;
145 if (dbHandle.stepQuery() == MSG_ERR_DB_ROW) {
146 pSendOpt->bSetting = true;
147 pSendOpt->bDeliverReq = (bool)dbHandle.columnInt(0);
148 pSendOpt->bKeepCopy = (bool)dbHandle.columnInt(1);
149 pSendOpt->option.mmsSendOptInfo.bReadReq = (bool)dbHandle.columnInt(2);
150 pSendOpt->option.mmsSendOptInfo.expiryTime.time = (unsigned int)dbHandle.columnInt(3);
151 pSendOpt->option.mmsSendOptInfo.priority = (msg_priority_type_t)dbHandle.columnInt(4);
153 dbHandle.finalizeQuery();
154 return MSG_ERR_DB_STEP;
157 dbHandle.finalizeQuery();
162 bool MsgStoCheckSyncMLMsgInThread(msg_thread_id_t threadId)
164 msg_error_t err = MSG_SUCCESS;
166 bool isSyncMLMsg = false;
168 char sqlQuery[MAX_QUERY_LEN+1];
170 memset(sqlQuery, 0x00, sizeof(sqlQuery));
172 snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID FROM %s WHERE SUB_TYPE = %d AND CONV_ID = %d;",
173 MSGFW_MESSAGE_TABLE_NAME, MSG_SYNCML_CP, threadId);
175 MSG_DEBUG("sqlQuery [%s]", sqlQuery);
177 err = dbHandle.getTable(sqlQuery, &rowCnt);
179 if (rowCnt > 0) isSyncMLMsg = true;
181 MSG_DEBUG("rowCnt [%d]", rowCnt);
183 dbHandle.freeTable();
189 msg_error_t MsgStoResetNetworkStatus()
193 char sqlQuery[MAX_QUERY_LEN+1];
195 memset(sqlQuery, 0x00, sizeof(sqlQuery));
197 snprintf(sqlQuery, sizeof(sqlQuery),
198 "UPDATE %s SET NETWORK_STATUS = %d WHERE NETWORK_STATUS = %d; UPDATE %s SET NETWORK_STATUS = %d WHERE NETWORK_STATUS = %d;",
199 MSGFW_MESSAGE_TABLE_NAME, MSG_NETWORK_SEND_FAIL, MSG_NETWORK_SENDING,
200 MSGFW_MESSAGE_TABLE_NAME, MSG_NETWORK_RETRIEVE_FAIL, MSG_NETWORK_RETRIEVING);
202 if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS)
203 return MSG_ERR_DB_EXEC;
211 msg_error_t MsgStoCleanAbnormalMmsData()
215 int rowCnt = 0, index = 2; // numbers of index
217 msg_message_id_t msgId;
219 char sqlQuery[MAX_QUERY_LEN+1];
220 char filePath[MSG_FILEPATH_LEN_MAX];
222 memset(sqlQuery, 0x00, sizeof(sqlQuery));
224 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);",
225 MMS_PLUGIN_MESSAGE_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME, MSG_SENDCONF_MMS, MSG_RETRIEVE_AUTOCONF_MMS, MSG_RETRIEVE_MANUALCONF_MMS);
227 msg_error_t err = dbHandle.getTable(sqlQuery, &rowCnt);
229 if (err == MSG_ERR_DB_NORECORD) {
230 dbHandle.freeTable();
232 } else if (err != MSG_SUCCESS) {
233 MSG_DEBUG("%s", sqlQuery);
234 dbHandle.freeTable();
239 for (int i = 0; i < rowCnt; i++)
241 memset(filePath, 0x00, sizeof(filePath));
243 msgId = dbHandle.getColumnToInt(index++);
245 dbHandle.getColumnToString(index++, MSG_FILEPATH_LEN_MAX, filePath);
247 if(strlen(filePath) > 1) {
248 MSG_DEBUG("strlen(filePath) [%d]", strlen(filePath));
249 MSG_DEBUG("filePath [%s]", filePath);
251 if(MsgGetFileSize(filePath) < 0) {
252 // abnormal mms message
253 MSG_DEBUG("abnormal mms message [%d]", msgId);
255 // delete mms message
256 MsgStoDeleteMessage(msgId, false);
261 dbHandle.freeTable();
268 msg_error_t MsgStoCheckReadReportStatus(msg_message_id_t msgId)
272 bool bReadReportRequested;
273 bool bReadReportIsSent;
275 bReadReportRequested = MsgStoCheckReadReportRequested(&dbHandle, msgId);
276 if(bReadReportRequested == false)
277 return MSG_ERR_READREPORT_NOT_REQUESTED;
279 bReadReportIsSent = MsgStoCheckReadReportIsSent(&dbHandle, msgId);
280 if(bReadReportIsSent == true)
281 return MSG_ERR_READREPORT_ALEADY_SENT;