diff -r 000000000000 -r 8466d47a6819 emailservices/emailframework/commonlib/src/CFSMailRequestHandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailservices/emailframework/commonlib/src/CFSMailRequestHandler.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,290 @@ +/* +* 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 "emailtrace.h" +#include "CFSMailRequestHandler.h" +#include "CFSMailRequestObserver.h" + + +// ================= MEMBER FUNCTIONS ========================================== +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::CFSMailRequestHandler +// ----------------------------------------------------------------------------- +EXPORT_C 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 +// ----------------------------------------------------------------------------- +EXPORT_C CFSMailRequestHandler::~CFSMailRequestHandler() + { + FUNC_LOG; + TRAP_IGNORE( CancelAllRequestsL() ); + RemoveAllRequests(); + iPendingRequests.Reset(); + iPluginList.ResetAndDestroy(); + + if(iTempDirName) + { + delete iTempDirName; + // close file server connection + iFs.Close(); + } + } + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::NewLC +// ----------------------------------------------------------------------------- +EXPORT_C 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 +// ----------------------------------------------------------------------------- +EXPORT_C 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 +// ----------------------------------------------------------------------------- +EXPORT_C CFSMailPlugin* CFSMailRequestHandler::GetPluginByUid(TFSMailMsgId aObjectId) + { + FUNC_LOG; + + for(TInt i=0;iiPluginId.iUid == aObjectId.PluginId().iUid) + { + return iPluginList[i]->iPlugin; + } + } + + + return NULL; + } + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::InitAsyncRequestL +// ----------------------------------------------------------------------------- +EXPORT_C 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 +// ----------------------------------------------------------------------------- +EXPORT_C void CFSMailRequestHandler::CompleteRequest( TInt aRequestId ) + { + FUNC_LOG; + for(TInt i=0;iCancelL(aRequestId); + iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestCancelled; + break; + } + } + } + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::CancelAllRequestsL +// ----------------------------------------------------------------------------- +EXPORT_C void CFSMailRequestHandler::CancelAllRequestsL( ) + { + FUNC_LOG; + for(TInt i=0;iCancelL(iPendingRequests[i].iRequestId); + iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestCancelled; + } + } + } + +// ----------------------------------------------------------------------------- +// CFSMailRequestHandler::AddPluginL +// ----------------------------------------------------------------------------- +EXPORT_C 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;iDes(); + 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 +// ----------------------------------------------------------------------------- +EXPORT_C void CFSMailRequestHandler::CleanTempDirL( ) + { + FUNC_LOG; + + /* list existing temp files + CDir* dir = NULL; + User::LeaveIfError(iFs.GetDir(*iTempDirName, KEntryAttNormal, ESortNone, dir)); + + // delete all temp files + CDir files = *dir; + for(TInt i=0;i