emailservices/emailcommon/src/CFSMailRequestHandler.cpp
changeset 72 64e38f08e49c
parent 59 16ed8d08d0b1
child 68 83cc6bae1de8
equal deleted inserted replaced
65:478bc57ad291 72:64e38f08e49c
     1 /*
     1 /*
     2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies). 
     2 * Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
    24 
    24 
    25 #include "CFSMailRequestHandler.h"
    25 #include "CFSMailRequestHandler.h"
    26 #include "CFSMailRequestObserver.h"
    26 #include "CFSMailRequestObserver.h"
    27 
    27 
    28 
    28 
    29 // ================= MEMBER FUNCTIONS ==========================================    
    29 // ================= MEMBER FUNCTIONS ==========================================
    30 // -----------------------------------------------------------------------------
    30 // -----------------------------------------------------------------------------
    31 // CFSMailRequestHandler::CFSMailRequestHandler
    31 // CFSMailRequestHandler::CFSMailRequestHandler
    32 // -----------------------------------------------------------------------------
    32 // -----------------------------------------------------------------------------
    33  CFSMailRequestHandler::CFSMailRequestHandler() : iRequestId(0)
    33  CFSMailRequestHandler::CFSMailRequestHandler() : iRequestId(0)
    34 {
    34 {
    35     NM_FUNCTION;
    35     NM_FUNCTION;
    36 
    36 
    37     // store pointer to TLS
    37     // store pointer to TLS
    38     TInt err = Dll::SetTls(static_cast<TAny*>(this));
    38     TInt err = Dll::SetTls(static_cast<TAny*>(this));
    39 
    39 
    40     // reset 
    40     // reset
    41     iPendingRequests.Reset();
    41     iPendingRequests.Reset();
    42     iPluginList.Reset();
    42     iPluginList.Reset();
    43     
    43 
    44     iTempDirName =NULL;
    44     iTempDirName =NULL;
    45 }
    45 }
    46 
    46 
    47 // -----------------------------------------------------------------------------
    47 // -----------------------------------------------------------------------------
    48 // CFSMailRequestHandler::~CFSMailRequestHandler
    48 // CFSMailRequestHandler::~CFSMailRequestHandler
    49 // -----------------------------------------------------------------------------
    49 // -----------------------------------------------------------------------------
    50  CFSMailRequestHandler::~CFSMailRequestHandler()
    50  CFSMailRequestHandler::~CFSMailRequestHandler()
    51     {
    51     {
    52     NM_FUNCTION;
    52     NM_FUNCTION;
    53     
    53 
    54     TRAP_IGNORE( CancelAllRequestsL() );
    54     TRAP_IGNORE( CancelAllRequestsL() );
    55     RemoveAllRequests();
    55     RemoveAllRequests();
    56     iPendingRequests.Reset();
    56     iPendingRequests.Reset();
    57     iPluginList.ResetAndDestroy();
    57     iPluginList.ResetAndDestroy();
    58     
    58 
    59     if(iTempDirName)
    59     if(iTempDirName)
    60         {
    60         {
    61         delete iTempDirName;
    61         delete iTempDirName;
    62         // close file server connection
    62         // close file server connection
    63         iFs.Close();        
    63         iFs.Close();
    64         }
    64         }
    65     
    65 
    66     // clear TLS
    66     // clear TLS
    67     Dll::FreeTls();
    67     Dll::FreeTls();
    68     }
    68     }
    69 
    69 
    70 // -----------------------------------------------------------------------------
    70 // -----------------------------------------------------------------------------
    71 // CFSMailRequestHandler::NewLC
    71 // CFSMailRequestHandler::NewLC
    72 // -----------------------------------------------------------------------------
    72 // -----------------------------------------------------------------------------
    73  CFSMailRequestHandler* CFSMailRequestHandler::NewLC( 
    73  CFSMailRequestHandler* CFSMailRequestHandler::NewLC(
    74                                     RPointerArray<CImplementationInformation>& aPluginInfo,
    74                                     RPointerArray<CImplementationInformation>& aPluginInfo,
    75                                     RPointerArray<CFSMailPlugin>& aPlugins )
    75                                     RPointerArray<CFSMailPlugin>& aPlugins )
    76 {
    76 {
    77     NM_FUNCTION;
    77     NM_FUNCTION;
    78     
    78 
    79     CFSMailRequestHandler* pluginHandler = new (ELeave) CFSMailRequestHandler();
    79     CFSMailRequestHandler* pluginHandler = new (ELeave) CFSMailRequestHandler();
    80     CleanupStack:: PushL(pluginHandler);
    80     CleanupStack:: PushL(pluginHandler);
    81     pluginHandler->ConstructL( aPluginInfo, aPlugins );
    81     pluginHandler->ConstructL( aPluginInfo, aPlugins );
    82     return pluginHandler;
    82     return pluginHandler;
    83 } 
    83 }
    84 
    84 
    85 // -----------------------------------------------------------------------------
    85 // -----------------------------------------------------------------------------
    86 // CFSMailRequestHandler::NewL
    86 // CFSMailRequestHandler::NewL
    87 // -----------------------------------------------------------------------------
    87 // -----------------------------------------------------------------------------
    88  CFSMailRequestHandler* CFSMailRequestHandler::NewL( 
    88  CFSMailRequestHandler* CFSMailRequestHandler::NewL(
    89                                     RPointerArray<CImplementationInformation>& aPluginInfo,
    89                                     RPointerArray<CImplementationInformation>& aPluginInfo,
    90                                     RPointerArray<CFSMailPlugin>& aPlugins )
    90                                     RPointerArray<CFSMailPlugin>& aPlugins )
    91 {
    91 {
    92     NM_FUNCTION;
    92     NM_FUNCTION;
    93     
    93 
    94     CFSMailRequestHandler* pluginHandler =  
    94     CFSMailRequestHandler* pluginHandler =
    95         CFSMailRequestHandler::NewLC( aPluginInfo, aPlugins );
    95         CFSMailRequestHandler::NewLC( aPluginInfo, aPlugins );
    96     CleanupStack:: Pop(pluginHandler);
    96     CleanupStack:: Pop(pluginHandler);
    97     return pluginHandler;
    97     return pluginHandler;
    98 }
    98 }
    99 
    99 
   100 // -----------------------------------------------------------------------------
   100 // -----------------------------------------------------------------------------
   101 // CFSMailRequestHandler::ConstructL
   101 // CFSMailRequestHandler::ConstructL
   102 // -----------------------------------------------------------------------------
   102 // -----------------------------------------------------------------------------
   103 void CFSMailRequestHandler::ConstructL( 
   103 void CFSMailRequestHandler::ConstructL(
   104                                 RPointerArray<CImplementationInformation> /*aPluginInfo*/,
   104                                 RPointerArray<CImplementationInformation> /*aPluginInfo*/,
   105                                 RPointerArray<CFSMailPlugin> /*aPlugins*/ )
   105                                 RPointerArray<CFSMailPlugin> /*aPlugins*/ )
   106 {
   106 {
   107     NM_FUNCTION;
   107     NM_FUNCTION;
   108 }
   108 }
   123         }
   123         }
   124 
   124 
   125 
   125 
   126     return NULL;
   126     return NULL;
   127     }
   127     }
   128     
   128 
   129 // -----------------------------------------------------------------------------
   129 // -----------------------------------------------------------------------------
   130 // CFSMailRequestHandler::InitAsyncRequestL
   130 // CFSMailRequestHandler::InitAsyncRequestL
   131 // -----------------------------------------------------------------------------
   131 // -----------------------------------------------------------------------------
   132  TFSPendingRequest CFSMailRequestHandler::InitAsyncRequestL( 
   132  TFSPendingRequest CFSMailRequestHandler::InitAsyncRequestL(
   133                                                     TUid aPluginId,
   133                                                     TUid aPluginId,
   134                                                     MFSMailRequestObserver& aOperationObserver)
   134                                                     MFSMailRequestObserver& aOperationObserver)
   135     {
   135     {
   136     NM_FUNCTION;
   136     NM_FUNCTION;
   137     
   137 
   138         TFSPendingRequest newRequest;
   138         TFSPendingRequest newRequest;
   139         for(TInt i=0;i<iPendingRequests.Count();i++)
   139         for(TInt i=0;i<iPendingRequests.Count();i++)
   140             {
   140             {
   141             if(iPendingRequests[i].iRequestStatus != TFSPendingRequest::EFSRequestPending)
   141             if(iPendingRequests[i].iRequestStatus != TFSPendingRequest::EFSRequestPending)
   142                 {
   142                 {
   143                 iPendingRequests[i].iPluginId = aPluginId;
   143                 iPendingRequests[i].iPluginId = aPluginId;
   144                 iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestPending;
   144                 iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestPending;
   145                 iPendingRequests[i].iObserver->SetUserObserver(aOperationObserver);         
   145                 iPendingRequests[i].iObserver->SetUserObserver(aOperationObserver);
   146                 newRequest = iPendingRequests[i];
   146                 newRequest = iPendingRequests[i];
   147                 return newRequest;
   147                 return newRequest;
   148                 }
   148                 }
   149             }
   149             }
   150 
   150 
   151         newRequest.iRequestId = iPendingRequests.Count();
   151         newRequest.iRequestId = iPendingRequests.Count();
   152         newRequest.iPluginId = aPluginId;
   152         newRequest.iPluginId = aPluginId;
   153         newRequest.iRequestStatus = TFSPendingRequest::EFSRequestPending;           
   153         newRequest.iRequestStatus = TFSPendingRequest::EFSRequestPending;
   154         CFSMailRequestObserver* observer = 
   154         CFSMailRequestObserver* observer =
   155             CFSMailRequestObserver::NewL(*this, aOperationObserver);
   155             CFSMailRequestObserver::NewL(*this, aOperationObserver);
   156         newRequest.iObserver = observer;
   156         newRequest.iObserver = observer;
   157         iPendingRequests.AppendL(newRequest);
   157         iPendingRequests.AppendL(newRequest);
   158         
   158 
   159         return newRequest;
   159         return newRequest;
   160     }
   160     }
   161 
   161 
   162 // -----------------------------------------------------------------------------
   162 // -----------------------------------------------------------------------------
   163 // CFSMailRequestHandler::CompleteRequest
   163 // CFSMailRequestHandler::CompleteRequest
   164 // -----------------------------------------------------------------------------
   164 // -----------------------------------------------------------------------------
   165  void CFSMailRequestHandler::CompleteRequest( TInt aRequestId )
   165  void CFSMailRequestHandler::CompleteRequest( TInt aRequestId )
   166     {
   166     {
   167     NM_FUNCTION;
   167     NM_FUNCTION;
   168     
   168 
   169         for(TInt i=0;i<iPendingRequests.Count();i++)
   169         for(TInt i=0;i<iPendingRequests.Count();i++)
   170         {
   170         {
   171         if(iPendingRequests[i].iRequestId == aRequestId)
   171         if(iPendingRequests[i].iRequestId == aRequestId)
   172             {
   172             {
   173             iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestComplete;
   173             iPendingRequests[i].iRequestStatus = TFSPendingRequest::EFSRequestComplete;
   174             break;
   174             break;
   175             }
   175             }
   176         }
   176         }
   177 
   177 
   178     }
   178     }
   179     
   179 
   180 // -----------------------------------------------------------------------------
   180 // -----------------------------------------------------------------------------
   181 // CFSMailRequestHandler::CancelRequestL
   181 // CFSMailRequestHandler::CancelRequestL
   182 // -----------------------------------------------------------------------------
   182 // -----------------------------------------------------------------------------
   183  void CFSMailRequestHandler::CancelRequestL( TInt aRequestId )
   183  void CFSMailRequestHandler::CancelRequestL( TInt aRequestId )
   184     {
   184     {
   185     NM_FUNCTION;
   185     NM_FUNCTION;
   186     
   186 
   187         for(TInt i=0;i<iPendingRequests.Count();i++)
   187         for(TInt i=0;i<iPendingRequests.Count();i++)
   188         {
   188         {
   189         if(iPendingRequests[i].iRequestId == aRequestId &&
   189         if(iPendingRequests[i].iRequestId == aRequestId &&
   190             iPendingRequests[i].iRequestStatus == TFSPendingRequest::EFSRequestPending)
   190             iPendingRequests[i].iRequestStatus == TFSPendingRequest::EFSRequestPending)
   191             {
   191             {
   204 // CFSMailRequestHandler::CancelAllRequestsL
   204 // CFSMailRequestHandler::CancelAllRequestsL
   205 // -----------------------------------------------------------------------------
   205 // -----------------------------------------------------------------------------
   206  void CFSMailRequestHandler::CancelAllRequestsL( )
   206  void CFSMailRequestHandler::CancelAllRequestsL( )
   207     {
   207     {
   208     NM_FUNCTION;
   208     NM_FUNCTION;
   209     
   209 
   210         for(TInt i=0;i<iPendingRequests.Count();i++)
   210         for(TInt i=0;i<iPendingRequests.Count();i++)
   211         {
   211         {
   212             if(iPendingRequests[i].iRequestStatus == TFSPendingRequest::EFSRequestPending)
   212             if(iPendingRequests[i].iRequestStatus == TFSPendingRequest::EFSRequestPending)
   213                 {
   213                 {
   214                 TFSMailMsgId pluginId(iPendingRequests[i].iPluginId,0);
   214                 TFSMailMsgId pluginId(iPendingRequests[i].iPluginId,0);
   229     NM_FUNCTION;
   229     NM_FUNCTION;
   230 
   230 
   231     CFSMailPluginData* pluginData = new (ELeave) CFSMailPluginData;
   231     CFSMailPluginData* pluginData = new (ELeave) CFSMailPluginData;
   232     pluginData->iPluginId = aPluginId;
   232     pluginData->iPluginId = aPluginId;
   233     pluginData->iPlugin = aPlugin;
   233     pluginData->iPlugin = aPlugin;
   234     iPluginList.AppendL(pluginData);             
   234     iPluginList.AppendL(pluginData);
   235     }
   235     }
   236 
   236 
   237 // -----------------------------------------------------------------------------
   237 // -----------------------------------------------------------------------------
   238 // CFSMailRequestHandler::RemoveAllRequests
   238 // CFSMailRequestHandler::RemoveAllRequests
   239 // -----------------------------------------------------------------------------
   239 // -----------------------------------------------------------------------------
   240 void CFSMailRequestHandler::RemoveAllRequests()
   240 void CFSMailRequestHandler::RemoveAllRequests()
   241     {
   241     {
   242     NM_FUNCTION;
   242     NM_FUNCTION;
   243     
   243 
   244     for(TInt i=0;i<iPendingRequests.Count();i++)
   244     for(TInt i=0;i<iPendingRequests.Count();i++)
   245         {
   245         {
   246         delete iPendingRequests[i].iObserver;
   246         delete iPendingRequests[i].iObserver;
   247         iPendingRequests[i].iObserver = NULL;
   247         iPendingRequests[i].iObserver = NULL;
   248         }
   248         }
   252 // CFSMailRequestHandler::GetTempFileL( )
   252 // CFSMailRequestHandler::GetTempFileL( )
   253 // -----------------------------------------------------------------------------
   253 // -----------------------------------------------------------------------------
   254  RFile CFSMailRequestHandler::GetTempFileL( TFSMailMsgId aContentId, TFileName aFileName )
   254  RFile CFSMailRequestHandler::GetTempFileL( TFSMailMsgId aContentId, TFileName aFileName )
   255 {
   255 {
   256     NM_FUNCTION;
   256     NM_FUNCTION;
   257     
   257 
   258     // get temp dir path
   258     // get temp dir path
   259     if(iTempDirName == NULL)
   259     if(!iTempDirName)
   260         {
   260         {
   261         // open file server connection
   261         // open file server connection
   262         User::LeaveIfError(iFs.Connect());
   262         User::LeaveIfError(iFs.Connect());
   263         iFs.CreatePrivatePath(EDriveC);
   263         iFs.CreatePrivatePath(EDriveC);
   264         iTempDirName = HBufC::NewL(20);
   264         iTempDirName = HBufC::NewL(20);
   265         TPtr ptr = iTempDirName->Des();
   265         TPtr ptr = iTempDirName->Des();
   266         iFs.PrivatePath(ptr);        
   266         iFs.PrivatePath(ptr);
   267         }
   267         }
   268     
   268 
   269     // create temp file
   269     // create temp file
   270     RFile file;
   270     RFile file;
   271     aFileName.Append(iTempDirName->Des());
   271     aFileName.Append(iTempDirName->Des());
   272     aFileName.AppendNum(aContentId.PluginId().iUid);
   272     aFileName.AppendNum(aContentId.PluginId().iUid);
   273     aFileName.AppendNum(aContentId.Id());
   273     aFileName.AppendNum(aContentId.Id());
   274     file.Replace(iFs,aFileName,EFileWrite);
   274     file.Replace(iFs,aFileName,EFileWrite);
   275     return file;
   275     return file;
   276     }
   276     }
   277 
   277 
   278 // -----------------------------------------------------------------------------
       
   279 // CFSMailRequestHandler::CleanTempDirL
       
   280 // -----------------------------------------------------------------------------
       
   281  void CFSMailRequestHandler::CleanTempDirL( )
       
   282     {
       
   283     NM_FUNCTION;
       
   284     }
       
   285 
       
   286 // -----------------------------------------------------------------------------
       
   287 // CFSMailRequestHandler::GetTempDirL
       
   288 // -----------------------------------------------------------------------------
       
   289  TDesC& CFSMailRequestHandler::GetTempDirL( )
       
   290     {
       
   291     NM_FUNCTION;
       
   292     
       
   293     return *iTempDirName;
       
   294     }
       
   295