modify msg-service to support dpm feature
[platform/core/messaging/msg-service.git] / utils / MsgUtilStorage.cpp
index 735bb28..aaf1613 100755 (executable)
@@ -85,10 +85,10 @@ unsigned int MsgStoAddMessageTable(MsgDbHandler *pDbHandle, const MSG_MESSAGE_IN
        char sqlQuery[MAX_QUERY_LEN+1];
 
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
-       snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, %d, %d, %d, %d, %d, %u, %d, %d, %d, %d, %d, %d, %d, %d, ?, '', '', ?, 0, %d, '%s');",
+       snprintf(sqlQuery, sizeof(sqlQuery), "INSERT INTO %s VALUES (%d, %d, %d, %d, %d, %d, %u, %d, %d, %d, %d, %d, %d, %d, %d, ?, '', '', ?, 0, %d, '%s', %d);",
                        MSGFW_MESSAGE_TABLE_NAME, msgId, pMsgInfo->threadId, pMsgInfo->folderId, pMsgInfo->storageId, pMsgInfo->msgType.mainType,
                        pMsgInfo->msgType.subType, (unsigned int)pMsgInfo->displayTime, pMsgInfo->dataSize, pMsgInfo->networkStatus, pMsgInfo->bRead, pMsgInfo->bProtected,
-                       pMsgInfo->priority, pMsgInfo->direction, 0, pMsgInfo->bBackup, pMsgInfo->sim_idx, imsi);
+                       pMsgInfo->priority, pMsgInfo->direction, 0, pMsgInfo->bBackup, pMsgInfo->sim_idx, imsi, pMsgInfo->bRestricted);
 
        MSG_DEBUG("QUERY : %s", sqlQuery);
 
@@ -686,7 +686,7 @@ msg_error_t MsgStoUpdateConversation(MsgDbHandler *pDbHandle, msg_thread_id_t co
                snprintf(sqlQuery, sizeof(sqlQuery),
                                "SELECT MAIN_TYPE, SUB_TYPE, MSG_DIRECTION, DISPLAY_TIME, LENGTH(SUBJECT), SUBJECT, MSG_TEXT "
                                "FROM %s "
-                               "WHERE CONV_ID = %d AND FOLDER_ID > %d AND FOLDER_ID < %d AND STORAGE_ID = %d AND SCHEDULED_TIME = 0 ORDER BY DISPLAY_TIME DESC;",
+                               "WHERE CONV_ID = %d AND FOLDER_ID > %d AND FOLDER_ID < %d AND STORAGE_ID = %d AND DPM_RESTRICTED = 0 AND SCHEDULED_TIME = 0 ORDER BY DISPLAY_TIME DESC;",
                                MSGFW_MESSAGE_TABLE_NAME,
                                convId, MSG_ALLBOX_ID, MSG_SPAMBOX_ID, MSG_STORAGE_PHONE);
 
@@ -697,7 +697,31 @@ msg_error_t MsgStoUpdateConversation(MsgDbHandler *pDbHandle, msg_thread_id_t co
                }
 
                err = pDbHandle->stepQuery();
-               if (err != MSG_ERR_DB_ROW) {
+               if (err == MSG_ERR_DB_DONE) {
+                       pDbHandle->finalizeQuery();
+
+                       memset(sqlQuery, 0x00, MAX_QUERY_LEN);
+                       snprintf(sqlQuery, sizeof(sqlQuery),
+                                       "SELECT MAIN_TYPE, SUB_TYPE, MSG_DIRECTION, DISPLAY_TIME, 0, '', '' "
+                                       "FROM %s "
+                                       "WHERE CONV_ID = %d AND FOLDER_ID > %d AND FOLDER_ID < %d AND STORAGE_ID = %d AND SCHEDULED_TIME = 0 ORDER BY DISPLAY_TIME DESC;",
+                                       MSGFW_MESSAGE_TABLE_NAME,
+                                       convId, MSG_ALLBOX_ID, MSG_SPAMBOX_ID, MSG_STORAGE_PHONE);
+
+                       err = pDbHandle->prepareQuery(sqlQuery);
+                       if (err != MSG_SUCCESS) {
+                               MSG_DEBUG("Fail to prepareQuery().");
+                               return err;
+                       }
+
+                       err = pDbHandle->stepQuery();
+                       if (err != MSG_ERR_DB_ROW) {
+                               MSG_DEBUG("Fail to stepQuery().");
+                               pDbHandle->finalizeQuery();
+                               return err;
+                       }
+
+               } else if (err != MSG_ERR_DB_ROW) {
                        MSG_DEBUG("Fail to stepQuery().");
                        pDbHandle->finalizeQuery();
                        return err;
@@ -722,7 +746,7 @@ msg_error_t MsgStoUpdateConversation(MsgDbHandler *pDbHandle, msg_thread_id_t co
                tmpSize = strlen(sqlQuery);
 #ifdef MSG_NOTI_INTEGRATION
                snprintf(sqlQuery+tmpSize, MAX_QUERY_LEN-tmpSize,
-                               "UNREAD_CNT = (SELECT COUNT(MSG_ID) FROM %s WHERE CONV_ID = %d AND (FOLDER_ID = %d OR FOLDER_ID = %d) AND STORAGE_ID = %d AND READ_STATUS = 0), ",
+                               "UNREAD_CNT = (SELECT COUNT(MSG_ID) FROM %s WHERE CONV_ID = %d AND (FOLDER_ID = %d OR FOLDER_ID = %d) AND STORAGE_ID = %d AND READ_STATUS = 0 AND DPM_RESTRICTED = 0), ",
                                MSGFW_MESSAGE_TABLE_NAME, convId, MSG_INBOX_ID, MSG_CBMSGBOX_ID, MSG_STORAGE_PHONE);
 #else
                snprintf(sqlQuery+tmpSize, MAX_QUERY_LEN-tmpSize,
@@ -1834,7 +1858,7 @@ msg_error_t MsgStoGetConversationViewItem(msg_message_id_t msgId, MSG_CONVERSATI
 
        snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID, CONV_ID, FOLDER_ID, STORAGE_ID, MAIN_TYPE, SUB_TYPE, \
                        DISPLAY_TIME, DATA_SIZE, NETWORK_STATUS, READ_STATUS, PROTECTED, \
-                       MSG_DIRECTION, SCHEDULED_TIME, SUBJECT, MSG_TEXT, ATTACHMENT_COUNT, SIM_INDEX\
+                       MSG_DIRECTION, DPM_RESTRICTED, SCHEDULED_TIME, SUBJECT, MSG_TEXT, ATTACHMENT_COUNT, SIM_INDEX\
                        FROM %s WHERE MSG_ID = %d;",
                        MSGFW_MESSAGE_TABLE_NAME, msgId);
 
@@ -1864,6 +1888,7 @@ msg_error_t MsgStoGetConversationViewItem(msg_message_id_t msgId, MSG_CONVERSATI
        pConv->bRead = dbHandle->getColumnToInt(index++);
        pConv->bProtected = dbHandle->getColumnToInt(index++);
        pConv->direction = dbHandle->getColumnToInt(index++);
+       pConv->bRestricted = dbHandle->getColumnToInt(index++);
        pConv->scheduledTime = (time_t)dbHandle->getColumnToInt(index++);
 
        dbHandle->getColumnToString(index++, MAX_SUBJECT_LEN, pConv->subject);
@@ -1872,6 +1897,12 @@ msg_error_t MsgStoGetConversationViewItem(msg_message_id_t msgId, MSG_CONVERSATI
        /*It does Not need to Get attach count in MSG_MESSAGE_TABLE. see MsgStoGetConversationPreview */
        /*pConv->attachCount = dbHandle->getColumnToInt(index++); */
        index++;
+       if (pConv->bRestricted == true) {
+               pConv->textSize = 0;
+               memset(pConv->subject, 0x00, sizeof(pConv->subject));
+               tmpText[0] = '\0';
+       }
+
        pConv->simIndex = dbHandle->getColumnToInt(index++);
 
        dbHandle->freeTable();
@@ -1930,13 +1961,13 @@ msg_error_t MsgStoGetConversationViewList(msg_thread_id_t threadId, msg_struct_l
 #ifdef MSG_NOTI_INTEGRATION
        snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID, CONV_ID, FOLDER_ID, STORAGE_ID, MAIN_TYPE, SUB_TYPE, \
                        DISPLAY_TIME, DATA_SIZE, NETWORK_STATUS, READ_STATUS, PROTECTED, \
-                       MSG_DIRECTION, SCHEDULED_TIME, SUBJECT, MSG_TEXT, ATTACHMENT_COUNT, SIM_INDEX  \
+                       MSG_DIRECTION, DPM_RESTRICTED, SCHEDULED_TIME, SUBJECT, MSG_TEXT, ATTACHMENT_COUNT, SIM_INDEX  \
                        FROM %s WHERE CONV_ID = %d AND FOLDER_ID > %d AND FOLDER_ID < %d AND STORAGE_ID = %d ORDER BY DISPLAY_TIME, MSG_ID ASC;",
                        MSGFW_MESSAGE_TABLE_NAME, threadId, MSG_ALLBOX_ID, MSG_SPAMBOX_ID, MSG_STORAGE_PHONE);
 #else
        snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID, CONV_ID, FOLDER_ID, STORAGE_ID, MAIN_TYPE, SUB_TYPE, \
                        DISPLAY_TIME, DATA_SIZE, NETWORK_STATUS, READ_STATUS, PROTECTED, \
-                       MSG_DIRECTION, SCHEDULED_TIME, SUBJECT, MSG_TEXT, ATTACHMENT_COUNT \
+                       MSG_DIRECTION, DPM_RESTRICTED, SCHEDULED_TIME, SUBJECT, MSG_TEXT, ATTACHMENT_COUNT \
                        FROM %s WHERE CONV_ID = %d AND FOLDER_ID > %d AND FOLDER_ID < %d AND STORAGE_ID = %d ORDER BY DISPLAY_TIME, MSG_ID ASC;",
                        MSGFW_MESSAGE_TABLE_NAME, threadId, MSG_ALLBOX_ID, MSG_CBMSGBOX_ID, MSG_STORAGE_PHONE);
 #endif
@@ -1989,6 +2020,7 @@ msg_error_t MsgStoGetConversationViewList(msg_thread_id_t threadId, msg_struct_l
                pTmp->bRead = dbHandle->getColumnToInt(index++);
                pTmp->bProtected = dbHandle->getColumnToInt(index++);
                pTmp->direction = dbHandle->getColumnToInt(index++);
+               pTmp->bRestricted = dbHandle->getColumnToInt(index++);
                index++; /* This field is reserved. */
 
                dbHandle->getColumnToString(index++, MAX_SUBJECT_LEN, pTmp->subject);
@@ -1997,6 +2029,12 @@ msg_error_t MsgStoGetConversationViewList(msg_thread_id_t threadId, msg_struct_l
                /*It does Not need to Get attach count in MSG_MESSAGE_TABLE. see MsgStoGetConversationPreview */
                /*pTmp->attachCount = dbHandle->getColumnToInt(index++); */
                index++;
+
+               if (pTmp->bRestricted == true) {
+                       pTmp->textSize = 0;
+                       memset(pTmp->subject, 0x00, sizeof(pTmp->subject));
+                       tmpText[i][0] = '\0';
+               }
                pTmp->simIndex = dbHandle->getColumnToInt(index++);
        }
        dbHandle->freeTable();
@@ -2356,25 +2394,29 @@ msg_error_t MsgStoGetMessageList(const MSG_LIST_CONDITION_S *pListCond, msg_stru
 
        if (pListCond->pTextVal != NULL && multipartCnt > 0) {
                memset(sqlQuerySubset, 0x00, sizeof(sqlQuerySubset));
-               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "FROM %s C, %s B, %s A WHERE A.CONV_ID > 0 AND A.CONV_ID = B.CONV_ID AND ",
+               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "FROM %s C, %s B, %s A WHERE A.CONV_ID > 0 AND A.CONV_ID = B.CONV_ID ",
                        MSGFW_MMS_MULTIPART_TABLE_NAME, MSGFW_ADDRESS_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
        } else {
                memset(sqlQuerySubset, 0x00, sizeof(sqlQuerySubset));
-               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset),        "FROM %s B, %s A WHERE A.CONV_ID > 0 AND A.CONV_ID = B.CONV_ID AND ",
+               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset),        "FROM %s B, %s A WHERE A.CONV_ID > 0 AND A.CONV_ID = B.CONV_ID ",
                MSGFW_ADDRESS_TABLE_NAME, MSGFW_MESSAGE_TABLE_NAME);
        }
 
        strncat(sqlQuery, sqlQuerySubset, MAX_QUERY_LEN-strlen(sqlQuery));
 
+       memset(sqlQuerySubset, 0x00, sizeof(sqlQuerySubset));
+       snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "AND A.DPM_RESTRICTED = 0 ");
+       strncat(sqlQuery, sqlQuerySubset, MAX_QUERY_LEN-strlen(sqlQuery));
+
        /* folder */
        memset(sqlQuerySubset, 0x00, sizeof(sqlQuerySubset));
 
        if (pListCond->folderId == MSG_ALLBOX_ID)
-               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "A.FOLDER_ID > 0 AND A.FOLDER_ID < %d ", MSG_SPAMBOX_ID);
+               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "AND A.FOLDER_ID > 0 AND A.FOLDER_ID < %d ", MSG_SPAMBOX_ID);
        else if (pListCond->folderId == MSG_IOSBOX_ID)
-               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "A.FOLDER_ID > 0 AND A.FOLDER_ID < %d ", MSG_DRAFT_ID);
+               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "AND A.FOLDER_ID > 0 AND A.FOLDER_ID < %d ", MSG_DRAFT_ID);
        else
-               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "A.FOLDER_ID = %d ", pListCond->folderId);
+               snprintf(sqlQuerySubset, sizeof(sqlQuerySubset), "AND A.FOLDER_ID = %d ", pListCond->folderId);
 
        strncat(sqlQuery, sqlQuerySubset, MAX_QUERY_LEN-strlen(sqlQuery));
 
@@ -2803,7 +2845,7 @@ msg_error_t MsgStoGetMediaList(const msg_thread_id_t threadId, msg_list_handle_t
        int msgIdCnt = 0;
 
        memset(sqlQuery, 0x00, sizeof(sqlQuery));
-       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID FROM %s WHERE MAIN_TYPE = %d AND CONV_ID = %d;",
+       snprintf(sqlQuery, sizeof(sqlQuery), "SELECT MSG_ID FROM %s WHERE MAIN_TYPE = %d AND DPM_RESTRICTED = 0 AND CONV_ID = %d;",
                        MSGFW_MESSAGE_TABLE_NAME, MSG_MMS_TYPE, threadId);
 
        MSG_DEBUG("sqlQuery = [%s]", sqlQuery);