diff -r 9360ca28b668 -r c4687ff85147 omadm/lawmo/lawmoplugins/messagingplugin/src/lawmomessagingasyncwipe.cpp --- /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 +#include +#include +#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() <<")); + }