omadm/lawmo/lawmoplugins/messagingplugin/src/lawmomessagingasyncwipe.cpp
branchRCL_3
changeset 23 c4687ff85147
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/omadm/lawmo/lawmoplugins/messagingplugin/src/lawmomessagingasyncwipe.cpp	Thu Aug 19 09:42:30 2010 +0300
@@ -0,0 +1,285 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Active object for wiping messages, called by lawmomessagingplugin.
+*
+*/
+
+#include <msvids.h>
+#include <f32file.h>
+#include <e32base.h>
+#include "lawmomessagingasyncwipe.h"
+#include "fdebug.h"
+
+// ----------------------------------------------------------------------------- 
+// CActiveWipeObject::CActiveWipeObject
+// Description: CActiveWipeObject constructer . Initializes datamember of MLawmoPluginWipeObserver 
+// ----------------------------------------------------------------------------- 
+//
+CActiveWipeObject::CActiveWipeObject(MLawmoPluginWipeObserver* aObserver) :
+    CActive(EPriorityStandard), iObserver(aObserver), iSession(NULL)
+    {
+    FLOG(
+            _L(" Messaging: CActiveWipeObject::CActiveWipeObject(MLawmoPluginWipeObserver* aObserver) >>"));
+    // See ConstructL() for initialisation completion.
+    FLOG(
+            _L(" Messaging: CActiveWipeObject::CActiveWipeObject(MLawmoPluginWipeObserver* aObserver) <<"));
+    }
+
+// ----------------------------------------------------------------------------- 
+// CActiveWipeObject::NewL
+// Description: CActiveWipeObject constructer 
+// ----------------------------------------------------------------------------- 
+//
+CActiveWipeObject* CActiveWipeObject::NewL(MLawmoPluginWipeObserver* aObserver)
+    {
+    FLOG(_L(" Messaging: CActiveWipeObject* CActiveWipeObject::NewL(MLawmoPluginWipeObserver* aObserver) >>"));
+    CActiveWipeObject* self=new(ELeave) CActiveWipeObject(aObserver);  
+    CleanupStack::PushL(self);
+    self->ConstructL(); 
+    CleanupStack::Pop();
+    FLOG(_L(" Messaging: CActiveWipeObject* CActiveWipeObject::NewL(MLawmoPluginWipeObserver* aObserver) <<"));
+    return self;
+    }
+
+// ----------------------------------------------------------------------------------------
+// CActiveWipeObject::ConstructL
+// ----------------------------------------------------------------------------------------
+void CActiveWipeObject::ConstructL()
+    {
+    FLOG(_L(" Messaging: CActiveWipeObject::ConstructL() >>"));
+
+    iTimer.CreateLocal();
+    User::LeaveIfError(iWs.Connect());
+    CActiveScheduler::Add(this); // Add to scheduler
+    iDummyObserver = new CDummyObserver();
+    FLOG(_L(" Messaging: CActiveWipeObject::ConstructL() <<"));
+    }
+
+void CActiveWipeObject::Close()
+    {
+    FLOG(_L(" Messaging: void CActiveWipeObject::Close() >>"));
+    if (iSession)
+        {
+        FLOG(_L("  delete iSession;"));
+        delete iSession;
+        iSession = NULL;
+        }
+    FLOG(_L(" Messaging: void CActiveWipeObject::Close() <<"));
+    }
+
+//
+//----------------------------------------------------------------------------- 
+// CActiveWipeObject:: CActiveWipeObject
+// Description: CActiveWipeObject Destructer
+// ----------------------------------------------------------------------------- 
+// 
+CActiveWipeObject::~CActiveWipeObject()
+    {
+    FLOG(_L(" Messaging: CActiveWipeObject::~CActiveWipeObject() >>"));
+    Close();
+    if (iDummyObserver)
+        delete iDummyObserver;
+    iWs.Close();
+    iTimer.Close();
+    FLOG(_L(" Messaging: CActiveWipeObject::~CActiveWipeObject() <<"));
+    }
+
+//
+// Description: Deletes message entries one by one. If used by message application, force deletes.
+//
+void CActiveWipeObject::DoJobL(CMsvEntry* aContext)
+    {
+    FLOG(_L(" Messaging: void CLAWMOMessagingplugin::doJobL() >>"));
+
+    TMsvId entryID;
+    CMsvEntrySelection* entries;
+
+    entries = aContext->ChildrenL();
+    CleanupStack::PushL(entries);
+
+    TInt msgCount= entries->Count();
+    FLOG(_L("  msgCount= %d "), msgCount );
+    
+    for (TInt i=msgCount-1; i>=0; i--)
+    { 
+         entryID = entries->At(i);
+         CMsvEntry* entry = iSession->GetEntryL(entryID);
+         CleanupStack::PushL(entry);
+         TRAPD(err, entry->DeleteL(entryID));                                                                            
+         CleanupStack::PopAndDestroy(entry);
+         if(err)
+         {
+             FLOG(_L("  Deleteing entry failed with err= %d "), err);
+             // Force removal of the entry. If no any other way only.  
+             iSession->RemoveEntry(entryID);             
+         }
+    }                
+
+    CleanupStack::PopAndDestroy(entries);
+    FLOG(_L(" Messaging: void CLAWMOMessagingplugin::doJobL() <<"));
+    }
+
+void CActiveWipeObject::InitializeL()
+    {
+    FLOG(_L(" Messaging: void CActiveWipeObject::InitializeL() >>"));
+    iSession = CMsvSession::OpenSyncL(*iDummyObserver);
+    FLOG(_L(" Messaging: void CActiveWipeObject::InitializeL() <<"));
+    }
+
+//
+//----------------------------------------------------------------------------- 
+// CActiveWipeObject::WipeAsyncL
+// Description: Wipes the logs 
+// ---------------------------------------------------------------------------- 
+//
+
+void CActiveWipeObject::WipeAsyncL()
+    {
+    FLOG(_L(" Messaging: void CActiveWipeObject::WipeAsyncL () >>"));
+        
+    if ( !WaitTillMessageAppKilled()) //Application is closed already
+        {
+        TRequestStatus* status = &iStatus;
+        FLOG(_L("  SetActive()"));
+        SetActive();
+        User::RequestComplete(status, KErrNone);
+        }
+    FLOG(_L(" Messaging: void CActiveWipeObject::WipeAsyncL () <<"));
+    }
+
+//
+// Description: Wipes Inbox, Sent Items, Drafts, Outbox messages.
+//
+//
+void CActiveWipeObject::WipeAllL()
+    {
+    FLOG(_L(" Messaging: void  CActiveWipeObject::wipeAll() >>"));
+
+    CMsvEntry* context = NULL;
+    TMsvSelectionOrdering sort;
+
+    sort.SetShowInvisibleEntries(ETrue); // we want to handle also the invisible entries
+    context = CMsvEntry::NewL(*iSession, KMsvGlobalInBoxIndexEntryId, sort); // Reading Messages from Inbox Folder
+    DoJobL(context);
+    delete context;
+
+    context = CMsvEntry::NewL(*iSession, KMsvGlobalOutBoxIndexEntryId, sort); // Reading Messages from Outbox Folderif(KErrNone)
+    DoJobL(context);
+    delete context;
+
+    context = CMsvEntry::NewL(*iSession, KMsvSentEntryId, sort); // Reading Messages from Sent Folder
+    DoJobL(context);
+    delete context;
+
+    context = CMsvEntry::NewL(*iSession, KMsvDraftEntryId, sort); // Reading Messages from Draft Folder
+    DoJobL(context);
+    delete context;
+    FLOG(_L(" Messaging: void  CActiveWipeObject::wipeAll() <<"));
+    }
+
+//
+//----------------------------------------------------------------------------- 
+// CActiveWipeObject::RunError
+// Description: This returns error 
+//----------------------------------------------------------------------------- 
+//
+
+TInt CActiveWipeObject::RunError(TInt aError)
+    {
+    FLOG(_L(" Messaging: TInt CActiveWipeObject::RunError(TInt aError) >>"));
+
+    FLOG(_L(" Messaging: RunError error %d"), aError);
+    iObserver->HandleWipeCompleted(aError);
+
+    FLOG(_L(" Messaging: TInt CActiveWipeObject::RunError(TInt aError) <<"));
+    return KErrNone;
+    }
+
+//
+//----------------------------------------------------------------------------- 
+// CActiveWipeObject::DoCancel
+// Description: This calls CActive's Cancel 
+//----------------------------------------------------------------------------- 
+//
+void CActiveWipeObject::DoCancel()
+    {
+    FLOG(_L(" Messaging: void CActiveWipeObject::DoCancel() >>"));
+    iTimer.Cancel();
+    FLOG(_L(" Messaging: void CActiveWipeObject::DoCancel() <<"));
+    }
+
+//
+//-----------------------------------------------------------------------------
+// CActiveWipeObject::WaitTillMessageAppKilled
+// Description: This function checks for the Messaging applicaiton being run. If running then kill it.
+//-----------------------------------------------------------------------------
+
+TBool CActiveWipeObject::WaitTillMessageAppKilled()
+    {
+    FLOG(_L(" void CTTPAPITestAppUi::WaitTillMessageAppKilled() >>"));
+    TBool ret(EFalse);
+    TBool flag(ETrue);
+
+    TApaTaskList list(iWs);
+    TUid uid =
+        {
+        KMessagingAppUid
+        };
+
+    while (flag)
+        {
+        TApaTask task( list.FindApp( uid ) );
+        if (task.Exists())
+            {
+            FLOG(_L("Killing one instance..."));
+            task.EndTask();
+            User::After(500000);
+            ret = ETrue;
+            }
+        else
+            {
+            flag = EFalse;
+            }
+        }
+    
+    if (ret)
+        {
+        FLOG(_L(" WaitTillMessageAppKilled: iTimer.After(iStatus,2000); "));  
+        iTimer.After(iStatus,2000); // 0.002 sec
+        SetActive();
+        }
+    
+     FLOG(_L(" void CTTPAPITestAppUi::WaitTillMessageAppKilled(), ret = %d <<"), ret);
+     return ret;
+    }
+
+
+
+//
+//----------------------------------------------------------------------------- 
+// CActiveWipeObject::RunL 
+// Description: CActive::RunL implementation which will either stop the
+// Scheduler or increment the count
+//----------------------------------------------------------------------------- 
+//
+void CActiveWipeObject::RunL()
+    {
+    FLOG(_L(" Messaging: void CActiveWipeObject::RunL() >>"));
+    
+    FLOG(_L("void CActiveWipeObject::RunL(): iStatus= %d "), iStatus.Int());
+    InitializeL();    
+    WipeAllL();
+    iObserver->HandleWipeCompleted(KErrNone);
+    FLOG(_L(" Messaging: void CActiveWipeObject::RunL() <<"));
+    }