messagingapp/msgappfw/msghistory/src/msghistoryprivate.cpp
changeset 52 12db4185673b
parent 43 35b64624a9e7
--- a/messagingapp/msgappfw/msghistory/src/msghistoryprivate.cpp	Tue Jul 06 14:12:40 2010 +0300
+++ b/messagingapp/msgappfw/msghistory/src/msghistoryprivate.cpp	Wed Aug 18 09:45:25 2010 +0300
@@ -29,14 +29,20 @@
 // CONSTANTS
 _LIT(KUnixEpoch, "19700000:000000.000000");
 
+const TInt KMaxConversationIPCLimit = 250;
+
 
 //---------------------------------------------------------------
 // MsgHistoryPrivate::MsgHistoryPrivate
 // @see header
 //---------------------------------------------------------------
 MsgHistoryPrivate::MsgHistoryPrivate( MsgHistoryImpl* ptr )
-:q_ptr(ptr)
-    {    
+:CActive(EPriorityStandard),
+currentState(EInit),
+q_ptr(ptr) 
+
+    { 
+    CActiveScheduler::Add(this);
     handler = CCSRequestHandler::NewL();
     handler->RequestResultsEventL(this);
     }
@@ -49,15 +55,69 @@
     {
     if ( handler )
         delete handler;
+     if(msgs.count())
+        {
+         msgs.clear();
+        }
+    // Cancel the active Object 
+    Cancel();
     }
 
+// ---------------------------------------------------------------------------
+// RunL
+// ---------------------------------------------------------------------------
+//
+void MsgHistoryPrivate::RunL()
+{
+    if (iStatus != KErrNone)
+    {
+        return;
+    }
+    //process
+    switch (currentState)
+    {
+       case EFetchMoreConversations:
+           GetMessagingHistory(contactId, msgs.count());
+            break;
+    }
+}
+
+// ---------------------------------------------------------------------------
+// DoCancel
+// ---------------------------------------------------------------------------
+//
+void MsgHistoryPrivate::DoCancel()
+{
+    currentState = EInit;
+    contactId = -1;
+   
+}
+
+// ---------------------------------------------------------------------------
+// Make the active object alive.
+// ---------------------------------------------------------------------------
+//
+void MsgHistoryPrivate::IssueRequest()
+{
+    if (!IsActive())
+    {
+        iStatus = KRequestPending;
+        TRequestStatus* status = &iStatus;
+        SetActive();
+        User::RequestComplete(status, KErrNone);
+    }
+}
 //---------------------------------------------------------------
 // MsgHistoryPrivate::GetMessagingHistory
 // @see header
 //---------------------------------------------------------------
-TBool MsgHistoryPrivate::GetMessagingHistory( const TInt aContactId )
+TBool MsgHistoryPrivate::GetMessagingHistory( const TInt aContactId ,
+                                              TInt aKnownIndex)
     {
-    TRAPD(err, handler->GetMessagingHistoryL(aContactId));
+    contactId = aContactId;
+    TRAPD(err, handler->GetMessagingHistoryL(contactId,
+                                             aKnownIndex,
+                                             KMaxConversationIPCLimit));
     if ( err == KErrNone )
         return ETrue;
 
@@ -160,18 +220,29 @@
 // @see header
 //---------------------------------------------------------------
 void MsgHistoryPrivate::Conversations
-( RPointerArray<CCsConversationEntry>& aConversationEntryList )
+( RPointerArray<CCsConversationEntry>& aConversationEntryList,
+        TInt& aTotalCount)
     {
-    QList<MsgItem> msgs;
-
-    for(TInt i=aConversationEntryList.Count()-1; i >= 0; --i )
+ 
+    for(TInt i = 0 ; i < aConversationEntryList.Count(); i++ )
         {
         MsgItem item;
         PopulateMsgItem(item,*(aConversationEntryList[i]));
         msgs.append(item);
         }  
-    //emit signal
-    q_ptr->messagesReadyEvent(msgs);
+    //emit signal, when all the messages in the conversation are fetched.
+    if(msgs.count()== aTotalCount)
+        {
+            currentState = EInit;
+            q_ptr->messagesReadyEvent(msgs);
+            msgs.clear();
+
+        }
+        else
+        {
+            currentState = EFetchMoreConversations;
+            IssueRequest();
+        }
     }
 
 //---------------------------------------------------------------