qtmobility/src/messaging/qmessagefilter_maemo.cpp
changeset 1 2b40d63a9c3d
child 4 90517678cc4f
equal deleted inserted replaced
0:cfcbf08528c4 1:2b40d63a9c3d
       
     1 /****************************************************************************
       
     2 **
       
     3 ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     4 ** All rights reserved.
       
     5 ** Contact: Nokia Corporation (qt-info@nokia.com)
       
     6 **
       
     7 ** This file is part of the Qt Mobility Components.
       
     8 **
       
     9 ** $QT_BEGIN_LICENSE:LGPL$
       
    10 ** No Commercial Usage
       
    11 ** This file contains pre-release code and may not be distributed.
       
    12 ** You may use this file in accordance with the terms and conditions
       
    13 ** contained in the Technology Preview License Agreement accompanying
       
    14 ** this package.
       
    15 **
       
    16 ** GNU Lesser General Public License Usage
       
    17 ** Alternatively, this file may be used under the terms of the GNU Lesser
       
    18 ** General Public License version 2.1 as published by the Free Software
       
    19 ** Foundation and appearing in the file LICENSE.LGPL included in the
       
    20 ** packaging of this file.  Please review the following information to
       
    21 ** ensure the GNU Lesser General Public License version 2.1 requirements
       
    22 ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
       
    23 **
       
    24 ** In addition, as a special exception, Nokia gives you certain additional
       
    25 ** rights.  These rights are described in the Nokia Qt LGPL Exception
       
    26 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
       
    27 **
       
    28 ** If you have questions regarding the use of this file, please contact
       
    29 ** Nokia at qt-info@nokia.com.
       
    30 **
       
    31 **
       
    32 **
       
    33 **
       
    34 **
       
    35 **
       
    36 **
       
    37 **
       
    38 ** $QT_END_LICENSE$
       
    39 **
       
    40 ****************************************************************************/
       
    41 #include "qmessagefilter.h"
       
    42 #include "qmessagefilter_p.h"
       
    43 
       
    44 QTM_BEGIN_NAMESPACE
       
    45 
       
    46 QMessageFilterPrivate::QMessageFilterPrivate(QMessageFilter *messageFilter)
       
    47  : q_ptr(messageFilter),
       
    48    _valid(true),
       
    49    _field(None),
       
    50    _comparatorType(Equality),
       
    51    _comparatorValue(QMessageDataComparator::Equal)
       
    52 {
       
    53 }
       
    54 
       
    55 QMessageFilterPrivate::~QMessageFilterPrivate()
       
    56 {
       
    57 }
       
    58 
       
    59 bool QMessageFilterPrivate::lessThan(const QMessageFilter filter1, const QMessageFilter filter2)
       
    60 {
       
    61     if (filter1.d_ptr->_field == filter2.d_ptr->_field) {
       
    62         if (filter1.d_ptr->_comparatorType == filter2.d_ptr->_comparatorType) {
       
    63             return filter1.d_ptr->_comparatorValue < filter2.d_ptr->_comparatorValue;
       
    64         }
       
    65         return filter1.d_ptr->_comparatorType < filter2.d_ptr->_comparatorType;
       
    66     }
       
    67     return filter1.d_ptr->_field < filter2.d_ptr->_field;
       
    68 }
       
    69 
       
    70 void QMessageFilterPrivate::changeComparatorValuesToOpposite(QMessageFilter& filter)
       
    71 {
       
    72     if (filter.d_ptr->_filterList.count() == 0) {
       
    73         if (filter.d_ptr->_comparatorType == QMessageFilterPrivate::Equality) {
       
    74             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter.d_ptr->_comparatorValue));
       
    75             if (cmp == QMessageDataComparator::Equal) {
       
    76                 filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::NotEqual);
       
    77             } else {
       
    78                 filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::Equal);
       
    79             }
       
    80         } else if (filter.d_ptr->_comparatorType == QMessageFilterPrivate::Relation) {
       
    81             QMessageDataComparator::RelationComparator cmp(static_cast<QMessageDataComparator::RelationComparator>(filter.d_ptr->_comparatorValue));
       
    82             if (cmp == QMessageDataComparator::LessThan) {
       
    83                 filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::GreaterThanEqual);
       
    84             } else if (cmp == QMessageDataComparator::LessThanEqual) {
       
    85                 filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::GreaterThan);
       
    86             } else if (cmp == QMessageDataComparator::GreaterThan) {
       
    87                 filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::LessThanEqual);
       
    88             } else { // GreaterThanEqual
       
    89                 filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::LessThan);
       
    90             }
       
    91         } else { // Inclusion
       
    92             if (filter.d_ptr->_field == QMessageFilterPrivate::Status) {
       
    93                 if (!filter.d_ptr->_value.isNull()) {
       
    94                     filter.d_ptr->_notFilterForComparator = !filter.d_ptr->_notFilterForComparator;
       
    95                 } else {
       
    96                     filter.d_ptr->_notFilter = !filter.d_ptr->_notFilter;
       
    97                 }
       
    98             } else {
       
    99                 QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter.d_ptr->_comparatorValue));
       
   100                 if (cmp == QMessageDataComparator::Includes) {
       
   101                     filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::Excludes);
       
   102                 } else { // Excludes
       
   103                     filter.d_ptr->_comparatorValue = static_cast<int>(QMessageDataComparator::Includes);
       
   104                 }
       
   105             }
       
   106         }
       
   107     } else {
       
   108         for (int i=0; i < filter.d_ptr->_filterList.count(); i++) {
       
   109             for (int j=0; j < filter.d_ptr->_filterList[i].count(); j++) {
       
   110                 QMessageFilterPrivate::changeComparatorValuesToOpposite(filter.d_ptr->_filterList[i][j]);
       
   111             }
       
   112         }
       
   113     }
       
   114 }
       
   115 
       
   116 void QMessageFilterPrivate::changeANDsAndORsToOpposite(QMessageFilter& filter)
       
   117 {
       
   118     if (filter.d_ptr->_filterList.count() > 0) {
       
   119         QMessageFilter oldFilter = filter;
       
   120         filter.d_ptr->_filterList.clear();
       
   121         for (int i=0; i < oldFilter.d_ptr->_filterList.count(); i++) {
       
   122             if (i == 0) {
       
   123                 for (int j=0; j < oldFilter.d_ptr->_filterList[i].count(); j++) {
       
   124                     if (j == 0) {
       
   125                         filter.d_ptr->_filterList.append(QMessageFilterPrivate::SortedMessageFilterList());
       
   126                         filter.d_ptr->_filterList[0] << QMessageFilter(oldFilter.d_ptr->_filterList[i][j]);
       
   127                     } else {
       
   128                         filter |= oldFilter.d_ptr->_filterList[i][j];
       
   129                     }
       
   130                 }
       
   131             } else {
       
   132                 QMessageFilter tempFilter;
       
   133                 for (int j=0; j < oldFilter.d_ptr->_filterList[i].count(); j++) {
       
   134                     if (j == 0) {
       
   135                         tempFilter = oldFilter.d_ptr->_filterList[i][j];
       
   136                     } else {
       
   137                         tempFilter |= oldFilter.d_ptr->_filterList[i][j];
       
   138                     }
       
   139                 }
       
   140                 filter &= tempFilter;
       
   141             }
       
   142         }
       
   143 
       
   144         for (int i=0; i < filter.d_ptr->_filterList.count(); i++) {
       
   145             qSort(filter.d_ptr->_filterList[i].begin(), filter.d_ptr->_filterList[i].end(), QMessageFilterPrivate::lessThan);
       
   146         }
       
   147     }
       
   148 }
       
   149 
       
   150 void QMessageFilterPrivate::applyNot(QMessageFilter& filter)
       
   151 {
       
   152     QMessageFilterPrivate::changeComparatorValuesToOpposite(filter);
       
   153     QMessageFilterPrivate::changeANDsAndORsToOpposite(filter);
       
   154 }
       
   155 
       
   156 bool QMessageFilterPrivate::filter(const QMessage &message, const QMessageFilterPrivate &filter)
       
   157 {
       
   158     if ((filter._field == QMessageFilterPrivate::None) &&
       
   159         (filter._filterList.count() == 0)) {
       
   160         if (filter._notFilter) {
       
   161             return false;
       
   162         } else {
       
   163             return true;
       
   164         }
       
   165     }
       
   166 
       
   167     Qt::CaseSensitivity caseSensitivity = (filter._matchFlags & QMessageDataComparator::MatchCaseSensitive) ? Qt::CaseSensitive : Qt::CaseInsensitive;
       
   168 
       
   169     switch (filter._field) {
       
   170     case QMessageFilterPrivate::Id:
       
   171         {
       
   172         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   173             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   174             if (cmp == QMessageDataComparator::Equal) {
       
   175                 if (message.id().toString() == filter._value.toString()) {
       
   176                     return true;
       
   177                 }
       
   178             } else { // NotEqual
       
   179                 if (message.id().toString() != filter._value.toString()) {
       
   180                     return true;
       
   181                 }
       
   182             }
       
   183         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   184             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   185             if (filter._ids.count() > 0) { // QMessageIdList
       
   186                if (cmp == QMessageDataComparator::Includes) {
       
   187                    if (filter._ids.contains(message.id())) {
       
   188                        return true;
       
   189                    }
       
   190                } else { // Excludes
       
   191                    if (!filter._ids.contains(message.id())) {
       
   192                        return true;
       
   193                    }
       
   194                }
       
   195             } else { // QMessageFilter
       
   196                if (cmp == QMessageDataComparator::Includes) {
       
   197                    // TODO:
       
   198                } else { // Excludes
       
   199                    // TODO:
       
   200                }
       
   201             }
       
   202         }
       
   203         break;
       
   204         }
       
   205     case QMessageFilterPrivate::Type:
       
   206         {
       
   207         QMessage::Type type = static_cast<QMessage::Type>(filter._value.toInt());
       
   208         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   209             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   210             if (cmp == QMessageDataComparator::Equal) {
       
   211                 if (message.type() == type) {
       
   212                     return true;
       
   213                 }
       
   214             } else { // NotEqual
       
   215                 if (message.type() != type) {
       
   216                     return true;
       
   217                 }
       
   218             }
       
   219         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   220             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   221             if (cmp == QMessageDataComparator::Includes) {
       
   222                 if ((message.type() & type) == message.type()) {
       
   223                     return true;
       
   224                 }
       
   225             } else { // Excludes
       
   226             if ((message.type() & type) == 0) {
       
   227                     return true;
       
   228                 }
       
   229             }
       
   230         }
       
   231         break;
       
   232         }
       
   233     case QMessageFilterPrivate::Sender:
       
   234         {
       
   235         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   236             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   237             if (cmp == QMessageDataComparator::Equal) {
       
   238                 if (filter._value.toString().length() > 0) {
       
   239                     if (message.from().recipient().compare(filter._value.toString(),caseSensitivity) == 0) {
       
   240                         return true;
       
   241                     }
       
   242                 }
       
   243             } else { // NotEqual
       
   244                 if (filter._value.toString().length() > 0) {
       
   245                     if (message.from().recipient().compare(filter._value.toString(),caseSensitivity) != 0) {
       
   246                         return true;
       
   247                     }
       
   248                 } else {
       
   249                     return true;
       
   250                 }
       
   251             }
       
   252         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   253             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   254             if (cmp == QMessageDataComparator::Includes) {
       
   255                 if (message.from().recipient().contains(filter._value.toString(),caseSensitivity)) {
       
   256                     return true;
       
   257                 }
       
   258             } else { // Excludes
       
   259             if (!message.from().recipient().contains(filter._value.toString(),caseSensitivity)) {
       
   260                     return true;
       
   261                 }
       
   262             }
       
   263         }
       
   264         break;
       
   265         }
       
   266     case QMessageFilterPrivate::Recipients: // to, cc & bcc fields
       
   267         {
       
   268         if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   269             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   270             bool includes = false;
       
   271             // Check to addresses
       
   272             QMessageAddressList addrList = message.to();
       
   273             for (int i=0; i < addrList.count(); i++) {
       
   274                 if (addrList[i].recipient().contains(filter._value.toString(),caseSensitivity)) {
       
   275                     includes = true;
       
   276                     break;
       
   277                 }
       
   278             }
       
   279             if (!includes) {
       
   280                 // Check cc addresses
       
   281                 addrList = message.cc();
       
   282                 for (int i=0; i < addrList.count(); i++) {
       
   283                     if (addrList[i].recipient().contains(filter._value.toString(),caseSensitivity)) {
       
   284                         includes = true;
       
   285                         break;
       
   286                     }
       
   287                 }
       
   288             }
       
   289             if (!includes) {
       
   290                 // Check bcc addresses
       
   291                 addrList = message.bcc();
       
   292                 for (int i=0; i < addrList.count(); i++) {
       
   293                     if (addrList[i].recipient().contains(filter._value.toString(),caseSensitivity)) {
       
   294                         includes = true;
       
   295                         break;
       
   296                     }
       
   297                 }
       
   298             }
       
   299             if (cmp == QMessageDataComparator::Includes) {
       
   300                 if (includes) {
       
   301                     return true;
       
   302                 }
       
   303             } else { // Excludes
       
   304                 if (!includes) {
       
   305                     return true;
       
   306                 }
       
   307             }
       
   308         }
       
   309         break;
       
   310         }
       
   311     case QMessageFilterPrivate::Subject:
       
   312         {
       
   313         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   314             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   315             if (cmp == QMessageDataComparator::Equal) {
       
   316                 if (filter._value.toString().length() > 0) {
       
   317                     if (message.subject().compare(filter._value.toString(),caseSensitivity) == 0) {
       
   318                         return true;
       
   319                     }
       
   320                 }
       
   321             } else { // NotEqual
       
   322                 if (filter._value.toString().length() > 0) {
       
   323                     if (message.subject().compare(filter._value.toString(),caseSensitivity) != 0) {
       
   324                         return true;
       
   325                     }
       
   326                 } else {
       
   327                     return true;
       
   328                 }
       
   329             }
       
   330         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   331             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   332             if (cmp == QMessageDataComparator::Includes) {
       
   333                 if (message.subject().contains(filter._value.toString(),caseSensitivity)) {
       
   334                     return true;
       
   335                 }
       
   336             } else { // Excludes
       
   337             if (!message.subject().contains(filter._value.toString(),caseSensitivity)) {
       
   338                     return true;
       
   339                 }
       
   340             }
       
   341         }
       
   342         break;
       
   343         }
       
   344     case QMessageFilterPrivate::TimeStamp:
       
   345         {
       
   346         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   347             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   348             if (cmp == QMessageDataComparator::Equal) {
       
   349                 if (message.date() == filter._value.toDateTime()) {
       
   350                     return true;
       
   351                 }
       
   352             } else { // NotEqual
       
   353                 if (message.date() != filter._value.toDateTime()) {
       
   354                     return true;
       
   355                 }
       
   356             }
       
   357         } else if (filter._comparatorType == QMessageFilterPrivate::Relation) {
       
   358             QMessageDataComparator::RelationComparator cmp(static_cast<QMessageDataComparator::RelationComparator>(filter._comparatorValue));
       
   359             if (cmp == QMessageDataComparator::LessThan) {
       
   360                 if (message.date() < filter._value.toDateTime()) {
       
   361                     return true;
       
   362                 }
       
   363             } else if (cmp == QMessageDataComparator::LessThanEqual) {
       
   364                 if (message.date() <= filter._value.toDateTime()) {
       
   365                     return true;
       
   366                 }
       
   367             } else if (cmp == QMessageDataComparator::GreaterThan) {
       
   368                 if (message.date() > filter._value.toDateTime()) {
       
   369                     return true;
       
   370                 }
       
   371             } else { // GreaterThanEqual
       
   372                 if (message.date() >= filter._value.toDateTime()) {
       
   373                     return true;
       
   374                 }
       
   375             }
       
   376         }
       
   377         break;
       
   378         }
       
   379     case QMessageFilterPrivate::ReceptionTimeStamp:
       
   380         {
       
   381         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   382             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   383             if (cmp == QMessageDataComparator::Equal) {
       
   384                 if (message.date() == filter._value.toDateTime()) {
       
   385                     return true;
       
   386                 }
       
   387             } else { // NotEqual
       
   388                 if (message.date() != filter._value.toDateTime()) {
       
   389                     return true;
       
   390                 }
       
   391             }
       
   392         } else if (filter._comparatorType == QMessageFilterPrivate::Relation) {
       
   393             QMessageDataComparator::RelationComparator cmp(static_cast<QMessageDataComparator::RelationComparator>(filter._comparatorValue));
       
   394             if (cmp == QMessageDataComparator::LessThan) {
       
   395                 if (message.receivedDate() < filter._value.toDateTime()) {
       
   396                     return true;
       
   397                 }
       
   398             } else if (cmp == QMessageDataComparator::LessThanEqual) {
       
   399                 if (message.receivedDate() <= filter._value.toDateTime()) {
       
   400                     return true;
       
   401                 }
       
   402             } else if (cmp == QMessageDataComparator::GreaterThan) {
       
   403                 if (message.receivedDate() > filter._value.toDateTime()) {
       
   404                     return true;
       
   405                 }
       
   406             } else { // GreaterThanEqual
       
   407                 if (message.receivedDate() >= filter._value.toDateTime()) {
       
   408                     return true;
       
   409                 }
       
   410             }
       
   411         }
       
   412         break;
       
   413         }
       
   414     case QMessageFilterPrivate::Status:
       
   415         {
       
   416         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   417             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   418             if (filter._value.toInt() == 0) {
       
   419                 if (cmp == QMessageDataComparator::Equal) {
       
   420                     return false;
       
   421                 } else {
       
   422                     return true;
       
   423                 }
       
   424             }
       
   425             QMessage::Status status = static_cast<QMessage::Status>(filter._value.toInt());
       
   426             if (cmp == QMessageDataComparator::Equal) {
       
   427                 if ((message.status() & status) == status) {
       
   428                     return true;
       
   429                 }
       
   430             } else { // NotEqual
       
   431                 if (!((message.status() & status) == status)) {
       
   432                     return true;
       
   433                 }
       
   434             }
       
   435         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   436             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   437             if (filter._value.toInt() == 0) {
       
   438                 if (cmp == QMessageDataComparator::Includes) {
       
   439                     if (filter._notFilterForComparator) {
       
   440                         return true;
       
   441                     } else {
       
   442                         return false;
       
   443                     }
       
   444                 } else {
       
   445                     if (filter._notFilterForComparator) {
       
   446                         return true;
       
   447                     } else {
       
   448                         return false;
       
   449                     }
       
   450                 }
       
   451             }
       
   452             if (cmp == QMessageDataComparator::Includes) {
       
   453                 if ((message.status() | filter._value.toInt()) == message.status()) {
       
   454                     if (filter._notFilterForComparator) {
       
   455                         return false;
       
   456                     } else {
       
   457                         return true;
       
   458                     }
       
   459                 } else {
       
   460                     if (filter._notFilterForComparator) {
       
   461                         return true;
       
   462                     }
       
   463                 }
       
   464             } else { // Excludes
       
   465                 int mask = 15 - filter._value.toInt(); // 15 = 0b1111
       
   466                 if ((message.status() & mask) == message.status()) {
       
   467                     if (filter._notFilterForComparator) {
       
   468                         return false;
       
   469                     } else {
       
   470                         return true;
       
   471                     }
       
   472                 } else {
       
   473                     if (filter._notFilterForComparator) {
       
   474                         return true;
       
   475                     }
       
   476                 }
       
   477             }
       
   478         }
       
   479         break;
       
   480         }
       
   481     case QMessageFilterPrivate::Priority:
       
   482         {
       
   483         QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   484         if (cmp == QMessageDataComparator::Equal) {
       
   485             if (message.priority() == filter._value.toInt()) {
       
   486                 return true;
       
   487             }
       
   488         } else { // NotEqual
       
   489             if (message.priority() != filter._value.toInt()) {
       
   490                 return true;
       
   491             }
       
   492         }
       
   493         break;
       
   494         }
       
   495     case QMessageFilterPrivate::Size:
       
   496         {
       
   497         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   498             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   499             if (cmp == QMessageDataComparator::Equal) {
       
   500                 if (message.size() == filter._value.toUInt()) {
       
   501                     return true;
       
   502                 }
       
   503             } else { // NotEqual
       
   504                 if (message.size() != filter._value.toUInt()) {
       
   505                     return true;
       
   506                 }
       
   507             }
       
   508         } else if (filter._comparatorType == QMessageFilterPrivate::Relation) {
       
   509             QMessageDataComparator::RelationComparator cmp(static_cast<QMessageDataComparator::RelationComparator>(filter._comparatorValue));
       
   510             if (cmp == QMessageDataComparator::LessThan) {
       
   511                 if (message.size() < filter._value.toUInt()) {
       
   512                     return true;
       
   513                 }
       
   514             } else if (cmp == QMessageDataComparator::LessThanEqual) {
       
   515                 if (message.size() <= filter._value.toUInt()) {
       
   516                     return true;
       
   517                 }
       
   518             } else if (cmp == QMessageDataComparator::GreaterThan) {
       
   519                 if (message.size() > filter._value.toUInt()) {
       
   520                     return true;
       
   521                 }
       
   522             } else { // GreaterThanEqual
       
   523                 if (message.size() >= filter._value.toUInt()) {
       
   524                     return true;
       
   525                 }
       
   526             }
       
   527         }
       
   528         break;
       
   529         }
       
   530     case QMessageFilterPrivate::ParentAccountId:
       
   531         {
       
   532         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   533             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   534             if (cmp == QMessageDataComparator::Equal) {
       
   535                 if (message.parentAccountId().toString() == filter._value.toString()) {
       
   536                     return true;
       
   537                 }
       
   538             } else { // NotEqual
       
   539                 if (message.parentAccountId().toString() != filter._value.toString()) {
       
   540                     return true;
       
   541                 }
       
   542             }
       
   543         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   544             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   545             if (cmp == QMessageDataComparator::Includes) {
       
   546                 //TODO:
       
   547             } else { // Excludes
       
   548                 //TODO:
       
   549             }
       
   550         }
       
   551         break;
       
   552         }
       
   553     case QMessageFilterPrivate::StandardFolder:
       
   554         {
       
   555         QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   556         QMessage::StandardFolder standardFolder = static_cast<QMessage::StandardFolder>(filter._value.toInt());
       
   557         if (cmp == QMessageDataComparator::Equal) {
       
   558             if (message.standardFolder() == standardFolder) {
       
   559                 return true;
       
   560             }
       
   561         } else { // NotEqual
       
   562             if (message.standardFolder() != standardFolder) {
       
   563                 return true;
       
   564             }
       
   565         }
       
   566         break;
       
   567         }
       
   568     case QMessageFilterPrivate::ParentFolderId:
       
   569         {
       
   570         if (filter._comparatorType == QMessageFilterPrivate::Equality) {
       
   571             QMessageDataComparator::EqualityComparator cmp(static_cast<QMessageDataComparator::EqualityComparator>(filter._comparatorValue));
       
   572             if (cmp == QMessageDataComparator::Equal) {
       
   573                 if (message.parentFolderId().toString() == filter._value.toString()) {
       
   574                     return true;
       
   575                 }
       
   576             } else { // NotEqual
       
   577                 if (message.parentFolderId().toString() != filter._value.toString()) {
       
   578                     return true;
       
   579                 }
       
   580             }
       
   581         } else if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   582             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   583             if (cmp == QMessageDataComparator::Includes) {
       
   584                 // TODO:
       
   585             } else { // Excludes
       
   586                 // TODO:
       
   587             }
       
   588         }
       
   589         break;
       
   590         }
       
   591     case QMessageFilterPrivate::AncestorFolderIds:
       
   592         {
       
   593         if (filter._comparatorType == QMessageFilterPrivate::Inclusion) {
       
   594             QMessageDataComparator::InclusionComparator cmp(static_cast<QMessageDataComparator::InclusionComparator>(filter._comparatorValue));
       
   595             if (!filter._value.isNull()) { // QMessageFolderId
       
   596                 if (cmp == QMessageDataComparator::Includes) {
       
   597                     // TODO:
       
   598                 } else { // Excludes
       
   599                     // TODO:
       
   600                 }
       
   601             } else { // QMessageFolderFilter
       
   602                 if (cmp == QMessageDataComparator::Includes) {
       
   603                     // TODO:
       
   604                 } else { // Excludes
       
   605                     // TODO:
       
   606                 }
       
   607             }
       
   608         }
       
   609         break;
       
   610         }
       
   611     case QMessageFilterPrivate::ParentAccountIdFilter:
       
   612     case QMessageFilterPrivate::ParentFolderIdFilter:
       
   613     case QMessageFilterPrivate::None:
       
   614         break;
       
   615     }
       
   616 
       
   617     return false;
       
   618 }
       
   619 
       
   620 bool QMessageFilterPrivate::filter(const QMessage &message) const
       
   621 {
       
   622     if (!_valid) {
       
   623         return false;
       
   624     }
       
   625 
       
   626     bool result = false;
       
   627     if (_filterList.count() == 0) {
       
   628         result = QMessageFilterPrivate::filter(message, *this);
       
   629     } else {
       
   630         for (int i=0; i < _filterList.count(); i++) {
       
   631             for (int j=0; j < _filterList[i].count(); j++) {
       
   632                 result = QMessageFilterPrivate::filter(message, *_filterList[i][j].d_ptr);
       
   633                 if (result == false) {
       
   634                     break;
       
   635                 }
       
   636             }
       
   637             if (result == true) {
       
   638                 break;
       
   639             }
       
   640         }
       
   641     }
       
   642     return result;
       
   643 }
       
   644 
       
   645 QMessageFilterPrivate* QMessageFilterPrivate::implementation(const QMessageFilter &filter)
       
   646 
       
   647 {
       
   648     return filter.d_ptr;
       
   649 }
       
   650 
       
   651 QMessageFilter::QMessageFilter()
       
   652  : d_ptr(new QMessageFilterPrivate(this))
       
   653 {
       
   654         d_ptr->_matchFlags = 0;
       
   655 
       
   656         d_ptr->_valid = true; // Empty filter is valid
       
   657         d_ptr->_notFilter = false;
       
   658         d_ptr->_notFilterForComparator = false;
       
   659         d_ptr->_ids = QMessageIdList();
       
   660         d_ptr->_value = QVariant();
       
   661         d_ptr->_field = QMessageFilterPrivate::None;
       
   662         d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
   663         d_ptr->_comparatorValue = 0;
       
   664     d_ptr->_accountFilter = 0;
       
   665     d_ptr->_folderFilter = 0;
       
   666 }
       
   667 
       
   668 QMessageFilter::QMessageFilter(const QMessageFilter &other)
       
   669  : d_ptr(new QMessageFilterPrivate(this))
       
   670 {
       
   671     d_ptr->_accountFilter = 0;
       
   672     d_ptr->_folderFilter = 0;
       
   673 
       
   674     this->operator=(other);
       
   675 }
       
   676 
       
   677 QMessageFilter::~QMessageFilter()
       
   678 {
       
   679     delete d_ptr->_accountFilter;
       
   680     d_ptr->_accountFilter = 0;
       
   681     delete d_ptr->_folderFilter;
       
   682     d_ptr->_folderFilter = 0;
       
   683 
       
   684     delete d_ptr;
       
   685 }
       
   686 
       
   687 QMessageFilter& QMessageFilter::operator=(const QMessageFilter& other)
       
   688 {
       
   689     if (&other == this)
       
   690         return *this;
       
   691 
       
   692     d_ptr->_matchFlags = other.d_ptr->_matchFlags;
       
   693 
       
   694     d_ptr->_valid = other.d_ptr->_valid;
       
   695     d_ptr->_notFilter = other.d_ptr->_notFilter;
       
   696     d_ptr->_notFilterForComparator = other.d_ptr->_notFilterForComparator;
       
   697     d_ptr->_ids = other.d_ptr->_ids;
       
   698     d_ptr->_value = other.d_ptr->_value;
       
   699     d_ptr->_field = other.d_ptr->_field;
       
   700     d_ptr->_comparatorType = other.d_ptr->_comparatorType;
       
   701     d_ptr->_comparatorValue = other.d_ptr->_comparatorValue;
       
   702     d_ptr->_filterList = other.d_ptr->_filterList;
       
   703 
       
   704     delete d_ptr->_accountFilter;
       
   705     d_ptr->_accountFilter = 0;
       
   706     if (other.d_ptr->_accountFilter) {
       
   707         d_ptr->_accountFilter = new QMessageAccountFilter(*other.d_ptr->_accountFilter);
       
   708     }
       
   709     delete d_ptr->_folderFilter;
       
   710     d_ptr->_folderFilter = 0;
       
   711     if (other.d_ptr->_folderFilter) {
       
   712         d_ptr->_folderFilter = new QMessageFolderFilter(*other.d_ptr->_folderFilter);
       
   713     }
       
   714 
       
   715     return *this;
       
   716 }
       
   717 
       
   718 void QMessageFilter::setMatchFlags(QMessageDataComparator::MatchFlags matchFlags)
       
   719 {
       
   720     d_ptr->_matchFlags = matchFlags;
       
   721 }
       
   722 
       
   723 QMessageDataComparator::MatchFlags QMessageFilter::matchFlags() const
       
   724 {
       
   725     return d_ptr->_matchFlags;
       
   726 }
       
   727 
       
   728 bool QMessageFilter::isEmpty() const
       
   729 {
       
   730     return ((d_ptr->_field == QMessageFilterPrivate::None) &&
       
   731                 (d_ptr->_notFilter == false) &&
       
   732             (d_ptr->_filterList.count()) == 0);
       
   733 }
       
   734 
       
   735 bool QMessageFilter::isSupported() const
       
   736 {
       
   737     return d_ptr->_valid;
       
   738 }
       
   739 
       
   740 QMessageFilter QMessageFilter::operator~() const
       
   741 {
       
   742     QMessageFilter result(*this);
       
   743     if (result.isEmpty()) {
       
   744                 result.d_ptr->_notFilter = true;
       
   745     } else {
       
   746                 if (result.d_ptr->_notFilter) {
       
   747                         result.d_ptr->_notFilter = false;
       
   748                 } else {
       
   749                         QMessageFilterPrivate::applyNot(result);
       
   750                 }
       
   751     }
       
   752     return result;
       
   753 }
       
   754 
       
   755 QMessageFilter QMessageFilter::operator&(const QMessageFilter& other) const
       
   756 {
       
   757     QMessageFilter result(*this);
       
   758     result &= other;
       
   759     return result;
       
   760 }
       
   761 
       
   762 QMessageFilter QMessageFilter::operator|(const QMessageFilter& other) const
       
   763 {
       
   764     QMessageFilter result(*this);
       
   765     result |= other;
       
   766     return result;
       
   767 }
       
   768 
       
   769 const QMessageFilter& QMessageFilter::operator&=(const QMessageFilter& other)
       
   770 {
       
   771         if (&other == this) {
       
   772                 return *this;
       
   773         }
       
   774 
       
   775         if (isEmpty()) {
       
   776                 *this = other;
       
   777                 return *this;
       
   778         }
       
   779 
       
   780         if (other.isEmpty()) {
       
   781                 return *this;
       
   782         }
       
   783 
       
   784         if (d_ptr->_notFilter && !d_ptr->_notFilterForComparator) {
       
   785                 return *this;
       
   786         }
       
   787 
       
   788         if (other.d_ptr->_notFilter && !d_ptr->_notFilterForComparator) {
       
   789                 *this = other;
       
   790                 return *this;
       
   791         }
       
   792 
       
   793     if (d_ptr->_filterList.count() == 0) {
       
   794         QMessageFilter newFilter = QMessageFilter(*this);
       
   795         d_ptr->_filterList.append(QMessageFilterPrivate::SortedMessageFilterList());
       
   796         d_ptr->_filterList[0] << newFilter;
       
   797         d_ptr->_value = QVariant();
       
   798         d_ptr->_field = QMessageFilterPrivate::None;
       
   799         d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
   800         d_ptr->_comparatorValue = 0;
       
   801     }
       
   802     int i = 0;
       
   803     while (i < d_ptr->_filterList.count()) {
       
   804         if (other.d_ptr->_filterList.count() == 0) {
       
   805             d_ptr->_filterList[i] << other;
       
   806             qSort(d_ptr->_filterList[i].begin(), d_ptr->_filterList[i].end(), QMessageFilterPrivate::lessThan);
       
   807         } else {
       
   808             int j = 0;
       
   809             int k = i;
       
   810             while (j < other.d_ptr->_filterList.count()) {
       
   811                 if (j+1 < other.d_ptr->_filterList.count()) {
       
   812                     d_ptr->_filterList.insert(k+j+1,QMessageFilterPrivate::SortedMessageFilterList());
       
   813                     d_ptr->_filterList[k+j+1] << d_ptr->_filterList[k+j];
       
   814                     i++;
       
   815                 }
       
   816                 d_ptr->_filterList[k+j] << other.d_ptr->_filterList[j];
       
   817                 if (d_ptr->_filterList[k+j].count() > 1) {
       
   818                     qSort(d_ptr->_filterList[k+j].begin(), d_ptr->_filterList[k+j].end(), QMessageFilterPrivate::lessThan);
       
   819                 }
       
   820                 j++;
       
   821             }
       
   822         }
       
   823         i++;
       
   824     }
       
   825     d_ptr->_valid = d_ptr->_valid & other.d_ptr->_valid;
       
   826 
       
   827     return *this;
       
   828 }
       
   829 
       
   830 const QMessageFilter& QMessageFilter::operator|=(const QMessageFilter& other)
       
   831 {
       
   832         if (&other == this) {
       
   833                 return *this;
       
   834         }
       
   835 
       
   836         if (isEmpty()) {
       
   837                 return *this;
       
   838         }
       
   839 
       
   840         if (other.isEmpty()) {
       
   841                 *this = other;
       
   842                 return *this;
       
   843         }
       
   844 
       
   845         if (d_ptr->_notFilter && !d_ptr->_notFilterForComparator) {
       
   846                 *this = other;
       
   847                 return *this;
       
   848         }
       
   849 
       
   850         if (other.d_ptr->_notFilter && !d_ptr->_notFilterForComparator) {
       
   851                 return *this;
       
   852         }
       
   853 
       
   854     if (d_ptr->_filterList.count() == 0) {
       
   855         QMessageFilter newFilter = QMessageFilter(*this);
       
   856         d_ptr->_filterList.append(QMessageFilterPrivate::SortedMessageFilterList());
       
   857         d_ptr->_filterList[d_ptr->_filterList.count()-1] << newFilter;
       
   858         d_ptr->_value = QVariant();
       
   859         d_ptr->_field = QMessageFilterPrivate::None;
       
   860         d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
   861         d_ptr->_comparatorValue = 0;
       
   862     }
       
   863     if (other.d_ptr->_filterList.count() == 0) {
       
   864         d_ptr->_filterList.append(QMessageFilterPrivate::SortedMessageFilterList());
       
   865         d_ptr->_filterList[d_ptr->_filterList.count()-1] << other;
       
   866     } else {
       
   867         d_ptr->_filterList << other.d_ptr->_filterList;
       
   868     }
       
   869     d_ptr->_valid = d_ptr->_valid & other.d_ptr->_valid;
       
   870 
       
   871     return *this;
       
   872 }
       
   873 
       
   874 bool QMessageFilter::operator==(const QMessageFilter& other) const
       
   875 {
       
   876     if (d_ptr->_filterList.count() != other.d_ptr->_filterList.count()) {
       
   877         return false;
       
   878     }
       
   879 
       
   880     if (d_ptr->_filterList.count() == 0) {
       
   881         return (d_ptr->_notFilter == other.d_ptr->_notFilter &&
       
   882                 d_ptr->_notFilterForComparator == other.d_ptr->_notFilterForComparator &&
       
   883                         d_ptr->_field == other.d_ptr->_field &&
       
   884                 d_ptr->_value == other.d_ptr->_value &&
       
   885                 d_ptr->_ids == other.d_ptr->_ids &&
       
   886                 d_ptr->_comparatorType == other.d_ptr->_comparatorType &&
       
   887                 d_ptr->_comparatorValue == other.d_ptr->_comparatorValue);
       
   888     } else { // List
       
   889         for (int i=0; i < d_ptr->_filterList.count(); i++) {
       
   890             if (d_ptr->_filterList[i].count() != other.d_ptr->_filterList[i].count()) {
       
   891                 return false;
       
   892             }
       
   893             for (int j=0; j < d_ptr->_filterList[i].count(); j++) {
       
   894                 if (!(d_ptr->_filterList[i][j] == other.d_ptr->_filterList[i][j])) {
       
   895                     return false;
       
   896                 }
       
   897             }
       
   898         }
       
   899     }
       
   900 
       
   901     if (d_ptr->_accountFilter || other.d_ptr->_accountFilter) {
       
   902         if (!d_ptr->_accountFilter || !other.d_ptr->_accountFilter || (*d_ptr->_accountFilter != *other.d_ptr->_accountFilter)) {
       
   903             return false;
       
   904         }
       
   905     }
       
   906     if (d_ptr->_folderFilter || other.d_ptr->_folderFilter) {
       
   907         if (!d_ptr->_folderFilter || !other.d_ptr->_folderFilter || (*d_ptr->_folderFilter != *other.d_ptr->_folderFilter)) {
       
   908             return false;
       
   909         }
       
   910     }
       
   911 
       
   912 
       
   913     return true;
       
   914 }
       
   915 
       
   916 QMessageFilter QMessageFilter::byId(const QMessageId &id, QMessageDataComparator::EqualityComparator cmp)
       
   917 {
       
   918     QMessageFilter result;
       
   919     result.d_ptr->_field = QMessageFilterPrivate::Id;
       
   920     result.d_ptr->_value = id.toString();
       
   921     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
   922     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
   923     result.d_ptr->_valid = true;
       
   924     return result;
       
   925 }
       
   926 
       
   927 QMessageFilter QMessageFilter::byId(const QMessageIdList &ids, QMessageDataComparator::InclusionComparator cmp)
       
   928 {
       
   929         QMessageFilter result;
       
   930         result.d_ptr->_field = QMessageFilterPrivate::Id;
       
   931         result.d_ptr->_ids = ids;
       
   932         result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
   933         result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
   934     result.d_ptr->_valid = true;
       
   935         return result;
       
   936 }
       
   937 
       
   938 QMessageFilter QMessageFilter::byId(const QMessageFilter &filter, QMessageDataComparator::InclusionComparator cmp)
       
   939 {
       
   940     QMessageFilter result;
       
   941     *result.d_ptr = *filter.d_ptr;
       
   942     if (cmp == QMessageDataComparator::Excludes) {
       
   943         // Invert the sense of comparison
       
   944         result = ~result;
       
   945     }
       
   946     return result;
       
   947 }
       
   948 
       
   949 QMessageFilter QMessageFilter::byType(QMessage::Type type, QMessageDataComparator::EqualityComparator cmp)
       
   950 {
       
   951     QMessageFilter result;
       
   952     result.d_ptr->_field = QMessageFilterPrivate::Type;
       
   953     result.d_ptr->_value = type;
       
   954     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
   955     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
   956     result.d_ptr->_valid = true;
       
   957     return result;
       
   958 }
       
   959 
       
   960 QMessageFilter QMessageFilter::byType(QMessage::TypeFlags type, QMessageDataComparator::InclusionComparator cmp)
       
   961 {
       
   962     QMessageFilter result;
       
   963     result.d_ptr->_field = QMessageFilterPrivate::Type;
       
   964     result.d_ptr->_value = static_cast<int>(type);
       
   965     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
   966     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
   967     result.d_ptr->_valid = true;
       
   968     return result;
       
   969 }
       
   970 
       
   971 QMessageFilter QMessageFilter::bySender(const QString &value, QMessageDataComparator::EqualityComparator cmp)
       
   972 {
       
   973     QMessageFilter result;
       
   974     result.d_ptr->_field = QMessageFilterPrivate::Sender;
       
   975     result.d_ptr->_value = value;
       
   976     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
   977     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
   978     result.d_ptr->_valid = true;
       
   979     return result;
       
   980 }
       
   981 
       
   982 QMessageFilter QMessageFilter::bySender(const QString &value, QMessageDataComparator::InclusionComparator cmp)
       
   983 {
       
   984     QMessageFilter result;
       
   985     result.d_ptr->_field = QMessageFilterPrivate::Sender;
       
   986     result.d_ptr->_value = value;
       
   987     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
   988     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
   989     result.d_ptr->_valid = true;
       
   990     return result;
       
   991 }
       
   992 
       
   993 QMessageFilter QMessageFilter::byRecipients(const QString &value, QMessageDataComparator::InclusionComparator cmp)
       
   994 {
       
   995     QMessageFilter result;
       
   996     result.d_ptr->_field = QMessageFilterPrivate::Recipients;
       
   997     result.d_ptr->_value = value;
       
   998     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
   999     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1000     result.d_ptr->_valid = true;
       
  1001     return result;
       
  1002 }
       
  1003 
       
  1004 QMessageFilter QMessageFilter::bySubject(const QString &value, QMessageDataComparator::EqualityComparator cmp)
       
  1005 {
       
  1006     QMessageFilter result;
       
  1007     result.d_ptr->_field = QMessageFilterPrivate::Subject;
       
  1008     result.d_ptr->_value = value;
       
  1009     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1010     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1011     result.d_ptr->_valid = true;
       
  1012     return result;
       
  1013 }
       
  1014 
       
  1015 QMessageFilter QMessageFilter::bySubject(const QString &value, QMessageDataComparator::InclusionComparator cmp)
       
  1016 {
       
  1017     QMessageFilter result;
       
  1018     result.d_ptr->_field = QMessageFilterPrivate::Subject;
       
  1019     result.d_ptr->_value = value;
       
  1020     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
  1021     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1022     result.d_ptr->_valid = true;
       
  1023     return result;
       
  1024 }
       
  1025 
       
  1026 QMessageFilter QMessageFilter::byTimeStamp(const QDateTime &value, QMessageDataComparator::EqualityComparator cmp)
       
  1027 {
       
  1028     QMessageFilter result;
       
  1029     result.d_ptr->_field = QMessageFilterPrivate::TimeStamp;
       
  1030     result.d_ptr->_value = value;
       
  1031     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1032     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1033     result.d_ptr->_valid = true;
       
  1034     return result;
       
  1035 }
       
  1036 
       
  1037 QMessageFilter QMessageFilter::byTimeStamp(const QDateTime &value, QMessageDataComparator::RelationComparator cmp)
       
  1038 {
       
  1039     QMessageFilter result;
       
  1040     result.d_ptr->_field = QMessageFilterPrivate::TimeStamp;
       
  1041     result.d_ptr->_value = value;
       
  1042     result.d_ptr->_comparatorType = QMessageFilterPrivate::Relation;
       
  1043     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1044     result.d_ptr->_valid = true;
       
  1045     return result;
       
  1046 }
       
  1047 
       
  1048 QMessageFilter QMessageFilter::byReceptionTimeStamp(const QDateTime &value, QMessageDataComparator::EqualityComparator cmp)
       
  1049 {
       
  1050     QMessageFilter result;
       
  1051     result.d_ptr->_field = QMessageFilterPrivate::TimeStamp;
       
  1052     result.d_ptr->_value = value;
       
  1053     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1054     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1055     result.d_ptr->_valid = true;
       
  1056     return result;
       
  1057 }
       
  1058 
       
  1059 QMessageFilter QMessageFilter::byReceptionTimeStamp(const QDateTime &value, QMessageDataComparator::RelationComparator cmp)
       
  1060 {
       
  1061     QMessageFilter result;
       
  1062     result.d_ptr->_field = QMessageFilterPrivate::TimeStamp;
       
  1063     result.d_ptr->_value = value;
       
  1064     result.d_ptr->_comparatorType = QMessageFilterPrivate::Relation;
       
  1065     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1066     result.d_ptr->_valid = true;
       
  1067     return result;
       
  1068 }
       
  1069 
       
  1070 QMessageFilter QMessageFilter::byStatus(QMessage::Status value, QMessageDataComparator::EqualityComparator cmp)
       
  1071 {
       
  1072     QMessageFilter result;
       
  1073     result.d_ptr->_field = QMessageFilterPrivate::Status;
       
  1074     result.d_ptr->_value = static_cast<int>(value);
       
  1075     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1076     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1077     result.d_ptr->_valid = true;
       
  1078     return result;
       
  1079 }
       
  1080 
       
  1081 QMessageFilter QMessageFilter::byStatus(QMessage::StatusFlags mask, QMessageDataComparator::InclusionComparator cmp)
       
  1082 {
       
  1083     QMessageFilter result;
       
  1084     result.d_ptr->_field = QMessageFilterPrivate::Status;
       
  1085     result.d_ptr->_value = static_cast<int>(mask);
       
  1086     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
  1087     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1088     result.d_ptr->_valid = true;
       
  1089     return result;
       
  1090 }
       
  1091 
       
  1092 QMessageFilter QMessageFilter::byPriority(QMessage::Priority value, QMessageDataComparator::EqualityComparator cmp)
       
  1093 {
       
  1094     QMessageFilter result;
       
  1095     result.d_ptr->_field = QMessageFilterPrivate::Priority;
       
  1096     result.d_ptr->_value = static_cast<int>(value);
       
  1097     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1098     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1099     result.d_ptr->_valid = true;
       
  1100     return result;
       
  1101 }
       
  1102 
       
  1103 QMessageFilter QMessageFilter::bySize(int value, QMessageDataComparator::EqualityComparator cmp)
       
  1104 {
       
  1105     QMessageFilter result;
       
  1106     result.d_ptr->_field = QMessageFilterPrivate::Size;
       
  1107     result.d_ptr->_value = value;
       
  1108     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1109     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1110     result.d_ptr->_valid = true;
       
  1111     return result;
       
  1112 }
       
  1113 
       
  1114 QMessageFilter QMessageFilter::bySize(int value, QMessageDataComparator::RelationComparator cmp)
       
  1115 {
       
  1116     QMessageFilter result;
       
  1117     result.d_ptr->_field = QMessageFilterPrivate::Size;
       
  1118     result.d_ptr->_value = value;
       
  1119     result.d_ptr->_comparatorType = QMessageFilterPrivate::Relation;
       
  1120     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1121     result.d_ptr->_valid = true;
       
  1122     return result;
       
  1123 }
       
  1124 
       
  1125 QMessageFilter QMessageFilter::byParentAccountId(const QMessageAccountId &id, QMessageDataComparator::EqualityComparator cmp)
       
  1126 {
       
  1127     QMessageFilter result;
       
  1128     result.d_ptr->_field = QMessageFilterPrivate::ParentAccountId;
       
  1129     result.d_ptr->_value = id.toString();
       
  1130     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1131     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1132     result.d_ptr->_valid = true;
       
  1133     return result;
       
  1134 }
       
  1135 
       
  1136 QMessageFilter QMessageFilter::byParentAccountId(const QMessageAccountFilter &filter, QMessageDataComparator::InclusionComparator cmp)
       
  1137 {
       
  1138     QMessageFilter result;
       
  1139     result.d_ptr->_field = QMessageFilterPrivate::ParentAccountIdFilter;
       
  1140     result.d_ptr->_accountFilter = new QMessageAccountFilter(filter);
       
  1141     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
  1142     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1143     return result;
       
  1144 }
       
  1145 
       
  1146 QMessageFilter QMessageFilter::byStandardFolder(QMessage::StandardFolder folder, QMessageDataComparator::EqualityComparator cmp)
       
  1147 {
       
  1148     QMessageFilter result;
       
  1149     result.d_ptr->_field = QMessageFilterPrivate::StandardFolder;
       
  1150     result.d_ptr->_value = folder;
       
  1151     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1152     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1153     result.d_ptr->_valid = true;
       
  1154     return result;
       
  1155 }
       
  1156 
       
  1157 QMessageFilter QMessageFilter::byParentFolderId(const QMessageFolderId &id, QMessageDataComparator::EqualityComparator cmp)
       
  1158 {
       
  1159     QMessageFilter result;
       
  1160     result.d_ptr->_field = QMessageFilterPrivate::ParentFolderId;
       
  1161     result.d_ptr->_value = id.toString();
       
  1162     result.d_ptr->_comparatorType = QMessageFilterPrivate::Equality;
       
  1163     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1164     result.d_ptr->_valid = true;
       
  1165     return result;
       
  1166 }
       
  1167 
       
  1168 QMessageFilter QMessageFilter::byParentFolderId(const QMessageFolderFilter &filter, QMessageDataComparator::InclusionComparator cmp)
       
  1169 {
       
  1170     QMessageFilter result;
       
  1171     result.d_ptr->_field = QMessageFilterPrivate::ParentFolderIdFilter;
       
  1172     result.d_ptr->_folderFilter = new QMessageFolderFilter(filter);
       
  1173     result.d_ptr->_comparatorType = QMessageFilterPrivate::Inclusion;
       
  1174     result.d_ptr->_comparatorValue = static_cast<int>(cmp);
       
  1175     return result;
       
  1176 }
       
  1177 
       
  1178 QMessageFilter QMessageFilter::byAncestorFolderIds(const QMessageFolderId &id, QMessageDataComparator::InclusionComparator cmp)
       
  1179 {
       
  1180     Q_UNUSED(id)
       
  1181     Q_UNUSED(cmp)
       
  1182     QMessageFilter result;
       
  1183     result.d_ptr->_valid = false;
       
  1184     return result;
       
  1185 }
       
  1186 
       
  1187 QMessageFilter QMessageFilter::byAncestorFolderIds(const QMessageFolderFilter &filter, QMessageDataComparator::InclusionComparator cmp)
       
  1188 {
       
  1189     Q_UNUSED(filter)
       
  1190     Q_UNUSED(cmp)
       
  1191     QMessageFilter result;
       
  1192     result.d_ptr->_valid = false;
       
  1193     return result;
       
  1194 }
       
  1195 
       
  1196 QTM_END_NAMESPACE