messagingapp/msgappfw/server/src/ccsconversationdeletehandler.cpp
changeset 37 518b245aa84c
parent 25 84d9eb65b26f
equal deleted inserted replaced
25:84d9eb65b26f 37:518b245aa84c
    17 // INCLUDES
    17 // INCLUDES
    18 #include <ccsclientconversation.h>
    18 #include <ccsclientconversation.h>
    19 #include <ccsconversationentry.h>
    19 #include <ccsconversationentry.h>
    20 #include "ccsconversationcache.h"
    20 #include "ccsconversationcache.h"
    21 #include "ccsconversationdeletehandler.h"
    21 #include "ccsconversationdeletehandler.h"
    22 #include "mcsconversationdeleteobserver.h"
       
    23 
    22 
    24 // ----------------------------------------------------------------------------
    23 // ----------------------------------------------------------------------------
    25 // CCsConversationDeleteHandler::NewL
    24 // CCsConversationDeleteHandler::NewL
    26 // Two Phase Construction
    25 // Two Phase Construction
    27 // ----------------------------------------------------------------------------
    26 // ----------------------------------------------------------------------------
    28 CCsConversationDeleteHandler* CCsConversationDeleteHandler::
    27 CCsConversationDeleteHandler* CCsConversationDeleteHandler::
    29 NewL(CCsConversationCache* aCache, MCsConversationDeleteObserver* aObserver)
    28 NewL(CCsConversationCache* aCache)
    30     {
    29     {
    31     CCsConversationDeleteHandler* self = 
    30     CCsConversationDeleteHandler* self = 
    32             new (ELeave) CCsConversationDeleteHandler();
    31             new (ELeave) CCsConversationDeleteHandler();
    33     CleanupStack::PushL(self);
    32     CleanupStack::PushL(self);
    34     self->ConstructL(aCache, aObserver);
    33     self->ConstructL(aCache);
    35     CleanupStack::Pop(self); // self
    34     CleanupStack::Pop(self); // self
    36     return self;
    35     return self;
    37     }
    36     }
    38 
    37 
    39 // ----------------------------------------------------------------------------
    38 // ----------------------------------------------------------------------------
    40 // Constructor
    39 // Constructor
    41 // ----------------------------------------------------------------------------
    40 // ----------------------------------------------------------------------------
    42 CCsConversationDeleteHandler::CCsConversationDeleteHandler():
    41 CCsConversationDeleteHandler::CCsConversationDeleteHandler():
    43         CActive(CActive::EPriorityLow)
    42         CActive(CActive::EPriorityLow),
       
    43         iState(EIdle),
       
    44         iConversationEntryList(NULL)
    44     {
    45     {
    45     CActiveScheduler::Add( this );
    46     CActiveScheduler::Add( this );
    46     }
    47     }
    47 
    48 
    48 // ----------------------------------------------------------------------------
    49 // ----------------------------------------------------------------------------
    49 // Constructor
    50 // Constructor
    50 // ----------------------------------------------------------------------------
    51 // ----------------------------------------------------------------------------
    51 void CCsConversationDeleteHandler::ConstructL(CCsConversationCache* aCache,
    52 void CCsConversationDeleteHandler::ConstructL(CCsConversationCache* aCache)
    52         MCsConversationDeleteObserver* aObserver)
       
    53     {
    53     {
    54     iCache = aCache;
    54     iCache = aCache;
    55     iState = EIdle;
       
    56     iObserver = aObserver;
       
    57     
       
    58     iConversationEntryList = new (ELeave)RPointerArray<CCsConversationEntry> ();  
       
    59     iSession = CMsvSession::OpenSyncL(*this);
    55     iSession = CMsvSession::OpenSyncL(*this);
    60     }
    56     }
    61 
    57 
    62 // ----------------------------------------------------------------------------
    58 // ----------------------------------------------------------------------------
    63 // Destructor
    59 // Destructor
    64 // ----------------------------------------------------------------------------
    60 // ----------------------------------------------------------------------------
    65 CCsConversationDeleteHandler::~CCsConversationDeleteHandler()
    61 CCsConversationDeleteHandler::~CCsConversationDeleteHandler()
    66     {
    62 {
       
    63     // Make sure Aync request cancel.
       
    64     Cancel();
       
    65     
    67     if(iSession)
    66     if(iSession)
    68         {
    67         {
    69         delete iSession;
    68         delete iSession;
    70         iSession = NULL;
    69         iSession = NULL;
    71         }
    70         }
    72     }
    71     
       
    72     if (iConversationEntryList)
       
    73     {
       
    74         iConversationEntryList->ResetAndDestroy();
       
    75         iConversationEntryList->Close();
       
    76         delete iConversationEntryList;
       
    77         iConversationEntryList = NULL;
       
    78     }
       
    79 }
    73 
    80 
    74 // ----------------------------------------------------------------------------
    81 // ----------------------------------------------------------------------------
    75 // Delete set of messages
    82 // Delete set of messages
    76 // ----------------------------------------------------------------------------
    83 // ----------------------------------------------------------------------------
    77 void CCsConversationDeleteHandler::DeleteL(TInt aConversationId)
    84 void CCsConversationDeleteHandler::DeleteL(TInt aConversationId)
    78     {
    85     {
    79     // Check if delete in progress
    86     // Check if delete in progress
    80     if ( iCache->IsDeleted(aConversationId) )
    87     if ( iCache->IsDeleted(aConversationId) )
    81         {
    88         {
    82         iObserver->DeleteInProgress(this);
    89         // Deletion is in progress for this conversation, so clean up this AO
       
    90         delete this;
    83         return;
    91         return;
    84         }
    92         }
    85     
    93     
    86     // Store conversationId currently being deleted.
    94     // Store conversationId currently being deleted.
    87     iConversationId = aConversationId;
    95     iConversationId = aConversationId;
    97     // Get conversationlist for given client conversation
   105     // Get conversationlist for given client conversation
    98     iCache->GetConversationsL (clientConversation, iConversationEntryList);
   106     iCache->GetConversationsL (clientConversation, iConversationEntryList);
    99     iCache->MarkConversationAsDeleted(iConversationId, ETrue);
   107     iCache->MarkConversationAsDeleted(iConversationId, ETrue);
   100     
   108     
   101     iDeletedCount = 0;
   109     iDeletedCount = 0;
       
   110     iSendStateMsgs = 0;
   102     
   111     
   103     // Cleanup  
   112     // Cleanup  
   104     CleanupStack::PopAndDestroy(clientConversation);
   113     CleanupStack::PopAndDestroy(clientConversation);
   105         
   114         
   106     iState = EDeleteStart;
   115     iState = EDeleteStart;
   118     TInt id = entry->EntryId();
   127     TInt id = entry->EntryId();
   119     
   128     
   120     if ( ECsSendStateSending != entry->GetSendState() )
   129     if ( ECsSendStateSending != entry->GetSendState() )
   121         {
   130         {
   122         iSession->RemoveEntry(id);
   131         iSession->RemoveEntry(id);
       
   132         }
       
   133     else
       
   134         {
       
   135         iSendStateMsgs++;
   123         }
   136         }
   124     }
   137     }
   125 
   138 
   126 // ----------------------------------------------------------------------------
   139 // ----------------------------------------------------------------------------
   127 // RunL
   140 // RunL
   158                 IssueRequest();
   171                 IssueRequest();
   159                 }
   172                 }
   160             break;
   173             break;
   161             
   174             
   162         case EDeleteComplete:
   175         case EDeleteComplete:
   163             // Mark delete complete.
   176             iCache->MarkConversationAsDeleted(iConversationId, EFalse, iSendStateMsgs );
   164             iCache->MarkConversationAsDeleted(iConversationId, EFalse);
   177             delete this;
   165             // Cleanup
       
   166             iDeletedCount = 0;
       
   167             iConversationEntryList->ResetAndDestroy();
       
   168             iConversationEntryList->Close();
       
   169             delete iConversationEntryList;
       
   170             iConversationEntryList = NULL;  
       
   171             
       
   172             // Notify observers
       
   173             iObserver->DeleteComplete(this);
       
   174             break;
   178             break;
   175         }
   179         }
   176     }
   180     }
   177 
   181 
   178 // ----------------------------------------------------------------------------
   182 // ----------------------------------------------------------------------------