--- a/qtmobility/src/messaging/maemohelpers.cpp Mon May 03 13:18:40 2010 +0300
+++ b/qtmobility/src/messaging/maemohelpers.cpp Fri May 14 16:41:33 2010 +0300
@@ -269,4 +269,239 @@
}
}
+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