diff -r e8c1ea2c6496 -r 8758140453c0 email/email/pop/src/T_CopyPopSelection.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/email/email/pop/src/T_CopyPopSelection.cpp Thu Jan 21 12:53:44 2010 +0000 @@ -0,0 +1,250 @@ +// Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the License "Symbian Foundation License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// [TestStep Name] +// CopyPopSelection +// [Paramaters] +// PopAccountName : Name of the Pop account +// TargetFolderName : Name of the target folder to which the entries need to be copied +// Copies the entries to the target. +// [APIs Used] +// CMsvEntry::SetEntryL +// CMsvEntry::CopyL +// +// + + + +/** + @file +*/ + +// User includes +#include "T_CopyPopSelection.h" +#include +#include +#include +#include "T_MsgSharedDataPop.h" + + +// Literals Used +_LIT(KPopAccountName,"PopAccountName"); +_LIT(KTargetFolderName,"TargetFolderName"); +_LIT(KMove, "Move"); +_LIT(KCopyWithinService, "CopyWithinService"); + +/** +CT_MsgCopyPopSelection() +Sets the teststep name to KCopyPopSelection + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session +*/ +CT_MsgCopyPopSelection::CT_MsgCopyPopSelection(CT_MsgSharedDataPop& aSharedDataPOP) +: CT_MsgAsyncStepPOP(aSharedDataPOP) +, iOperation(NULL) + { + SetTestStepName(KCopyPopSelection); + } + +/** +NewL() +Allocates and creates a new CT_MsgCopyPopSelection object + +@param aSharedDataPOP +Data shared across the POP test steps. Ex. Session + +@leave KErrNoMemory +@return +Returns pointer to an object of CT_MsgComparePopEmailMsgs +*/ +CT_MsgCopyPopSelection* CT_MsgCopyPopSelection::NewL(CT_MsgSharedDataPop& aSharedDataPOP) + { + CT_MsgCopyPopSelection* self = new(ELeave) CT_MsgCopyPopSelection(aSharedDataPOP); + CleanupStack::PushL(self); + self->ConstructL(); // Call CT_AsyncStep::ConstructL() + CleanupStack::Pop(self); + return self; + } + + +/** +~CT_MsgCopyPopSelection() +Destructor +*/ +CT_MsgCopyPopSelection::~CT_MsgCopyPopSelection() + { + delete iOperation; + iOperation=NULL; + } + + +/** +ProgressL() + +@param +*/ +void CT_MsgCopyPopSelection::ProgressL(TBool bFinal) + { + // TODO + if (bFinal) + { + // Display final progress iOperation + } + else + { + // Display current progress iOperation + } + } + + +/** +CancelStep() + +*/ +void CT_MsgCopyPopSelection::CancelStep() + { + iOperation->Cancel(); + } + + +/** +doTestStepL() +A connection with the POP server is established in the doTestStepPreambleL of the +base class. Reads the Pop account name from the ini file. It obtains a selection of +the entires under POP account given. It copies these entries into the specified target folder. + +@return +Returns the test step result +*/ +TVerdict CT_MsgCopyPopSelection::doTestStepL() + { + INFO_PRINTF1(_L("TestStep : CopyPopSelection")); + // Read the POP account name from the ini file + TPtrC popAccountName; + if(!GetStringFromConfig(ConfigSection(), KPopAccountName, popAccountName)) + { + ERR_PRINTF1(_L("Pop Account Name is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieving the Pop service Id for the given Pop account + TMsvId popServiceId = CT_MsgUtilsCentralRepository::GetPopServiceIdL((TDes&)popAccountName); + INFO_PRINTF2(_L("Pop service id is %d"),popServiceId); + + if(popServiceId == KMsvNullIndexEntryId) + { + ERR_PRINTF1(_L("Invalid POP account name specified")); + SetTestStepResult(EFail); + } + else + { + TMsvId targetFolderId = KErrNotFound; + TBool copyWithinService = EFalse; + GetBoolFromConfig(ConfigSection(), KCopyWithinService, copyWithinService); + + if (!copyWithinService) + { + TPtrC targetFolderName; + if(!GetStringFromConfig(ConfigSection(), KTargetFolderName, targetFolderName)) + { + ERR_PRINTF1(_L("Target Folder is not specified")); + SetTestStepResult(EFail); + } + else + { + // Retrieves the folder Id based on the local folder name read from the ini file + targetFolderId = CT_MsgUtilsEnumConverter::FindFolderIdByName(targetFolderName); + if(targetFolderId == KErrNotFound) + { + ERR_PRINTF1(_L("Invalid local folder name specified")); + SetTestStepResult(EFail); + } + } + } + + if (copyWithinService || targetFolderId != KErrNotFound) + { + // Get a selection of the children entries for the Pop account + CMsvEntrySelection* selection = CT_MsgUtils::CreateChildrenSelectionL(iSharedDataPOP.iSession, + popServiceId); + CleanupStack::PushL(selection); + + // Check if there are no entries under the remote folder + TInt count = selection->Count(); + if (count == 0) + { + User::Leave(KErrArgument); + } + // Fetch the Id of the first entry + TMsvId entryId = (*selection)[0]; + + // Creates a new CMsvEntry for the specified entry ID. + CMsvEntry* entry = CMsvEntry::NewL(*iSharedDataPOP.iSession,entryId,TMsvSelectionOrdering()); + CleanupStack::PushL(entry); + + // Sets the context to the parent of the specified entry. + entry->SetEntryL(entryId); + entry->SetEntryL(entry->Entry().Parent()); + + TBool isMove = EFalse; + if(GetBoolFromConfig(ConfigSection(), KMove, isMove)) + { + INFO_PRINTF1(_L("Is move")); + } + + CT_MsgActive& active=Active(); + + if (copyWithinService) + { + if (isMove) + { + iOperation = entry->MoveL(*selection,popServiceId, active.iStatus); + } + else + { + iOperation = entry->CopyL(*selection,popServiceId, active.iStatus); + } + } + else + { + if (isMove) + { + iOperation = entry->MoveL(*selection,targetFolderId, active.iStatus); + } + else + { + iOperation = entry->CopyL(*selection,targetFolderId, active.iStatus); + } + } + + active.Activate(); + CActiveScheduler::Start(); + + // Get the error code from TPop3Progress + TPop3Progress temp; + TPckgC paramPack(temp); + paramPack.Set(iOperation->ProgressL()); + TPop3Progress progress=paramPack(); + SetTestStepError(progress.iErrorCode); + + delete iOperation; + iOperation=NULL; + CleanupStack::PopAndDestroy(2,selection); //operation,entry,selection + User::LeaveIfError(active.Result()); + } + } + } + return TestStepResult(); + }