emailservices/emailcommon/src/CFSMailFolder.cpp
branchRCL_3
changeset 63 d189ee25cf9d
equal deleted inserted replaced
61:dcf0eedfc1a3 63:d189ee25cf9d
       
     1 /*
       
     2 * Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  common email folder object
       
    15 *
       
    16 */
       
    17 
       
    18 #include "emailtrace.h"
       
    19 
       
    20 // <qmail>
       
    21 #include <nmcommonheaders.h>
       
    22 // </qmail>
       
    23 
       
    24 #include "CFSMailFolder.h"
       
    25 #include "CFSMailPlugin.h"
       
    26 #include "CFSMailIterator.h"
       
    27 #include "CFSMailRequestObserver.h"
       
    28 
       
    29 // ================= MEMBER FUNCTIONS ==========================================
       
    30 // -----------------------------------------------------------------------------
       
    31 // CFSMailFolder::NewLC
       
    32 // -----------------------------------------------------------------------------
       
    33 EXPORT_C CFSMailFolder* CFSMailFolder::NewLC( TFSMailMsgId aFolderId )
       
    34 {
       
    35     NM_FUNCTION;
       
    36     
       
    37     CFSMailFolder* api = new (ELeave) CFSMailFolder();
       
    38     CleanupStack:: PushL(api);
       
    39     api->ConstructL( aFolderId );
       
    40     return api;
       
    41 } 
       
    42 
       
    43 // -----------------------------------------------------------------------------
       
    44 // CFSMailFolder::NewL
       
    45 // -----------------------------------------------------------------------------
       
    46 EXPORT_C CFSMailFolder* CFSMailFolder::NewL( TFSMailMsgId aFolderId )
       
    47 {
       
    48     NM_FUNCTION;
       
    49     
       
    50     CFSMailFolder* api =  CFSMailFolder::NewLC( aFolderId );
       
    51     CleanupStack:: Pop(api);
       
    52     return api;
       
    53 }
       
    54 
       
    55 // -----------------------------------------------------------------------------
       
    56 // CFSMailFolder::CFSMailFolder
       
    57 // -----------------------------------------------------------------------------
       
    58 CFSMailFolder::CFSMailFolder()
       
    59 {
       
    60     NM_FUNCTION;
       
    61 }
       
    62 
       
    63 // -----------------------------------------------------------------------------
       
    64 // CFSMailFolder::ConstructL
       
    65 // -----------------------------------------------------------------------------
       
    66 void CFSMailFolder::ConstructL( TFSMailMsgId aFolderId )
       
    67 {
       
    68     NM_FUNCTION;
       
    69     
       
    70 // <qmail>
       
    71     CFSMailFolderBase::ConstructL( aFolderId );
       
    72 // </qmail>
       
    73     
       
    74   // get requesthandler pointer
       
    75     iRequestHandler = static_cast<CFSMailRequestHandler*>(Dll::Tls());
       
    76 }
       
    77 
       
    78 // -----------------------------------------------------------------------------
       
    79 // CFSMailFolder::~CFSMailFolder
       
    80 // -----------------------------------------------------------------------------
       
    81 EXPORT_C CFSMailFolder::~CFSMailFolder()
       
    82 {
       
    83     NM_FUNCTION;
       
    84 }
       
    85 
       
    86 // -----------------------------------------------------------------------------
       
    87 // CFSMailFolder::ListMessagesL
       
    88 // -----------------------------------------------------------------------------
       
    89 EXPORT_C MFSMailIterator* CFSMailFolder::ListMessagesL( const TFSMailDetails aDetails,
       
    90                     const RArray<TFSMailSortCriteria>& aSorting )
       
    91 {
       
    92     NM_FUNCTION;
       
    93     
       
    94     CFSMailIterator* iterator(NULL);
       
    95     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
       
    96         {
       
    97         MFSMailIterator* pluginIterator =
       
    98         plugin->ListMessagesL(GetMailBoxId(),GetFolderId(),aDetails,aSorting);
       
    99         if(pluginIterator)
       
   100             {
       
   101             iterator = CFSMailIterator::NewL(*pluginIterator,iRequestHandler );
       
   102             }
       
   103         }
       
   104   return iterator;
       
   105 }
       
   106 
       
   107 // -----------------------------------------------------------------------------
       
   108 // CFSMailFolder::FetchMessagesL
       
   109 // -----------------------------------------------------------------------------
       
   110 EXPORT_C TInt CFSMailFolder::FetchMessagesL( const RArray<TFSMailMsgId>& aMessageIds,
       
   111                           TFSMailDetails aDetails,
       
   112                           MFSMailRequestObserver& aObserver )
       
   113   {
       
   114     NM_FUNCTION;
       
   115     
       
   116     // init asynchronous request
       
   117     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
       
   118     TFSPendingRequest request = 
       
   119         iRequestHandler->InitAsyncRequestL( GetFolderId().PluginId(), aObserver );
       
   120     TInt err (KErrNone);
       
   121     
       
   122     if (plugin)
       
   123         {
       
   124         MFSMailRequestObserver* observer = request.iObserver;
       
   125         TRAP(err,plugin->FetchMessagesL(  GetMailBoxId(),
       
   126                                             GetFolderId(),
       
   127                                             aMessageIds,
       
   128                                             aDetails,
       
   129                                             *observer,
       
   130                                             request.iRequestId));
       
   131         }
       
   132     else 
       
   133         {
       
   134         err = KErrNotFound;        
       
   135         }
       
   136     
       
   137     if (err != KErrNone)
       
   138         {
       
   139         iRequestHandler->CompleteRequest(request.iRequestId);
       
   140         User::Leave(err);
       
   141         }
       
   142     return request.iRequestId;
       
   143   }
       
   144 
       
   145 
       
   146 // -----------------------------------------------------------------------------
       
   147 // CFSMailFolder::GetSubFoldersL
       
   148 // -----------------------------------------------------------------------------
       
   149 EXPORT_C void CFSMailFolder::GetSubFoldersL( RPointerArray<CFSMailFolder>& aSubFolders )
       
   150 {
       
   151     NM_FUNCTION;
       
   152     
       
   153     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
       
   154         {
       
   155         TRAPD(err,plugin->ListFoldersL( GetMailBoxId(), GetFolderId(), aSubFolders));
       
   156         if(err != KErrNone)
       
   157             {
       
   158             aSubFolders.ResetAndDestroy();
       
   159             }
       
   160         }
       
   161 }
       
   162   
       
   163 // -----------------------------------------------------------------------------
       
   164 // CFSMailFolder::RemoveMessageL
       
   165 // -----------------------------------------------------------------------------
       
   166 EXPORT_C void CFSMailFolder::RemoveMessageL( TFSMailMsgId aMessage )
       
   167 {
       
   168     NM_FUNCTION;
       
   169     
       
   170     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
       
   171         {
       
   172         RArray<TFSMailMsgId> messages;
       
   173         messages.AppendL(aMessage);
       
   174         plugin->DeleteMessagesByUidL(GetMailBoxId(),GetFolderId(),messages);
       
   175         messages.Close();
       
   176     }
       
   177 }
       
   178 
       
   179 // <qmail>
       
   180 // -----------------------------------------------------------------------------
       
   181 // CFSMailFolder::RemoveMessageL
       
   182 // -----------------------------------------------------------------------------
       
   183 EXPORT_C TInt CFSMailFolder::RemoveMessageL( TFSMailMsgId aMessage,
       
   184                                              MFSMailRequestObserver& aObserver )
       
   185 {
       
   186     NM_FUNCTION;
       
   187 
       
   188     // init asynchronous request
       
   189     CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId());
       
   190     TFSPendingRequest request = 
       
   191         iRequestHandler->InitAsyncRequestL( GetFolderId().PluginId(), aObserver );
       
   192 
       
   193     TInt err(KErrNone);
       
   194     
       
   195     if (plugin)
       
   196         {
       
   197         MFSMailRequestObserver* observer = request.iObserver;
       
   198         
       
   199         RArray<TFSMailMsgId> messages;
       
   200         messages.AppendL(aMessage);
       
   201         
       
   202         TRAP(err,plugin->DeleteMessagesByUidL(
       
   203             GetMailBoxId(),
       
   204             GetFolderId(),
       
   205             messages,
       
   206             *observer,
       
   207             request.iRequestId));
       
   208         
       
   209         messages.Close();
       
   210         }
       
   211     else 
       
   212         {
       
   213         err = KErrNotFound;        
       
   214         }
       
   215     
       
   216     if(err != KErrNone)
       
   217         {
       
   218         iRequestHandler->CompleteRequest(request.iRequestId);
       
   219         User::Leave(err);
       
   220         }
       
   221     return request.iRequestId;
       
   222 }
       
   223 // </qmail>
       
   224 
       
   225 // -----------------------------------------------------------------------------
       
   226 // CFSMailFolder::SupportsMoveFromL
       
   227 // -----------------------------------------------------------------------------
       
   228 EXPORT_C TBool CFSMailFolder::SupportsMoveFromL( TFSFolderType aFolderType )
       
   229 {
       
   230     NM_FUNCTION;
       
   231     
       
   232     TBool ret(ETrue);
       
   233     if (CFSMailPlugin* plugin = iRequestHandler->GetPluginByUid(GetFolderId()))
       
   234         {
       
   235         TFSMailBoxStatus onlineStatus = plugin->GetMailBoxStatus(GetMailBoxId());
       
   236         if (onlineStatus == EFSMailBoxOnline)
       
   237             {
       
   238             for(TInt i(0); i < iMoveOnlineBlocked.Count(); i++)
       
   239                 {
       
   240                 if (iMoveOnlineBlocked[i] == aFolderType)
       
   241                     {
       
   242                     ret = EFalse;
       
   243                     }     
       
   244                 }
       
   245             }
       
   246         else if (onlineStatus == EFSMailBoxOffline)
       
   247             {
       
   248             for (TInt i(0); i < iMoveOfflineBlocked.Count(); i++)
       
   249                 {
       
   250                 if(iMoveOfflineBlocked[i] == aFolderType)
       
   251                     {
       
   252                     ret = EFalse;
       
   253                     }
       
   254                 }
       
   255             }
       
   256     }
       
   257     return ret;
       
   258 }
       
   259 
       
   260 // -----------------------------------------------------------------------------
       
   261 // CFSMailFolder::ReleaseExtension
       
   262 // -----------------------------------------------------------------------------
       
   263 EXPORT_C void CFSMailFolder::ReleaseExtension( CEmailExtension* aExtension )
       
   264 {
       
   265     NM_FUNCTION;
       
   266     
       
   267     // no specialized behaviour, call base class
       
   268     CExtendableEmail::ReleaseExtension( aExtension );
       
   269 }
       
   270     
       
   271 // -----------------------------------------------------------------------------
       
   272 // CFSMailFolder::ExtensionL
       
   273 // -----------------------------------------------------------------------------
       
   274 EXPORT_C CEmailExtension* CFSMailFolder::ExtensionL( const TUid& aInterfaceUid )
       
   275 {
       
   276     NM_FUNCTION;
       
   277     
       
   278     return CExtendableEmail::ExtensionL( aInterfaceUid );
       
   279 }
       
   280