qtmobility/src/messaging/qmessageservice_maemo.cpp
changeset 5 453da2cfceef
parent 4 90517678cc4f
child 8 71781823f776
--- a/qtmobility/src/messaging/qmessageservice_maemo.cpp	Mon May 03 13:18:40 2010 +0300
+++ b/qtmobility/src/messaging/qmessageservice_maemo.cpp	Fri May 14 16:41:33 2010 +0300
@@ -72,65 +72,43 @@
                                            uint limit, uint offset,
                                            EnginesToCall enginesToCall)
 {
-  qDebug() << "QMessageServicePrivate::queryMessages 1";
     if (_active) {
         return false;
     }
 
+    _filter = filter;
+    MessagingHelper::handleNestedFiltersFromMessageFilter(_filter);
+
     _ids.clear();
     _sorted = true;
     _filtered = true;
 
     _active = true;
     _error = QMessageManager::NoError;
-    bool modestEngineCalled=false;
-
-    if (enginesToCall & EnginesToCallTelepathy) {
-      _ids= EventLoggerEngine::instance()->filterAndOrderMessages(filter,sortOrder,QString(),QMessageDataComparator::MatchFlags());
-      qDebug() << "QMessageServicePrivate::queryMessages filterAndOrderMessages:";
-    }
 
     _pendingRequestCount = 0;
+
+    if (enginesToCall & EnginesToCallTelepathy) {
+        _ids = EventLoggerEngine::instance()->filterAndOrderMessages(filter,sortOrder,QString(),QMessageDataComparator::MatchFlags());
+        QMetaObject::invokeMethod(this, "messagesFoundSlot", Qt::QueuedConnection);
+        _pendingRequestCount++;
+    }
+
     if (enginesToCall & EnginesToCallModest) {
-      qDebug() << "QMessageServicePrivate::queryMessages modest";
-      modestEngineCalled=true;
-      if (ModestEngine::instance()->queryMessages(messageService, filter, sortOrder, limit, offset)) {
-	  qDebug() << "QMessageServicePrivate::queryMessages modest done";
-	  _pendingRequestCount++;
-
+        if (ModestEngine::instance()->queryMessages(messageService, _filter, sortOrder, limit, offset)) {
+            _pendingRequestCount++;
         }
-      qDebug() << "QMessageServicePrivate::queryMessages modest done 2";
     } 
 
-    if (!modestEngineCalled && enginesToCall & EnginesToCallTelepathy && _pendingRequestCount==0 ) {
-      qDebug() << "QMessageServicePrivate::queryMessages only eventloggerengine";
-      if (!_sorted) {
-	MessagingHelper::orderMessages(_ids, sortOrder);
-      }
-      MessagingHelper::applyOffsetAndLimitToMessageIdList(_ids, limit, offset);
-      
-      emit q_ptr->messagesFound(_ids);
-
-      qDebug() << "QMessageServicePrivate::queryMessages setFinished(true)";
-      setFinished(true);
-      
-      _ids.clear();
-      qDebug() << "QMessageServicePrivate::queryMessages return true";
-      return true; // Operation initialized and completed
-    }
-
-
     if (_pendingRequestCount > 0) {
-        _filter = filter;
         _sortOrder = sortOrder;
         _limit = limit;
         _offset = offset;
 
-        _state = QMessageService::ActiveState;
-        emit messageService.stateChanged(_state);
+        stateChanged(QMessageService::ActiveState);
     } else {
-      qDebug() << "QMessageServicePrivate::queryMessages setFinixhed() active=" << _active;
-      if(_active)setFinished(false);
+        _filter = QMessageFilter();
+        setFinished(false);
     }
 
     return _active;
@@ -144,11 +122,13 @@
                                            uint limit, uint offset,
                                            EnginesToCall enginesToCall)
 {
-  qDebug() << "QMessageServicePrivate::queryMessages 2";
     if (_active) {
         return false;
     }
 
+    _filter = filter;
+    MessagingHelper::handleNestedFiltersFromMessageFilter(_filter);
+
     _ids.clear();
     _sorted = true;
     _filtered = true;
@@ -158,44 +138,28 @@
 
     _pendingRequestCount = 0;
 
-    bool modestEngineCalled=false;
-    
     if (enginesToCall & EnginesToCallTelepathy) {
         _ids= EventLoggerEngine::instance()->filterAndOrderMessages(filter,sortOrder,body,matchFlags); 
+        QMetaObject::invokeMethod(this, "messagesFoundSlot", Qt::QueuedConnection);
+        _pendingRequestCount++;
     }
 
     if (enginesToCall & EnginesToCallModest) {
-      modestEngineCalled=true;
-        if (ModestEngine::instance()->queryMessages(messageService, filter, body, matchFlags,
+        if (ModestEngine::instance()->queryMessages(messageService, _filter, body, matchFlags,
                                                     sortOrder, limit, offset)) {
             _pendingRequestCount++;
         }
     }
 
-    if (!modestEngineCalled && enginesToCall & EnginesToCallTelepathy && _pendingRequestCount==0 ) {
-      if (!_sorted) {
-	MessagingHelper::orderMessages(_ids, sortOrder);
-      }
-      MessagingHelper::applyOffsetAndLimitToMessageIdList(_ids, limit, offset);
-      
-      emit q_ptr->messagesFound(_ids);
-      setFinished(true);
-      
-      _ids.clear();
-      qDebug() << "QMessageServicePrivate::queryMessages return true";
-      return true; // Operation initialized and completed
-    }
-
     if (_pendingRequestCount > 0) {
-        _filter = filter;
         _sortOrder = sortOrder;
         _limit = limit;
         _offset = offset;
 
-        _state = QMessageService::ActiveState;
-        emit stateChanged(_state);
+        stateChanged(QMessageService::ActiveState);
     } else {
-      if(_active)setFinished(false);
+        _filter = QMessageFilter();
+        setFinished(false);
     }
 
     return _active;
@@ -209,25 +173,28 @@
         return false;
     }
 
+    QMessageFilter handledFilter = filter;
+    MessagingHelper::handleNestedFiltersFromMessageFilter(handledFilter);
+
     _count = 0;
 
     _active = true;
     _error = QMessageManager::NoError;
 
     _pendingRequestCount = 0;
-    if (enginesToCall & EnginesToCallModest) {
-        if (ModestEngine::instance()->countMessages(messageService, filter)) {
-            _pendingRequestCount++;
-        }
-    }
 
     //TODO: SMS count support
     //if (enginesToCall & EnginesToCallTelepathy) {
     //}
 
+    if (enginesToCall & EnginesToCallModest) {
+        if (ModestEngine::instance()->countMessages(messageService, handledFilter)) {
+            _pendingRequestCount++;
+        }
+    }
+
     if (_pendingRequestCount > 0) {
-        _state = QMessageService::ActiveState;
-        emit stateChanged(_state);
+        stateChanged(QMessageService::ActiveState);
     } else {
         setFinished(false);
     }
@@ -238,7 +205,6 @@
 
 void QMessageServicePrivate::setFinished(bool successful)
 {
-  qDebug() << "setFinished" << successful;
     if (!successful && _pendingRequestCount > 0) {
         _pendingRequestCount--;
     }
@@ -248,23 +214,20 @@
             // We must report an error of some sort
             _error = QMessageManager::RequestIncomplete;
         }
-	qDebug() << "emit stateChanged(FinishedState)";
-        _state = QMessageService::FinishedState;
+
         _active = false;
-        emit q_ptr->stateChanged(_state);
+        stateChanged(QMessageService::FinishedState);
     }
 }
 
 void QMessageServicePrivate::stateChanged(QMessageService::State state)
 {
     _state = state;
-    qDebug() <<" StateChanged" << state;
     emit q_ptr->stateChanged(_state);
 }
 
 void QMessageServicePrivate::messagesFound(const QMessageIdList &ids, bool isFiltered, bool isSorted)
 {
-    qDebug() <<" MessagesFound";
     _pendingRequestCount--;
 
     if (!isFiltered) {
@@ -290,6 +253,8 @@
         }
         MessagingHelper::applyOffsetAndLimitToMessageIdList(_ids, _limit, _offset);
 
+        ModestEngine::instance()->clearHeaderCache();
+
         emit q_ptr->messagesFound(_ids);
 
         setFinished(true);
@@ -303,8 +268,12 @@
 void QMessageServicePrivate::messagesCounted(int count)
 {
     _pendingRequestCount--;
+
     _count += count;
+
     if (_pendingRequestCount == 0) {
+        ModestEngine::instance()->clearHeaderCache();
+
         emit q_ptr->messagesCounted(_count);
 
         setFinished(true);
@@ -318,6 +287,15 @@
     emit q_ptr->progressChanged(value, total);
 }
 
+void QMessageServicePrivate::messagesFoundSlot()
+{
+    messagesFound(QMessageIdList(), true, false);
+}
+
+void QMessageServicePrivate::messagesCountedSlot()
+{
+    messagesCounted(0);
+}
 
 
 QMessageService::QMessageService(QObject *parent)
@@ -561,4 +539,6 @@
     return d_ptr->_error;
 }
 
+#include "moc_qmessageservice_maemo_p.cpp"
+
 QTM_END_NAMESPACE