diff options
| author | Marko Minkkinen <marko.minkkinen@digia.com> | 2010-04-08 19:19:16 +0300 |
|---|---|---|
| committer | Don Sanders <don.sanders@nokia.com> | 2010-04-09 12:54:38 +1000 |
| commit | 30bc1b9abbc30addfe75c66ac8e24d64a56ddbbc (patch) | |
| tree | 3305ba002dde3540c26accc2f4ab6bf9a15aafbd /src/messaging/maemohelpers.cpp | |
| parent | d16c3888d5c2e1bce02020ea890f5626f760a6c2 (diff) | |
Nested filter support + couple of filtering fixes
Fixes: MOBILITY-789
Diffstat (limited to 'src/messaging/maemohelpers.cpp')
| -rw-r--r-- | src/messaging/maemohelpers.cpp | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/src/messaging/maemohelpers.cpp b/src/messaging/maemohelpers.cpp index 5e6ca6fa56..86ad8b260e 100644 --- a/src/messaging/maemohelpers.cpp +++ b/src/messaging/maemohelpers.cpp @@ -269,4 +269,239 @@ void MessagingHelper::applyOffsetAndLimitToMessageIdList(QMessageIdList& message } } +void MessagingHelper::handleNestedFiltersFromFolderFilter(QMessageFolderFilter &filter) +{ + QMessageStore* store = QMessageStore::instance(); + + QMessageFolderFilterPrivate* pMFFilter = QMessageFolderFilterPrivate::implementation(filter); + if (pMFFilter->_filterList.count() > 0) { + int filterListCount = pMFFilter->_filterList.count(); + for (int i=0; i < filterListCount; i++) { + for (int j=0; j < pMFFilter->_filterList[i].count(); j++) { + QMessageFolderFilterPrivate* pMFFilter2 = QMessageFolderFilterPrivate::implementation(pMFFilter->_filterList[i][j]); + if (pMFFilter2->_field == QMessageFolderFilterPrivate::ParentAccountIdFilter) { + QMessageAccountIdList accountIds = store->queryAccounts(*pMFFilter2->_accountFilter, QMessageAccountSortOrder(), 0, 0); + QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pMFFilter2->_comparatorValue)); + if (accountIds.count() > 0) { + pMFFilter->_filterList[i].removeAt(j); + if (cmp == QMessageDataComparator::Includes) { + for (int x = 0; x < accountIds.count(); x++) { + if (x == 0) { + if (x+1 < accountIds.count()) { + pMFFilter->_filterList.append(pMFFilter->_filterList[i]); + } + pMFFilter->_filterList[i].append(QMessageFolderFilter::byParentAccountId(accountIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFolderFilterPrivate::lessThan); + } else { + if (x+1 < accountIds.count()) { + pMFFilter->_filterList.append(pMFFilter->_filterList[pMFFilter->_filterList.count()-1]); + pMFFilter->_filterList[pMFFilter->_filterList.count()-2].append(QMessageFolderFilter::byParentAccountId(accountIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[pMFFilter->_filterList.count()-2].begin(), pMFFilter->_filterList[pMFFilter->_filterList.count()-2].end(), QMessageFolderFilterPrivate::lessThan); + } else { + pMFFilter->_filterList[pMFFilter->_filterList.count()-1].append(QMessageFolderFilter::byParentAccountId(accountIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[pMFFilter->_filterList.count()-1].begin(), pMFFilter->_filterList[pMFFilter->_filterList.count()-1].end(), QMessageFolderFilterPrivate::lessThan); + } + } + } + } else { // Excludes + for (int x = 0; x < accountIds.count(); x++) { + pMFFilter->_filterList[i].append(QMessageFolderFilter::byParentAccountId(accountIds[x],QMessageDataComparator::NotEqual)); + } + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFolderFilterPrivate::lessThan); + } + } else { + delete pMFFilter2->_accountFilter; + pMFFilter2->_accountFilter = 0; + pMFFilter2->_field = QMessageFolderFilterPrivate::Id; + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFolderFilterPrivate::lessThan); + } + } else { + break; + } + } + } + } else { + if (pMFFilter->_field == QMessageFolderFilterPrivate::ParentAccountIdFilter) { + QMessageAccountIdList accountIds = store->queryAccounts(*pMFFilter->_accountFilter, QMessageAccountSortOrder(), 0, 0); + QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pMFFilter->_comparatorValue)); + if (accountIds.count() > 0) { + for (int i=0; i < accountIds.count(); i++) { + if (i == 0) { + delete pMFFilter->_accountFilter; + pMFFilter->_accountFilter = 0; + pMFFilter->_field = QMessageFolderFilterPrivate::ParentAccountId; + pMFFilter->_value = accountIds[0].toString(); + pMFFilter->_comparatorType = QMessageFolderFilterPrivate::Equality; + if (cmp == QMessageDataComparator::Includes) { + pMFFilter->_comparatorValue = static_cast<int>(QMessageDataComparator::Equal); + } else { // Excludes + pMFFilter->_comparatorValue = static_cast<int>(QMessageDataComparator::NotEqual); + } + } else { + if (cmp == QMessageDataComparator::Includes) { + filter |= QMessageFolderFilter::byParentAccountId(accountIds[i],QMessageDataComparator::Equal); + } else { // Excludes + filter &= QMessageFolderFilter::byParentAccountId(accountIds[i],QMessageDataComparator::NotEqual); + } + } + } + } else { + delete pMFFilter->_accountFilter; + pMFFilter->_accountFilter = 0; + pMFFilter->_field = QMessageFolderFilterPrivate::Id; + } + } + } +} + +void MessagingHelper::handleNestedFiltersFromMessageFilter(QMessageFilter &filter) +{ + QMessageStore* store = QMessageStore::instance(); + + QMessageFilterPrivate* pMFFilter = QMessageFilterPrivate::implementation(filter); + if (pMFFilter->_filterList.count() > 0) { + int filterListCount = pMFFilter->_filterList.count(); + for (int i=0; i < filterListCount; i++) { + for (int j=0; j < pMFFilter->_filterList[i].count(); j++) { + QMessageFilterPrivate* pMFFilter2 = QMessageFilterPrivate::implementation(pMFFilter->_filterList[i][j]); + if (pMFFilter2->_field == QMessageFilterPrivate::ParentAccountIdFilter) { + QMessageAccountIdList accountIds = store->queryAccounts(*pMFFilter2->_accountFilter, QMessageAccountSortOrder(), 0, 0); + QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pMFFilter2->_comparatorValue)); + if (accountIds.count() > 0) { + pMFFilter->_filterList[i].removeAt(j); + if (cmp == QMessageDataComparator::Includes) { + for (int x = 0; x < accountIds.count(); x++) { + if (x == 0) { + if (x+1 < accountIds.count()) { + pMFFilter->_filterList.append(pMFFilter->_filterList[i]); + } + pMFFilter->_filterList[i].append(QMessageFilter::byParentAccountId(accountIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFilterPrivate::lessThan); + } else { + if (x+1 < accountIds.count()) { + pMFFilter->_filterList.append(pMFFilter->_filterList[pMFFilter->_filterList.count()-1]); + pMFFilter->_filterList[pMFFilter->_filterList.count()-2].append(QMessageFilter::byParentAccountId(accountIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[pMFFilter->_filterList.count()-2].begin(), pMFFilter->_filterList[pMFFilter->_filterList.count()-2].end(), QMessageFilterPrivate::lessThan); + } else { + pMFFilter->_filterList[pMFFilter->_filterList.count()-1].append(QMessageFilter::byParentAccountId(accountIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[pMFFilter->_filterList.count()-1].begin(), pMFFilter->_filterList[pMFFilter->_filterList.count()-1].end(), QMessageFilterPrivate::lessThan); + } + } + } + } else { // Excludes + for (int x = 0; x < accountIds.count(); x++) { + pMFFilter->_filterList[i].append(QMessageFilter::byParentAccountId(accountIds[x],QMessageDataComparator::NotEqual)); + } + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFilterPrivate::lessThan); + } + } else { + delete pMFFilter2->_accountFilter; + pMFFilter2->_accountFilter = 0; + pMFFilter2->_field = QMessageFilterPrivate::Id; + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFilterPrivate::lessThan); + } + } else if (pMFFilter2->_field == QMessageFilterPrivate::ParentFolderIdFilter) { + QMessageFolderIdList folderIds = store->queryFolders(*pMFFilter2->_folderFilter, QMessageFolderSortOrder(), 0, 0); + QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pMFFilter2->_comparatorValue)); + if (folderIds.count() > 0) { + pMFFilter->_filterList[i].removeAt(j); + if (cmp == QMessageDataComparator::Includes) { + for (int x = 0; x < folderIds.count(); x++) { + if (x == 0) { + if (x+1 < folderIds.count()) { + pMFFilter->_filterList.append(pMFFilter->_filterList[i]); + } + pMFFilter->_filterList[i].append(QMessageFilter::byParentFolderId(folderIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFilterPrivate::lessThan); + } else { + if (x+1 < folderIds.count()) { + pMFFilter->_filterList.append(pMFFilter->_filterList[pMFFilter->_filterList.count()-1]); + pMFFilter->_filterList[pMFFilter->_filterList.count()-2].append(QMessageFilter::byParentFolderId(folderIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[pMFFilter->_filterList.count()-2].begin(), pMFFilter->_filterList[pMFFilter->_filterList.count()-2].end(), QMessageFilterPrivate::lessThan); + } else { + pMFFilter->_filterList[pMFFilter->_filterList.count()-1].append(QMessageFilter::byParentFolderId(folderIds[x],QMessageDataComparator::Equal)); + qSort(pMFFilter->_filterList[pMFFilter->_filterList.count()-1].begin(), pMFFilter->_filterList[pMFFilter->_filterList.count()-1].end(), QMessageFilterPrivate::lessThan); + } + } + } + } else { // Excludes + for (int x = 0; x < folderIds.count(); x++) { + pMFFilter->_filterList[i].append(QMessageFilter::byParentFolderId(folderIds[x],QMessageDataComparator::NotEqual)); + } + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFilterPrivate::lessThan); + } + } else { + delete pMFFilter2->_folderFilter; + pMFFilter2->_folderFilter = 0; + pMFFilter2->_field = QMessageFilterPrivate::Id; + qSort(pMFFilter->_filterList[i].begin(), pMFFilter->_filterList[i].end(), QMessageFilterPrivate::lessThan); + } + } else { + break; + } + } + } + } else { + if (pMFFilter->_field == QMessageFilterPrivate::ParentAccountIdFilter) { + QMessageAccountIdList accountIds = store->queryAccounts(*pMFFilter->_accountFilter, QMessageAccountSortOrder(), 0, 0); + QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pMFFilter->_comparatorValue)); + if (accountIds.count() > 0) { + for (int i=0; i < accountIds.count(); i++) { + if (i == 0) { + delete pMFFilter->_accountFilter; + pMFFilter->_accountFilter = 0; + pMFFilter->_field = QMessageFilterPrivate::ParentAccountId; + pMFFilter->_value = accountIds[0].toString(); + pMFFilter->_comparatorType = QMessageFilterPrivate::Equality; + if (cmp == QMessageDataComparator::Includes) { + pMFFilter->_comparatorValue = static_cast<int>(QMessageDataComparator::Equal); + } else { // Excludes + pMFFilter->_comparatorValue = static_cast<int>(QMessageDataComparator::NotEqual); + } + } else { + if (cmp == QMessageDataComparator::Includes) { + filter |= QMessageFilter::byParentAccountId(accountIds[i],QMessageDataComparator::Equal); + } else { // Excludes + filter &= QMessageFilter::byParentAccountId(accountIds[i],QMessageDataComparator::NotEqual); + } + } + } + } else { + delete pMFFilter->_accountFilter; + pMFFilter->_accountFilter = 0; + pMFFilter->_field = QMessageFilterPrivate::Id; + } + } else if (pMFFilter->_field == QMessageFilterPrivate::ParentFolderIdFilter) { + QMessageFolderIdList folderIds = store->queryFolders(*pMFFilter->_folderFilter, QMessageFolderSortOrder(), 0, 0); + QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(pMFFilter->_comparatorValue)); + if (folderIds.count() > 0) { + for (int i=0; i < folderIds.count(); i++) { + if (i == 0) { + delete pMFFilter->_folderFilter; + pMFFilter->_folderFilter = 0; + pMFFilter->_field = QMessageFilterPrivate::ParentFolderId; + pMFFilter->_value = folderIds[0].toString(); + pMFFilter->_comparatorType = QMessageFilterPrivate::Equality; + if (cmp == QMessageDataComparator::Includes) { + pMFFilter->_comparatorValue = static_cast<int>(QMessageDataComparator::Equal); + } else { // Excludes + pMFFilter->_comparatorValue = static_cast<int>(QMessageDataComparator::NotEqual); + } + } else { + if (cmp == QMessageDataComparator::Includes) { + filter |= QMessageFilter::byParentFolderId(folderIds[i],QMessageDataComparator::Equal); + } else { // Excludes + filter &= QMessageFilter::byParentFolderId(folderIds[i],QMessageDataComparator::NotEqual); + } + } + } + } else { + delete pMFFilter->_folderFilter; + pMFFilter->_folderFilter = 0; + pMFFilter->_field = QMessageFilterPrivate::Id; + } + } + } +} + QTM_END_NAMESPACE |
