// Copyright (c) 2002-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:
// $Workfile: AddObexAttachmentState.cpp $
// $Author: Simonk $
// $Revision: 4 $
// $Date: 29/01/02 11:23 $
//
//
#include "AddObexAttachmentState.h"
//TODO:- check that all these headers are required
// System includes
#include <btmsgtypeuid.h> // KUidMsgTypeBt
#include <btmtmcmds.h> // TBtMtmAsyncCmds
#include <irmsgtypeuid.h> // KUidMsgTypeIr
#include <irmtmcmds.h> // TIrMtmAsyncCmds
#include <obexMtmUtil.h> // CObexMtmFileNameExternaliser
#include <msvuids.h> // KUidMsvMessageEntry
#include <obexclientmtm.h>
#include <mmsvattachmentmanager.h>
#include <cmsvattachment.h>
#include "casyncwaiter.h"
// User includes
#include "obexharness.h"
#include "obextestutils.h" // CObexTestUtils
//
// CAddObexAttachmentAsEntryState
//
CAddObexAttachmentAsEntryState::CAddObexAttachmentAsEntryState(const TDesC& aFileName, CObexClientTest& aClientTest) :
iClientTest(aClientTest),
iFileName(aFileName)
{
}
void CAddObexAttachmentAsEntryState::StartL(TRequestStatus& aStatus)
{
// Add an attachment as a child entry
CBaseMtm& clientMtm = iClientTest.ObexTestUtils().GetCurrentObexClientMtm();
CMsvEntry& entry = clientMtm.Entry();
CMsvStore* store = entry.EditStoreL();
CleanupStack::PushL(store);
CAsyncWaiter* waiter = CAsyncWaiter::NewL();
CleanupStack::PushL(waiter);
CMsvAttachment* attachment = CMsvAttachment::NewL(CMsvAttachment::EMsvFile);
CleanupStack::PushL(attachment);
TParse fileNameParser;
User::LeaveIfError(fileNameParser.Set(iFileName, NULL, NULL));
attachment->SetAttachmentNameL(fileNameParser.NameAndExt());
store->AttachmentManagerL().AddAttachmentL(iFileName, attachment, waiter->iStatus);
CleanupStack::Pop(attachment);
waiter->StartAndWait();
User::LeaveIfError(waiter->Result());
CleanupStack::PopAndDestroy(waiter);
store->CommitL();
CleanupStack::PopAndDestroy(store);
TRequestStatus* status = &aStatus;
User::RequestComplete(status, KErrNone);
}
//
// CAddObexAttachmentByNameState
//
CAddObexAttachmentByNameState::CAddObexAttachmentByNameState(const TDesC& aFileName, CObexClientTest& aClientTest) :
iClientTest(aClientTest),
iFileName(aFileName)
{
}
void CAddObexAttachmentByNameState::StartL(TRequestStatus& aStatus)
{
// Get the attachment list and append the file path to it
RPointerArray<CObexTestFilenameAndHeaders>& attachments = iClientTest.Attachments();
CObexTestFilenameAndHeaders* obexPackage = CObexTestFilenameAndHeaders::NewL();
CleanupStack::PushL(obexPackage);
// set the filename but no headers
obexPackage->iFileName = iFileName;
User::LeaveIfError(attachments.Append(obexPackage));
CleanupStack::Pop(obexPackage); // ownership passed to array
// Complete the state.
TRequestStatus* status = &aStatus;
User::RequestComplete(status, KErrNone);
}
//
// CAddObexAttachmentByNameWithHeadersState
//
CAddObexAttachmentByNameWithHeadersState::CAddObexAttachmentByNameWithHeadersState(const TDesC& aFileName, CObexClientTest& aClientTest) :
iClientTest(aClientTest),
iFileName(aFileName)
{
}
void CAddObexAttachmentByNameWithHeadersState::StartL(TRequestStatus& aStatus)
{
// Get the attachment list and append the file path to it
RPointerArray<CObexTestFilenameAndHeaders>& attachments = iClientTest.Attachments();
CObexTestFilenameAndHeaders* obexPackage = CObexTestFilenameAndHeaders::NewL();
CleanupStack::PushL(obexPackage);
// set the filename and the headers
obexPackage->iFileName = iFileName;
CObexHeaderList* currentHeaders = iClientTest.CurrentHeaders();
obexPackage->iHeaderList = currentHeaders;
iClientTest.ReleaseCurrentHeaders(); // Release ownership of current headers.
User::LeaveIfError(attachments.Append(obexPackage));
CleanupStack::Pop(obexPackage); // ownership passed to array
// Complete the state.
TRequestStatus* status = &aStatus;
User::RequestComplete(status, KErrNone);
}