diff -r e7aa27f58ae1 -r 578830873419 emailservices/emailcommon/src/CFSMailRequestHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailcommon/src/CFSMailRequestHandler.cpp Fri Apr 16 14:51:52 2010 +0300 @@ -0,0 +1,276 @@ +/* +* Copyright (c) 2007-2008 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: plugin request handler +* +*/ + + +#include +#include "emailtrace.h" +#include "CFSMailRequestHandler.h" +#include "CFSMailRequestObserver.h" + + +// ================= MEMBER FUNCTIONS ========================================== +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::CFSMailRequestHandler +// ----------------------------------------------------------------------------- + CFSMailRequestHandler::CFSMailRequestHandler() : iRequestId(0) +{ + FUNC_LOG; + + // store pointer to TLS + TInt err = Dll::SetTls(static_cast(this)); + + // reset + iPendingRequests.Reset(); + iPluginList.Reset(); + + iTempDirName =NULL; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::~CFSMailRequestHandler +// ----------------------------------------------------------------------------- + CFSMailRequestHandler::~CFSMailRequestHandler() +{ + FUNC_LOG; + TRAP_IGNORE( CancelAllRequestsL() ); + RemoveAllRequests(); + iPendingRequests.Reset(); + iPluginList.ResetAndDestroy(); + + if(iTempDirName) + { + delete iTempDirName; + // close file server connection + iFs.Close(); + } +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::NewLC +// ----------------------------------------------------------------------------- + CFSMailRequestHandler* CFSMailRequestHandler::NewLC( + RPointerArray& aPluginInfo, + RPointerArray& aPlugins ) +{ + FUNC_LOG; + CFSMailRequestHandler* pluginHandler = new (ELeave) CFSMailRequestHandler(); + CleanupStack:: PushL(pluginHandler); + pluginHandler->ConstructL( aPluginInfo, aPlugins ); + return pluginHandler; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::NewL +// ----------------------------------------------------------------------------- + CFSMailRequestHandler* CFSMailRequestHandler::NewL( + RPointerArray& aPluginInfo, + RPointerArray& aPlugins ) +{ + FUNC_LOG; + CFSMailRequestHandler* pluginHandler = + CFSMailRequestHandler::NewLC( aPluginInfo, aPlugins ); + CleanupStack:: Pop(pluginHandler); + return pluginHandler; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::ConstructL +// ----------------------------------------------------------------------------- +void CFSMailRequestHandler::ConstructL( + RPointerArray /*aPluginInfo*/, + RPointerArray /*aPlugins*/ ) +{ + FUNC_LOG; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::GetPluginByUid +// ----------------------------------------------------------------------------- + CFSMailPlugin* CFSMailRequestHandler::GetPluginByUid( TFSMailMsgId aObjectId ) +{ + FUNC_LOG; + + for(TInt i=0;iiPluginId.iUid == aObjectId.PluginId().iUid) + { + return iPluginList[i]->iPlugin; + } + } + return NULL; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::InitAsyncRequestL +// ----------------------------------------------------------------------------- + TFSPendingRequest CFSMailRequestHandler::InitAsyncRequestL( + TUid aPluginId, + MFSMailRequestObserver& aOperationObserver ) +{ + FUNC_LOG; + TFSPendingRequest newRequest; + for(TInt i=0;iSetUserObserver(aOperationObserver); + newRequest = iPendingRequests[i]; + return newRequest; + } + } + + newRequest.iRequestId = iPendingRequests.Count(); + newRequest.iPluginId = aPluginId; + newRequest.iRequestStatus = TFSPendingRequest::EFSRequestPending; + CFSMailRequestObserver* observer = + CFSMailRequestObserver::NewL(*this, aOperationObserver); + newRequest.iObserver = observer; + iPendingRequests.Append(newRequest); + + return newRequest; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::CompleteRequest +// ----------------------------------------------------------------------------- + void CFSMailRequestHandler::CompleteRequest( TInt aRequestId ) +{ + FUNC_LOG; + for(TInt i=0;iCancelL(aRequestId); + iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestCancelled; + break; + } + } +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::CancelAllRequestsL +// ----------------------------------------------------------------------------- + void CFSMailRequestHandler::CancelAllRequestsL( ) +{ + FUNC_LOG; + for(TInt i=0;iCancelL(iPendingRequests[i].iRequestId); + iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestCancelled; + } + } +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::AddPluginL +// ----------------------------------------------------------------------------- + void CFSMailRequestHandler::AddPluginL( TUid aPluginId, CFSMailPlugin* aPlugin ) +{ + FUNC_LOG; + + CFSMailPluginData* pluginData = new (ELeave) CFSMailPluginData; + pluginData->iPluginId = aPluginId; + pluginData->iPlugin = aPlugin; + iPluginList.Append(pluginData); +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::RemoveAllRequests +// ----------------------------------------------------------------------------- +void CFSMailRequestHandler::RemoveAllRequests() +{ + FUNC_LOG; + for(TInt i=0;i + RFile CFSMailRequestHandler::GetTempFileL( TFSMailMsgId aContentId, TFileName aFileName ) +// +{ + FUNC_LOG; + + // get temp dir path + // + if(!iTempDirName) + // + { + // open file server connection + User::LeaveIfError(iFs.Connect()); + iFs.CreatePrivatePath(EDriveC); + iTempDirName = HBufC::NewL(20); + TPtr ptr = iTempDirName->Des(); + iFs.PrivatePath(ptr); + } + + // create temp file + RFile file; + aFileName.Append(iTempDirName->Des()); + aFileName.AppendNum(aContentId.PluginId().iUid); + aFileName.AppendNum(aContentId.Id()); + file.Replace(iFs,aFileName,EFileWrite); + return file; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::CleanTempDirL +// ----------------------------------------------------------------------------- + void CFSMailRequestHandler::CleanTempDirL( ) +{ + FUNC_LOG; +} + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::GetTempDirL +// ----------------------------------------------------------------------------- + TDesC& CFSMailRequestHandler::GetTempDirL( ) +{ + FUNC_LOG; + return *iTempDirName; +} +