Modify filter related operations.
authorKeeBum Kim <keebum.kim@samsung.com>
Mon, 27 Aug 2012 08:25:45 +0000 (17:25 +0900)
committerKeeBum Kim <keebum.kim@samsung.com>
Mon, 27 Aug 2012 08:25:45 +0000 (17:25 +0900)
framework/main.cpp
framework/storage-handler/MsgStorageFilter.cpp
include/mapi/msg_types.h
utils/MsgSpamFilter.cpp

index 0fd8b76..7e8f619 100755 (executable)
@@ -22,7 +22,6 @@
 #include "MsgContact.h"
 #include "MsgMemory.h"
 #include "MsgGconfWrapper.h"
-#include "MsgSpamFilter.h"
 #include "MsgPluginManager.h"
 #include "MsgSettingHandler.h"
 #include "MsgStorageHandler.h"
index 4e15eec..ac18aa6 100755 (executable)
@@ -39,32 +39,8 @@ msg_error_t MsgStoCheckDuplicatedFilter(const MSG_FILTER_S *pFilter)
 
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
 
-       if (pFilter->filterType == MSG_FILTER_BY_ADDRESS) {
-               if (strlen(pFilter->filterValue) > VALID_ADDRESS_LEN) {
-                       char newNumber[VALID_ADDRESS_LEN+1];
-                       memset(newNumber, 0x00, sizeof(newNumber));
-
-                       int overLen = 0, i = 0;
-
-                       overLen = strlen(pFilter->filterValue) - VALID_ADDRESS_LEN;
-
-                       for (i = 0; i < VALID_ADDRESS_LEN; i++)
-                               newNumber[i] = pFilter->filterValue[i+overLen];
-
-                       newNumber[i] = '\0';
-
-                       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s \
-                                       WHERE FILTER_TYPE = %d AND FILTER_VALUE LIKE '%%%s';",
-                                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, newNumber);
-               } else {
-                       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s \
-                                       WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';",
-                                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, pFilter->filterValue);
-               }
-       } else {
-               snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_VALUE FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE like '%s';",
-                               MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_SUBJECT, pFilter->filterValue);
-       }
+       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';",
+                       MSGFW_FILTER_TABLE_NAME, pFilter->filterType, pFilter->filterValue);
 
        MSG_DEBUG("sql : %s", sqlQuery);
 
@@ -78,6 +54,7 @@ msg_error_t MsgStoCheckDuplicatedFilter(const MSG_FILTER_S *pFilter)
        dbHandle.freeTable();
 
        MSG_END();
+
        return err;
 }
 
@@ -181,8 +158,7 @@ msg_error_t MsgStoDeleteFilter(msg_filter_id_t filterId)
 
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
 
-       snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE FILTER_ID = %d;",
-                       MSGFW_FILTER_TABLE_NAME, filterId);
+       snprintf(sqlQuery, sizeof(sqlQuery), "DELETE FROM %s WHERE FILTER_ID = %d;", MSGFW_FILTER_TABLE_NAME, filterId);
 
        // Delete Filter
        if (dbHandle.execQuery(sqlQuery) != MSG_SUCCESS) {
@@ -214,8 +190,7 @@ msg_error_t MsgStoGetFilterList(msg_struct_list_s *pFilterList)
        // Get filters from DB
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
 
-       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID, FILTER_TYPE, FILTER_VALUE FROM %s;",
-                       MSGFW_FILTER_TABLE_NAME);
+       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID, FILTER_TYPE, FILTER_VALUE FROM %s;", MSGFW_FILTER_TABLE_NAME);
 
        msg_error_t err = MSG_SUCCESS;
 
index 4afa307..d2286d2 100755 (executable)
@@ -980,8 +980,10 @@ enum _MSG_READ_REPORT_STATUS_E
  */
 enum _MSG_FILTER_TYPE_E
 {
-       MSG_FILTER_BY_ADDRESS = 0,                      /**< Filtered by where the message is come */
-       MSG_FILTER_BY_SUBJECT,                          /**< Filtered by sub string in the subject */
+       MSG_FILTER_BY_WORD = 0,                 /**< Filtered by sub string in the text */
+       MSG_FILTER_BY_ADDRESS_SAME,                     /**< Filtered by address exactly same as */
+       MSG_FILTER_BY_ADDRESS_START,                    /**< Filtered by address start with */
+       MSG_FILTER_BY_ADDRESS_INCLUDE,                  /**< Filtered by address include */
 };
 
 
index 0b05523..554e00e 100755 (executable)
@@ -50,19 +50,6 @@ msg_error_t MsgGetFilterOperation(bool *pSetFlag)
 }
 
 
-void GetValidNumber(const char *pSrcNum, char *pDestNum)
-{
-       int overLen = 0, i = 0;
-
-       overLen = strlen(pSrcNum) - VALID_ADDRESS_LEN;
-
-       for (i = 0; i < VALID_ADDRESS_LEN; i++)
-               pDestNum[i] = pSrcNum[i+overLen];
-
-       pDestNum[i] = '\0';
-}
-
-
 bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo)
 {
        MSG_BEGIN();
@@ -70,28 +57,6 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo)
        msg_error_t err = MSG_SUCCESS;
 
        // =======================================================================
-       // Check Block List of Call-log (Auto Reject)
-       // =======================================================================
-       int ret = 0;
-
-       MSG_DEBUG("bAutoReject = [%d], bUnknownAutoReject = [%d]", MsgSettingGetAutoReject(), MsgSettingGetUnknownAutoReject());
-
-       if (MsgSettingGetAutoReject()) {
-               char checkNumber[MAX_ADDRESS_VAL_LEN+1] = {0,};
-               snprintf(checkNumber, MAX_ADDRESS_VAL_LEN, "%s", pMsgInfo->addressList[0].addressVal);
-
-               if (checkNumber[0] == '\0') {
-                       if (MsgSettingGetUnknownAutoReject())
-                               return true;
-               }
-
-               if (ret > 0) {
-                       MSG_DEBUG("Message is Rejected by auto-reject option.");
-                       return true;
-               }
-       }
-
-       // =======================================================================
        // Check Filter Operation
        // =======================================================================
        bool filterFlag = false;
@@ -110,23 +75,16 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo)
 
        MSG_DEBUG("pMsg->addressList[0].addressVal [%s]", pMsgInfo->addressList[0].addressVal);
 
-       char newNumber[VALID_ADDRESS_LEN+1];
        char sqlQuery[MAX_QUERY_LEN+1];
 
-       if (strlen(pMsgInfo->addressList[0].addressVal) > VALID_ADDRESS_LEN) {
-               memset(newNumber, 0x00, sizeof(newNumber));
-               memset(sqlQuery, 0x00, sizeof(sqlQuery));
-
-               GetValidNumber(pMsgInfo->addressList[0].addressVal, newNumber);
+       memset(sqlQuery, 0x00, sizeof(sqlQuery));
 
-               snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE LIKE '%%%s';",
-                               MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, newNumber);
-       } else {
-               memset(sqlQuery, 0x00, sizeof(sqlQuery));
-
-               snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND FILTER_VALUE = '%s';",
-                               MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS, pMsgInfo->addressList[0].addressVal);
-       }
+       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND '%s' = FILTER_VALUE \
+                       UNION SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND '%s' LIKE SUBSTR(FILTER_VALUE,1)||'%%' \
+                       UNION SELECT FILTER_ID FROM %s WHERE FILTER_TYPE = %d AND '%s' LIKE '%%'||SUBSTR(FILTER_VALUE,1)||'%%';",
+                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS_SAME, pMsgInfo->addressList[0].addressVal,
+                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS_START, pMsgInfo->addressList[0].addressVal,
+                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_ADDRESS_INCLUDE, pMsgInfo->addressList[0].addressVal);
 
        err = pDbHandle->getTable(sqlQuery, &rowCnt);
 
@@ -141,6 +99,8 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo)
        } else {
                MSG_DEBUG("Msg is NOT Filtered by Address : [%s]", pMsgInfo->addressList[0].addressVal);
 
+               MSG_DEBUG("sqlQuery [%s]", sqlQuery);
+
                pDbHandle->freeTable();
        }
 
@@ -151,7 +111,7 @@ bool MsgCheckFilter(MsgDbHandler *pDbHandle, MSG_MESSAGE_INFO_S *pMsgInfo)
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
 
        snprintf(sqlQuery, sizeof(sqlQuery), "SELECT FILTER_VALUE FROM %s WHERE FILTER_TYPE = %d;",
-                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_SUBJECT);
+                       MSGFW_FILTER_TABLE_NAME, MSG_FILTER_BY_WORD);
 
        rowCnt = 0;